1read 100read
2012年1月2期プログラム30: ふらっとC#,C♯,C#(初心者用) Part84 (731) TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
32: ■暗号技術【ROUNDsurea】■ (344)
33: スレ立てるまでもない質問はここで 116匹目 (536)
34: WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part12 (263)
35: クラス名・変数名に迷ったら書き込むスレ。Part21 (85)

ふらっとC#,C♯,C#(初心者用) Part84


1 :12/01/17 〜 最終レス :12/01/27
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっとC#,C♯,C#(初心者用) Part83
http://toro.2ch.net/test/read.cgi/tech/1325511769/
■関連スレ
C#, C♯, C#相談室 Part69
http://toro.2ch.net/test/read.cgi/tech/1323354868/
ミスターサタンのC#相談室 
http://hibari.2ch.net/test/read.cgi/tech/1092656075/
VB.NET質問スレ(Part38)
http://toro.2ch.net/test/read.cgi/tech/1325083428/
くだすれC++/CLI(初心者用)part2
http://hibari.2ch.net/test/read.cgi/tech/1268613679/

2 :
■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
http://ideone.com/
http://pastebin.com/
コードを貼り付けてrun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます

3 :
>>1


4 :
>>1
乙であります

5 :
やっと構造体の使い方がわかった。みなさんありがとう。

6 :
FileSystemWatcher で 監視先をローカルの "c:\Test" に設定したところ、
ファイルの変更検知できるのは確認できました。
しかし、監視先のパスを別マシン (OS:WindowsServer2008)上の共有フォルダ
"\\ServerName\Test" に変更したところ、エラーはいっさい出なかったのですが、
ファイル変更を検知できませんでした。
また同様にネットワークドライブとして、"\\ServerName\Test" を "z:\" に
割り当て、監視先を "z:\" にした場合も検知できませんでした。
どうすれば、別マシン(ファイルサーバー)にある
ファイルの変更を検知できるようになるのでしょうか?

7 :
>FileSystemWatcher.InternalBufferSize プロパティ
>バッファ サイズを大きくすることで、ファイル システム変更イベントの見落としを予防できます
http://msdn.microsoft.com/ja-jp/library/system.io.filesystemwatcher.internalbuffersize%28v=vs.80%29.aspx
ためしに大きくしてみたら

8 :
ついでに
>イベントを見落とさないために、次のガイドラインに従ってください。
>*InternalBufferSize プロパティを使用してバッファ サイズを大きくすることで、
>ファイル システム変更イベントの見落としを予防できます。
>*ロング ファイル名を使ってウォッチすることは避けます。短い名前に変更することを検討してください。
>*イベントの処理コードをできるだけ短くします。

9 :
最近C# 製のツールをよく見かけるようになったな

10 :
Phalanger 3.0 (2012年1月) をリリースしました。
http://awabi.2ch.net/test/read.cgi/poverty/1326781620/

11 :
??演算子ってnull「結合」?「合体」??1万年と2千年前から???

12 :
>?? 演算子は、左側のオペランドが null 値でない場合にはこのオペランドを返し、
>null 値である場合には右側のオペランドを返します。
http://msdn.microsoft.com/ja-jp/library/ms173224%28v=vs.80%29.aspx

13 :
>>7 >>8
バッファサイズ相当大きくしても変化なしです。
ネットワーク越しでも普通にイベント発生してるんですかね?

14 :
>ローカル コンピューター、ネットワーク ドライブ、またはリモート コンピューターのファイルをウォッチするコンポーネントを作成できます。
この記述が嘘でなければ発生してるはずだが…

15 :
実はMSDN見ながら答えてるだけで実際に使ったことはないんだyo
特にネットワーク越しで使用するときの注意点とか書いてないから
イベントは発生してると思うんだけどね
>バッファサイズ相当大きくしても変化なし
>バッファーは 4 KB 以上に設定できますが、64 KB 以下である必要があります。
>InternalBufferSize プロパティを 4,096 バイト未満に設定しようとした場合、
>値は破棄され、InternalBufferSize プロパティは 4,096 バイトに設定されます。
>最適なパフォーマンスを得るには、Intel ベースのコンピューターでは 4 KB の倍数を使用します。
らしいけど「64Kb以下かつ4Kbの倍数」になってる?

16 :
Windows7 32bitの共有フォルダを
Windows7 64bitのZ:\に割り当てて監視したけど検知できるなぁ
InternalBufferSizeはデフォのまま。

17 :
>>12
VS2010版にはnull合体演算子って書いてあるがな…

18 :
C#を始めて間もないので、クソみたいな質問ですが、答えてくれると嬉しいです。
Form1がメインウィンドウでForm2が設定画面、という形式のツールを作ってます。
Form2ではListviewを使って設定を管理しているのですが、
Form2を閉じたときにForm1にListviewの中身を送りたいです。
Form1でそれを設定として読み込んで、別の処理をさせたいのです。
フォーム間でのデータの受け渡しのサンプルはいくつかあったのですが、
配列を送るにはどのような形で実装したらいいでしょうか?
クラスを作って送るのが良いのかなと思いましたが、
クラス自体まだよく分かってないのです。
できればサンプルコードが載ってるページとかあると嬉しいです。

19 :
そういうのは直接オブジェクトを送ったりしないで分離しちゃった方が複雑にならないと思う
設定を持つクラスをシングルトンで共有するとか、いったんファイルに書きだして
それを改めて読み込むとか

20 :
public static class Setting {
. publid static Data[] Data;
}
みたいなの作ればいい

21 :
モーダルダイアログならForm2.GetResultメソッドでも書いてみれば
そこで配列化して返せばいいでしょ

22 :
・設定値だけを保持するクラスを用意する
・Form1は設定クラスにデータバインド
・Form2を作る時に設定クラスのインスタンスを渡す
・Form2はインスタンスをコピーして、そちらを変更する
・Form2でOKや適用が押された場合、設定値を最初に渡されたForm1の設定インスタンスに反映する
て感じでINotifyCollectionChangedを使うといいよ(ニッコリ

23 :
class Form2 : Form {
. public Data[] Data;
. ...
}
みたいにメンバ変数を宣言。
Form1 クラスで、
void button1_Clicked(object sender, EventArg e) {
. var dialog = new Form2();
. dialog.ShowDialog();
. Console.WriteLine(dialog.Data);
}

24 :
>>19-23
うおお、短時間でこんなにw
本当にありがとうございます。
皆様レスを頼りになんとか頑張ってみます。

25 :
そのものズバリのチュートリアル
チュートリアル : オブジェクトによるダイアログ ボックス情報の一括取得
http://msdn.microsoft.com/ja-jp/library/cakx2hdw.aspx
躓いたら、また質問するがよろしアル。

26 :
>>15 あ、64KB超えてたかもしれません。
ひょっとすると、送信できるサイズの上限超えてたから、
イベントが送信されてなかったのかな?
特に例外発生していなかったから、見落としてたが、
バッファから溢れた場合もエラー吐いてなかったし、
不適切なサイズを指定した場合もひょっとして例外は発生しないのか?。
いまは実行できる環境にいないので、とりあえず明日試してみます。

27 :
試せてないが、ひょっとすると解決したかも。
http://social.msdn.microsoft.com/Forums/ja/netfxgeneralja/thread/3674b121-0be5-432e-a5c4-9e64f9565e49
おそらくバッファサイズが原因の可能性が高いです。
これで、今日はゆっくりと眠れそうです。
みなさん、本当にありがとうございました。

28 :
>>25
いつも思うけど全く読みたくなくなるチュートリアルは誰のためにあるんだろ
MSは現状把握してるのか

29 :
MSの中の人は賢い奴ばかりだから俺らの知的レベルなんてわからんよ。

30 :
getdirectoriesでフォルダを列挙する際にアクセス拒否のフォルダがあった場合
そのフォルダを無視して作業を続行するにはどうすればよいでしょうか?
以前ここでtry-catchを使えと言われたんですが
string[] subFolders = System.IO.Directory.GetDirectories(
@"C:\test", "*", System.IO.SearchOption.AllDirectories);
このような場合どうすればいいんでしょうか

31 :
2010Express を使ってるんだけど、これって条件付きブレークポイントは使えないんでしたっけ?
前のバージョンだとブレークポイントを示す赤い玉の上で右クリックで条件を設定するウィンドウが出たような気が。

32 :
C++だったんじゃね?

33 :
>>30
そこまで操作するならDirectoryInfoクラス使うべきだよ
そっち使って色々試してみたらいい

34 :
http://pastebin.com/7jQBN7ei
このサンプルは反変性の例として妥当なんでしょうか。
自分の頭では、派生クラスを基本クラス型に渡しているので、共変性のように思えます。
引用元はここです。
http://code.msdn.microsoft.com/windowsdesktop/11-covariance-contravarianc-ef078691#02

35 :
C#ではenumがintじゃない。
では普通は何を使うものなのでしょう?

36 :
enumはenumだよ

37 :
>>35
独立した型。
内部ではintとして扱かわれていることが多いけど

38 :
なんでそれをここで聞くんだろう。

39 :
>>35
名前付き識別子。
enumを定義するとクラス同様に型として認識されるので、内部の扱いがintであっても別物になる。
でも、bit演算に応用したりもできる。

40 :
しかしEnum自身はクラスなんだよな
言語仕様的に本当にそれで良いのか?

41 :
CIL的に、プリミティブな数値、配列、列挙型は特別扱いされてるからなぁ。
C# 以前の問題。

42 :
Enumはクラスかもしれないが
値は定数だろ

43 :
失礼します。
C++で作成されたdllにポインタを渡したいのですが
[StructLayout(LayoutKind.Sequential]
public struct hoge
{
Public UInt32 aaa;
Public Uin64 bbb;
Public IntPtr ccc;
(その他配列等色々)
}
で宣言された構造体のポインタのポインタを渡すにはどうしたら良いのでしょうか?
C++の関数宣言は
ret hage(hoge** test);
ですが、C#で ret hage(ref hoge test);ではtestの先頭にアドレスっぽい値が入っていました。
さらにtestも配列なので、少し混乱しています。(構造体の配列のポインタのポインタ 構造体の中にも配列やポインタ有り)
ttp://oshiete.goo.ne.jp/qa/2119623.html
を参考にしようとしてみましたが、hoge* testと書くとマネージ型のアドレスの取得は出来ませんと出てしまいます。
よろしくお願いします。

44 :
配列に入れて配列をrefで渡せばいいんじゃないの
ret hage(ref hoge[] test);

45 :
それもやってみたのですがC#で、
hoge[] test = new hoge[10];と宣言し
ret = hage(ref hoge test);
とやると、ここでtry〜catchすらすっとばして関数を無理矢理終了させてしまいます。(エラー表示は一切無し)

46 :
そのtestって出力なのか?入力なのか?両方か?

47 :
出力です。
outでもやってみましたが、結果は同じで先頭だけnullから数値に変わってました。

48 :
[*hoge, *hoge, *hoge, *hoge]
C++が要求しているもの
*[hoge, hoge, hoge, hoge]
>>44の浅知恵
unsafeかGCHandleでIntPtrを配列に入れてしまうのが手っ取り早いんではないか

49 :
hogeがクラスならhage(hoge[] test)で問題ない気がするが
構造体使ってるのは何か意味があるか?

50 :
意味とか考えちゃ駄目だ

51 :
StructLayoutは構造体にしか使えないと勘違いしていた時期が私にはあった。

52 :
hogeが画像データだからです。
構造体の中のポインタが画素値で、整数値がパラメータです。
画像を複数枚扱うので、hogeも配列になっています。
C++の要求がhoge** testなので、枚数分ループしていますが
unsafe hoge* testを行うとマネージ型のアドレスは取得出来ませんと表示され、
hoge[]test と書くとtryすら無視して関数を終了してしまうのが現在の状態です。

53 :
画像データだから構造体ってのはちょっと理屈が通ってない気がする

54 :
フォームにMenuStripをおきました
そしたら「ここへ入力」ってところがあったのでファイルって書きました
入力した所をクリックするとサブメニューが出てきたのでそこに終了って書きました
これで終了を押すとプログラムを終了するだけのプログラムを作ろうと思ってます
そこで終了をダブルクリックしたらForm1.csに以下のように
private void 終了CToolStripMenuItem_Click(object sender, EventArgs e)
{
}
ってコードの中に日本語がまじってしまうんですが(終了CToolStripMenuItem_Clickの部分)
これって問題はないのですか?
メニューを作るときってこういうものとして思えばいいですか?

55 :
文法的な問題はない
やってる人がいるかって言われると100人に1人よりは少ないと思う

56 :
すいません、確かに画像データだからと言って構造体である必要はないですね。
ttp://d.hatena.ne.jp/Schima/20090512/1242139542
を参考に
int sz = Marshal.SizeOf(test[i]);
IntPtr ptr = Marshal.AllocHGlobal(sz);
Marshal.StructureToPtr(test[i], ptr, false);
res = hage(ref ptr);
と、やってみましたがダメでした。

57 :
場当たり的にやってると1ヶ月かかるぞ
ret = hage(IntPtr[] test);
まずこれでどうぞ
IntPtrの配列にhogeを1個1個収めたまえ

58 :
unsafe static ret hage(hoge** test);と宣言して
hoge[] buf = new hoge[枚数];
fixed (hoge* pBuf = buf) {
hoge* temp = pBuf;
hage(&temp);
}
とかじゃないの
どうせやってることが既に安全じゃないからunsafeでいいよ

59 :
すまん>>58は勘違い
なんか意味ないことやってるな

60 :
俺の知人のタマキンが下痢で
今日も部屋に篭ってAVで射精してる

61 :
こうかな
hoge[] a = new hoge[枚数];
fixed (hoge* pa = a) {
hoge*[] b = new hoge*[枚数];
for (int i = 0; i < 枚数; i++) b[i] = pa + i;
fixed (hoge** pb = b) { hage(pb); }
}

62 :
そのうち画像は取れたんですが何度か画像取ってるうちに
重くなってハングアップしてしまいます
なぜでしょうかという質問が来るのではないか?

63 :
>>28
昔からヘルプの使いやすさはボーランド(エンバカデロに開発部門売却前のね)
情報量はMSってのは言われてたな

64 :
summaryの書き方を教えてください
例えば以下のような場合はなんて書きますか?
private void test(string str)
{
this.abc = str + "@@@@@";
}

65 :
/// <summary>
/// 知らねーよ
/// </summary>

66 :
初心者なので試しに空のプロジェクトから作っているのですが、
フォームアプリの時に自動でできるprogram.csという項目は後から追加するにはどうやればいいですか?

67 :
>>64
それじゃ「テスト用」以上の何も書けない。

68 :
ファイラーをつくりたいのですが
名前でソート、更新日時でソートなどをする場合はlistboxとかlistviewとかありますが何をつかうのでしょうか?

69 :
Datagrid

70 :

ステマ相関図画像更新(1/17)
http://gazo.restspace.jp/img-box/img20120117010742.jpg
テレビや新聞、大規模なネットサイトで「今流行の」「今話題の〜」「女性に人気の〜」等と言われるものはほぼ全て
この画像上部、○○堂がコントロールしている。
  ・世間にどの程度流行らせるか
  ・流行に乗り遅れる(流行に乗り遅れさせる)人間をどのくらい作るか
  ・話題に乗り遅れた人間に対してどの程度の疎外感を与えるか
  ・いつその流行を終わらせるか
2chもステマ会場
http://www.dotup.org/uploda/www.dotup.org2526030.jpg
ちなみに ハリーポッターと賢者の石の 「石」とはテレビのこと(著者が執筆当時)
 ダイオード→半導体→シリコン→石
 賢者とはテレビを見る人間でも番組を作る人間でもなく、テレビを操る人間。

71 :
>>57
シンプルなのが一番ですよね。
ちょっと試してみます。
>>61
fixedで確保しながらやるのも良さそうですね、ありがとうございます。
>>62
とりあえず、メモリリークだけは無いよう気をつけます。

72 :
指定したファイルの「種類」を取得する方法を教えてください
「種類」とはエクスプローラにあるやつです
a.txtだったら「テキストファイル」
b.chmだったら「コンパイルされた HTML ヘルプ ファイル」
というのです

73 :
ヒントttp://d.hatena.ne.jp/IIJIMAS/20101022/1287680305

74 :
>>64
必ずsummaryを書く
/// <summary>
/// 何かを行います。
/// </summary>
引数がある場合、インデクサの場合はparamを付ける
paramにはseeで型へのリンクを付けとく
/// <param name="str">
/// 何かを表す<see cref="T:System.String" />。
/// </param>
戻り値がある場合はreturns
// /// <returns>戻り値の説明です。</returns>
プロパティの場合はvalueを書く
// /// <value>プロパティの説明です。</value>
あと発生する可能性のある例外を列挙する
// /// <exception cref="T:System.Exception">気が向いた場合。</exception>
ジェネリックならtypeparamとかも要る

75 :
>>43
遅レスだが
out IntPtr hogePtr
で受けとって、Marshal.PtrToStructureでいいんじゃないの?

76 :
>>66
普通に Program.cs って名前のソースコードを追加するだけ。(名前は何でもいいけど)
ソリューションエクスプローラーから今作成しているプロジェクト名の項目を
左クリックして追加 -> クラス
Program.cs には Main メソッド (エントリーポイント) があるだけで、
他のソースファイルと違うところ(設定とか)は特にないよ。
ソースの中身はいつも自動で作成されているコードを書けばいい。
Main メソッドには [STAThread] ってのをつけておかないと
フォームアプリは動作しないからつけること。(コンパイルエラーが出ると思う)

77 :
>>74
わかりやすい解説です
ありがとうございます

78 :
>>69
listviewでやってしまいました

79 :
大丈夫だ問題ない。

80 :
>>72
SHGetFileInfo + SHGFI_TYPENAME

81 :
C#のウォッチ式は型指定のみのようですが、
C++みたいにポインタの参照先の値を見るにはどうすれば良いのでしょうか?
例)void* hoge;
C++のウォッチ式:(int*)hoge,50
(とりあえずint型にして50個表示させてみる)
よろしくお願いします。

82 :
イミディエイトウィンドウ

83 :
ポインタなんてc++と連動させる時以外使うなよ

84 :
このスレで質問してばかりなのでプログラミングC# 第6版を買おうと思うのですが、入門書は既に独習C#を持っています。
買う意味ありますかね?ウェブよりわかりやすいというレビューがありますがステマでしょうか?

85 :
http://books.google.co.jp/books?id=e0EnOz3BdEkC&printsec=frontcover&dq=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0C%23&hl=ja&sa=X&ei=lJEXT8DtL43ImQXu-LWzAw&ved=0CDsQ6AEwAA#v=onepage&q&f=false
ここで4版がちょっと見れる

86 :
>>85
ありがとうございます。情報量とわかりやすさがかなり上だと思うので買います。
俺、ステマみうたいだな。

87 :
ButtonにImageを設定してSizeを設定しました。Imageはきっちり正方形で、Sizeもそれにあわせて
正方形です。具体的にはImageが32x32でボタンが38x38。またAutoSizeはFalseで、DockはNoneです。
開発したPC(Win7)だと意図通りに正方形のボタンが表示されますが、別のPC(Win7)で実行したところ
Imageの両脇に数ピクセルの余白は表示されてやや長方形のボタンになってしまいます。
AutoSizeがTrueだとImageだけのときなら大丈夫ですが、テキストも可変で重ねるためその対処はとれません。
なにか原因と対策こころあたりありませんか?

88 :
TabControll内の特定のTabPageの中にButtonやらLabelやらlistviewを置いているのですが
このTabPageを tabControl1.TabPages.RemoveAt(3);みたいに消した場合って中に配置したコントロールも全て削除されているのでしょうか?

89 :
削除って曖昧だな
コントロールのツリーから消えてることは間違いないが
メモリから消えているかとは別問題だ

90 :
親のコントロールが消えても一緒に消えるってわけじゃないんですね
念のためそれぞれ指定して消すようにします

91 :
Labelをコード内から動的に生成しているのですが
ラベルの一番最後のやつのTextを変更したいのですが
一番最後のラベルにアクセスする方法を教えてください

92 :
生成するたびにフィールドにもっておけばいいだろが

93 :
一応タブを消した後にlistviewにアクセスできるか試してみたいとおもったんですが
こう書くとそもそもタブは消えてるのでアクセスできません
テストできる方法を伝授してください
if (null != tabControl1.TabPages[5].Controls["listView1"])
{
MessageBox.Show("true");
}
else
{
MessageBox.Show("false");
}

94 :
機嫌がいいからスーパーヒントくれてやるよ
ListView lv = tabControl1.TabPages[5].Controls["listView1"];

95 :
>>93
答から言えば中のコントロールのDisposeメソッドは呼ばれない
ただ、どこからも参照されていなければGCによって破棄される
アンマネージリソースをフレームワークが知らない形で持っていたらリークするが
それもプロセスが終了する時点で解放される

96 :
部品のプロパティをメソッドの中で何回も呼び出して使う場合は変数に入れたほうが効率が良いものですか?
label1.Textだったら毎回label1.Textって呼び出すよりも
string label = label1.Textって感じで変数にいれたほうがよいとかありますか?

97 :
呼び出しに時間がかかるならそうだし
時間がかからないならそうでもない
普遍な答えはない

98 :
参照を辿るコストって考えたことないがどのくらいなんだろう

99 :
>>98
そんなもん全く全然関係ない
Textプロパティのgetアクセサがどう実装されてるかによる

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
32: ■暗号技術【ROUNDsurea】■ (344)
33: スレ立てるまでもない質問はここで 116匹目 (536)
34: WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part12 (263)
35: クラス名・変数名に迷ったら書き込むスレ。Part21 (85)