ふらっとC#,C♯,C#(初心者用) Part84at TECH
ふらっとC#,C♯,C#(初心者用) Part84 - 暇つぶし2ch1:デフォルトの名無しさん
12/01/17 03:09:38.91
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっとC#,C♯,C#(初心者用) Part83
スレリンク(tech板)

■関連スレ
C#, C♯, C#相談室 Part69
スレリンク(tech板)
ミスターサタンのC#相談室 
スレリンク(tech板)
VB.NET質問スレ(Part38)
スレリンク(tech板)
くだすれC++/CLI(初心者用)part2
スレリンク(tech板)

2:デフォルトの名無しさん
12/01/17 03:10:19.04
■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
URLリンク(ideone.com)
URLリンク(pastebin.com)
コードを貼り付けてrun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます

3:デフォルトの名無しさん
12/01/17 03:34:25.33
>>1


4:デフォルトの名無しさん
12/01/17 17:02:22.90
>>1
乙であります

5:デフォルトの名無しさん
12/01/17 18:41:24.55
やっと構造体の使い方がわかった。みなさんありがとう。

6:デフォルトの名無しさん
12/01/17 19:32:57.79
FileSystemWatcher で 監視先をローカルの "c:\Test" に設定したところ、
ファイルの変更検知できるのは確認できました。

しかし、監視先のパスを別マシン (OS:WindowsServer2008)上の共有フォルダ
"\\ServerName\Test" に変更したところ、エラーはいっさい出なかったのですが、
ファイル変更を検知できませんでした。

また同様にネットワークドライブとして、"\\ServerName\Test" を "z:\" に
割り当て、監視先を "z:\" にした場合も検知できませんでした。

どうすれば、別マシン(ファイルサーバー)にある
ファイルの変更を検知できるようになるのでしょうか?

7:デフォルトの名無しさん
12/01/17 20:02:06.55
>FileSystemWatcher.InternalBufferSize プロパティ
>バッファ サイズを大きくすることで、ファイル システム変更イベントの見落としを予防できます

URLリンク(msdn.microsoft.com)

ためしに大きくしてみたら

8:デフォルトの名無しさん
12/01/17 20:05:48.01
ついでに

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

9:デフォルトの名無しさん
12/01/17 20:24:35.15
最近C# 製のツールをよく見かけるようになったな

10:デフォルトの名無しさん
12/01/17 20:27:10.41
Phalanger 3.0 (2012年1月) をリリースしました。
スレリンク(poverty板)


11:デフォルトの名無しさん
12/01/17 20:31:28.88
??演算子ってnull「結合」?「合体」??1万年と2千年前から???

12:デフォルトの名無しさん
12/01/17 20:42:24.44
>?? 演算子は、左側のオペランドが null 値でない場合にはこのオペランドを返し、
>null 値である場合には右側のオペランドを返します。

URLリンク(msdn.microsoft.com)

13:デフォルトの名無しさん
12/01/17 21:19:18.58
>>7 >>8
バッファサイズ相当大きくしても変化なしです。
ネットワーク越しでも普通にイベント発生してるんですかね?


14:デフォルトの名無しさん
12/01/17 21:47:01.03
>ローカル コンピューター、ネットワーク ドライブ、またはリモート コンピューターのファイルをウォッチするコンポーネントを作成できます。

この記述が嘘でなければ発生してるはずだが…

15:デフォルトの名無しさん
12/01/17 21:47:18.83
実はMSDN見ながら答えてるだけで実際に使ったことはないんだyo
特にネットワーク越しで使用するときの注意点とか書いてないから
イベントは発生してると思うんだけどね

>バッファサイズ相当大きくしても変化なし

>バッファーは 4 KB 以上に設定できますが、64 KB 以下である必要があります。
>InternalBufferSize プロパティを 4,096 バイト未満に設定しようとした場合、
>値は破棄され、InternalBufferSize プロパティは 4,096 バイトに設定されます。
>最適なパフォーマンスを得るには、Intel ベースのコンピューターでは 4 KB の倍数を使用します。

らしいけど「64Kb以下かつ4Kbの倍数」になってる?

16:デフォルトの名無しさん
12/01/17 22:11:24.76
Windows7 32bitの共有フォルダを
Windows7 64bitのZ:\に割り当てて監視したけど検知できるなぁ
InternalBufferSizeはデフォのまま。

17:デフォルトの名無しさん
12/01/17 22:47:40.55
>>12
VS2010版にはnull合体演算子って書いてあるがな…

18:デフォルトの名無しさん
12/01/17 22:50:46.66
C#を始めて間もないので、クソみたいな質問ですが、答えてくれると嬉しいです。

Form1がメインウィンドウでForm2が設定画面、という形式のツールを作ってます。
Form2ではListviewを使って設定を管理しているのですが、
Form2を閉じたときにForm1にListviewの中身を送りたいです。
Form1でそれを設定として読み込んで、別の処理をさせたいのです。

フォーム間でのデータの受け渡しのサンプルはいくつかあったのですが、
配列を送るにはどのような形で実装したらいいでしょうか?
クラスを作って送るのが良いのかなと思いましたが、
クラス自体まだよく分かってないのです。

できればサンプルコードが載ってるページとかあると嬉しいです。

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

20:デフォルトの名無しさん
12/01/17 22:57:41.77
public static class Setting {
. publid static Data[] Data;
}
みたいなの作ればいい

21:デフォルトの名無しさん
12/01/17 23:01:49.37
モーダルダイアログならForm2.GetResultメソッドでも書いてみれば
そこで配列化して返せばいいでしょ

22:デフォルトの名無しさん
12/01/17 23:02:07.45
・設定値だけを保持するクラスを用意する
・Form1は設定クラスにデータバインド
・Form2を作る時に設定クラスのインスタンスを渡す
・Form2はインスタンスをコピーして、そちらを変更する
・Form2でOKや適用が押された場合、設定値を最初に渡されたForm1の設定インスタンスに反映する

て感じでINotifyCollectionChangedを使うといいよ(ニッコリ

23:デフォルトの名無しさん
12/01/17 23:04:14.57
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:デフォルトの名無しさん
12/01/17 23:24:21.49
>>19-23
うおお、短時間でこんなにw
本当にありがとうございます。
皆様レスを頼りになんとか頑張ってみます。

25:デフォルトの名無しさん
12/01/17 23:31:33.95
そのものズバリのチュートリアル
チュートリアル : オブジェクトによるダイアログ ボックス情報の一括取得
URLリンク(msdn.microsoft.com)
躓いたら、また質問するがよろしアル。

26:デフォルトの名無しさん
12/01/17 23:39:47.41
>>15 あ、64KB超えてたかもしれません。
ひょっとすると、送信できるサイズの上限超えてたから、
イベントが送信されてなかったのかな?

特に例外発生していなかったから、見落としてたが、
バッファから溢れた場合もエラー吐いてなかったし、
不適切なサイズを指定した場合もひょっとして例外は発生しないのか?。

いまは実行できる環境にいないので、とりあえず明日試してみます。

27:デフォルトの名無しさん
12/01/17 23:45:27.82
試せてないが、ひょっとすると解決したかも。
URLリンク(social.msdn.microsoft.com)
おそらくバッファサイズが原因の可能性が高いです。

これで、今日はゆっくりと眠れそうです。
みなさん、本当にありがとうございました。

28:デフォルトの名無しさん
12/01/18 10:00:02.32
>>25
いつも思うけど全く読みたくなくなるチュートリアルは誰のためにあるんだろ
MSは現状把握してるのか

29:デフォルトの名無しさん
12/01/18 10:04:43.61
MSの中の人は賢い奴ばかりだから俺らの知的レベルなんてわからんよ。

30:デフォルトの名無しさん
12/01/18 12:30:00.73
getdirectoriesでフォルダを列挙する際にアクセス拒否のフォルダがあった場合
そのフォルダを無視して作業を続行するにはどうすればよいでしょうか?

以前ここでtry-catchを使えと言われたんですが

string[] subFolders = System.IO.Directory.GetDirectories(
@"C:\test", "*", System.IO.SearchOption.AllDirectories);

このような場合どうすればいいんでしょうか

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

32:デフォルトの名無しさん
12/01/18 13:28:49.01
C++だったんじゃね?

33:デフォルトの名無しさん
12/01/18 13:57:38.49
>>30
そこまで操作するならDirectoryInfoクラス使うべきだよ
そっち使って色々試してみたらいい

34:デフォルトの名無しさん
12/01/18 14:31:55.79
URLリンク(pastebin.com)
このサンプルは反変性の例として妥当なんでしょうか。
自分の頭では、派生クラスを基本クラス型に渡しているので、共変性のように思えます。

引用元はここです。
URLリンク(code.msdn.microsoft.com)

35:デフォルトの名無しさん
12/01/18 15:39:10.70
C#ではenumがintじゃない。
では普通は何を使うものなのでしょう?

36:デフォルトの名無しさん
12/01/18 15:42:48.01
enumはenumだよ

37:デフォルトの名無しさん
12/01/18 16:24:40.04
>>35
独立した型。
内部ではintとして扱かわれていることが多いけど

38:デフォルトの名無しさん
12/01/18 16:32:58.50
なんでそれをここで聞くんだろう。

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

40:デフォルトの名無しさん
12/01/18 17:17:08.54
しかしEnum自身はクラスなんだよな
言語仕様的に本当にそれで良いのか?

41:デフォルトの名無しさん
12/01/18 17:49:46.70
CIL的に、プリミティブな数値、配列、列挙型は特別扱いされてるからなぁ。
C# 以前の問題。

42:デフォルトの名無しさん
12/01/18 17:50:14.00
Enumはクラスかもしれないが
値は定数だろ

43:デフォルトの名無しさん
12/01/18 18:15:15.62
失礼します。
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も配列なので、少し混乱しています。(構造体の配列のポインタのポインタ 構造体の中にも配列やポインタ有り)

URLリンク(oshiete.goo.ne.jp)
を参考にしようとしてみましたが、hoge* testと書くとマネージ型のアドレスの取得は出来ませんと出てしまいます。

よろしくお願いします。

44:デフォルトの名無しさん
12/01/18 18:22:21.31
配列に入れて配列をrefで渡せばいいんじゃないの
ret hage(ref hoge[] test);

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

46:デフォルトの名無しさん
12/01/18 18:46:28.26
そのtestって出力なのか?入力なのか?両方か?

47:デフォルトの名無しさん
12/01/18 19:00:37.77
出力です。
outでもやってみましたが、結果は同じで先頭だけnullから数値に変わってました。

48:デフォルトの名無しさん
12/01/18 19:01:10.84
[*hoge, *hoge, *hoge, *hoge]
C++が要求しているもの

*[hoge, hoge, hoge, hoge]
>>44の浅知恵

unsafeかGCHandleでIntPtrを配列に入れてしまうのが手っ取り早いんではないか

49:デフォルトの名無しさん
12/01/18 19:04:50.00
hogeがクラスならhage(hoge[] test)で問題ない気がするが
構造体使ってるのは何か意味があるか?

50:デフォルトの名無しさん
12/01/18 19:07:17.08
意味とか考えちゃ駄目だ

51:デフォルトの名無しさん
12/01/18 19:18:43.52
StructLayoutは構造体にしか使えないと勘違いしていた時期が私にはあった。

52:43
12/01/18 19:20:08.52
hogeが画像データだからです。
構造体の中のポインタが画素値で、整数値がパラメータです。
画像を複数枚扱うので、hogeも配列になっています。

C++の要求がhoge** testなので、枚数分ループしていますが
unsafe hoge* testを行うとマネージ型のアドレスは取得出来ませんと表示され、
hoge[]test と書くとtryすら無視して関数を終了してしまうのが現在の状態です。

53:デフォルトの名無しさん
12/01/18 19:31:44.56
画像データだから構造体ってのはちょっと理屈が通ってない気がする

54:デフォルトの名無しさん
12/01/18 19:31:55.13
フォームにMenuStripをおきました
そしたら「ここへ入力」ってところがあったのでファイルって書きました
入力した所をクリックするとサブメニューが出てきたのでそこに終了って書きました
これで終了を押すとプログラムを終了するだけのプログラムを作ろうと思ってます
そこで終了をダブルクリックしたらForm1.csに以下のように
private void 終了CToolStripMenuItem_Click(object sender, EventArgs e)
{

}
ってコードの中に日本語がまじってしまうんですが(終了CToolStripMenuItem_Clickの部分)
これって問題はないのですか?
メニューを作るときってこういうものとして思えばいいですか?

55:デフォルトの名無しさん
12/01/18 19:35:24.35
文法的な問題はない
やってる人がいるかって言われると100人に1人よりは少ないと思う

56:43
12/01/18 19:41:37.44
すいません、確かに画像データだからと言って構造体である必要はないですね。

URLリンク(d.hatena.ne.jp)
を参考に
int sz = Marshal.SizeOf(test[i]);
IntPtr ptr = Marshal.AllocHGlobal(sz);
Marshal.StructureToPtr(test[i], ptr, false);
res = hage(ref ptr);
と、やってみましたがダメでした。

57:デフォルトの名無しさん
12/01/18 19:50:17.85
場当たり的にやってると1ヶ月かかるぞ

ret = hage(IntPtr[] test);

まずこれでどうぞ
IntPtrの配列にhogeを1個1個収めたまえ

58:デフォルトの名無しさん
12/01/18 19:53:03.63
unsafe static ret hage(hoge** test);と宣言して
hoge[] buf = new hoge[枚数];
fixed (hoge* pBuf = buf) {
hoge* temp = pBuf;
hage(&temp);
}
とかじゃないの
どうせやってることが既に安全じゃないからunsafeでいいよ

59:58
12/01/18 19:55:44.48
すまん>>58は勘違い
なんか意味ないことやってるな

60:デフォルトの名無しさん
12/01/18 20:04:55.46
俺の知人のタマキンが下痢で
今日も部屋に篭ってAVで射精してる

61:デフォルトの名無しさん
12/01/18 20:10:44.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:デフォルトの名無しさん
12/01/18 20:40:39.64
そのうち画像は取れたんですが何度か画像取ってるうちに
重くなってハングアップしてしまいます
なぜでしょうかという質問が来るのではないか?

63:デフォルトの名無しさん
12/01/18 21:05:54.32
>>28
昔からヘルプの使いやすさはボーランド(エンバカデロに開発部門売却前のね)
情報量はMSってのは言われてたな


64:デフォルトの名無しさん
12/01/18 21:26:44.59
summaryの書き方を教えてください
例えば以下のような場合はなんて書きますか?

private void test(string str)
{
this.abc = str + "@@@@@";
}

65:デフォルトの名無しさん
12/01/18 21:28:10.12
/// <summary>
/// 知らねーよ
/// </summary>

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

67:デフォルトの名無しさん
12/01/18 21:35:19.65
>>64
それじゃ「テスト用」以上の何も書けない。

68:デフォルトの名無しさん
12/01/18 21:38:11.45
ファイラーをつくりたいのですが
名前でソート、更新日時でソートなどをする場合はlistboxとかlistviewとかありますが何をつかうのでしょうか?

69:デフォルトの名無しさん
12/01/18 21:50:15.78
Datagrid

70:デフォルトの名無しさん
12/01/18 22:25:51.57


ステマ相関図画像更新(1/17)
URLリンク(gazo.restspace.jp)
テレビや新聞、大規模なネットサイトで「今流行の」「今話題の~」「女性に人気の~」等と言われるものはほぼ全て
この画像上部、○○堂がコントロールしている。
  ・世間にどの程度流行らせるか
  ・流行に乗り遅れる(流行に乗り遅れさせる)人間をどのくらい作るか
  ・話題に乗り遅れた人間に対してどの程度の疎外感を与えるか
  ・いつその流行を終わらせるか
2chもステマ会場
URLリンク(www.dotup.org)

ちなみに ハリーポッターと賢者の石の 「石」とはテレビのこと(著者が執筆当時)
 ダイオード→半導体→シリコン→石
 賢者とはテレビを見る人間でも番組を作る人間でもなく、テレビを操る人間。


71:43
12/01/18 22:42:23.27
>>57
シンプルなのが一番ですよね。
ちょっと試してみます。

>>61
fixedで確保しながらやるのも良さそうですね、ありがとうございます。

>>62
とりあえず、メモリリークだけは無いよう気をつけます。

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

73:デフォルトの名無しさん
12/01/18 23:38:31.11
ヒントURLリンク(d.hatena.ne.jp)

74:デフォルトの名無しさん
12/01/18 23:42:00.72
>>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:デフォルトの名無しさん
12/01/19 00:09:49.97
>>43
遅レスだが
out IntPtr hogePtr
で受けとって、Marshal.PtrToStructureでいいんじゃないの?

76:デフォルトの名無しさん
12/01/19 00:19:25.66
>>66
普通に Program.cs って名前のソースコードを追加するだけ。(名前は何でもいいけど)
ソリューションエクスプローラーから今作成しているプロジェクト名の項目を
左クリックして追加 -> クラス

Program.cs には Main メソッド (エントリーポイント) があるだけで、
他のソースファイルと違うところ(設定とか)は特にないよ。
ソースの中身はいつも自動で作成されているコードを書けばいい。

Main メソッドには [STAThread] ってのをつけておかないと
フォームアプリは動作しないからつけること。(コンパイルエラーが出ると思う)

77:デフォルトの名無しさん
12/01/19 00:22:07.04
>>74
わかりやすい解説です
ありがとうございます

78:デフォルトの名無しさん
12/01/19 00:24:36.92
>>69
listviewでやってしまいました

79:デフォルトの名無しさん
12/01/19 02:54:00.78
大丈夫だ問題ない。

80:デフォルトの名無しさん
12/01/19 04:35:52.42
>>72
SHGetFileInfo + SHGFI_TYPENAME

81:デフォルトの名無しさん
12/01/19 10:26:33.57
C#のウォッチ式は型指定のみのようですが、
C++みたいにポインタの参照先の値を見るにはどうすれば良いのでしょうか?

例)void* hoge;
C++のウォッチ式:(int*)hoge,50
(とりあえずint型にして50個表示させてみる)

よろしくお願いします。

82:デフォルトの名無しさん
12/01/19 10:41:41.41
イミディエイトウィンドウ

83:デフォルトの名無しさん
12/01/19 11:08:33.33
ポインタなんてc++と連動させる時以外使うなよ

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

85:デフォルトの名無しさん
12/01/19 12:46:33.59
URLリンク(books.google.co.jp)
ここで4版がちょっと見れる

86:デフォルトの名無しさん
12/01/19 12:53:48.16
>>85
ありがとうございます。情報量とわかりやすさがかなり上だと思うので買います。
俺、ステマみうたいだな。

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

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


89:デフォルトの名無しさん
12/01/19 17:03:52.45
削除って曖昧だな
コントロールのツリーから消えてることは間違いないが
メモリから消えているかとは別問題だ

90:デフォルトの名無しさん
12/01/19 17:29:35.31
親のコントロールが消えても一緒に消えるってわけじゃないんですね
念のためそれぞれ指定して消すようにします

91:デフォルトの名無しさん
12/01/19 17:30:53.74
Labelをコード内から動的に生成しているのですが
ラベルの一番最後のやつのTextを変更したいのですが
一番最後のラベルにアクセスする方法を教えてください

92:デフォルトの名無しさん
12/01/19 17:32:48.12
生成するたびにフィールドにもっておけばいいだろが

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


94:デフォルトの名無しさん
12/01/19 19:58:03.15
機嫌がいいからスーパーヒントくれてやるよ

ListView lv = tabControl1.TabPages[5].Controls["listView1"];

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

96:デフォルトの名無しさん
12/01/19 21:24:45.50
部品のプロパティをメソッドの中で何回も呼び出して使う場合は変数に入れたほうが効率が良いものですか?
label1.Textだったら毎回label1.Textって呼び出すよりも
string label = label1.Textって感じで変数にいれたほうがよいとかありますか?

97:デフォルトの名無しさん
12/01/19 21:27:04.84
呼び出しに時間がかかるならそうだし
時間がかからないならそうでもない

普遍な答えはない

98:デフォルトの名無しさん
12/01/19 21:37:15.50
参照を辿るコストって考えたことないがどのくらいなんだろう

99:デフォルトの名無しさん
12/01/19 22:20:16.48
>>98
そんなもん全く全然関係ない
Textプロパティのgetアクセサがどう実装されてるかによる

100:デフォルトの名無しさん
12/01/19 22:22:55.88
>>94
ListView lv = (ListView)tabControl1.TabPages[0].Controls["listView0"];
if (null != lv)
{
MessageBox.Show("true");
}
else
{
MessageBox.Show("false");
}
って書いてTabPage[0]のタブを消してから実行したらfalseになりました
でもこれもtabControl1.TabPages[0]が消してからなのでlistViewが消えていrかどうかは分かりません

>>95
タブにlistviewを表示するだけなのでタブを消した時点でkistviewも破棄されたとみなしていいのですね
念のためコントロールを削除するようにするのがバグを生まないのかもしれないので手動で削除するようにします

101:デフォルトの名無しさん
12/01/19 23:51:36.61
>>100
listViewをどこで宣言したかによる。
デザイナーで追加したコントロールならフォーム閉じるまで残ってる。
メソッドのスコープで宣言して追加したコントロールなら>>95の言うようにCG対象になる。

102:デフォルトの名無しさん
12/01/20 00:16:25.14
>>100
フォームには予めデザイナーでTabControllのみ置いてあり
tabPageとlistViewはコードの中で生成してます
なのでtabPageを削除したらlistViewも勝手に削除されるってことでしょうか

と、ここでトラブルに遭遇したのですが
動的にtabPageとlistViewを5つ作成すると、tabPageは左からインデックス0~4までになります。
ここでインデックス2のtabPageを削除すると、削除したtabPageから右側のtabPageのインデックスが変わってしまいます。
インデックス3のものが2に、インデックス4のものが3になるってことです。
tabPageとlistViewを作るとき
ListView lv = new ListView();
lv.Name = "listView" + (tabControl1.TabCount - 1).ToString();
といった感じでtabPageを追加したときのインデックスをlistViewにつけて作成しているので
インデックスが狂うとlistViewへアクセス(※後でプロパティを変更するときなど)できなくなってしまいます
これの解決法をアドバイスお願いします

103:デフォルトの名無しさん
12/01/20 00:39:03.42
その追加方法ならTabPages.Controlsの中にはListView1個しかないわけだろ

for (int i=0; i<TabPages.Controls.Count; i++) {
if (TabPages.Controls[i] is ListView) {
ListView lv = TabPages.Controls[i];
}
}

とでもやって探せばいいだろが

104:デフォルトの名無しさん
12/01/20 06:15:25.14
iOSのようなスクロールをさせたいのですがどういうロジックに
すればいいでしょうか?

105:デフォルトの名無しさん
12/01/20 07:05:27.41
すみません。できました。

106:デフォルトの名無しさん
12/01/20 09:58:18.43
>>103

0,1,2,3,4 tabPageのインデックス
0,1,2,3,4 listViewのNameのお尻につく番号(listView0、 listView1・・・)

ここでtabPageのインデックス2を消す

0,1,2,3 tabPageのインデックス
0,1,3,4 listViewのNameのお尻につく番号(listView0、 listView1・・・)

ここで新たにtabPageを追加する

0,1,2,3,4 tabPageのインデックス
0,1,3,4,4 listViewのNameのお尻につく番号(listView0、 listView1・・・)

同じ名前を持ったlistView(インデックス3・4のlistView4)が出来てしまいます


107:デフォルトの名無しさん
12/01/20 10:13:08.83
名前ぐらい自分で変更しろよ

108:デフォルトの名無しさん
12/01/20 10:30:40.91
その設計が腐ってるんだろ
インデックスとかそれを含んだName文字列なんてタコなものじゃなくて他のidentifierで管理しようよ

109:デフォルトの名無しさん
12/01/20 10:32:08.00
tabpagesをグローバルなコレクションにいれておけばいい

110:デフォルトの名無しさん
12/01/20 10:33:08.77
>>106
c#以前の問題だなw


問題
複数あるものにそれぞれ一意の番号(被らない番号)をつけるにはどうしたらいいか?

111:デフォルトの名無しさん
12/01/20 10:49:44.21
一郎二郎三郎四朗さん四兄弟がいました
不幸なことに病気で二郎さんが亡くなりました

そのあとまた男の子が生まれました
子供を数えると三人いました

そこで四人目の子供に四朗と名付けました
結果として兄弟に二人の四朗がいます

ありえないだろ?

112:デフォルトの名無しさん
12/01/20 11:22:31.47
>>107-111
Nameにランダムな文字列をつけてみました
これでインデックスを気にしなくてよくなりましたがこれでいいのでしょうか?

113:デフォルトの名無しさん
12/01/20 11:27:15.26
名前がかぶってソフトがフリーズする未来が見えた

114:デフォルトの名無しさん
12/01/20 11:51:31.58
ちょうど今俺が、ソフトを2回起動するとWindows7がフリーズして悩んでいるところだw

115:デフォルトの名無しさん
12/01/20 12:25:11.02
もうGUIDでも使えよw

116:デフォルトの名無しさん
12/01/20 12:34:29.99
>>112
誰がランダムな文字列つけてみろと言った?
人の話を聞かない奴に質問する権利はない
一人で一生悩め

117:デフォルトの名無しさん
12/01/20 17:47:56.29
スレッドを使い方を勉強したいため、1秒毎にフォームタイトルをtickで書き換えたいのですが
「有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'Form1' がアクセスされました」
というエラーが出てしまいます。どなたかご教示お願いします
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Thread t1 = new Thread(new ThreadStart(TextChanger));
t1.Start();
}
private void TextChanger()
{
Text = new DateTime().Ticks.ToString();
Thread.Sleep(1000);
}
}
}

118:デフォルトの名無しさん
12/01/20 17:49:33.32
Invoke

119:デフォルトの名無しさん
12/01/20 18:10:12.21
そのエラーをググレ場言い発でわかる

120:デフォルトの名無しさん
12/01/20 18:26:20.53
あと、そのコードだとエラーがでなくても
Sleep(1000)したあとにそのスレッドが終了するゾ

121:デフォルトの名無しさん
12/01/20 19:15:22.21
これを解決するのもスレッドの勉強じゃないかしら

122:デフォルトの名無しさん
12/01/20 19:33:34.73
今後直接Thread使う機会ってあるのかね

123:デフォルトの名無しさん
12/01/20 19:45:48.03
C#ではThread直接使うとむしろ性能的に良くないけども、
少し古い情報とか、他の言語の情報で、非同期処理=スレッドって認識できちゃってる人多いしねぇ。
どうしたもんか。

124:デフォルトの名無しさん
12/01/20 21:19:30.14
黒歴史

125:デフォルトの名無しさん
12/01/20 21:28:25.25
>>115
GUIDでランダムな文字列を作ってます
>>116
配列にするとメモリ食いませんか

126:デフォルトの名無しさん
12/01/20 21:34:55.11
LOL

127:デフォルトの名無しさん
12/01/20 21:37:43.29
ListView1個配置するだけでその100倍メモリくっとるがな
気にするポイントがずれてる
目の付け所がシャープじゃない!

128:デフォルトの名無しさん
12/01/20 21:40:02.23
何故Nameで管理してはダメで配列で管理をしないといけないのか分かりません

129:デフォルトの名無しさん
12/01/20 21:42:05.81
貴方がNameで管理しててトラブったということは
貴方が使うには手に余るってことでしょう

130:デフォルトの名無しさん
12/01/20 21:42:34.93
Dictionary<Guid, ListView>

131:デフォルトの名無しさん
12/01/20 21:44:33.18
TabPage.Tagにでも入れとけとは誰も言ってくれないんだな。

132:デフォルトの名無しさん
12/01/20 21:45:01.27
Tagはオワコン

133:デフォルトの名無しさん
12/01/20 21:45:54.34
え~だってこの質問者なら「こんな便利なものがあるんですね!ありがとうございます!」と言ってくれそうな気がするよ

134:デフォルトの名無しさん
12/01/20 21:48:22.67
まぁGuidで解決したんならいいんじゃないの
それで

135:デフォルトの名無しさん
12/01/20 21:48:32.12
>>129
インデックスを元にNameをつけていましたがそれをランダムな文字列を元にしたらできましたが
この方法が何故ダメだという理由が知りたいだけです
別に私は配列を教えてくれた方の人格を攻撃しているわけでもないので

136:デフォルトの名無しさん
12/01/20 21:51:35.49
そのGuidで生成した名前はどこかに取ってあるわけだろ?
なぜそこにListViewを代入しておくという発想にならないんだろうか。

137:デフォルトの名無しさん
12/01/20 21:53:50.42
>>135
メモリを食うのが嫌なんだろ?
だったら配列にすべきだ

138:デフォルトの名無しさん
12/01/20 21:54:43.12
ほら、一箇所にまとめておかないと無くしちゃうだろ?
無くしちゃったらガベコレ来るまで破棄できなくてメモリの無駄でしょ?

139:デフォルトの名無しさん
12/01/20 21:57:39.36
メモリの無駄だから死んで

140:デフォルトの名無しさん
12/01/20 22:03:43.73
お前らイジメすぎだぞ!ここは初心者スレなんだから優しくしろよ

141:デフォルトの名無しさん
12/01/20 22:06:06.25
このやろう!!!!!!!!!!!!!!
難しくてよくわかんねえよっ!!!!!!!!!!!!!!!!!!

142:デフォルトの名無しさん
12/01/20 22:09:02.55
メモリの無駄だから「!」は一つにしてくれ
Lisperも括弧を節約するように

143:デフォルトの名無しさん
12/01/20 22:14:26.02
>>142
コンパイル時に消えるような小手先の最適化は好むべきではないと考えます。

144:デフォルトの名無しさん
12/01/20 23:11:59.68
javaみたく === が輸入されてきたりしないよな?

145:デフォルトの名無しさん
12/01/20 23:17:03.67
>>135
インデックスを元にNameつけないで全部同じ"listView"ってNameにすればいい。

146:デフォルトの名無しさん
12/01/20 23:19:01.86
GUIDの生成はメモリ食いませんか

すべてのNameにGUIDみたいな長い文字列を設定するとメモリ食いませんか

147:デフォルトの名無しさん
12/01/20 23:22:57.05
>>145
おいおいそうするとかぶっちゃうじゃん

148:デフォルトの名無しさん
12/01/20 23:31:58.46
GUIDは128bit

149:デフォルトの名無しさん
12/01/20 23:33:25.54
>>147
おそらく、>>93に書いてあるみたいに
>tabControl1.TabPages[5].Controls["listView1"]
っていう風に名前指定で取りたいだけだと思うから、タブページ内でかぶらなければ問題ないんじゃない?
listViewはコード中で生成しているみたいだし。( >>102 )

150:デフォルトの名無しさん
12/01/21 00:13:11.28
千七百九十六郎 二百五郎 二万五千とんで三郎 九十八万四千八百九十一郎の兄弟がいました…

151:デフォルトの名無しさん
12/01/21 00:18:52.96
>>125
おい誰も配列にしろなんて言ってないだろ

>>111の件をまじめに考えてみろ
なんで普通は被らない名前つけてるか?

152:デフォルトの名無しさん
12/01/21 00:45:41.38
>>151
>なんで普通は被らない名前つけてるか?
誰宛?

153:152
12/01/21 00:47:48.33
ごめん勘違いしてた。忘れて。

154:デフォルトの名無しさん
12/01/21 01:55:22.36
自作のクラスでエラーが発生した時に呼び出したところでエラーを受け取る際のエラー番号や説明を定義する方法を教えて
(戻り値は別の結果を受け取るために使いたいので使えません)

155:デフォルトの名無しさん
12/01/21 02:00:38.76
public class HogeException : Exception {
public HogeException(string message) : base(message) { }
}
エラーを起こしたい場所で
throw new HogeException("Hogeに失敗しました。");

156:デフォルトの名無しさん
12/01/21 10:38:20.12
>>154
例外のクラスを自作したらいい

誰かが上に書いたクラスや
c# 例外 自作あたりでググって出てくるクラスに
自由にフィールドやプロパティやメソッド追加したらいい

URLリンク(tech.bbtune.com)

157:デフォルトの名無しさん
12/01/21 10:38:30.22
>>149
同じ名前のコントロールって使えたっけ?

158:デフォルトの名無しさん
12/01/21 11:15:53.18
>>157
名前って何いってんの?
Nameプロパティのことだぞ?

159:デフォルトの名無しさん
12/01/21 11:16:36.14
>>158
Nameプロパティってユニークなものじゃないといけないんじゃないの?
学校でそう習ったけどさ

160:デフォルトの名無しさん
12/01/21 11:34:34.22
二重起動を禁止してコマンドライン引数を取得するで

URLリンク(www.k4.dion.ne.jp)

ここまでは理解できたんですがここからForm1で取得した引数を処理するにはどうすればよいでしょうか

関連付けされたファイルが開かれた場合二重起動をしないで既存のプロセスで開くようにしたいのです

161:160
12/01/21 11:48:06.64
Form1のRefresh()でForm1_Loadを再読み込みすることでできたっぽいですが
何か問題ありますでしょうか

162:デフォルトの名無しさん
12/01/21 11:52:33.40
>>159
コンテナごとにユニークじゃないとControlCollection.Item[string]で取得できないってだけじゃね
Nameでコントロール特定しようとか糞なことしなければどう使っても問題ない

>>160
問題ないけど
VB系の機能を持ち込むのは気持ち悪いという問題が……

163:デフォルトの名無しさん
12/01/21 12:43:50.55
しかしWCFは(このスレのレベルでは)難しいかも

164:デフォルトの名無しさん
12/01/21 12:48:14.05
URLリンク(msdn.microsoft.com)
に書いてあるColumnHeaderのコピーの方法を教えてください

ColumnHeader[] columnHeader1 = { column1, column2 };
ColumnHeader[] columnHeader2 = = (ColumnHeader[])columnHeader1.Clone();
listView1.Columns.AddRange(columnHeader1); // ここの行をコメントアウトすると例外がでない
listView2.Columns.AddRange(columnHeader2);
ってやると例外が出ます↓
複数の場所にアイテム '名前' を追加または挿入することはできません。最初に現在の場所から削除するか、複製を作成しなければなりません。


165:デフォルトの名無しさん
12/01/21 12:50:10.62
そうか?
URLリンク(d.hatena.ne.jp)

166:デフォルトの名無しさん
12/01/21 12:55:35.30
ColumnHeader[] columnHeader1 = { column1, column2 };
ColumnHeader[] columnHeader2 = { (ColumnHeader)column1.Clone(), (ColumnHeader)column2.Clone() }

配列に対してCloneを呼んだ場合は「配列が」コピーされる
中身はコピーされていない

167:デフォルトの名無しさん
12/01/21 12:57:41.30
>>164
今使ってるのはこれだ

Array.Clone メソッド

>Array の簡易コピーでは、要素が参照型であるか値型であるかに関係なく、
>その Array の要素だけがコピーされ、それらの参照が指している先のオブジェクトはコピーされません。

>新しい Array 内の参照は、元の Array 内の参照と同じオブジェクトを指します。

>対照的に、Array の詳細コピーでは、要素自体および要素が直接的または間接的に参照するすべての対象がコピーされます。

URLリンク(msdn.microsoft.com)(v=VS.80).aspx

168:デフォルトの名無しさん
12/01/21 13:18:22.95
Hashtable threadpool = new Hashtable();
(略)
lock (threadpool){
 if (threadpool[name] == null) {
  threadpool[name] = new Array();
 }
 threadpool[name].Add(thread);
}
ってな感じでnullチェックをしているのですが、Addでぬるぽで落ちる場合が
あって困っています。
threadpool[name]は別スレッドで用済みになったときにnullにしています。
なのでその対策としてlockしているつもりなのですが、どうやら使い方を
間違えているようです。正しくはどうすべきなのでしょうか?

169:デフォルトの名無しさん
12/01/21 13:24:07.79
”別スレッドで用済みになったときにnullにして”いる時にもlockをしてるか?

170:デフォルトの名無しさん
12/01/21 13:26:58.56
ArrayにAddなんてないのにAddしてるのも奇怪
あと.NETのバージョン2.0以上ならDictionary使えよ

171:デフォルトの名無しさん
12/01/21 13:30:40.69
.net2.0から使えるディレクトリやファイル一覧の取得メソッド
.net4.0から使えるディレクトリやファイル一覧の取得メソッドあるじゃないですか
やっぱり.net4.0から使えるメソッドのほうが早いのでしょうか?

172:デフォルトの名無しさん
12/01/21 13:31:50.40
>>169


173:デフォルトの名無しさん
12/01/21 13:33:04.43
>>169
してないっす。ありがとうございます。

>>170
記憶をたどって書いたのでArrayじゃなかったかもしれないです。


174:デフォルトの名無しさん
12/01/21 13:33:04.22
>>166
>>167
おおそうだったんですか!勉強になりました!ありがとうございました

175:デフォルトの名無しさん
12/01/21 13:33:57.61
>>171
そんなこと気にしなくていい

176:デフォルトの名無しさん
12/01/21 13:36:07.01
>>171
手が付いてるなら自分で測ればいい。
ここで適当な答えを返されたとしても、自分で確かめないのならお前はそれを信じるしかないんだぞ。

答えてやるよ。
.NET4.0の方が早い。

177:デフォルトの名無しさん
12/01/21 13:49:37.06
だって図り方がわからないんです

178:デフォルトの名無しさん
12/01/21 13:51:02.73
じゃあ気にしなくていいよ

179:デフォルトの名無しさん
12/01/21 14:11:58.14
"URLリンク(msdn.microsoft.com)(v=vs.80).aspx"の
new ListViewItem("item1",0);の第二引数の0って何の意味があるのでしょうか?

180:デフォルトの名無しさん
12/01/21 14:22:08.72
URLリンク(msdn.microsoft.com)
項目が格納されている ListView に関連付けられた ImageList 内のイメージの 0 から始まるインデックス。

って書いてあるじゃん
読めないの?

181:デフォルトの名無しさん
12/01/21 14:35:15.69
ListViewとImageListの関係については>>179が提示したURLにモロに書いてある
分からないとか抜かした場合、自分で提示したURLすらよく確認していないと証明しているようなものだ
本当に死んだほうがいい

182:デフォルトの名無しさん
12/01/21 15:00:09.78
このスレに来て、かれこれ12回は死んでますわ

183:デフォルトの名無しさん
12/01/21 15:07:12.20
>>171
ぶっちゃけていうと、

2.0→全部列挙しちゃう
4.0→途中で止めれる

もともと全部列挙するつもりならどちらも同じ

184:デフォルトの名無しさん
12/01/21 15:17:43.39
private T obj;
public void A() { obj.DoSomething(); }
public void B() { obj = new T(); }
クラスにこのようなメソッドがあり、AとBは異なるスレッドから不規則に何度も実行されます。
この場合、Bで代入中にAが実行されて不完全な参照を使ってしまう、とかあり得ますか。
lockを使うべきでしょうか。objもvolatileにしたほうがいいですか?

185:デフォルトの名無しさん
12/01/21 15:26:43.23
参照の代入はアトミックだっけ?
longは違うよね確か

186:デフォルトの名無しさん
12/01/21 15:36:10.55
>>183
分かりやすいです
勉強になりました

187:デフォルトの名無しさん
12/01/21 15:41:39.08
string[] directories = Directory.GetDirectories(@"C:\");
これだとsystem volume informationなどのシステム属性や画し属性も取得してしまうので
FileInfo fileinfo = new FileInfo(dir);
if ((fileinfo.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden){
}
な感じで減らしたいのですがどう書けばよいのでしょうか?

188:デフォルトの名無しさん
12/01/21 15:55:05.17
>>187
URLリンク(msdn.microsoft.com)
Directoryクラスの下にDirectoryInfoクラスってのがあるけど見える?
もしかすると文盲で見えない可能性があるから一応聞いておくよ

189:デフォルトの名無しさん
12/01/21 16:04:18.66
え?

190:デフォルトの名無しさん
12/01/21 16:04:36.18
スレタイくらい読め
答えられる頭のない奴は黙ってたほうがいいよ

191:デフォルトの名無しさん
12/01/21 16:10:13.29
制限しながら取得する方法はない、はず。

192:デフォルトの名無しさん
12/01/21 16:16:18.99
てめえの足りない脳みそで黙らせて見ろよアホ

193:デフォルトの名無しさん
12/01/21 16:19:25.15
さっきからいちいち一言多い妙な人に構わなくていいですからね。
忠告しましたよ。
忠告されても構うのは犬畜生のすることですよ。

194:デフォルトの名無しさん
12/01/21 16:23:12.43
忠犬は死ぬまで言いつけを守ったのだから畜生と並べたら失礼

195:デフォルトの名無しさん
12/01/21 17:21:14.09
WebResponseとhttpWebResponse
どう使い分けたらいいんだろう?
WebResponseは普通使わないでhttpWebResponse使っとけばいいのかな?

196:デフォルトの名無しさん
12/01/21 17:29:42.38
使い分けるって、別にHttpWebResponseにだけあるメソッドやプロパティを使いたい場合は
そちらにするしかないし、そうでないならWebResponseのままでいい。
それだけ。

197:デフォルトの名無しさん
12/01/21 18:01:25.71
ウィンドウの左上にアイコンがありますけど
そこを右クリックするてメニューがでますが
そこに自分でメニューを追加したいのですが
どのようにしたらいいでしょうか?

198:デフォルトの名無しさん
12/01/21 18:03:25.22
>>197
URLリンク(cs2ch.blog123.fc2.com)

199:デフォルトの名無しさん
12/01/21 18:15:25.17
>>198
ありがとうございます
ためしてみます

200:デフォルトの名無しさん
12/01/21 22:28:35.82
警告 1 フィールド 'hoge.Form1.IsHoge' は割り当てられていますが、その値が使用されていません。
C:\Projects\hoge\hoge\Form1.cs hoge

public partial class Form1 : Form {
bool IsHoge=false;
private void btn1_Click(object sender, EventArgs e){IsHoge = true;}
使ってるのに使用されて無いって・・・この警告どうやって消すんだろうか、
使ってるぶんには不具合無いのですが気になってます。
何が原因ですか?

201:デフォルトの名無しさん
12/01/21 22:33:00.33
よく考えようよ
使ってないだろ?それ
代入しててもどこからもその値が使われてないから無意味だと言ってくれてるんだよ
privateだからフォームの外からアクセスされることもない

202:デフォルトの名無しさん
12/01/21 22:34:09.64
そのまんま、代入だけで、使ってないから。
バインディングかなんかで外に公開したいならprotectedかpublicで。

203:デフォルトの名無しさん
12/01/21 22:42:07.92
>>155-156
どうもありがとう^^
これから試してみます。

204:デフォルトの名無しさん
12/01/21 23:02:50.35
>>200
#pragma warning disable 169
bool IsHoge=false;
#pragma warning restore 169

普通は必要ないけどこういう対処も出来る

205:デフォルトの名無しさん
12/01/21 23:27:47.33
初心者にそんな場当たり的なこと教えたら駄目。臭いものにフタしただけで、問題の解決になってない。

206:200
12/01/22 01:20:56.71
なら、クリックイベント内If(IsHoge!=false){IsHoge = true;}ではどうだ?
と使っても警告消えませんでした。降参です。結局Publicにしました。
Form1のフォームの中で宣言したプライベートな変数フィールドで
Form1のClickイベントの中で使っているつもりなのですが、まだ理解できてません。

207:200
12/01/22 01:23:00.72
あ、ナニをトチ狂ったのか==だ。疲れてるわ。スマソ。

208:デフォルトの名無しさん
12/01/22 01:59:04.05
>>206
まあ、早い話、お前の頭よりコンパイラのほうが頭がよい、そういうことだ。

209:デフォルトの名無しさん
12/01/22 04:31:09.51
そんなことが理由にpublicにする、は正しく臭いものにフタな対応ですね

210:デフォルトの名無しさん
12/01/22 04:46:55.71
日本語がおk

211:デフォルトの名無しさん
12/01/22 09:21:31.89
結局使ってないんだろ
だったら消せよ

212:デフォルトの名無しさん
12/01/22 10:07:21.62
横からだけれど、判らん。使ってるじゃん。

213:デフォルトの名無しさん
12/01/22 10:53:28.93
そもそも if (真偽値) ~
の()の中で if (真偽値 == false) がおかしいと感じないのかね。
if ((真偽値 == false) == true) はどうだ?

214:デフォルトの名無しさん
12/01/22 11:03:44.58
intParseとTryParseの使い分けがわかりません
例外が出ないTryParseだけ使えばいいと思うんですけどintParseの使いどころってどういうときなんですかね

215:デフォルトの名無しさん
12/01/22 11:05:38.59
>>206
ん?それなら消えないか?

216:デフォルトの名無しさん
12/01/22 11:06:59.16
へ?

217:デフォルトの名無しさん
12/01/22 11:08:47.88
確実にIntが得られると判ってる場合。不確実ならtry

218:デフォルトの名無しさん
12/01/22 11:22:02.43
それだったら最初からTryParseで統一しておけば予期せぬ不具合にも対応できると思うんですが

219:デフォルトの名無しさん
12/01/22 11:25:09.11
例外というものの存在意義に対する問いですな

220:デフォルトの名無しさん
12/01/22 11:35:19.14
hoge.Value = Int32.Parse(x);

int a;
Int32.TryParse(x, out a);
hoge.Value = a;
とか冗長じゃん?
UIでxのバリデーション済みならxが変換できないのは例外で表現した方が自然って考えもある

221:デフォルトの名無しさん
12/01/22 11:40:20.51
VC#2010 ExpressでC#でフォームプログラムを勉強中です
Formの部品をいじくるときはForm1.csにコードを書かないと出来ないので
Form1.csのコード量が多くなってしまいます
そこで新しくクラスファイルを作って部品別にコードを別けて見やすく管理したいのですが
これはどのようにできますか?

222:デフォルトの名無しさん
12/01/22 11:41:38.47
例えば(x, y)って文字列をPointに変換する場合、まず正規表現でマッチさせるだろ?
xとyのパターンが確実にintに変換できるようなものであれば、Parseで充分になる

逆にParseに失敗するのはプログラミングミスだから例外等でブレークさせないといけないし、
そこにTryParseを使わせて追加のコードを書かせるのも馬鹿らしい、だからParseは用意されてるんだよ

>>220
UIでバリデーションしてるのならstringで渡すなよ…

223:デフォルトの名無しさん
12/01/22 11:42:41.95
>>221
メニューのプロジェクトからクラスの追加

224:デフォルトの名無しさん
12/01/22 11:43:25.12
>>221
ユーザーコントロール

225:デフォルトの名無しさん
12/01/22 11:45:16.45
>>223
クラスの追加まではできるのですが、その作ったクラスからFormの部品がいじれないのです。。。

226:デフォルトの名無しさん
12/01/22 11:46:05.75
>>221
始めたばかりのころに別掲示板でほぼ同じ質問をしたことがあったよ。w
>>224 を支持。

227:デフォルトの名無しさん
12/01/22 11:49:05.05
>>225
クラスにForm渡せばいいけどそういうコード書くとオタになぶり殺しに会う

どうせデリゲートやラムダ式使えないんだろ?

228:デフォルトの名無しさん
12/01/22 11:49:13.11
コントロールのプロパティで修飾子とかそんな項目があって、privateになっていると思うからinternalだかAssermblyだかに変えれば余所から触れる
ただあまり良い方法ではない

229:デフォルトの名無しさん
12/01/22 11:56:00.87
>>224
ソリュージョンエクスプローラーから追加でユーザーコントロールを入れたら

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FormTest16
{
public partial class FormGaibuClass1 : UserControl
{
public FormGaibuClass1()
{
InitializeComponent();
}
}
}
ってここまでできましたのでここまで報告にきました


230:デフォルトの名無しさん
12/01/22 11:58:47.94
>>226
ユーザーコントロールっていうのがいいのですね、わかりました
>>227
Form1 form1 = new Form1()みたいな書き方はいけないってことですかね?わかりました
デリゲートってなんですか?ってレベルです
ラムダ式の書き方もC#では分かりません
すみません
>>228
こういう方法もあるのですね
何故これは良くないのでしょうか?

231:デフォルトの名無しさん
12/01/22 12:07:02.30
>>230
>Form1 form1 = new Form1()みたいな書き方はいけない

じゃなくて追加したクラスにメソッドなどでthisを渡してしまうこと
pythonではよくやる

232:デフォルトの名無しさん
12/01/22 13:01:18.28
自作クラスを作ったのですが、エラーがあってインスタンスを作る前にreturnした場合にその後に呼び出す
Disposeメソッドを実行するとインスタンスオブジェクトが設定されていないというエラーが出るのですが、
インスタンスの中身を確認する方法を教えてください。
今↓のように書いてみましたがこれではダメですよね?

private System.Drawing.Bitmap bmp;


public void Dispose()
{
try
{
bmp.Dispose();
}
catch
{
}
}

233:デフォルトの名無しさん
12/01/22 13:10:03.37
if(bmp != null)
{
  bmp.Dispose();
  bmp=null;
}

234:デフォルトの名無しさん
12/01/22 13:22:41.67
出来ました。ありがとうございます。

235:デフォルトの名無しさん
12/01/22 13:52:06.83
度々すみません
ユーザーコントロールの動かし方を確認するためにフォームのtextBox1のTextを変更したいのですが
書き方がわかりません

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FormTest16
{
public partial class FormGaibuClass1 : UserControl
{
public FormGaibuClass1()
{
InitializeComponent();
}

public void textBox1Change(){
this.textBox1.Text ="変更されました";
}

}
}

236:デフォルトの名無しさん
12/01/22 14:00:49.68
>>229
Form1.csとは別に新しいクラスを作って↓みたいにすることでも分けて書くことはできますが
この書き方のthisがダメということでしょうか?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FormTest16
{
public partial class Form1 : Form
{
public void textBox1Change()
{
this.textBox1.Text = "てすt";
}
}
}

237:236
12/01/22 14:01:22.20
アンカーミス
>>231先生宛

238:デフォルトの名無しさん
12/01/22 14:03:35.61
>>236
そのまますすめてりゃ、1ヶ月後くらいにあーこのことかとわかるよたぶん

239:デフォルトの名無しさん
12/01/22 14:03:50.64
本読むなりwebの初心者向け解説を読むなりして基礎を勉強しろよ

240:デフォルトの名無しさん
12/01/22 14:08:50.97
まだ文法が把握できてないんなら、大人しく1ファイルで勉強しようよ

241:デフォルトの名無しさん
12/01/22 14:10:01.22
>>236
それは新しいクラスじゃないよ
partial 宣言して同じクラスを分割しただけ

242:デフォルトの名無しさん
12/01/22 14:19:55.56
>>238-241
少しずつ勉強していきます
ちなみにpartialでファイルを分けて各方法はお勧めできますか?


243:デフォルトの名無しさん
12/01/22 14:21:42.02
private void Test(string text, TextBox textbox){
textbox.Text = text;
}

Test("サンプル", textBox1);
のようにコントロールを渡す方法はやめたほうが良いでしょうか?

244:デフォルトの名無しさん
12/01/22 14:25:32.88
>>243
コントロールを渡すのなら最初にプライベート変数にでも入れておいて
毎回渡すのは何の意味もないよ

245:デフォルトの名無しさん
12/01/22 14:26:33.54
Form1.designer.csの中身見てご覧
partial class Form1が既に存在してるよね?

246:デフォルトの名無しさん
12/01/22 14:30:34.34
>>245
あります
public partial class Form1 : Formというのは
新しいファイルにいくらでも書けると認識しているのですが間違いですか?

247:デフォルトの名無しさん
12/01/22 14:33:36.32
>>244
textBox1からtextBox10まであるのですが
処理によって使うtextBoxを分けてますが実行するときは同じフィールドを使います
この様な場合でもプライベートに全部変数に入れるべきですか?
private TextBox textbox1 = textBox1
(略)
private TextBox textbox10 = textBox10



248:デフォルトの名無しさん
12/01/22 14:45:06.12
partialって極端な言い方をすればコードジェネレータのための機能だろう
自分で使う機会なんてほぼない
partialで分割するほど肥大化したらクラスの役割を見直した方がいい
複数人で編集する時に競合を避けることはできるかもしれない
だが、どこか不測に機能を追加されるよりはコミットログを残してマージすべきだと思う
ほとんどのSCMはファイルベースだから履歴が追いにくくなる

249:デフォルトの名無しさん
12/01/22 14:45:30.88
子フォームで値を取得し子フォームのボタンを押す

親フォームで値を受け取りそのままイベント発生

というようなことは可能でしょうか?

ググるキーワードもわからず困っています

250:デフォルトの名無しさん
12/01/22 14:46:09.27
>>247
クラス側のフィールドはフォームの入力項目の数だけ作るんだよ
あとTextBoxじゃなくてstringとかintのような実際のデータに即した型に変えて、TextChangedイベントとかで値を随時更新してやるようにする

251:デフォルトの名無しさん
12/01/22 14:47:34.14
>>247
自分なら配列に入れるかな…

252:デフォルトの名無しさん
12/01/22 14:47:41.38
>>249
C# フォーム データ 受け渡し

253:デフォルトの名無しさん
12/01/22 14:50:17.75
>>249
子フォームに適当なイベントを追加
子フォームのボタンクリックで、追加したイベントを呼び出しておく
親フォームで子フォームを呼び出す前にイベントハンドラを登録
子フォームを表示

254:デフォルトの名無しさん
12/01/22 14:57:02.09
partialで何個でもファイル作れるケドも・・・
他人が見たらForm1に書いてあるのか、別ファイルに書いてあるのかどこに書いてあるのかわからないのは勘弁
処理するクラスと表示するFormと分けた方がいい

255:デフォルトの名無しさん
12/01/22 15:22:56.85
アプリケーションが終了するときの特定の処理がしたいときがあります
このように書くらしいのですが何故Application_ApplicationExitが呼ばれたらイベントを削除しないといけないのでしょうか?
アプリケーションを終了するから消す必要はないと思うのですが何故でしょうか?
またこの終了時にイベントを発生させるのはVC#のプロパティウィンドウにはないのですがこのように手書きでコードを入れるしかないのですか?
private void Form1_Load(object sender, EventArgs e)
{
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
}

private void Application_ApplicationExit(object sender, EventArgs e)
{
MessageBox.Show("アプリケーションが終了されます。");
Application.ApplicationExit -= new EventHandler(Application_ApplicationExit);
}


256:デフォルトの名無しさん
12/01/22 15:28:39.20
>>184 は結局、lockを使わなくても問題ないということでよろしいでしょうか。

257:デフォルトの名無しさん
12/01/22 15:32:25.10
>>255
初耳だな
どこに書いてあった?

258:デフォルトの名無しさん
12/01/22 15:34:52.72
>>257
URLリンク(dobon.net)に書いてありました

259:デフォルトの名無しさん
12/01/22 15:46:35.36
>>256
このスレのPart79に32bit以下のサイズの値型と参照型の読み取りと書き込みはアトミックだと書いてあったので、多分大丈夫
多分ね

260:デフォルトの名無しさん
12/01/22 16:00:03.87
>>258
別のイベントはダメなの?
URLリンク(dobon.net)

261:デフォルトの名無しさん
12/01/22 16:08:47.24
スレリンク(poverty板:3番)

262:デフォルトの名無しさん
12/01/22 16:21:49.10
メソッドは機能ごとに分けないで
意味ごとに分けたほうがいいんじゃないの?

263:デフォルトの名無しさん
12/01/22 16:35:22.30
>>260
FormClosedというプロパティがありました
これでやってみたいと思います
ありがとうございます

264:200
12/01/22 16:36:55.58
もうとっくに忘れられているであろう>>200ですが、F6キー押したら消えました。問題解決♪

265:デフォルトの名無しさん
12/01/22 16:39:46.53
そういう問題じゃないけどなw

266:デフォルトの名無しさん
12/01/22 17:17:16.09
TcpListenerとTcpClientを使ってチャットを作りたいんですが、インターネット経由で待機してるサーバーに接続しようとすると「対象のコンピュータによって拒否されたため接続できません」と例外が投げられてしまいます。

ローカルネットワーク内では問題なく接続できたので、ルータのポートを開放してみましたが同様です。

ポート開放が上手く行ってないのか、プログラムがまずいのか、どう思われますか?



267:デフォルトの名無しさん
12/01/22 17:21:55.50
構造体は型として扱えばいいのでしょうか?

268:デフォルトの名無しさん
12/01/22 17:29:16.63
>>266
ふぁいやーうぉーるとかは?

>>267
はい?

269:デフォルトの名無しさん
12/01/22 17:42:32.39
>>266
ルータのログ出してみては。

270:デフォルトの名無しさん
12/01/22 17:43:56.67
初心者にお勧めの入門書を教えてください
10日で覚えるみたいなのじゃなくてこれ1冊勉強したらいいみたいな本をお願いします
少しでもここで質問する頻度が減らせればと考えて勉強したいんです

271:デフォルトの名無しさん
12/01/22 17:48:12.73
>>270
どれでもいいから3つ入門本買え
内容が似てないやつな

無理なら図書館で借りろ
タダだ

272:デフォルトの名無しさん
12/01/22 17:56:48.91
どこのコントロールからキーイベントが実行されたか調べる方法はありませんか?
例えばtextBox1とtextBox2があり、textBox2からKeyDownイベントが実行されたらtextBox2体ということをしりたいのですが

273:デフォルトの名無しさん
12/01/22 18:02:00.05
>>268
ファイアウォールは例外に指定して通すようにしています。一度、ファイアウォール自体を切って試しましたが同様でしたのでファイアウォールで止まってる訳ではなさそうです。

>>269
ルータのログですか?調べて一度出してみます。

ところで、TcpListenerは待機ポートを指定して、接続次第そのポートで通信しますよね?
一方、TcpClientは接続時に接続先のIPとポートを指定しますが、このClient自体のポートはOS側で勝手に割り振られるんですか?それとも指定した接続先のポート番と同じのを使うのですか?

274:デフォルトの名無しさん
12/01/22 18:03:05.48
>>272
KeyDownのsender

275:デフォルトの名無しさん
12/01/22 18:04:22.92
>>273
バインドすることもできるけど普通は自動割り振りさせる

276:デフォルトの名無しさん
12/01/22 18:16:59.64
ftpでも作ってんの?

277:デフォルトの名無しさん
12/01/22 18:18:47.17
チャットっつってんじゃん

278:デフォルトの名無しさん
12/01/22 18:20:03.04
>>273
ネットワーク構成は秘密か?インターネットを「経由」しているということは、

・自宅と友人宅/職場/レン鯖/他
・自宅に2回線持っている

あたりだろうが

てか、LANでは繋がる→プログラムの問題ではない→スレチ、だろう

279:デフォルトの名無しさん
12/01/22 18:29:18.63
ポート解放に失敗してるんだろ
ポートの意味を取り違えて

280:デフォルトの名無しさん
12/01/22 18:29:37.98
>>278
「192.168.11.3のクライアント」から「192.168.11.1のサーバー」を「ルーターのWAN側IPとポート」を指定して接続しようとしています。もしかして、
これじゃインターネット経由にならないんですか?

281:デフォルトの名無しさん
12/01/22 18:31:09.47
>>280
ヘアピンNATができるかはルータ次第。

282:デフォルトの名無しさん
12/01/22 18:37:15.14
>>281
ルーターに依るんですね。確認してみます。ローカルネットワーク内では動くということでプログラム自体には問題なさそうなので、スレチなようなので移動します。ありがとうございます!

283:デフォルトの名無しさん
12/01/22 18:40:42.54
インターネット経由にはなってないわな

284:デフォルトの名無しさん
12/01/22 19:05:16.26
ヘアピンNAT対応してるメーカーのが少ないしな。
プログラム以前に、webサーバたててアクセスして見る、
とかまやったことないのかいな。

285:デフォルトの名無しさん
12/01/22 19:11:18.04
ネスペも持ってないのにネットワークプログラミングを
するとは

286:デフォルトの名無しさん
12/01/22 19:13:05.83
>>274
sender.ToString()を確認したら取れているのは確認できました
textBox1でKeyDownが発生した場合に
イベント内でtextBox1.Text = "";みたいに書き換えたいのですが
どのように書いたらよいのでしょうか?

287:デフォルトの名無しさん
12/01/22 19:15:24.57
((TextBox)sender).Text="";とかif(sender==textBox1){textBox1.Text = "";}

288:デフォルトの名無しさん
12/01/22 19:16:27.61
>>287
ありがとうございます
senderはこういう風に使うのですね
勉強になりました

289:デフォルトの名無しさん
12/01/22 19:41:59.98

as使えよ

290:デフォルトの名無しさん
12/01/22 19:43:48.42
WPFのDLLを作っているのですが、Imageコントロールへの画像の表示方法について教えて下さい。
プロジェクト内にある画像をコードから表示しようと、
image.Source = new BitmapImage(new Uri(@"/Icon/Image.png", UriKind.Relative));
としているのですが表示されません。
別にあるユーザーコントロールのXAMLからは相対URIで表示できていますし、
同じ画像をプロパティにある絶対URIで指定すれば表示できるので、URIの書き方がおかしいのではないかと思っています。
相対URIで画像を指定し、表示するためにはどのようにすれば良いのでしょうか?

291:デフォルトの名無しさん
12/01/22 19:47:40.64
>>287
初心者相手でもちゃんとした処理教えたほうがいいんじゃないの?

292:デフォルトの名無しさん
12/01/22 19:54:52.36
>>290
URLリンク(msdn.microsoft.com)
>参照アセンブリのサブフォルダー内のリソース ファイル "pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"

>>291
文法レベルの質問だと思ったからそう答えた
処理の話ならそもそもKeyDownでやる必要性が見いだせない

293:デフォルトの名無しさん
12/01/22 20:02:01.82
>>292
表示できました、ありがとうございます。

294:デフォルトの名無しさん
12/01/22 20:47:11.93
ビルドしたEXEファイルをネイティブEXEに変換するソフトってないですか?

295:デフォルトの名無しさん
12/01/22 20:51:10.05
無い

296:デフォルトの名無しさん
12/01/22 20:51:16.08
ないよ

297:デフォルトの名無しさん
12/01/22 20:52:21.69
ビルドしたEXE

298:デフォルトの名無しさん
12/01/22 20:55:21.56
いまどき.NETくらい普通入ってる
幅広くサポートしたいなら2.0ターゲットにして.NET2.0入ってないようなクソ環境は無視で問題ない

299:デフォルトの名無しさん
12/01/22 20:55:40.13
すんごくファイルサイズが増えていいんだったらあったよな
たしかexeファイル内にフレームワーク丸抱えしちゃうように変換するやつ

300:デフォルトの名無しさん
12/01/22 20:57:08.71
win9でネイティブアプリ実行不可にしたらいいのにw

ただしIE、Offceは除く

301:デフォルトの名無しさん
12/01/22 20:58:06.89
c# asっでググっても出てこないんですがasって何ですか?

302:デフォルトの名無しさん
12/01/22 21:00:26.50
>>301
URLリンク(www.atmarkit.co.jp)

303:デフォルトの名無しさん
12/01/22 21:01:35.04
Google でも Bing でも、「C# as」でググったらちゃんと as 演算子のページ出てきたが…

英語ロケールだと、前置詞は検索キーワードから除外したりしてたような気もするけど、そのせい?

304:デフォルトの名無しさん
12/01/22 21:01:42.25
>>301
一番上に出てきた
URLリンク(www.atmarkit.co.jp)

305:デフォルトの名無しさん
12/01/22 21:01:46.08
>>301
むしろどこでググったのか教えて

306:デフォルトの名無しさん
12/01/22 21:17:02.64
"string"型をconstできないでrしょうか?

307:デフォルトの名無しさん
12/01/22 21:18:55.71
stringをconstにしても意味がないんじゃない?
stringは参照型だし

308:デフォルトの名無しさん
12/01/22 21:20:50.31
>>306
出来ないというかできても意味ない

309:デフォルトの名無しさん
12/01/22 21:20:56.03
なぜ出来ないと思ったのか
const string hoge = "hoge";

310:デフォルトの名無しさん
12/01/22 21:22:37.95
C#のconstってC++と意味が違って紛らわしいよな
C++/CLIのliteralがわかりやすい

311:デフォルトの名無しさん
12/01/22 21:23:31.86
>>307
>>308
こいつら生きてる価値あるの?

312:デフォルトの名無しさん
12/01/22 21:28:22.66
変な質問をする人はやっぱり変な切れ方するなw

313:デフォルトの名無しさん
12/01/22 21:28:51.15
"const string" 型が欲しいという意図だと考えたんだろ
それなら元々stringは変更不可だから無意味

314:デフォルトの名無しさん
12/01/22 21:30:39.33
ごめんなw
手拍子で答えてしまったw

315:デフォルトの名無しさん
12/01/22 21:37:20.96
こっちは回答者も初心者(or 初心者レベル)だからしゃーない

316:デフォルトの名無しさん
12/01/22 21:52:09.17

就活中
(p)URLリンク(livedoor.blogimg.jp)

就職後
(p)URLリンク(livedoor.blogimg.jp)

街の人(やらせ業者)募集中です



317:デフォルトの名無しさん
12/01/22 21:57:15.66
listViewで listView1.Items[0].Selected = true;
とやってもlistViewの先頭にフォーカスが当らないので
URLリンク(d.hatena.ne.jp)をみながらlistView用にコードを書いてるのですが
イベントの部分がどうしてもかけません
手直しをお願いできませんか

void listView1_Loaded(object sender, ListViewItemSelectionChangedEventArgs e)
{
if (listView1.SelectedIndices[0] >= 0)
{
ListViewItem item = (ListViewItem)(listView1.Items[listView1.SelectedIndices[0]]);
item.Focused = true;
}
//イベントハンドラを削除
listView1. -= new ListViewItemSelectionChangedEventHandler(listView1_Loaded); //←ここがわかりません
}


318:デフォルトの名無しさん
12/01/22 22:05:14.98
Loadedでそういうのはダメかも

319:デフォルトの名無しさん
12/01/22 22:10:56.45
>>317
元のサイトをもっとよく見ろよ

320:デフォルトの名無しさん
12/01/22 22:11:16.18
>>317
本当は
listView1.Items[0].Selected = true;
listView1.focus()でアイテムが選択状態になってフォーカスが当っているのがいいんですが
別の方法ってありませんか?

321:デフォルトの名無しさん
12/01/22 22:16:57.85
それWPFのサンプルじゃん
WPFの開発してるの?

322:デフォルトの名無しさん
12/01/22 22:24:09.89
>>321
移植したらいいのかなと思ってまして すいません

323:デフォルトの名無しさん
12/01/22 22:24:46.64
>>320
何だよまたひっかけ問題かよ

listviewの SelectionModeをSingleに…

324:デフォルトの名無しさん
12/01/22 22:26:26.91
すいませんFocusedっていうのを使ったらフォーカスが当りました

325:デフォルトの名無しさん
12/01/22 22:31:31.14
>>323
こういうのもあるんですね
ありがとうです

326:デフォルトの名無しさん
12/01/22 22:35:30.30
winforms item.Focused=true;
WPF SelectionMode=Single;

結局さらされたブログの人が恥ずかしいだけになった

327:デフォルトの名無しさん
12/01/22 22:40:45.59
沢山の短いWAVファイルをあらかじめ設定したタイミングでズレないように再生するにはどういう手順が良いですか?

328:デフォルトの名無しさん
12/01/22 22:45:44.36
全部ミックスした音源を再生する

329:デフォルトの名無しさん
12/01/22 22:46:54.00
そんなトンチみたいな回答は

330:デフォルトの名無しさん
12/01/22 22:50:03.83
ぶっちゃけ>>328は正論だよ
ただし単一WAVの合成はプロセス内でやらないと要件にマッチしないけど

331:デフォルトの名無しさん
12/01/22 22:54:59.92
ストップウォッチが作りたいのですが
c#で0.01秒ごとに処理(ラベルの書き換え程度ですが)を行い、
ボタンを押したら正確に止められますか?

332:デフォルトの名無しさん
12/01/22 22:56:59.00
>>331
YO!久しぶり!メトロノームの調子はDO-DAY

333:デフォルトの名無しさん
12/01/22 23:00:16.91
ストップウォッチっていうクラスあるよね

334:デフォルトの名無しさん
12/01/22 23:10:56.01
まぁ無理だと思っていいよ

335:デフォルトの名無しさん
12/01/22 23:12:57.52
System.IO.FileのCopy,Move,Deleteを行った場合のctrl+zのようなやり直しはどう実装したらよいのでしょうか?

336:デフォルトの名無しさん
12/01/22 23:13:07.03
関係ないけどメトロノーム重りと針と円弧の座標の計算がめんどくさくて途中でやめたわ

337:デフォルトの名無しさん
12/01/22 23:19:06.46
>>335
操作を覚えておけばいいでしょ

操作:MOVE ~を~へ移動した
操作:COPY ~を~へコピーした

って
Deleteはどこかに取っておかないと駄目だけどね
面倒くさいならShell使った方がいい

338:デフォルトの名無しさん
12/01/22 23:20:25.68
テキストボックスにファイルを保存するフォルダを書くこととしてて、でも
うっかり指定してなかった場合を想定して、マイドキュメントを指定してやろうとしてます。
if (textSaveFolder.Text == string.Empty) {
textSaveFolder.Text=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); }

if文の条件ってこっちのほうがいいかなぁ
if (string.IsNullOrEmpty(textSaveFolder.Text))

センスの問題?

339:デフォルトの名無しさん
12/01/22 23:20:46.21
この辺ね
URLリンク(msdn.microsoft.com)

定義はP/Invoke探せばあるでしょう

340:デフォルトの名無しさん
12/01/22 23:22:01.99
俺ならうっかり指定してなければフォルダ選択させるかなその場で

341:デフォルトの名無しさん
12/01/22 23:24:52.34
>>337
>>339
よく読んでやってみます

342:デフォルトの名無しさん
12/01/22 23:46:31.95
>>331
100fpsとか高望みにも程がある

>>338
未入力チェックならString.IsNullOrWhiteSpace

>>340
毎回入力することを想定していなければ、入力欄の近くに

相対パスならマイドキュメント以下(空欄はマイドキュメント)

のように明記するのはあり

343:デフォルトの名無しさん
12/01/22 23:56:14.16
>>307-308

ビットにできないかと思って。
記述的にできないみたいで残念。

>>309
それじゃ意味ねーだろwww

344:デフォルトの名無しさん
12/01/22 23:57:50.32
nullとemptyと どうちがうんだっけ?

345:デフォルトの名無しさん
12/01/23 00:18:52.35
nullは文字列データが存在しない
emptyは長さ0の文字列

ちなみにstring.Emptyはリフレクションで再代入ができるので(Mono環境だとできないが)
空文字列かどうかを調べるのにstring.Emptyとの比較は微妙
string.Emptyをいじることはないと思うけどな

346:デフォルトの名無しさん
12/01/23 00:22:59.64
なんでリフレクションでmscorlibを弄られた場合の耐性なんて論じる必要があるんだ?
そんなことを言いだしたら他のフィールドも全部信用できないだろ

347:デフォルトの名無しさん
12/01/23 00:24:29.39
""
" "
使ってると、化石扱いされるの?

348:デフォルトの名無しさん
12/01/23 00:53:33.57
の?
まで読んだ。

349:デフォルトの名無しさん
12/01/23 00:54:06.38
の?
まで読んだ。

350:デフォルトの名無しさん
12/01/23 00:55:00.93
全部読んでるんじゃねぇかw

351:デフォルトの名無しさん
12/01/23 01:16:44.04
>>342
ラベルのText書き換えるだけなら100/sくらい全然余裕だろ
どうせ表示できないけど

352:デフォルトの名無しさん
12/01/23 11:35:34.27
お世話になります。

作成したアプリケーションに関連付けしたファイルをダブルクリックすると、作成アプリが起動しファイルを読み込むようにしたのですが、現在このアプリは二重起動を禁止しています。

このアプリが起動中に、別の関連付けファイルをダブルクリックした時に、既起動中のアプリで新たなファイルを開きたいのですが、どのようにするのでしょうか?

二重起動禁止を解除するともちろん複数のアプリが起動してしまうのですが、そうではなく、既に起動中のアプリに読み込むことができません。

ご教授願えますでしょうか?

よろしくお願いいたします。

353:デフォルトの名無しさん
12/01/23 11:46:46.20
ご教授~

354:デフォルトの名無しさん
12/01/23 11:51:00.09
実行ファイル名やウィンドウタイトル等から既に起動したプロセスのウィンドウを特定してプロセス間通信
この場合開いたファイルパスだけ送りゃいいだろ

355:デフォルトの名無しさん
12/01/23 11:51:09.81
二重起動のチェックをしてるところで読み込めばいいだけでしょ

356:デフォルトの名無しさん
12/01/23 11:59:39.36
は?

357:デフォルトの名無しさん
12/01/23 12:01:33.21
ああわかった。OSの関連付けで起動プログラムが指定されるから
二重起動をさせずに2つめの関連付けされたファイルを起動済みの
プログラムに渡すにはどうすればいいか?って意味ね。

358:デフォルトの名無しさん
12/01/23 12:08:51.80
じゃあソケット通信で


359:デフォルトの名無しさん
12/01/23 12:11:40.32
プロセス間通信が必要だよ
ここでさらっとコード貼ったりできる程度じゃない

360:デフォルトの名無しさん
12/01/23 12:17:57.33
面倒なのでMicrosoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase使う

361:デフォルトの名無しさん
12/01/23 12:19:14.97
sendmessageで送って受信側に受け取りのイベントを書けばいいだけじゃないの?

362:デフォルトの名無しさん
12/01/23 12:21:04.32
ちょっと上の方にWCFのサンプルもあったし、全然難しくないよ

363:デフォルトの名無しさん
12/01/23 12:28:48.58
プログラムを2つに分ける。

1.関連付けで起動されるアプリケーションスタブ
2.アプリケーション本体

アプリケーション本体には、二重起動チェックはそのまま入れておく。
関連付けで起動されるスタブは、アプリ本体が起動されていなければ
起動して引数にファイル名を渡す。
アプリ本体がすでに起動されていればプロセス間通信でファイル名を
渡す。プロセス間通信というかスタブからのメッセージPOSTを受ける
だけでいい気もするけど。

364:デフォルトの名無しさん
12/01/23 12:35:38.81
ファイルで渡せばいいよ

365:デフォルトの名無しさん
12/01/23 12:48:47.27
秀丸のマクロから呼び出せるDLLはC#では作れないとご助言を受けたのですが
C#でもCみたいにexternする裏技みたいなのは無いのでしょうか?

366:デフォルトの名無しさん
12/01/23 12:50:06.13
無いから無理だと言ってんだろカス

367:デフォルトの名無しさん
12/01/23 12:50:51.40
プロセス間通信が理解できてるなら聞いてくるような内容じゃないだろ
お前には無理でFA

368:デフォルトの名無しさん
12/01/23 12:53:39.94
WCFで書いた
URLリンク(ideone.com)

369:デフォルトの名無しさん
12/01/23 13:14:14.74
treeViewで隠し属性を表示させない方法はないでしょうか?

370:デフォルトの名無しさん
12/01/23 13:17:21.05
隠し属性ってなんだよハゲ

371:デフォルトの名無しさん
12/01/23 13:18:57.19
>>369
もしかすると「TreeViewでフォルダーツリー作っているんだが、hidden属性のフォルダー無視する方法ない?」って質問かな?

372:デフォルトの名無しさん
12/01/23 13:19:20.05
はげてないよ

373:デフォルトの名無しさん
12/01/23 13:20:52.45
ふっさふさだよ

374:デフォルトの名無しさん
12/01/23 13:22:15.42
>>371
ですです

375:デフォルトの名無しさん
12/01/23 13:26:43.72
>>374
hidden属性のフォルダーかチェックしてhiddennなら追加しない

376:デフォルトの名無しさん
12/01/23 13:31:25.40
>>368
varで書くのはいいけどぱっと見で重要なオブジェクトかどうかわかりづらい
基本構造について理解が妨げられるような感じ

オブジェクト平等主義なんだろうけど定数の様な物や
stringはvarじゃないほうがいいような気がするなあ

377:デフォルトの名無しさん
12/01/23 13:36:07.31
本題でもねえところに一々突っ込んでくんなよ

378:デフォルトの名無しさん
12/01/23 13:38:22.10
触るな

379:デフォルトの名無しさん
12/01/23 13:43:12.62
そうするよ

380:デフォルトの名無しさん
12/01/23 13:43:59.85
language:がC++ (gcc-4.3.4)だとかどうでもいい

381:デフォルトの名無しさん
12/01/23 14:08:32.06
>>365
C# で書いたDLLをCOMに見せかける機能はあるので、
C++ で一段階ラッパー書けば使えるとは思う。
結構大変(情報全然出てこない)と思うけど。

382:デフォルトの名無しさん
12/01/23 14:15:35.43
ツールボックスの中にあるフォルダダイアログって表示したままフォームの一部に貼り付けておくことって出来ないですか?

383:デフォルトの名無しさん
12/01/23 14:26:55.82
LoadLibraryで.netのdllを呼んでくれるラッパーおれも欲しいで

384:デフォルトの名無しさん
12/01/23 14:59:02.80
>>381
まじすか
これ需要あるますので有料でもいいのでほしいですよ

385:デフォルトの名無しさん
12/01/23 15:19:37.41
ラッパーほしいとか有料でも欲しいと言ってる人は誤解している

386:デフォルトの名無しさん
12/01/23 15:20:15.01
なぜよ?

387:デフォルトの名無しさん
12/01/23 15:26:58.33
C++/CLIで作ればいいだけじゃないか

388:デフォルトの名無しさん
12/01/23 15:34:35.57
ネイティブDllでは
CLIいれられないよ

389:デフォルトの名無しさん
12/01/23 15:36:27.02
DllImportじゃダメなん?

390:デフォルトの名無しさん
12/01/23 15:39:31.33
そのimportする対象のDLLが作れないってことだよ

391:デフォルトの名無しさん
12/01/23 15:52:32.08
本当クソだなC#

392:デフォルトの名無しさん
12/01/23 15:56:26.14
C++/CLIって何のためにあるんだw

393:デフォルトの名無しさん
12/01/23 16:16:22.16
C++/CLIはいらない子、害悪

394:デフォルトの名無しさん
12/01/23 16:35:18.56
listviewにヘッダーが一つだけあります
ヘッダーの列の幅を100%に自動調節したいので
URLリンク(dobon.net)をみながら
listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
と書いてみたのですがサイズが変わりません
どうかご教示お願いします

395:デフォルトの名無しさん
12/01/23 16:44:15.06
>>394
変わるけどな?
先頭大文字なのが気になるけど、、、ちゃんと呼んでる?

396:デフォルトの名無しさん
12/01/23 16:44:49.22
大文字なのはリンク先だった、失礼

397:デフォルトの名無しさん
12/01/23 16:50:07.58
縦スクロールバーの処理入れると割と面倒だったな

398:デフォルトの名無しさん
12/01/23 17:06:49.15
>>395
あれ?おかしいな?何でだろう
ヘッダーにwidth = -2にってやると100%で表示されるんですが
これだと画面の大きさや項目を変更したときには反映されないので困りました
ちなみに.Net4.0なんですけど項目は全部半角英数でaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaを10行挿入しました
ヘッダーめいはabcdeって入れてます

399:デフォルトの名無しさん
12/01/23 17:08:12.32
>>389
やりたいことはその逆だからダメだろ。

>>392
ネイティブなものを .NET から使うためだよ。
今はその逆の話で、それは C++/CLI でやることじゃない。

400:デフォルトの名無しさん
12/01/23 17:09:47.19
>>384
URLリンク(msdn.microsoft.com)
こんなの。

別に無料版の VC#/VC++ でもできるんじゃないかな。
自分でやったことないからこれ以上はわかんない。

401:デフォルトの名無しさん
12/01/23 17:10:11.52
まあ普通のDLL作ってそれがExeをキックすればいいな。

402:デフォルトの名無しさん
12/01/23 17:11:14.51
>>400
ありがとう
もしよろしければこのリンク見てアフィリエイトふみまくるので誰か作ってください

403:デフォルトの名無しさん
12/01/23 17:15:19.68
>誰か作ってください

まだ意味が解ってないみたいだな…

404:デフォルトの名無しさん
12/01/23 17:23:39.62
c#で作った独自プログラムをCOM化してやって
それを使った中間ネイティブDLL作るんだよ

間に何かあって勝手にネイティブ変換してくれるもんじゃない
自分で作るもんだぞ

405:デフォルトの名無しさん
12/01/23 17:33:07.33
つまり自分で作ったdllの中でそういう作業をしないといけないって事すか

406:デフォルトの名無しさん
12/01/23 17:34:44.84
秀丸マクロでDLLを呼び出したらHello Worldを返すだけの処理なんですがサンプルお願いできませんか?

407:デフォルトの名無しさん
12/01/23 17:39:58.05
秀丸マクロのつくり方のページをまじめに読んでいたら
そういうお願いは無駄だと感じるはずだけどなあ

408:デフォルトの名無しさん
12/01/23 17:52:33.58
何かあったら金をちらつかせたり
他人に頼みごとをして解決する人は嫌いです

409:デフォルトの名無しさん
12/01/23 17:57:59.95
ksなスレですねここは

410:デフォルトの名無しさん
12/01/23 18:35:17.92
C++/CLIは.NETの上でC++を使いたい人用なんじゃないの。
ただのC++より安全だとは思うけどC++使うならネイティブの
ほうがいい。

411:デフォルトの名無しさん
12/01/23 18:40:02.57
ごちゃごちゃ抜かさずCかC++覚えろ

412:デフォルトの名無しさん
12/01/23 18:59:36.52
>>410
一番の用途はネイティブコードを .NET から参照する用よ。
.NET 使いたいだけなら素直に C# に移る方がよっぽど楽。

413:デフォルトの名無しさん
12/01/23 19:01:07.24
つうかよ秀丸でC#のDLLを呼べるようにするのが一番いいよな

414:デフォルトの名無しさん
12/01/23 19:05:28.61
もういいよ
まだ4000YENの話を続けなきゃいけないのか?

415:デフォルトの名無しさん
12/01/23 19:08:42.01
MS製品ですら未だVB Scriptだからねぇ。
昔からあるものを、今のものに対応させるって大変。

416:デフォルトの名無しさん
12/01/23 19:14:06.86
4000YENとか、金額の問題じゃないだよ

417:デフォルトの名無しさん
12/01/23 19:18:31.63
どうしても金払いたいなら
日当三万払ってプロに頼めよ

418:デフォルトの名無しさん
12/01/23 19:26:45.99
string[] a = {"a","b","c","d","e"};
という配列があって
インデックスAを指定して、指定した位置Bに移動する方法を伝授してください
例えばインデックス3を1の位置に移すなら
{"a","d","b","c","e"};
という結果にしたいのです

419:デフォルトの名無しさん
12/01/23 19:35:56.58
string n = a[2];
a[3] = a[1];
a[1] = n;

これを書きたくないと言うならC#向いてないから今すぐ止めてくれ

420:デフォルトの名無しさん
12/01/23 19:38:18.56
よく見ると処理内容が違ってるだろw

list<string>使えと言う回答はダメですかw

421:デフォルトの名無しさん
12/01/23 19:39:35.77
>>419
止めるべきはお前だったな

ListならInsertで済むのにな
Listはメモリガーとか言う人かね

422:デフォルトの名無しさん
12/01/23 19:47:46.75
後はまあ地道に、後ろにずらして行くしかないね
string b=a[3]
for (int i=2;i>=1;i++) {
a[i+1]=a[i];
}
a[1]=b;

423:デフォルトの名無しさん
12/01/23 19:52:04.57
string[] a = {"a","b","c","d","e"};

a = new string[]{"a","d","b","c","e"};

424:デフォルトの名無しさん
12/01/23 19:56:00.16
天才が出たぞ

425:デフォルトの名無しさん
12/01/23 19:56:46.40
一時退避変数にインデックスの場所の値を入れておく
そこから後ろをArray.Copyで1個ずつ前にコピー
移動先を含めてArray.Copyで1個ずつ後ろにコピー
移動先に一時退避変数を代入

これでいいのか?

426:デフォルトの名無しさん
12/01/23 20:08:49.31
余りにも身も蓋もないからちょっと改良

string[] a = {"a","b","c","d","e"};
a = new string[]{a[0],a[3],a[1],a[2],a[4]};

427:デフォルトの名無しさん
12/01/23 20:29:27.09
リングバッファーではないよね。

428:デフォルトの名無しさん
12/01/23 20:58:54.10
64バイトの中々ダブらない文字列を作るにはどうやれば良いですか?

429:デフォルトの名無しさん
12/01/23 21:04:30.13
GUIDのテキスト表記からハイフン抜いて2つつなげる
っていうか64バイトもいらんだろ

430:デフォルトの名無しさん
12/01/23 21:05:09.40
00000000
00000001
00000002
という感じで使える文字の範囲で順番に作ればダブらないよ

431:デフォルトの名無しさん
12/01/23 21:06:24.15
GUID使うなら4つ必要じゃん

432:デフォルトの名無しさん
12/01/23 21:07:12.53
guidって128ビットだった気がするんですが....

433:デフォルトの名無しさん
12/01/23 21:09:25.20
33~126の乱数をcharに変換して64個並べる

434:デフォルトの名無しさん
12/01/23 21:10:21.84
>>423
wwwwwwwww

435:429
12/01/23 21:10:36.50
2進数のテキスト表記で32文字x2ってこと

436:429
12/01/23 21:11:20.84
すまん16進数の間違い

437:デフォルトの名無しさん
12/01/23 21:12:52.14
>>431
Guid自体は128bitだけど文字だと32文字→とりあえず32バイト→2つ必要
ってことなんじゃね?

438:デフォルトの名無しさん
12/01/23 21:13:06.89
>>419
何だそのしょぼコードは!
おまけに結果が変だろ!
dがないだろ!
{"a","c","c","b","e"};

439:デフォルトの名無しさん
12/01/23 21:26:35.48
guidを調べて見ます。どうもありがと

440:デフォルトの名無しさん
12/01/23 21:35:35.57
いやいやいや
どういう仕様なのか分からないからあれだが

441:デフォルトの名無しさん
12/01/23 21:37:32.99
普通にGUIDをそのまま使えよ
64バイトもいらん

442:デフォルトの名無しさん
12/01/23 21:50:29.96
64バイト使って256ビット分の情報量ってすごくもったいない感じだね

443:デフォルトの名無しさん
12/01/23 21:52:59.68
んなこと言い出したらテキスト中の数値は全部バイナリにしないといけなくなるぞ

444:デフォルトの名無しさん
12/01/23 21:56:51.39
テキスト中の数値はテキストとして価値があるだろ
今回UUIDを文字列にする価値があるのかは知らんが


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch