トップページ⇒tech
1001コメント316KB

C#, C♯, C#相談室 Part52

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/04/01(水) 10:15:52
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part51
http://pc12.2ch.net/test/read.cgi/tech/1233757615/

Visual C# 2008 Express Edition 日本語版
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

その他テンプレ>>2-5くらい
0446デフォルトの名無しさん2009/05/08(金) 06:10:15
>>445
日本の季節感にはまったくあってないけどな
昔は一番寒い時期が1月1日で新年を迎えると暖かくなる一方だった
戦争に負けたアジアは所詮白人のおまけということだな
0447デフォルトの名無しさん2009/05/08(金) 07:14:01
>>446
おじいちゃん乙
0448デフォルトの名無しさん2009/05/08(金) 07:21:58
>>446
中国行って旧正月でも祝ってればいいんじゃない
0449デフォルトの名無しさん2009/05/08(金) 07:22:24
そのせいで地方によってはいくつかの行事は月遅れでやることが多いけどな。
ひな祭り、七夕、盂蘭盆会などなど。
0450デフォルトの名無しさん2009/05/08(金) 10:56:45
なんか思いっきりスレチ方向へ進んでないか?ww
0451デフォルトの名無しさん2009/05/08(金) 12:22:22
じゃあディルドーの話に戻そう
0452デフォルトの名無しさん2009/05/08(金) 23:07:53
三叉路まで戻って別の違う道に進んだみたいな。
0453デフォルトの名無しさん2009/05/08(金) 23:17:29
ディルドゥーなら喜んで食いついたのに
0454デフォルトの名無しさん2009/05/09(土) 13:32:15
vbでいうところの

for i=0 to 4
label(i)="abc"
next

みたいな
ループの添字で複数の連番的なオブジェクトを指定するにはどうしたらいいのでしょうか

オブジェクトに番号振るっていう状態をどういうのかがわからなくて調べられないです
1日いろいろ探してみましたが思いつく宛が詰まってしまったのでヒントが欲しいです
0455デフォルトの名無しさん2009/05/09(土) 13:35:24
配列に入れておいて、あとは同じように。
0456デフォルトの名無しさん2009/05/09(土) 15:23:13
ありがとうございます
0457デフォルトの名無しさん2009/05/09(土) 21:20:30
質問です
フォームのテキストラベルにH2Oと入れたいんだけど2を下付きにするにはどうすればいいのですか?
Hのラベル、2のラベル、Oのラベルを3個並べてお茶を濁してきたけど、詳しい方どうか教えてください。
0458デフォルトの名無しさん2009/05/09(土) 21:23:57
そうやるしかない
0459デフォルトの名無しさん2009/05/09(土) 21:30:23
自前で描画するしかないな Paintイベント使って
0460デフォルトの名無しさん2009/05/09(土) 21:30:36
>>457
U+2082 ₂ SUBSCRIPT TWO
0461デフォルトの名無しさん2009/05/09(土) 22:04:02
>>457
文字を書いてつくったイメージを貼り付ければいいじゃん
0462デフォルトの名無しさん2009/05/09(土) 23:36:39
H₂0
な なるほど!thx
0463デフォルトの名無しさん2009/05/09(土) 23:44:44
リッチテキスト
0464デフォルトの名無しさん2009/05/09(土) 23:48:55
₀₁₂₃₄₅₆₇₈₉
0465デフォルトの名無しさん2009/05/12(火) 11:40:49
ComboBoxの項目の表示色を項目内容によって変えるとき
DrawItem()でDrawString()すれば良いんだけど。
ComboBoxの数が多いのでユーザコントロールにするとしたら
どこでDrawString()すればいいんだろう?
OnDrawItem()で直接書いちゃっていいのかな?
0466デフォルトの名無しさん2009/05/13(水) 23:19:39
その前にやってみれば?
0467デフォルトの名無しさん2009/05/14(木) 01:11:13
>>465
OnDrawItemでいいよ。
0468デフォルトの名無しさん2009/05/14(木) 09:36:16
ありがとう。

OnDrawItem()でうまくいきました。
ついでに背景色とかも変更してみます。

0469デフォルトの名無しさん2009/05/14(木) 16:20:55
指定したディレクトリ以下のすべてのファイルを効率的に列挙していく場合どのクラス、メソッド使うのがいいですか?
GetFilesみたいにリストを作って返すのではなくWin32APIのFindFirstFile/NextFile相当のものが使いたいんですが。
0470デフォルトの名無しさん2009/05/14(木) 17:01:05
Linq
0471デフォルトの名無しさん2009/05/14(木) 17:08:21
FindFirstFile/NextFile
0472デフォルトの名無しさん2009/05/14(木) 17:18:48
.NETは非コンテナに対するイテレータが弱すぎる
0473デフォルトの名無しさん2009/05/14(木) 17:29:26
yieldがありゃ十分だろ
0474デフォルトの名無しさん2009/05/14(木) 17:30:22
>>469
.NET Framework 4.0 のGetFiles
0475デフォルトの名無しさん2009/05/15(金) 02:24:16
実行時の object 階層を値込みで表示用の tree にまとめ上げたいんだけど、
その手のライブラリなど、ご存知の方いますでしょうか? Reflection で自前
で再帰するしかない?
0476デフォルトの名無しさん2009/05/15(金) 02:42:10
CodeProjectとか探せばありそうな予感。
まぁ実装してもたいした手間じゃな下げだけど。
0477デフォルトの名無しさん2009/05/16(土) 13:13:47
>>475
>実行時の object 階層を値込みで表示用の tree にまとめ上げたいんだけど、

object階層の意味がよく分からないけど、
Visual Studioのウォッチウィンドウみたいな感じで
インスタンスの情報を展開してくれるのが欲しいってこと?

だったらオブジェクト参照が循環している場合もあるので注意かな。
シリアライザ/デシリアライザみたいにグラフとして扱うか、
ウォッチウィンドウみたいにクリックするまで子ノードの評価を行わないといった
工夫が必要になると思う。
04784752009/05/16(土) 16:25:07
>>476
いや、それが結構面倒くさい。CodeProject はなさそうでした。

>>477
なるほど、シリアライズして XML を使うのもありですね。
どうもありがとう。
0479デフォルトの名無しさん2009/05/16(土) 16:58:37
ソースいじくれるのならExpandObjectConverterでPropertyGridとかがお手軽じゃね
0480902009/05/16(土) 20:36:16
すいません、教えてください。

ユーザコントロールを作成していますが、
既存の型を使用した場合は問題ないのですが、enum型を定義して
使用すると、このコントロールを使用するプログラムで
デザイン時に初期値を選んだ場合は問題ないのですが他の候補(この場合type2)を
セットすると
「'System.Windows.Forms.Control.ControlCollection' に 'xxxComboBox' の
定義が含まれておらず、型 'System.Windows.Forms.Control.ControlCollection' の
最初の引数を受け付ける拡張メソッドが見つかりませんでした。
using ディレクティブまたはアセンブリ参照が不足しています。」のエラーになります。
0481デフォルトの名無しさん2009/05/16(土) 20:39:20
名前を間違えました。90のかた申し訳ありません。
ソースはこんな感じです。

namespace Controls
{
public partial class xxxComboBox : ComboBox
{
public enum DrawingMode : int
{
type1 = 0,
type2 = 1
}

private DrawingMode _ItemDrawingMode;
[Category("Custom")]
[DefaultValue(typeof(DrawingMode), "type1")]
[Browsable(true)]
public DrawingMode ItemDrawingMode
{
get { return _ItemDrawingMode; }
set { _ItemDrawingMode = value; }
}

0482デフォルトの名無しさん2009/05/16(土) 20:40:31
private Color _FirstBGColor;
[Category("Custom")]
[DefaultValue(typeof(Color), "White")]
[Browsable(true)]
public Color FirstBGColor
{
get { return _FirstBGColor; }
set { _FirstBGColor = value; }
}

public xxxComboBox()
{
InitializeComponent();
_ItemDrawingMode = DrawingMode.type1;
_FirstBGColor = Color.White;
}
...
}

使用する側では参照設定にこのdllを指定しています。
FirstBGColorプロパティは他の色に変更しても正しくビルド・実行できます。
DraingModeのプロパティをtype2に変更してビルドすると上記の
エラーがでます。

エラー箇所を見ると
this.xxxComboBox1.ItemDrawingMode = Controls.xxxComboBox.DrawingMode.type2;
の行が解決できないようです。
using Controls;を加えても同じです。
ControlCollectionに追加するにはどのメソッドを使用すればいいのでしょうか?

0483デフォルトの名無しさん2009/05/16(土) 22:32:52
使う側を
this.xxxComboBox1.ItemDrawingMode = 1;
にしたらエラーでないよね?
0484デフォルトの名無しさん2009/05/16(土) 22:41:13
何もおかしなことはない。エラーメッセージの通り

this.Controls は Control.ControlCollection クラスのインスタンスだろ
04854802009/05/17(日) 08:30:40
>>483, 484
ありがとうございます。

this.xxxComboBox1.ItemDrawingMode = 1; は型が違うのでエラーになります。

呼び出し側でusing Controls;を定義して、コードで(例えばForm1_Load内で)
xxxComboBox1.ItemDrawingMode = xxxComboBox.DrawingMode.Type2;
のように書けば、正常にビルド・実行可能です。
ただし、先程書いたようにデザイナからプロパティ値を変更すると
エラーになります。ControlCollectionにxxxComboBoxを追加して
導出してやらないといけないのかと思いますが、やり方が分かりません。
0486デフォルトの名無しさん2009/05/17(日) 09:23:29
名前空間にglobal::Controlsなんてのはやめようよ
せめてライブラリ名.Controlsに
04874802009/05/17(日) 11:08:57
お騒がせしました。解決しました。

そうだよな、namespaceの名前を変えよう・・・
ということでControlsからmalib.Controlsにnamespaceを変更したら
ちゃんと動作しました。
0488デフォルトの名無しさん2009/05/20(水) 21:40:44
この言語笑うしかないわw いい意味で。
今C#の勉強の意味もこめてC#のいろんな機能をフルに利用するつもりで
ちょっとしたプログラムを作っているんだが
本当にC++、Javaから発展してきた言語とは思えん。

まず、DataGrid使って表を作る。
row.SetValues(1,2,3)とやることで、一行のデータを一気に入れられる。

そこで一行全部の背景色をつけたいと思った。
SetValuesと同じように、row.SetStyle(style)とやりたかったが、
残念ながらSetStyleはセルごとしかなかった。

DataGrid(正確にはDataGridViewRow)になんでSetStyleが無いんだよ!って
怒るような事例なのに、拡張メソッドを使うことで継承を利用せずに
いとも簡単にrow.SetStyle()を付け加えることができるとはw
0489デフォルトの名無しさん2009/05/20(水) 23:09:50
>>488
それでC#にケンカ売ってるつもり?
まさかそんなわけないよねwww
0490デフォルトの名無しさん2009/05/20(水) 23:13:11
C#はあれだよあれ
メロンパン言語だ
0491デフォルトの名無しさん2009/05/20(水) 23:25:01
どう見ても誉めてるじゃん
0492デフォルトの名無しさん2009/05/20(水) 23:36:57
コンポーネントと言語をごっちゃにして、的外れだけどな。
0493デフォルトの名無しさん2009/05/21(木) 00:24:35
うん
C# の話じゃなくてフレームワークの話だな
0494デフォルトの名無しさん2009/05/21(木) 00:25:41
C#じゃなくてWinFormsの話だな。
C#はソースが読みやすいとか、一貫した仕様でスッキリしてて覚えやすいとか色々あるけど、
何よりVSっていう最強のIDEが付っきりで開発支援してくれるのが最大のアピールポイントだと思う。
VSが無ければ他の言語でいいけど、一回VS+C#で慣れると他の言語やる時にかなりメンドクサイ。

・・・あれ、ここって相談室だよな?
0495デフォルトの名無しさん2009/05/21(木) 00:34:35
C#ならまずdelegateを褒めたいな。リスナめんどい。
0496デフォルトの名無しさん2009/05/21(木) 00:42:09
Enumerable.DistinctにはなぜFunc<TSource, TSource, bool>を受け取るオーバーロードがないんだ
04974882009/05/21(木) 00:44:37
>>492
> コンポーネントと言語をごっちゃにして、的外れだけどな。

言っとくけど、言語の話だよ。
mix-inといえばわかるかな?

(標準ライブラリの)クラスに、メソッドを後付できる。
という言語仕様。
0498デフォルトの名無しさん2009/05/21(木) 00:47:05
拡張メソッドは便利だな、で終わる話なのに、つらつら書かれても・・・
ってことを言ってるんだと思うよ。
0499デフォルトの名無しさん2009/05/21(木) 00:48:35
俺「拡張メソッドは便利だな」
他の人「そうだな」

で終わってくれればいいのに、
コンポーネントとかWinFormsの話だなとか
間違ったこと言い出すからレスせざるを得なかったんだよw
0500デフォルトの名無しさん2009/05/21(木) 00:49:48
>>497
あきらかに主題の文章量と副題の文章量の比がおかしいww
おまえは女かwwwwww
0501デフォルトの名無しさん2009/05/21(木) 00:51:06
>>499
先に言っとく。基地外(500など)は無視したほうがいいよw
0502デフォルトの名無しさん2009/05/21(木) 00:52:42
>>501
おけw

間違ったことを何も言っていないのに、
なんで変なやつがまとわりついてくんだか。
こちとら本格的にC#はじめて五日目だ。なめんじゃねーぞw
0503デフォルトの名無しさん2009/05/21(木) 00:54:31
それでは次の型どうぞ〜
0504デフォルトの名無しさん2009/05/21(木) 01:01:24
System.Collections在住 : ArrayList さん

最近みんなジェネリック、ジェネリックって言って僕を呼んでくれないんです。
昔はあんなにちやほやされてたのに・・・。
これから僕はどうしていけばいいんでしょうか。
0505デフォルトの名無しさん2009/05/21(木) 01:02:54
つまらん

それでは次の型どうぞ〜
0506デフォルトの名無しさん2009/05/21(木) 01:42:30
ブラウザの機能が安定しません。

public Form1()
{
InitializeComponent();
webBrowser1.Navigate("http://www.google.co.jp");
}

たったこれだけの実装ですが、googleのページがすぐに表示されるときと
ずっとまっ白でまったく表示されない時があります。
環境は、XPProSP2、IE6です。
どなたか解決方法を知りませんか?
0507デフォルトの名無しさん2009/05/21(木) 01:47:34
つける薬は無い
0508デフォルトの名無しさん2009/05/21(木) 01:48:23
ロード後に Navigate しても状況は一緒?
0509デフォルトの名無しさん2009/05/21(木) 01:54:11
ロード後にというのがよくわかりませんが、
ボタンをひとつつけて、その中でNavigateしても状況はかわりません。
非常に安定しないんです。
0510デフォルトの名無しさん2009/05/21(木) 01:56:19
ウェブブラウザーコントロールは一度「about:blank」を表示してから
目的のページを表示するんが一般じゃなかったっけ?
0511デフォルトの名無しさん2009/05/21(木) 02:04:35
>>510
書き忘れましたが、それも試して効果はありませんでした。

public Form1()
{
InitializeComponent();
webBrowser1.Navigate("about:blank");
webBrowser1.Navigate("http://www.google.co.jp");
}
0512デフォルトの名無しさん2009/05/21(木) 02:06:14
じゃあ、無理じゃね? 素直にリロードしてもらえよ。
0513デフォルトの名無しさん2009/05/21(木) 02:13:33
わかりました。
自分でもかなり調べてダメだったので、諦めることにします。
ありがとうございました。
0514デフォルトの名無しさん2009/05/21(木) 02:51:04
前にAxWebBrowser使ってた時に俺もそんなことあったな。Navigateするタイミングだと思うんだけど。
起動時にNavigateするようにした時に稀にあった。
とりあえず、起動時にいきなりNavigate使う時はコンストラクタじゃなくてLoadイベントなり登録してそこでやった方がいいと思う。
それでこの症状が直るわけではないと思うけど。
0515デフォルトの名無しさん2009/05/21(木) 12:03:16
>>506

webBrowserだけじゃなくて
IE6のそのものが、ずっと真っ白のままで表示されないことがあるんだが・・・

AVGのリンクスキャナを停止してからは少しマシになったかも?
普段はChromeを使っているから見なかったことにしてるけど。
0516デフォルトの名無しさん2009/05/21(木) 14:18:15
>>506とおんなじコードで試してみたけど、
何度やっても問題なく表示されるな。

環境はXPProSP2、IE6、VS2008Pro
0517デフォルトの名無しさん2009/05/21(木) 14:49:26
webBrowser1.BusyがTrueのときそうなるんじゃないか?
0518デフォルトの名無しさん2009/05/21(木) 15:58:51
>>515
ウィルス対策ソフトは切ってます。

>>516
ほんの2日ほど前まで私もその環境でしたが、なぜか動きません。
XPProSP3、IE8、VS2008Exにしましたが、改善はありません。

>>517
ちょっと見てきます。
0519デフォルトの名無しさん2009/05/21(木) 16:02:12
取り敢えず514な
System.Windows.Forms.WebBrowserはコントロール上に乗って無くても大丈夫なように作られてるけど一応
0520デフォルトの名無しさん2009/05/21(木) 16:23:25
>>517
■PG
public Form1()
{
InitializeComponent();
Console.WriteLine("IsBusy:" + webBrowser1.IsBusy);
webBrowser1.Navigate("about:blank");
webBrowser1.Navigate("http://www.yahoo.co.jp/");
Console.WriteLine("IsBusy:" + webBrowser1.IsBusy);

}

■出力
IsBusy:False
'Test.vshost.exe' (マネージ型): 'C:\WINDOWS\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a\Microsoft.mshtml.dll' が読み込まれました
IsBusy:False


■結果
画面まっ白


>>514
LoadイベントでやってもThread.sleep(5000)をnavigateの前後に入れてもまっ白になることが多々ありました。
0521デフォルトの名無しさん2009/05/21(木) 18:07:17
Shownを使え
0522デフォルトの名無しさん2009/05/21(木) 22:09:23
IE でダメなら、WebBrowser でもダメだろよ。
0523デフォルトの名無しさん2009/05/21(木) 22:32:09
ReadStateがcompleteになるまで待ったほうがいいんじゃないかな?
0524デフォルトの名無しさん2009/05/21(木) 22:49:46
ContextMenuStripに追加したToolStripMenuItemの
DropDownItemsに追加したToolStripMenuItemのイメージ余白の消し方を教えてください。

1階層目はShowImageMarginをFlaseにすれば消せるのですが
2階層目以降のToolStripMenuItemは余白が出たままになってしまいます…。
0525デフォルトの名無しさん2009/05/22(金) 01:41:24
>>313さんのMecabの返り血をAnisで受けると文字化けするんですけど、
文字化けしない方法をどなたか教えてください orz
0526デフォルトの名無しさん2009/05/22(金) 01:44:57
キャー!
0527デフォルトの名無しさん2009/05/22(金) 01:46:46
PtrToStringAuto だとどうなる?
0528デフォルトの名無しさん2009/05/22(金) 02:00:25
>>527
こんななりました。。
?慣???麩????????????弊(ry
0529デフォルトの名無しさん2009/05/22(金) 02:26:54
Shift_JIS(CP932)をUTF-8と誤認識してるんじゃね。
0530デフォルトの名無しさん2009/05/22(金) 03:09:18
俺はこれでできた

[DllImport("libmecab.dll")]
extern static int mecab_new2(string arg);
[DllImport("libmecab.dll")]
extern static IntPtr mecab_sparse_tostr(int m, byte[] str);
[DllImport("libmecab.dll")]
extern static void mecab_destroy(int m);

int mecab = mecab_new2("");
this.textBox2.Text = Encoding.Default.GetString(Encoding.Convert(Encoding.UTF8, Encoding.Default, Encoding.Unicode.GetBytes(
Marshal.PtrToStringUni(mecab_sparse_tostr(mecab, Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(
this.textBox1.Text))))))).Replace("\n", "\r\n").Replace("\r\r\n", "\r\n");
mecab_destroy(mecab);
0531デフォルトの名無しさん2009/05/22(金) 06:06:52
これはひどいコード・・・
0532デフォルトの名無しさん2009/05/22(金) 06:24:15
なんのためのマーシャリングなのかって感じだな
0533デフォルトの名無しさん2009/05/22(金) 14:52:19
printPreviewDialog1.Bounds = this.Bounds;
printPreviewDialog1.ShowDialog();

こう書いても何故かthisと重なって表示してくれない
大きさは反映されるのに位置が自動的に決定されてしまう
解決方法知ってる方いたら教えてください
0534デフォルトの名無しさん2009/05/22(金) 15:08:59
ウィンドウの初期位置を指定するプロパティがあるからそれをManualだったかなんかにする
0535デフォルトの名無しさん2009/05/22(金) 15:32:25
PrintPreviewDialogにStartPositionプロパティは無いみたいです
0536デフォルトの名無しさん2009/05/22(金) 15:40:11
.NET Framework クラス ライブラリ
PrintPreviewDialog..::.StartPosition プロパティ
0537デフォルトの名無しさん2009/05/22(金) 15:49:14
インテリセンスに出ないので無いと思ってましたが頑張って手打ちしたら出来ました
ありがとうございました
0538デフォルトの名無しさん2009/05/22(金) 15:55:42
>頑張って手打ち
ワロタ
気持はわかる
0539デフォルトの名無しさん2009/05/23(土) 18:31:31
>>424 クソワロタ
0540デフォルトの名無しさん2009/05/24(日) 01:39:48
笑い事じゃねえよ!
0541デフォルトの名無しさん2009/05/24(日) 11:01:56
いや、声出して笑っちゃったよw
ユニークな仕事だなw
0542デフォルトの名無しさん2009/05/24(日) 12:58:03
たぶん日本で唯一だy。食いっぱぐれなくていいな。
0543デフォルトの名無しさん2009/05/24(日) 14:30:22
\拍手を打つ仕事があるときいてやってきました/
0544デフォルトの名無しさん2009/05/24(日) 16:14:58
ListBoxの、選択されたアイテムを囲っている破線を消したいのですが可能でしょうか?
なぜか一瞬だけ、選択していないアイテムに破線が出るので消したいと思っています
0545デフォルトの名無しさん2009/05/24(日) 16:45:38
>>544
独自描画にすれば消せるんじゃないかな。
■ このスレッドは過去ログ倉庫に格納されています