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

1デフォルトの名無しさん
このスレッドは
「どんなにくだらない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デフォルトの名無しさん:2012/01/17(火) 03:10:19.04
■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
http://ideone.com/
http://pastebin.com/
コードを貼り付けてrun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます
3デフォルトの名無しさん:2012/01/17(火) 03:34:25.33
>>1
4デフォルトの名無しさん:2012/01/17(火) 17:02:22.90
>>1
乙であります
5デフォルトの名無しさん:2012/01/17(火) 18:41:24.55
やっと構造体の使い方がわかった。みなさんありがとう。
6デフォルトの名無しさん:2012/01/17(火) 19:32:57.79
FileSystemWatcher で 監視先をローカルの "c:\Test" に設定したところ、
ファイルの変更検知できるのは確認できました。

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

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

どうすれば、別マシン(ファイルサーバー)にある
ファイルの変更を検知できるようになるのでしょうか?
7デフォルトの名無しさん:2012/01/17(火) 20:02:06.55
>FileSystemWatcher.InternalBufferSize プロパティ
>バッファ サイズを大きくすることで、ファイル システム変更イベントの見落としを予防できます

http://msdn.microsoft.com/ja-jp/library/system.io.filesystemwatcher.internalbuffersize%28v=vs.80%29.aspx

ためしに大きくしてみたら
8デフォルトの名無しさん:2012/01/17(火) 20:05:48.01
ついでに

>イベントを見落とさないために、次のガイドラインに従ってください。
>*InternalBufferSize プロパティを使用してバッファ サイズを大きくすることで、
>ファイル システム変更イベントの見落としを予防できます。
>*ロング ファイル名を使ってウォッチすることは避けます。短い名前に変更することを検討してください。
>*イベントの処理コードをできるだけ短くします。
9デフォルトの名無しさん:2012/01/17(火) 20:24:35.15
最近C# 製のツールをよく見かけるようになったな
10デフォルトの名無しさん:2012/01/17(火) 20:27:10.41
Phalanger 3.0 (2012年1月) をリリースしました。
http://awabi.2ch.net/test/read.cgi/poverty/1326781620/
11デフォルトの名無しさん:2012/01/17(火) 20:31:28.88
??演算子ってnull「結合」?「合体」??1万年と2千年前から???
12デフォルトの名無しさん:2012/01/17(火) 20:42:24.44
>?? 演算子は、左側のオペランドが null 値でない場合にはこのオペランドを返し、
>null 値である場合には右側のオペランドを返します。

http://msdn.microsoft.com/ja-jp/library/ms173224%28v=vs.80%29.aspx
13デフォルトの名無しさん:2012/01/17(火) 21:19:18.58
>>7 >>8
バッファサイズ相当大きくしても変化なしです。
ネットワーク越しでも普通にイベント発生してるんですかね?
14デフォルトの名無しさん:2012/01/17(火) 21:47:01.03
>ローカル コンピューター、ネットワーク ドライブ、またはリモート コンピューターのファイルをウォッチするコンポーネントを作成できます。

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

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

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

らしいけど「64Kb以下かつ4Kbの倍数」になってる?
16デフォルトの名無しさん:2012/01/17(火) 22:11:24.76
Windows7 32bitの共有フォルダを
Windows7 64bitのZ:\に割り当てて監視したけど検知できるなぁ
InternalBufferSizeはデフォのまま。
17デフォルトの名無しさん:2012/01/17(火) 22:47:40.55
>>12
VS2010版にはnull合体演算子って書いてあるがな…
18デフォルトの名無しさん:2012/01/17(火) 22:50:46.66
C#を始めて間もないので、クソみたいな質問ですが、答えてくれると嬉しいです。

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

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

できればサンプルコードが載ってるページとかあると嬉しいです。
19デフォルトの名無しさん:2012/01/17(火) 22:54:26.32
そういうのは直接オブジェクトを送ったりしないで分離しちゃった方が複雑にならないと思う
設定を持つクラスをシングルトンで共有するとか、いったんファイルに書きだして
それを改めて読み込むとか
20デフォルトの名無しさん:2012/01/17(火) 22:57:41.77
public static class Setting {
. publid static Data[] Data;
}
みたいなの作ればいい
21デフォルトの名無しさん:2012/01/17(火) 23:01:49.37
モーダルダイアログならForm2.GetResultメソッドでも書いてみれば
そこで配列化して返せばいいでしょ
22デフォルトの名無しさん:2012/01/17(火) 23:02:07.45
・設定値だけを保持するクラスを用意する
・Form1は設定クラスにデータバインド
・Form2を作る時に設定クラスのインスタンスを渡す
・Form2はインスタンスをコピーして、そちらを変更する
・Form2でOKや適用が押された場合、設定値を最初に渡されたForm1の設定インスタンスに反映する

て感じでINotifyCollectionChangedを使うといいよ(ニッコリ
23デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/17(火) 23:24:21.49
>>19-23
うおお、短時間でこんなにw
本当にありがとうございます。
皆様レスを頼りになんとか頑張ってみます。
25デフォルトの名無しさん:2012/01/17(火) 23:31:33.95
そのものズバリのチュートリアル
チュートリアル : オブジェクトによるダイアログ ボックス情報の一括取得
http://msdn.microsoft.com/ja-jp/library/cakx2hdw.aspx
躓いたら、また質問するがよろしアル。
26デフォルトの名無しさん:2012/01/17(火) 23:39:47.41
>>15 あ、64KB超えてたかもしれません。
ひょっとすると、送信できるサイズの上限超えてたから、
イベントが送信されてなかったのかな?

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

いまは実行できる環境にいないので、とりあえず明日試してみます。
27デフォルトの名無しさん:2012/01/17(火) 23:45:27.82
試せてないが、ひょっとすると解決したかも。
http://social.msdn.microsoft.com/Forums/ja/netfxgeneralja/thread/3674b121-0be5-432e-a5c4-9e64f9565e49
おそらくバッファサイズが原因の可能性が高いです。

これで、今日はゆっくりと眠れそうです。
みなさん、本当にありがとうございました。
28デフォルトの名無しさん:2012/01/18(水) 10:00:02.32
>>25
いつも思うけど全く読みたくなくなるチュートリアルは誰のためにあるんだろ
MSは現状把握してるのか
29デフォルトの名無しさん:2012/01/18(水) 10:04:43.61
MSの中の人は賢い奴ばかりだから俺らの知的レベルなんてわからんよ。
30デフォルトの名無しさん:2012/01/18(水) 12:30:00.73
getdirectoriesでフォルダを列挙する際にアクセス拒否のフォルダがあった場合
そのフォルダを無視して作業を続行するにはどうすればよいでしょうか?

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

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

このような場合どうすればいいんでしょうか
31デフォルトの名無しさん:2012/01/18(水) 12:50:40.35
2010Express を使ってるんだけど、これって条件付きブレークポイントは使えないんでしたっけ?
前のバージョンだとブレークポイントを示す赤い玉の上で右クリックで条件を設定するウィンドウが出たような気が。
32デフォルトの名無しさん:2012/01/18(水) 13:28:49.01
C++だったんじゃね?
33デフォルトの名無しさん:2012/01/18(水) 13:57:38.49
>>30
そこまで操作するならDirectoryInfoクラス使うべきだよ
そっち使って色々試してみたらいい
34デフォルトの名無しさん:2012/01/18(水) 14:31:55.79
http://pastebin.com/7jQBN7ei
このサンプルは反変性の例として妥当なんでしょうか。
自分の頭では、派生クラスを基本クラス型に渡しているので、共変性のように思えます。

引用元はここです。
http://code.msdn.microsoft.com/windowsdesktop/11-covariance-contravarianc-ef078691#02
35デフォルトの名無しさん:2012/01/18(水) 15:39:10.70
C#ではenumがintじゃない。
では普通は何を使うものなのでしょう?
36デフォルトの名無しさん:2012/01/18(水) 15:42:48.01
enumはenumだよ
37デフォルトの名無しさん:2012/01/18(水) 16:24:40.04
>>35
独立した型。
内部ではintとして扱かわれていることが多いけど
38デフォルトの名無しさん:2012/01/18(水) 16:32:58.50
なんでそれをここで聞くんだろう。
39デフォルトの名無しさん:2012/01/18(水) 17:12:00.12
>>35
名前付き識別子。
enumを定義するとクラス同様に型として認識されるので、内部の扱いがintであっても別物になる。
でも、bit演算に応用したりもできる。
40デフォルトの名無しさん:2012/01/18(水) 17:17:08.54
しかしEnum自身はクラスなんだよな
言語仕様的に本当にそれで良いのか?
41デフォルトの名無しさん:2012/01/18(水) 17:49:46.70
CIL的に、プリミティブな数値、配列、列挙型は特別扱いされてるからなぁ。
C# 以前の問題。
42デフォルトの名無しさん:2012/01/18(水) 17:50:14.00
Enumはクラスかもしれないが
値は定数だろ
43デフォルトの名無しさん:2012/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も配列なので、少し混乱しています。(構造体の配列のポインタのポインタ 構造体の中にも配列やポインタ有り)

ttp://oshiete.goo.ne.jp/qa/2119623.html
を参考にしようとしてみましたが、hoge* testと書くとマネージ型のアドレスの取得は出来ませんと出てしまいます。

よろしくお願いします。
44デフォルトの名無しさん:2012/01/18(水) 18:22:21.31
配列に入れて配列をrefで渡せばいいんじゃないの
ret hage(ref hoge[] test);
45デフォルトの名無しさん:2012/01/18(水) 18:32:24.61
それもやってみたのですがC#で、
hoge[] test = new hoge[10];と宣言し
ret = hage(ref hoge test);
とやると、ここでtry~catchすらすっとばして関数を無理矢理終了させてしまいます。(エラー表示は一切無し)
46デフォルトの名無しさん:2012/01/18(水) 18:46:28.26
そのtestって出力なのか?入力なのか?両方か?
47デフォルトの名無しさん:2012/01/18(水) 19:00:37.77
出力です。
outでもやってみましたが、結果は同じで先頭だけnullから数値に変わってました。
48デフォルトの名無しさん:2012/01/18(水) 19:01:10.84
[*hoge, *hoge, *hoge, *hoge]
C++が要求しているもの

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

unsafeかGCHandleでIntPtrを配列に入れてしまうのが手っ取り早いんではないか
49デフォルトの名無しさん:2012/01/18(水) 19:04:50.00
hogeがクラスならhage(hoge[] test)で問題ない気がするが
構造体使ってるのは何か意味があるか?
50デフォルトの名無しさん:2012/01/18(水) 19:07:17.08
意味とか考えちゃ駄目だ
51デフォルトの名無しさん:2012/01/18(水) 19:18:43.52
StructLayoutは構造体にしか使えないと勘違いしていた時期が私にはあった。
5243:2012/01/18(水) 19:20:08.52
hogeが画像データだからです。
構造体の中のポインタが画素値で、整数値がパラメータです。
画像を複数枚扱うので、hogeも配列になっています。

C++の要求がhoge** testなので、枚数分ループしていますが
unsafe hoge* testを行うとマネージ型のアドレスは取得出来ませんと表示され、
hoge[]test と書くとtryすら無視して関数を終了してしまうのが現在の状態です。
53デフォルトの名無しさん:2012/01/18(水) 19:31:44.56
画像データだから構造体ってのはちょっと理屈が通ってない気がする
54デフォルトの名無しさん:2012/01/18(水) 19:31:55.13
フォームにMenuStripをおきました
そしたら「ここへ入力」ってところがあったのでファイルって書きました
入力した所をクリックするとサブメニューが出てきたのでそこに終了って書きました
これで終了を押すとプログラムを終了するだけのプログラムを作ろうと思ってます
そこで終了をダブルクリックしたらForm1.csに以下のように
private void 終了CToolStripMenuItem_Click(object sender, EventArgs e)
{

}
ってコードの中に日本語がまじってしまうんですが(終了CToolStripMenuItem_Clickの部分)
これって問題はないのですか?
メニューを作るときってこういうものとして思えばいいですか?
55デフォルトの名無しさん:2012/01/18(水) 19:35:24.35
文法的な問題はない
やってる人がいるかって言われると100人に1人よりは少ないと思う
5643:2012/01/18(水) 19:41:37.44
すいません、確かに画像データだからと言って構造体である必要はないですね。

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デフォルトの名無しさん:2012/01/18(水) 19:50:17.85
場当たり的にやってると1ヶ月かかるぞ

ret = hage(IntPtr[] test);

まずこれでどうぞ
IntPtrの配列にhogeを1個1個収めたまえ
58デフォルトの名無しさん:2012/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でいいよ
5958:2012/01/18(水) 19:55:44.48
すまん>>58は勘違い
なんか意味ないことやってるな
60デフォルトの名無しさん:2012/01/18(水) 20:04:55.46
俺の知人のタマキンが下痢で
今日も部屋に篭ってAVで射精してる
61デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/18(水) 20:40:39.64
そのうち画像は取れたんですが何度か画像取ってるうちに
重くなってハングアップしてしまいます
なぜでしょうかという質問が来るのではないか?
63デフォルトの名無しさん:2012/01/18(水) 21:05:54.32
>>28
昔からヘルプの使いやすさはボーランド(エンバカデロに開発部門売却前のね)
情報量はMSってのは言われてたな
64デフォルトの名無しさん:2012/01/18(水) 21:26:44.59
summaryの書き方を教えてください
例えば以下のような場合はなんて書きますか?

private void test(string str)
{
this.abc = str + "@@@@@";
}
65デフォルトの名無しさん:2012/01/18(水) 21:28:10.12
/// <summary>
/// 知らねーよ
/// </summary>
66デフォルトの名無しさん:2012/01/18(水) 21:31:08.15
初心者なので試しに空のプロジェクトから作っているのですが、
フォームアプリの時に自動でできるprogram.csという項目は後から追加するにはどうやればいいですか?
67デフォルトの名無しさん:2012/01/18(水) 21:35:19.65
>>64
それじゃ「テスト用」以上の何も書けない。
68デフォルトの名無しさん:2012/01/18(水) 21:38:11.45
ファイラーをつくりたいのですが
名前でソート、更新日時でソートなどをする場合はlistboxとかlistviewとかありますが何をつかうのでしょうか?
69デフォルトの名無しさん:2012/01/18(水) 21:50:15.78
Datagrid
70デフォルトの名無しさん:2012/01/18(水) 22:25:51.57


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

ちなみに ハリーポッターと賢者の石の 「石」とはテレビのこと(著者が執筆当時)
 ダイオード→半導体→シリコン→石
 賢者とはテレビを見る人間でも番組を作る人間でもなく、テレビを操る人間。
7143:2012/01/18(水) 22:42:23.27
>>57
シンプルなのが一番ですよね。
ちょっと試してみます。

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

>>62
とりあえず、メモリリークだけは無いよう気をつけます。
72デフォルトの名無しさん:2012/01/18(水) 23:28:40.92
指定したファイルの「種類」を取得する方法を教えてください
「種類」とはエクスプローラにあるやつです
a.txtだったら「テキストファイル」
b.chmだったら「コンパイルされた HTML ヘルプ ファイル」
というのです
73デフォルトの名無しさん:2012/01/18(水) 23:38:31.11
74デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/19(木) 00:09:49.97
>>43
遅レスだが
out IntPtr hogePtr
で受けとって、Marshal.PtrToStructureでいいんじゃないの?
76デフォルトの名無しさん:2012/01/19(木) 00:19:25.66
>>66
普通に Program.cs って名前のソースコードを追加するだけ。(名前は何でもいいけど)
ソリューションエクスプローラーから今作成しているプロジェクト名の項目を
左クリックして追加 -> クラス

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

Main メソッドには [STAThread] ってのをつけておかないと
フォームアプリは動作しないからつけること。(コンパイルエラーが出ると思う)
77デフォルトの名無しさん:2012/01/19(木) 00:22:07.04
>>74
わかりやすい解説です
ありがとうございます
78デフォルトの名無しさん:2012/01/19(木) 00:24:36.92
>>69
listviewでやってしまいました
79デフォルトの名無しさん:2012/01/19(木) 02:54:00.78
大丈夫だ問題ない。
80デフォルトの名無しさん:2012/01/19(木) 04:35:52.42
>>72
SHGetFileInfo + SHGFI_TYPENAME
81デフォルトの名無しさん:2012/01/19(木) 10:26:33.57
C#のウォッチ式は型指定のみのようですが、
C++みたいにポインタの参照先の値を見るにはどうすれば良いのでしょうか?

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

よろしくお願いします。
82デフォルトの名無しさん:2012/01/19(木) 10:41:41.41
イミディエイトウィンドウ
83デフォルトの名無しさん:2012/01/19(木) 11:08:33.33
ポインタなんてc++と連動させる時以外使うなよ
84デフォルトの名無しさん:2012/01/19(木) 12:40:14.45
このスレで質問してばかりなのでプログラミングC# 第6版を買おうと思うのですが、入門書は既に独習C#を持っています。
買う意味ありますかね?ウェブよりわかりやすいというレビューがありますがステマでしょうか?
85デフォルトの名無しさん:2012/01/19(木) 12:46:33.59
86デフォルトの名無しさん:2012/01/19(木) 12:53:48.16
>>85
ありがとうございます。情報量とわかりやすさがかなり上だと思うので買います。
俺、ステマみうたいだな。
87デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/19(木) 16:43:38.54
TabControll内の特定のTabPageの中にButtonやらLabelやらlistviewを置いているのですが
このTabPageを tabControl1.TabPages.RemoveAt(3);みたいに消した場合って中に配置したコントロールも全て削除されているのでしょうか?
89デフォルトの名無しさん:2012/01/19(木) 17:03:52.45
削除って曖昧だな
コントロールのツリーから消えてることは間違いないが
メモリから消えているかとは別問題だ
90デフォルトの名無しさん:2012/01/19(木) 17:29:35.31
親のコントロールが消えても一緒に消えるってわけじゃないんですね
念のためそれぞれ指定して消すようにします
91デフォルトの名無しさん:2012/01/19(木) 17:30:53.74
Labelをコード内から動的に生成しているのですが
ラベルの一番最後のやつのTextを変更したいのですが
一番最後のラベルにアクセスする方法を教えてください
92デフォルトの名無しさん:2012/01/19(木) 17:32:48.12
生成するたびにフィールドにもっておけばいいだろが
9388:2012/01/19(木) 19:39:48.81
一応タブを消した後にlistviewにアクセスできるか試してみたいとおもったんですが
こう書くとそもそもタブは消えてるのでアクセスできません
テストできる方法を伝授してください
if (null != tabControl1.TabPages[5].Controls["listView1"])
{
MessageBox.Show("true");
}
else
{
MessageBox.Show("false");
}
94デフォルトの名無しさん:2012/01/19(木) 19:58:03.15
機嫌がいいからスーパーヒントくれてやるよ

ListView lv = tabControl1.TabPages[5].Controls["listView1"];
95デフォルトの名無しさん:2012/01/19(木) 20:41:14.46
>>93
答から言えば中のコントロールのDisposeメソッドは呼ばれない
ただ、どこからも参照されていなければGCによって破棄される
アンマネージリソースをフレームワークが知らない形で持っていたらリークするが
それもプロセスが終了する時点で解放される
96デフォルトの名無しさん:2012/01/19(木) 21:24:45.50
部品のプロパティをメソッドの中で何回も呼び出して使う場合は変数に入れたほうが効率が良いものですか?
label1.Textだったら毎回label1.Textって呼び出すよりも
string label = label1.Textって感じで変数にいれたほうがよいとかありますか?
97デフォルトの名無しさん:2012/01/19(木) 21:27:04.84
呼び出しに時間がかかるならそうだし
時間がかからないならそうでもない

普遍な答えはない
98デフォルトの名無しさん:2012/01/19(木) 21:37:15.50
参照を辿るコストって考えたことないがどのくらいなんだろう
99デフォルトの名無しさん:2012/01/19(木) 22:20:16.48
>>98
そんなもん全く全然関係ない
Textプロパティのgetアクセサがどう実装されてるかによる
100デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/19(木) 23:51:36.61
>>100
listViewをどこで宣言したかによる。
デザイナーで追加したコントロールならフォーム閉じるまで残ってる。
メソッドのスコープで宣言して追加したコントロールなら>>95の言うようにCG対象になる。
102デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/20(金) 06:15:25.14
iOSのようなスクロールをさせたいのですがどういうロジックに
すればいいでしょうか?
105デフォルトの名無しさん:2012/01/20(金) 07:05:27.41
すみません。できました。
106デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/20(金) 10:13:08.83
名前ぐらい自分で変更しろよ
108デフォルトの名無しさん:2012/01/20(金) 10:30:40.91
その設計が腐ってるんだろ
インデックスとかそれを含んだName文字列なんてタコなものじゃなくて他のidentifierで管理しようよ
109デフォルトの名無しさん:2012/01/20(金) 10:32:08.00
tabpagesをグローバルなコレクションにいれておけばいい
110デフォルトの名無しさん:2012/01/20(金) 10:33:08.77
>>106
c#以前の問題だなw


問題
複数あるものにそれぞれ一意の番号(被らない番号)をつけるにはどうしたらいいか?
111デフォルトの名無しさん:2012/01/20(金) 10:49:44.21
一郎二郎三郎四朗さん四兄弟がいました
不幸なことに病気で二郎さんが亡くなりました

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

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

ありえないだろ?
112デフォルトの名無しさん:2012/01/20(金) 11:22:31.47
>>107-111
Nameにランダムな文字列をつけてみました
これでインデックスを気にしなくてよくなりましたがこれでいいのでしょうか?
113デフォルトの名無しさん:2012/01/20(金) 11:27:15.26
名前がかぶってソフトがフリーズする未来が見えた
114デフォルトの名無しさん:2012/01/20(金) 11:51:31.58
ちょうど今俺が、ソフトを2回起動するとWindows7がフリーズして悩んでいるところだw
115デフォルトの名無しさん:2012/01/20(金) 12:25:11.02
もうGUIDでも使えよw
116デフォルトの名無しさん:2012/01/20(金) 12:34:29.99
>>112
誰がランダムな文字列つけてみろと言った?
人の話を聞かない奴に質問する権利はない
一人で一生悩め
117デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/20(金) 17:49:33.32
Invoke
119デフォルトの名無しさん:2012/01/20(金) 18:10:12.21
そのエラーをググレ場言い発でわかる
120デフォルトの名無しさん:2012/01/20(金) 18:26:20.53
あと、そのコードだとエラーがでなくても
Sleep(1000)したあとにそのスレッドが終了するゾ
121デフォルトの名無しさん:2012/01/20(金) 19:15:22.21
これを解決するのもスレッドの勉強じゃないかしら
122デフォルトの名無しさん:2012/01/20(金) 19:33:34.73
今後直接Thread使う機会ってあるのかね
123デフォルトの名無しさん:2012/01/20(金) 19:45:48.03
C#ではThread直接使うとむしろ性能的に良くないけども、
少し古い情報とか、他の言語の情報で、非同期処理=スレッドって認識できちゃってる人多いしねぇ。
どうしたもんか。
124デフォルトの名無しさん:2012/01/20(金) 21:19:30.14
黒歴史
125デフォルトの名無しさん:2012/01/20(金) 21:28:25.25
>>115
GUIDでランダムな文字列を作ってます
>>116
配列にするとメモリ食いませんか
126デフォルトの名無しさん:2012/01/20(金) 21:34:55.11
LOL
127デフォルトの名無しさん:2012/01/20(金) 21:37:43.29
ListView1個配置するだけでその100倍メモリくっとるがな
気にするポイントがずれてる
目の付け所がシャープじゃない!
128デフォルトの名無しさん:2012/01/20(金) 21:40:02.23
何故Nameで管理してはダメで配列で管理をしないといけないのか分かりません
129デフォルトの名無しさん:2012/01/20(金) 21:42:05.81
貴方がNameで管理しててトラブったということは
貴方が使うには手に余るってことでしょう
130デフォルトの名無しさん:2012/01/20(金) 21:42:34.93
Dictionary<Guid, ListView>
131デフォルトの名無しさん:2012/01/20(金) 21:44:33.18
TabPage.Tagにでも入れとけとは誰も言ってくれないんだな。
132デフォルトの名無しさん:2012/01/20(金) 21:45:01.27
Tagはオワコン
133デフォルトの名無しさん:2012/01/20(金) 21:45:54.34
え~だってこの質問者なら「こんな便利なものがあるんですね!ありがとうございます!」と言ってくれそうな気がするよ
134デフォルトの名無しさん:2012/01/20(金) 21:48:22.67
まぁGuidで解決したんならいいんじゃないの
それで
135デフォルトの名無しさん:2012/01/20(金) 21:48:32.12
>>129
インデックスを元にNameをつけていましたがそれをランダムな文字列を元にしたらできましたが
この方法が何故ダメだという理由が知りたいだけです
別に私は配列を教えてくれた方の人格を攻撃しているわけでもないので
136デフォルトの名無しさん:2012/01/20(金) 21:51:35.49
そのGuidで生成した名前はどこかに取ってあるわけだろ?
なぜそこにListViewを代入しておくという発想にならないんだろうか。
137デフォルトの名無しさん:2012/01/20(金) 21:53:50.42
>>135
メモリを食うのが嫌なんだろ?
だったら配列にすべきだ
138デフォルトの名無しさん:2012/01/20(金) 21:54:43.12
ほら、一箇所にまとめておかないと無くしちゃうだろ?
無くしちゃったらガベコレ来るまで破棄できなくてメモリの無駄でしょ?
139デフォルトの名無しさん:2012/01/20(金) 21:57:39.36
メモリの無駄だから死んで
140デフォルトの名無しさん:2012/01/20(金) 22:03:43.73
お前らイジメすぎだぞ!ここは初心者スレなんだから優しくしろよ
141デフォルトの名無しさん:2012/01/20(金) 22:06:06.25
このやろう!!!!!!!!!!!!!!
難しくてよくわかんねえよっ!!!!!!!!!!!!!!!!!!
142デフォルトの名無しさん:2012/01/20(金) 22:09:02.55
メモリの無駄だから「!」は一つにしてくれ
Lisperも括弧を節約するように
143デフォルトの名無しさん:2012/01/20(金) 22:14:26.02
>>142
コンパイル時に消えるような小手先の最適化は好むべきではないと考えます。
144デフォルトの名無しさん:2012/01/20(金) 23:11:59.68
javaみたく === が輸入されてきたりしないよな?
145デフォルトの名無しさん:2012/01/20(金) 23:17:03.67
>>135
インデックスを元にNameつけないで全部同じ"listView"ってNameにすればいい。
146デフォルトの名無しさん:2012/01/20(金) 23:19:01.86
GUIDの生成はメモリ食いませんか

すべてのNameにGUIDみたいな長い文字列を設定するとメモリ食いませんか
147デフォルトの名無しさん:2012/01/20(金) 23:22:57.05
>>145
おいおいそうするとかぶっちゃうじゃん
148デフォルトの名無しさん:2012/01/20(金) 23:31:58.46
GUIDは128bit
149デフォルトの名無しさん:2012/01/20(金) 23:33:25.54
>>147
おそらく、>>93に書いてあるみたいに
>tabControl1.TabPages[5].Controls["listView1"]
っていう風に名前指定で取りたいだけだと思うから、タブページ内でかぶらなければ問題ないんじゃない?
listViewはコード中で生成しているみたいだし。( >>102 )
150デフォルトの名無しさん:2012/01/21(土) 00:13:11.28
千七百九十六郎 二百五郎 二万五千とんで三郎 九十八万四千八百九十一郎の兄弟がいました…
151デフォルトの名無しさん:2012/01/21(土) 00:18:52.96
>>125
おい誰も配列にしろなんて言ってないだろ

>>111の件をまじめに考えてみろ
なんで普通は被らない名前つけてるか?
152デフォルトの名無しさん:2012/01/21(土) 00:45:41.38
>>151
>なんで普通は被らない名前つけてるか?
誰宛?
153152:2012/01/21(土) 00:47:48.33
ごめん勘違いしてた。忘れて。
154デフォルトの名無しさん:2012/01/21(土) 01:55:22.36
自作のクラスでエラーが発生した時に呼び出したところでエラーを受け取る際のエラー番号や説明を定義する方法を教えて
(戻り値は別の結果を受け取るために使いたいので使えません)
155デフォルトの名無しさん:2012/01/21(土) 02:00:38.76
public class HogeException : Exception {
public HogeException(string message) : base(message) { }
}
エラーを起こしたい場所で
throw new HogeException("Hogeに失敗しました。");
156デフォルトの名無しさん:2012/01/21(土) 10:38:20.12
>>154
例外のクラスを自作したらいい

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

http://tech.bbtune.com/csharp/items/4-24.html
157デフォルトの名無しさん:2012/01/21(土) 10:38:30.22
>>149
同じ名前のコントロールって使えたっけ?
158デフォルトの名無しさん:2012/01/21(土) 11:15:53.18
>>157
名前って何いってんの?
Nameプロパティのことだぞ?
159デフォルトの名無しさん:2012/01/21(土) 11:16:36.14
>>158
Nameプロパティってユニークなものじゃないといけないんじゃないの?
学校でそう習ったけどさ
160デフォルトの名無しさん:2012/01/21(土) 11:34:34.22
二重起動を禁止してコマンドライン引数を取得するで

http://www.k4.dion.ne.jp/~anis7742/codevault/00050.html

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

関連付けされたファイルが開かれた場合二重起動をしないで既存のプロセスで開くようにしたいのです
161160:2012/01/21(土) 11:48:06.64
Form1のRefresh()でForm1_Loadを再読み込みすることでできたっぽいですが
何か問題ありますでしょうか
162デフォルトの名無しさん:2012/01/21(土) 11:52:33.40
>>159
コンテナごとにユニークじゃないとControlCollection.Item[string]で取得できないってだけじゃね
Nameでコントロール特定しようとか糞なことしなければどう使っても問題ない

>>160
問題ないけど
VB系の機能を持ち込むのは気持ち悪いという問題が……
163デフォルトの名無しさん:2012/01/21(土) 12:43:50.55
しかしWCFは(このスレのレベルでは)難しいかも
164デフォルトの名無しさん:2012/01/21(土) 12:48:14.05
http://msdn.microsoft.com/ja-jp/library/system.icloneable.clone.aspx
に書いてあるColumnHeaderのコピーの方法を教えてください

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

配列に対してCloneを呼んだ場合は「配列が」コピーされる
中身はコピーされていない
167デフォルトの名無しさん:2012/01/21(土) 12:57:41.30
>>164
今使ってるのはこれだ

Array.Clone メソッド

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

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

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

http://msdn.microsoft.com/ja-jp/library/system.array.clone(v=VS.80).aspx
168デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/21(土) 13:24:07.79
”別スレッドで用済みになったときにnullにして”いる時にもlockをしてるか?
170デフォルトの名無しさん:2012/01/21(土) 13:26:58.56
ArrayにAddなんてないのにAddしてるのも奇怪
あと.NETのバージョン2.0以上ならDictionary使えよ
171デフォルトの名無しさん:2012/01/21(土) 13:30:40.69
.net2.0から使えるディレクトリやファイル一覧の取得メソッド
.net4.0から使えるディレクトリやファイル一覧の取得メソッドあるじゃないですか
やっぱり.net4.0から使えるメソッドのほうが早いのでしょうか?
172デフォルトの名無しさん:2012/01/21(土) 13:31:50.40
173デフォルトの名無しさん:2012/01/21(土) 13:33:04.43
>>169
してないっす。ありがとうございます。

>>170
記憶をたどって書いたのでArrayじゃなかったかもしれないです。
174デフォルトの名無しさん:2012/01/21(土) 13:33:04.22
>>166
>>167
おおそうだったんですか!勉強になりました!ありがとうございました
175デフォルトの名無しさん:2012/01/21(土) 13:33:57.61
>>171
そんなこと気にしなくていい
176デフォルトの名無しさん:2012/01/21(土) 13:36:07.01
>>171
手が付いてるなら自分で測ればいい。
ここで適当な答えを返されたとしても、自分で確かめないのならお前はそれを信じるしかないんだぞ。

答えてやるよ。
.NET4.0の方が早い。
177デフォルトの名無しさん:2012/01/21(土) 13:49:37.06
だって図り方がわからないんです
178デフォルトの名無しさん:2012/01/21(土) 13:51:02.73
じゃあ気にしなくていいよ
179デフォルトの名無しさん:2012/01/21(土) 14:11:58.14
"http://msdn.microsoft.com/ja-jp/library/system.windows.forms.listviewitem(v=vs.80).aspx"の
new ListViewItem("item1",0);の第二引数の0って何の意味があるのでしょうか?
180デフォルトの名無しさん:2012/01/21(土) 14:22:08.72
http://msdn.microsoft.com/ja-jp/library/79kywsae%28v=vs.100%29.aspx
項目が格納されている ListView に関連付けられた ImageList 内のイメージの 0 から始まるインデックス。

って書いてあるじゃん
読めないの?
181デフォルトの名無しさん:2012/01/21(土) 14:35:15.69
ListViewとImageListの関係については>>179が提示したURLにモロに書いてある
分からないとか抜かした場合、自分で提示したURLすらよく確認していないと証明しているようなものだ
本当に死んだほうがいい
182デフォルトの名無しさん:2012/01/21(土) 15:00:09.78
このスレに来て、かれこれ12回は死んでますわ
183デフォルトの名無しさん:2012/01/21(土) 15:07:12.20
>>171
ぶっちゃけていうと、

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

もともと全部列挙するつもりならどちらも同じ
184デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/21(土) 15:26:43.23
参照の代入はアトミックだっけ?
longは違うよね確か
186デフォルトの名無しさん:2012/01/21(土) 15:36:10.55
>>183
分かりやすいです
勉強になりました
187デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/21(土) 15:55:05.17
>>187
http://msdn.microsoft.com/ja-jp/library/29kt2zfk.aspx
Directoryクラスの下にDirectoryInfoクラスってのがあるけど見える?
もしかすると文盲で見えない可能性があるから一応聞いておくよ
189デフォルトの名無しさん:2012/01/21(土) 16:04:18.66
え?
190デフォルトの名無しさん:2012/01/21(土) 16:04:36.18
スレタイくらい読め
答えられる頭のない奴は黙ってたほうがいいよ
191デフォルトの名無しさん:2012/01/21(土) 16:10:13.29
制限しながら取得する方法はない、はず。
192デフォルトの名無しさん:2012/01/21(土) 16:16:18.99
てめえの足りない脳みそで黙らせて見ろよアホ
193デフォルトの名無しさん:2012/01/21(土) 16:19:25.15
さっきからいちいち一言多い妙な人に構わなくていいですからね。
忠告しましたよ。
忠告されても構うのは犬畜生のすることですよ。
194デフォルトの名無しさん:2012/01/21(土) 16:23:12.43
忠犬は死ぬまで言いつけを守ったのだから畜生と並べたら失礼
195デフォルトの名無しさん:2012/01/21(土) 17:21:14.09
WebResponseとhttpWebResponse
どう使い分けたらいいんだろう?
WebResponseは普通使わないでhttpWebResponse使っとけばいいのかな?
196デフォルトの名無しさん:2012/01/21(土) 17:29:42.38
使い分けるって、別にHttpWebResponseにだけあるメソッドやプロパティを使いたい場合は
そちらにするしかないし、そうでないならWebResponseのままでいい。
それだけ。
197デフォルトの名無しさん:2012/01/21(土) 18:01:25.71
ウィンドウの左上にアイコンがありますけど
そこを右クリックするてメニューがでますが
そこに自分でメニューを追加したいのですが
どのようにしたらいいでしょうか?
198デフォルトの名無しさん:2012/01/21(土) 18:03:25.22
199デフォルトの名無しさん:2012/01/21(土) 18:15:25.17
>>198
ありがとうございます
ためしてみます
200デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/21(土) 22:33:00.33
よく考えようよ
使ってないだろ?それ
代入しててもどこからもその値が使われてないから無意味だと言ってくれてるんだよ
privateだからフォームの外からアクセスされることもない
202デフォルトの名無しさん:2012/01/21(土) 22:34:09.64
そのまんま、代入だけで、使ってないから。
バインディングかなんかで外に公開したいならprotectedかpublicで。
203デフォルトの名無しさん:2012/01/21(土) 22:42:07.92
>>155-156
どうもありがとう^^
これから試してみます。
204デフォルトの名無しさん:2012/01/21(土) 23:02:50.35
>>200
#pragma warning disable 169
bool IsHoge=false;
#pragma warning restore 169

普通は必要ないけどこういう対処も出来る
205デフォルトの名無しさん:2012/01/21(土) 23:27:47.33
初心者にそんな場当たり的なこと教えたら駄目。臭いものにフタしただけで、問題の解決になってない。
206200:2012/01/22(日) 01:20:56.71
なら、クリックイベント内If(IsHoge!=false){IsHoge = true;}ではどうだ?
と使っても警告消えませんでした。降参です。結局Publicにしました。
Form1のフォームの中で宣言したプライベートな変数フィールドで
Form1のClickイベントの中で使っているつもりなのですが、まだ理解できてません。
207200:2012/01/22(日) 01:23:00.72
あ、ナニをトチ狂ったのか==だ。疲れてるわ。スマソ。
208デフォルトの名無しさん:2012/01/22(日) 01:59:04.05
>>206
まあ、早い話、お前の頭よりコンパイラのほうが頭がよい、そういうことだ。
209デフォルトの名無しさん:2012/01/22(日) 04:31:09.51
そんなことが理由にpublicにする、は正しく臭いものにフタな対応ですね
210デフォルトの名無しさん:2012/01/22(日) 04:46:55.71
日本語がおk
211デフォルトの名無しさん:2012/01/22(日) 09:21:31.89
結局使ってないんだろ
だったら消せよ
212デフォルトの名無しさん:2012/01/22(日) 10:07:21.62
横からだけれど、判らん。使ってるじゃん。
213デフォルトの名無しさん:2012/01/22(日) 10:53:28.93
そもそも if (真偽値) ~
の()の中で if (真偽値 == false) がおかしいと感じないのかね。
if ((真偽値 == false) == true) はどうだ?
214デフォルトの名無しさん:2012/01/22(日) 11:03:44.58
intParseとTryParseの使い分けがわかりません
例外が出ないTryParseだけ使えばいいと思うんですけどintParseの使いどころってどういうときなんですかね
215デフォルトの名無しさん:2012/01/22(日) 11:05:38.59
>>206
ん?それなら消えないか?
216デフォルトの名無しさん:2012/01/22(日) 11:06:59.16
へ?
217デフォルトの名無しさん:2012/01/22(日) 11:08:47.88
確実にIntが得られると判ってる場合。不確実ならtry
218デフォルトの名無しさん:2012/01/22(日) 11:22:02.43
それだったら最初からTryParseで統一しておけば予期せぬ不具合にも対応できると思うんですが
219デフォルトの名無しさん:2012/01/22(日) 11:25:09.11
例外というものの存在意義に対する問いですな
220デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/22(日) 11:40:20.51
VC#2010 ExpressでC#でフォームプログラムを勉強中です
Formの部品をいじくるときはForm1.csにコードを書かないと出来ないので
Form1.csのコード量が多くなってしまいます
そこで新しくクラスファイルを作って部品別にコードを別けて見やすく管理したいのですが
これはどのようにできますか?
222デフォルトの名無しさん:2012/01/22(日) 11:41:38.47
例えば(x, y)って文字列をPointに変換する場合、まず正規表現でマッチさせるだろ?
xとyのパターンが確実にintに変換できるようなものであれば、Parseで充分になる

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

>>220
UIでバリデーションしてるのならstringで渡すなよ…
223デフォルトの名無しさん:2012/01/22(日) 11:42:41.95
>>221
メニューのプロジェクトからクラスの追加
224デフォルトの名無しさん:2012/01/22(日) 11:43:25.12
>>221
ユーザーコントロール
225デフォルトの名無しさん:2012/01/22(日) 11:45:16.45
>>223
クラスの追加まではできるのですが、その作ったクラスからFormの部品がいじれないのです。。。
226デフォルトの名無しさん:2012/01/22(日) 11:46:05.75
>>221
始めたばかりのころに別掲示板でほぼ同じ質問をしたことがあったよ。w
>>224 を支持。
227デフォルトの名無しさん:2012/01/22(日) 11:49:05.05
>>225
クラスにForm渡せばいいけどそういうコード書くとオタになぶり殺しに会う

どうせデリゲートやラムダ式使えないんだろ?
228デフォルトの名無しさん:2012/01/22(日) 11:49:13.11
コントロールのプロパティで修飾子とかそんな項目があって、privateになっていると思うからinternalだかAssermblyだかに変えれば余所から触れる
ただあまり良い方法ではない
229デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/22(日) 11:58:47.94
>>226
ユーザーコントロールっていうのがいいのですね、わかりました
>>227
Form1 form1 = new Form1()みたいな書き方はいけないってことですかね?わかりました
デリゲートってなんですか?ってレベルです
ラムダ式の書き方もC#では分かりません
すみません
>>228
こういう方法もあるのですね
何故これは良くないのでしょうか?
231デフォルトの名無しさん:2012/01/22(日) 12:07:02.30
>>230
>Form1 form1 = new Form1()みたいな書き方はいけない

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

private System.Drawing.Bitmap bmp;


public void Dispose()
{
try
{
bmp.Dispose();
}
catch
{
}
}
233デフォルトの名無しさん:2012/01/22(日) 13:10:03.37
if(bmp != null)
{
  bmp.Dispose();
  bmp=null;
}
234デフォルトの名無しさん:2012/01/22(日) 13:22:41.67
出来ました。ありがとうございます。
235デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/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";
}
}
}
237236:2012/01/22(日) 14:01:22.20
アンカーミス
>>231先生宛
238デフォルトの名無しさん:2012/01/22(日) 14:03:35.61
>>236
そのまますすめてりゃ、1ヶ月後くらいにあーこのことかとわかるよたぶん
239デフォルトの名無しさん:2012/01/22(日) 14:03:50.64
本読むなりwebの初心者向け解説を読むなりして基礎を勉強しろよ
240デフォルトの名無しさん:2012/01/22(日) 14:08:50.97
まだ文法が把握できてないんなら、大人しく1ファイルで勉強しようよ
241デフォルトの名無しさん:2012/01/22(日) 14:10:01.22
>>236
それは新しいクラスじゃないよ
partial 宣言して同じクラスを分割しただけ
242デフォルトの名無しさん:2012/01/22(日) 14:19:55.56
>>238-241
少しずつ勉強していきます
ちなみにpartialでファイルを分けて各方法はお勧めできますか?
243デフォルトの名無しさん:2012/01/22(日) 14:21:42.02
private void Test(string text, TextBox textbox){
textbox.Text = text;
}

Test("サンプル", textBox1);
のようにコントロールを渡す方法はやめたほうが良いでしょうか?
244デフォルトの名無しさん:2012/01/22(日) 14:25:32.88
>>243
コントロールを渡すのなら最初にプライベート変数にでも入れておいて
毎回渡すのは何の意味もないよ
245デフォルトの名無しさん:2012/01/22(日) 14:26:33.54
Form1.designer.csの中身見てご覧
partial class Form1が既に存在してるよね?
246デフォルトの名無しさん:2012/01/22(日) 14:30:34.34
>>245
あります
public partial class Form1 : Formというのは
新しいファイルにいくらでも書けると認識しているのですが間違いですか?
247デフォルトの名無しさん:2012/01/22(日) 14:33:36.32
>>244
textBox1からtextBox10まであるのですが
処理によって使うtextBoxを分けてますが実行するときは同じフィールドを使います
この様な場合でもプライベートに全部変数に入れるべきですか?
private TextBox textbox1 = textBox1
(略)
private TextBox textbox10 = textBox10

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

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

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

ググるキーワードもわからず困っています
250デフォルトの名無しさん:2012/01/22(日) 14:46:09.27
>>247
クラス側のフィールドはフォームの入力項目の数だけ作るんだよ
あとTextBoxじゃなくてstringとかintのような実際のデータに即した型に変えて、TextChangedイベントとかで値を随時更新してやるようにする
251デフォルトの名無しさん:2012/01/22(日) 14:47:34.14
>>247
自分なら配列に入れるかな…
252デフォルトの名無しさん:2012/01/22(日) 14:47:41.38
>>249
C# フォーム データ 受け渡し
253デフォルトの名無しさん:2012/01/22(日) 14:50:17.75
>>249
子フォームに適当なイベントを追加
子フォームのボタンクリックで、追加したイベントを呼び出しておく
親フォームで子フォームを呼び出す前にイベントハンドラを登録
子フォームを表示
254デフォルトの名無しさん:2012/01/22(日) 14:57:02.09
partialで何個でもファイル作れるケドも・・・
他人が見たらForm1に書いてあるのか、別ファイルに書いてあるのかどこに書いてあるのかわからないのは勘弁
処理するクラスと表示するFormと分けた方がいい
255デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/22(日) 15:28:39.20
>>184 は結局、lockを使わなくても問題ないということでよろしいでしょうか。
257デフォルトの名無しさん:2012/01/22(日) 15:32:25.10
>>255
初耳だな
どこに書いてあった?
258デフォルトの名無しさん:2012/01/22(日) 15:34:52.72
259デフォルトの名無しさん:2012/01/22(日) 15:46:35.36
>>256
このスレのPart79に32bit以下のサイズの値型と参照型の読み取りと書き込みはアトミックだと書いてあったので、多分大丈夫
多分ね
260デフォルトの名無しさん:2012/01/22(日) 16:00:03.87
>>258
別のイベントはダメなの?
http://dobon.net/vb/dotnet/form/unloadmode.html
261デフォルトの名無しさん:2012/01/22(日) 16:08:47.24
262デフォルトの名無しさん:2012/01/22(日) 16:21:49.10
メソッドは機能ごとに分けないで
意味ごとに分けたほうがいいんじゃないの?
263デフォルトの名無しさん:2012/01/22(日) 16:35:22.30
>>260
FormClosedというプロパティがありました
これでやってみたいと思います
ありがとうございます
264200:2012/01/22(日) 16:36:55.58
もうとっくに忘れられているであろう>>200ですが、F6キー押したら消えました。問題解決♪
265デフォルトの名無しさん:2012/01/22(日) 16:39:46.53
そういう問題じゃないけどなw
266デフォルトの名無しさん:2012/01/22(日) 17:17:16.09
TcpListenerとTcpClientを使ってチャットを作りたいんですが、インターネット経由で待機してるサーバーに接続しようとすると「対象のコンピュータによって拒否されたため接続できません」と例外が投げられてしまいます。

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

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

267デフォルトの名無しさん:2012/01/22(日) 17:21:55.50
構造体は型として扱えばいいのでしょうか?
268デフォルトの名無しさん:2012/01/22(日) 17:29:16.63
>>266
ふぁいやーうぉーるとかは?

>>267
はい?
269デフォルトの名無しさん:2012/01/22(日) 17:42:32.39
>>266
ルータのログ出してみては。
270デフォルトの名無しさん:2012/01/22(日) 17:43:56.67
初心者にお勧めの入門書を教えてください
10日で覚えるみたいなのじゃなくてこれ1冊勉強したらいいみたいな本をお願いします
少しでもここで質問する頻度が減らせればと考えて勉強したいんです
271デフォルトの名無しさん:2012/01/22(日) 17:48:12.73
>>270
どれでもいいから3つ入門本買え
内容が似てないやつな

無理なら図書館で借りろ
タダだ
272デフォルトの名無しさん:2012/01/22(日) 17:56:48.91
どこのコントロールからキーイベントが実行されたか調べる方法はありませんか?
例えばtextBox1とtextBox2があり、textBox2からKeyDownイベントが実行されたらtextBox2体ということをしりたいのですが
273デフォルトの名無しさん:2012/01/22(日) 18:02:00.05
>>268
ファイアウォールは例外に指定して通すようにしています。一度、ファイアウォール自体を切って試しましたが同様でしたのでファイアウォールで止まってる訳ではなさそうです。

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

ところで、TcpListenerは待機ポートを指定して、接続次第そのポートで通信しますよね?
一方、TcpClientは接続時に接続先のIPとポートを指定しますが、このClient自体のポートはOS側で勝手に割り振られるんですか?それとも指定した接続先のポート番と同じのを使うのですか?
274デフォルトの名無しさん:2012/01/22(日) 18:03:05.48
>>272
KeyDownのsender
275デフォルトの名無しさん:2012/01/22(日) 18:04:22.92
>>273
バインドすることもできるけど普通は自動割り振りさせる
276デフォルトの名無しさん:2012/01/22(日) 18:16:59.64
ftpでも作ってんの?
277デフォルトの名無しさん:2012/01/22(日) 18:18:47.17
チャットっつってんじゃん
278デフォルトの名無しさん:2012/01/22(日) 18:20:03.04
>>273
ネットワーク構成は秘密か?インターネットを「経由」しているということは、

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

あたりだろうが

てか、LANでは繋がる→プログラムの問題ではない→スレチ、だろう
279デフォルトの名無しさん:2012/01/22(日) 18:29:18.63
ポート解放に失敗してるんだろ
ポートの意味を取り違えて
280デフォルトの名無しさん:2012/01/22(日) 18:29:37.98
>>278
「192.168.11.3のクライアント」から「192.168.11.1のサーバー」を「ルーターのWAN側IPとポート」を指定して接続しようとしています。もしかして、
これじゃインターネット経由にならないんですか?
281デフォルトの名無しさん:2012/01/22(日) 18:31:09.47
>>280
ヘアピンNATができるかはルータ次第。
282デフォルトの名無しさん:2012/01/22(日) 18:37:15.14
>>281
ルーターに依るんですね。確認してみます。ローカルネットワーク内では動くということでプログラム自体には問題なさそうなので、スレチなようなので移動します。ありがとうございます!
283デフォルトの名無しさん:2012/01/22(日) 18:40:42.54
インターネット経由にはなってないわな
284デフォルトの名無しさん:2012/01/22(日) 19:05:16.26
ヘアピンNAT対応してるメーカーのが少ないしな。
プログラム以前に、webサーバたててアクセスして見る、
とかまやったことないのかいな。
285デフォルトの名無しさん:2012/01/22(日) 19:11:18.04
ネスペも持ってないのにネットワークプログラミングを
するとは
286デフォルトの名無しさん:2012/01/22(日) 19:13:05.83
>>274
sender.ToString()を確認したら取れているのは確認できました
textBox1でKeyDownが発生した場合に
イベント内でtextBox1.Text = "";みたいに書き換えたいのですが
どのように書いたらよいのでしょうか?
287デフォルトの名無しさん:2012/01/22(日) 19:15:24.57
((TextBox)sender).Text="";とかif(sender==textBox1){textBox1.Text = "";}
288デフォルトの名無しさん:2012/01/22(日) 19:16:27.61
>>287
ありがとうございます
senderはこういう風に使うのですね
勉強になりました
289デフォルトの名無しさん:2012/01/22(日) 19:41:59.98

as使えよ
290デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/22(日) 19:47:40.64
>>287
初心者相手でもちゃんとした処理教えたほうがいいんじゃないの?
292デフォルトの名無しさん:2012/01/22(日) 19:54:52.36
>>290
http://msdn.microsoft.com/ja-jp/library/aa970069.aspx
>参照アセンブリのサブフォルダー内のリソース ファイル "pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"

>>291
文法レベルの質問だと思ったからそう答えた
処理の話ならそもそもKeyDownでやる必要性が見いだせない
293デフォルトの名無しさん:2012/01/22(日) 20:02:01.82
>>292
表示できました、ありがとうございます。
294デフォルトの名無しさん:2012/01/22(日) 20:47:11.93
ビルドしたEXEファイルをネイティブEXEに変換するソフトってないですか?
295デフォルトの名無しさん:2012/01/22(日) 20:51:10.05
無い
296デフォルトの名無しさん:2012/01/22(日) 20:51:16.08
ないよ
297デフォルトの名無しさん:2012/01/22(日) 20:52:21.69
ビルドしたEXE
298デフォルトの名無しさん:2012/01/22(日) 20:55:21.56
いまどき.NETくらい普通入ってる
幅広くサポートしたいなら2.0ターゲットにして.NET2.0入ってないようなクソ環境は無視で問題ない
299デフォルトの名無しさん:2012/01/22(日) 20:55:40.13
すんごくファイルサイズが増えていいんだったらあったよな
たしかexeファイル内にフレームワーク丸抱えしちゃうように変換するやつ
300デフォルトの名無しさん:2012/01/22(日) 20:57:08.71
win9でネイティブアプリ実行不可にしたらいいのにw

ただしIE、Offceは除く
301デフォルトの名無しさん:2012/01/22(日) 20:58:06.89
c# asっでググっても出てこないんですがasって何ですか?
302デフォルトの名無しさん:2012/01/22(日) 21:00:26.50
303デフォルトの名無しさん:2012/01/22(日) 21:01:35.04
Google でも Bing でも、「C# as」でググったらちゃんと as 演算子のページ出てきたが…

英語ロケールだと、前置詞は検索キーワードから除外したりしてたような気もするけど、そのせい?
304デフォルトの名無しさん:2012/01/22(日) 21:01:42.25
305デフォルトの名無しさん:2012/01/22(日) 21:01:46.08
>>301
むしろどこでググったのか教えて
306デフォルトの名無しさん:2012/01/22(日) 21:17:02.64
"string"型をconstできないでrしょうか?
307デフォルトの名無しさん:2012/01/22(日) 21:18:55.71
stringをconstにしても意味がないんじゃない?
stringは参照型だし
308デフォルトの名無しさん:2012/01/22(日) 21:20:50.31
>>306
出来ないというかできても意味ない
309デフォルトの名無しさん:2012/01/22(日) 21:20:56.03
なぜ出来ないと思ったのか
const string hoge = "hoge";
310デフォルトの名無しさん:2012/01/22(日) 21:22:37.95
C#のconstってC++と意味が違って紛らわしいよな
C++/CLIのliteralがわかりやすい
311デフォルトの名無しさん:2012/01/22(日) 21:23:31.86
>>307
>>308
こいつら生きてる価値あるの?
312デフォルトの名無しさん:2012/01/22(日) 21:28:22.66
変な質問をする人はやっぱり変な切れ方するなw
313デフォルトの名無しさん:2012/01/22(日) 21:28:51.15
"const string" 型が欲しいという意図だと考えたんだろ
それなら元々stringは変更不可だから無意味
314デフォルトの名無しさん:2012/01/22(日) 21:30:39.33
ごめんなw
手拍子で答えてしまったw
315デフォルトの名無しさん:2012/01/22(日) 21:37:20.96
こっちは回答者も初心者(or 初心者レベル)だからしゃーない
316デフォルトの名無しさん:2012/01/22(日) 21:52:09.17

就活中
(p)http://livedoor.blogimg.jp/jin115/imgs/3/1/31a6f8e6.jpg

就職後
(p)http://livedoor.blogimg.jp/jin115/imgs/2/b/2b790359.jpg

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

317デフォルトの名無しさん:2012/01/22(日) 21:57:15.66
listViewで listView1.Items[0].Selected = true;
とやってもlistViewの先頭にフォーカスが当らないので
http://d.hatena.ne.jp/oui27/20080710/1215702413をみながら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デフォルトの名無しさん:2012/01/22(日) 22:05:14.98
Loadedでそういうのはダメかも
319デフォルトの名無しさん:2012/01/22(日) 22:10:56.45
>>317
元のサイトをもっとよく見ろよ
320デフォルトの名無しさん:2012/01/22(日) 22:11:16.18
>>317
本当は
listView1.Items[0].Selected = true;
listView1.focus()でアイテムが選択状態になってフォーカスが当っているのがいいんですが
別の方法ってありませんか?
321デフォルトの名無しさん:2012/01/22(日) 22:16:57.85
それWPFのサンプルじゃん
WPFの開発してるの?
322デフォルトの名無しさん:2012/01/22(日) 22:24:09.89
>>321
移植したらいいのかなと思ってまして すいません
323デフォルトの名無しさん:2012/01/22(日) 22:24:46.64
>>320
何だよまたひっかけ問題かよ

listviewの SelectionModeをSingleに…
324デフォルトの名無しさん:2012/01/22(日) 22:26:26.91
すいませんFocusedっていうのを使ったらフォーカスが当りました
325デフォルトの名無しさん:2012/01/22(日) 22:31:31.14
>>323
こういうのもあるんですね
ありがとうです
326デフォルトの名無しさん:2012/01/22(日) 22:35:30.30
winforms item.Focused=true;
WPF SelectionMode=Single;

結局さらされたブログの人が恥ずかしいだけになった
327デフォルトの名無しさん:2012/01/22(日) 22:40:45.59
沢山の短いWAVファイルをあらかじめ設定したタイミングでズレないように再生するにはどういう手順が良いですか?
328デフォルトの名無しさん:2012/01/22(日) 22:45:44.36
全部ミックスした音源を再生する
329デフォルトの名無しさん:2012/01/22(日) 22:46:54.00
そんなトンチみたいな回答は
330デフォルトの名無しさん:2012/01/22(日) 22:50:03.83
ぶっちゃけ>>328は正論だよ
ただし単一WAVの合成はプロセス内でやらないと要件にマッチしないけど
331デフォルトの名無しさん:2012/01/22(日) 22:54:59.92
ストップウォッチが作りたいのですが
c#で0.01秒ごとに処理(ラベルの書き換え程度ですが)を行い、
ボタンを押したら正確に止められますか?
332デフォルトの名無しさん:2012/01/22(日) 22:56:59.00
>>331
YO!久しぶり!メトロノームの調子はDO-DAY
333デフォルトの名無しさん:2012/01/22(日) 23:00:16.91
ストップウォッチっていうクラスあるよね
334デフォルトの名無しさん:2012/01/22(日) 23:10:56.01
まぁ無理だと思っていいよ
335デフォルトの名無しさん:2012/01/22(日) 23:12:57.52
System.IO.FileのCopy,Move,Deleteを行った場合のctrl+zのようなやり直しはどう実装したらよいのでしょうか?
336デフォルトの名無しさん:2012/01/22(日) 23:13:07.03
関係ないけどメトロノーム重りと針と円弧の座標の計算がめんどくさくて途中でやめたわ
337デフォルトの名無しさん:2012/01/22(日) 23:19:06.46
>>335
操作を覚えておけばいいでしょ

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

って
Deleteはどこかに取っておかないと駄目だけどね
面倒くさいならShell使った方がいい
338デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/22(日) 23:20:46.21
この辺ね
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762164%28v=vs.85%29.aspx

定義はP/Invoke探せばあるでしょう
340デフォルトの名無しさん:2012/01/22(日) 23:22:01.99
俺ならうっかり指定してなければフォルダ選択させるかなその場で
341デフォルトの名無しさん:2012/01/22(日) 23:24:52.34
>>337
>>339
よく読んでやってみます
342デフォルトの名無しさん:2012/01/22(日) 23:46:31.95
>>331
100fpsとか高望みにも程がある

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

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

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

のように明記するのはあり
343デフォルトの名無しさん:2012/01/22(日) 23:56:14.16
>>307-308

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

>>309
それじゃ意味ねーだろwww
344デフォルトの名無しさん:2012/01/22(日) 23:57:50.32
nullとemptyと どうちがうんだっけ?
345デフォルトの名無しさん:2012/01/23(月) 00:18:52.35
nullは文字列データが存在しない
emptyは長さ0の文字列

ちなみにstring.Emptyはリフレクションで再代入ができるので(Mono環境だとできないが)
空文字列かどうかを調べるのにstring.Emptyとの比較は微妙
string.Emptyをいじることはないと思うけどな
346デフォルトの名無しさん:2012/01/23(月) 00:22:59.64
なんでリフレクションでmscorlibを弄られた場合の耐性なんて論じる必要があるんだ?
そんなことを言いだしたら他のフィールドも全部信用できないだろ
347デフォルトの名無しさん:2012/01/23(月) 00:24:29.39
""
" "
使ってると、化石扱いされるの?
348デフォルトの名無しさん:2012/01/23(月) 00:53:33.57
の?
まで読んだ。
349デフォルトの名無しさん:2012/01/23(月) 00:54:06.38
の?
まで読んだ。
350デフォルトの名無しさん:2012/01/23(月) 00:55:00.93
全部読んでるんじゃねぇかw
351デフォルトの名無しさん:2012/01/23(月) 01:16:44.04
>>342
ラベルのText書き換えるだけなら100/sくらい全然余裕だろ
どうせ表示できないけど
352デフォルトの名無しさん:2012/01/23(月) 11:35:34.27
お世話になります。

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

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

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

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

よろしくお願いいたします。
353デフォルトの名無しさん:2012/01/23(月) 11:46:46.20
ご教授~
354デフォルトの名無しさん:2012/01/23(月) 11:51:00.09
実行ファイル名やウィンドウタイトル等から既に起動したプロセスのウィンドウを特定してプロセス間通信
この場合開いたファイルパスだけ送りゃいいだろ
355デフォルトの名無しさん:2012/01/23(月) 11:51:09.81
二重起動のチェックをしてるところで読み込めばいいだけでしょ
356デフォルトの名無しさん:2012/01/23(月) 11:59:39.36
は?
357デフォルトの名無しさん:2012/01/23(月) 12:01:33.21
ああわかった。OSの関連付けで起動プログラムが指定されるから
二重起動をさせずに2つめの関連付けされたファイルを起動済みの
プログラムに渡すにはどうすればいいか?って意味ね。
358デフォルトの名無しさん:2012/01/23(月) 12:08:51.80
じゃあソケット通信で
359デフォルトの名無しさん:2012/01/23(月) 12:11:40.32
プロセス間通信が必要だよ
ここでさらっとコード貼ったりできる程度じゃない
360デフォルトの名無しさん:2012/01/23(月) 12:17:57.33
面倒なのでMicrosoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase使う
361デフォルトの名無しさん:2012/01/23(月) 12:19:14.97
sendmessageで送って受信側に受け取りのイベントを書けばいいだけじゃないの?
362デフォルトの名無しさん:2012/01/23(月) 12:21:04.32
ちょっと上の方にWCFのサンプルもあったし、全然難しくないよ
363デフォルトの名無しさん:2012/01/23(月) 12:28:48.58
プログラムを2つに分ける。

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

アプリケーション本体には、二重起動チェックはそのまま入れておく。
関連付けで起動されるスタブは、アプリ本体が起動されていなければ
起動して引数にファイル名を渡す。
アプリ本体がすでに起動されていればプロセス間通信でファイル名を
渡す。プロセス間通信というかスタブからのメッセージPOSTを受ける
だけでいい気もするけど。
364デフォルトの名無しさん:2012/01/23(月) 12:35:38.81
ファイルで渡せばいいよ
365デフォルトの名無しさん:2012/01/23(月) 12:48:47.27
秀丸のマクロから呼び出せるDLLはC#では作れないとご助言を受けたのですが
C#でもCみたいにexternする裏技みたいなのは無いのでしょうか?
366デフォルトの名無しさん:2012/01/23(月) 12:50:06.13
無いから無理だと言ってんだろカス
367デフォルトの名無しさん:2012/01/23(月) 12:50:51.40
プロセス間通信が理解できてるなら聞いてくるような内容じゃないだろ
お前には無理でFA
368デフォルトの名無しさん:2012/01/23(月) 12:53:39.94
WCFで書いた
http://ideone.com/fk8nr
369デフォルトの名無しさん:2012/01/23(月) 13:14:14.74
treeViewで隠し属性を表示させない方法はないでしょうか?
370デフォルトの名無しさん:2012/01/23(月) 13:17:21.05
隠し属性ってなんだよハゲ
371デフォルトの名無しさん:2012/01/23(月) 13:18:57.19
>>369
もしかすると「TreeViewでフォルダーツリー作っているんだが、hidden属性のフォルダー無視する方法ない?」って質問かな?
372デフォルトの名無しさん:2012/01/23(月) 13:19:20.05
はげてないよ
373デフォルトの名無しさん:2012/01/23(月) 13:20:52.45
ふっさふさだよ
374デフォルトの名無しさん:2012/01/23(月) 13:22:15.42
>>371
ですです
375デフォルトの名無しさん:2012/01/23(月) 13:26:43.72
>>374
hidden属性のフォルダーかチェックしてhiddennなら追加しない
376デフォルトの名無しさん:2012/01/23(月) 13:31:25.40
>>368
varで書くのはいいけどぱっと見で重要なオブジェクトかどうかわかりづらい
基本構造について理解が妨げられるような感じ

オブジェクト平等主義なんだろうけど定数の様な物や
stringはvarじゃないほうがいいような気がするなあ
377デフォルトの名無しさん:2012/01/23(月) 13:36:07.31
本題でもねえところに一々突っ込んでくんなよ
378デフォルトの名無しさん:2012/01/23(月) 13:38:22.10
触るな
379デフォルトの名無しさん:2012/01/23(月) 13:43:12.62
そうするよ
380デフォルトの名無しさん:2012/01/23(月) 13:43:59.85
language:がC++ (gcc-4.3.4)だとかどうでもいい
381デフォルトの名無しさん:2012/01/23(月) 14:08:32.06
>>365
C# で書いたDLLをCOMに見せかける機能はあるので、
C++ で一段階ラッパー書けば使えるとは思う。
結構大変(情報全然出てこない)と思うけど。
382デフォルトの名無しさん:2012/01/23(月) 14:15:35.43
ツールボックスの中にあるフォルダダイアログって表示したままフォームの一部に貼り付けておくことって出来ないですか?
383デフォルトの名無しさん:2012/01/23(月) 14:26:55.82
LoadLibraryで.netのdllを呼んでくれるラッパーおれも欲しいで
384デフォルトの名無しさん:2012/01/23(月) 14:59:02.80
>>381
まじすか
これ需要あるますので有料でもいいのでほしいですよ
385デフォルトの名無しさん:2012/01/23(月) 15:19:37.41
ラッパーほしいとか有料でも欲しいと言ってる人は誤解している
386デフォルトの名無しさん:2012/01/23(月) 15:20:15.01
なぜよ?
387デフォルトの名無しさん:2012/01/23(月) 15:26:58.33
C++/CLIで作ればいいだけじゃないか
388デフォルトの名無しさん:2012/01/23(月) 15:34:35.57
ネイティブDllでは
CLIいれられないよ
389デフォルトの名無しさん:2012/01/23(月) 15:36:27.02
DllImportじゃダメなん?
390デフォルトの名無しさん:2012/01/23(月) 15:39:31.33
そのimportする対象のDLLが作れないってことだよ
391デフォルトの名無しさん:2012/01/23(月) 15:52:32.08
本当クソだなC#
392デフォルトの名無しさん:2012/01/23(月) 15:56:26.14
C++/CLIって何のためにあるんだw
393デフォルトの名無しさん:2012/01/23(月) 16:16:22.16
C++/CLIはいらない子、害悪
394デフォルトの名無しさん:2012/01/23(月) 16:35:18.56
listviewにヘッダーが一つだけあります
ヘッダーの列の幅を100%に自動調節したいので
ttp://dobon.net/vb/dotnet/control/lvautocolumnwidth.htmlをみながら
listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
と書いてみたのですがサイズが変わりません
どうかご教示お願いします
395デフォルトの名無しさん:2012/01/23(月) 16:44:15.06
>>394
変わるけどな?
先頭大文字なのが気になるけど、、、ちゃんと呼んでる?
396デフォルトの名無しさん:2012/01/23(月) 16:44:49.22
大文字なのはリンク先だった、失礼
397デフォルトの名無しさん:2012/01/23(月) 16:50:07.58
縦スクロールバーの処理入れると割と面倒だったな
398デフォルトの名無しさん:2012/01/23(月) 17:06:49.15
>>395
あれ?おかしいな?何でだろう
ヘッダーにwidth = -2にってやると100%で表示されるんですが
これだと画面の大きさや項目を変更したときには反映されないので困りました
ちなみに.Net4.0なんですけど項目は全部半角英数でaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaを10行挿入しました
ヘッダーめいはabcdeって入れてます
399デフォルトの名無しさん:2012/01/23(月) 17:08:12.32
>>389
やりたいことはその逆だからダメだろ。

>>392
ネイティブなものを .NET から使うためだよ。
今はその逆の話で、それは C++/CLI でやることじゃない。
400デフォルトの名無しさん:2012/01/23(月) 17:09:47.19
>>384
http://msdn.microsoft.com/ja-jp/library/8bwh56xe.aspx
こんなの。

別に無料版の VC#/VC++ でもできるんじゃないかな。
自分でやったことないからこれ以上はわかんない。
401デフォルトの名無しさん:2012/01/23(月) 17:10:11.52
まあ普通のDLL作ってそれがExeをキックすればいいな。
402デフォルトの名無しさん:2012/01/23(月) 17:11:14.51
>>400
ありがとう
もしよろしければこのリンク見てアフィリエイトふみまくるので誰か作ってください
403デフォルトの名無しさん:2012/01/23(月) 17:15:19.68
>誰か作ってください

まだ意味が解ってないみたいだな…
404デフォルトの名無しさん:2012/01/23(月) 17:23:39.62
c#で作った独自プログラムをCOM化してやって
それを使った中間ネイティブDLL作るんだよ

間に何かあって勝手にネイティブ変換してくれるもんじゃない
自分で作るもんだぞ
405デフォルトの名無しさん:2012/01/23(月) 17:33:07.33
つまり自分で作ったdllの中でそういう作業をしないといけないって事すか
406デフォルトの名無しさん:2012/01/23(月) 17:34:44.84
秀丸マクロでDLLを呼び出したらHello Worldを返すだけの処理なんですがサンプルお願いできませんか?
407デフォルトの名無しさん:2012/01/23(月) 17:39:58.05
秀丸マクロのつくり方のページをまじめに読んでいたら
そういうお願いは無駄だと感じるはずだけどなあ
408デフォルトの名無しさん:2012/01/23(月) 17:52:33.58
何かあったら金をちらつかせたり
他人に頼みごとをして解決する人は嫌いです
409デフォルトの名無しさん:2012/01/23(月) 17:57:59.95
ksなスレですねここは
410デフォルトの名無しさん:2012/01/23(月) 18:35:17.92
C++/CLIは.NETの上でC++を使いたい人用なんじゃないの。
ただのC++より安全だとは思うけどC++使うならネイティブの
ほうがいい。
411デフォルトの名無しさん:2012/01/23(月) 18:40:02.57
ごちゃごちゃ抜かさずCかC++覚えろ
412デフォルトの名無しさん:2012/01/23(月) 18:59:36.52
>>410
一番の用途はネイティブコードを .NET から参照する用よ。
.NET 使いたいだけなら素直に C# に移る方がよっぽど楽。
413デフォルトの名無しさん:2012/01/23(月) 19:01:07.24
つうかよ秀丸でC#のDLLを呼べるようにするのが一番いいよな
414デフォルトの名無しさん:2012/01/23(月) 19:05:28.61
もういいよ
まだ4000YENの話を続けなきゃいけないのか?
415デフォルトの名無しさん:2012/01/23(月) 19:08:42.01
MS製品ですら未だVB Scriptだからねぇ。
昔からあるものを、今のものに対応させるって大変。
416デフォルトの名無しさん:2012/01/23(月) 19:14:06.86
4000YENとか、金額の問題じゃないだよ
417デフォルトの名無しさん:2012/01/23(月) 19:18:31.63
どうしても金払いたいなら
日当三万払ってプロに頼めよ
418デフォルトの名無しさん:2012/01/23(月) 19:26:45.99
string[] a = {"a","b","c","d","e"};
という配列があって
インデックスAを指定して、指定した位置Bに移動する方法を伝授してください
例えばインデックス3を1の位置に移すなら
{"a","d","b","c","e"};
という結果にしたいのです
419デフォルトの名無しさん:2012/01/23(月) 19:35:56.58
string n = a[2];
a[3] = a[1];
a[1] = n;

これを書きたくないと言うならC#向いてないから今すぐ止めてくれ
420デフォルトの名無しさん:2012/01/23(月) 19:38:18.56
よく見ると処理内容が違ってるだろw

list<string>使えと言う回答はダメですかw
421デフォルトの名無しさん:2012/01/23(月) 19:39:35.77
>>419
止めるべきはお前だったな

ListならInsertで済むのにな
Listはメモリガーとか言う人かね
422デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/23(月) 19:52:04.57
string[] a = {"a","b","c","d","e"};

a = new string[]{"a","d","b","c","e"};
424デフォルトの名無しさん:2012/01/23(月) 19:56:00.16
天才が出たぞ
425デフォルトの名無しさん:2012/01/23(月) 19:56:46.40
一時退避変数にインデックスの場所の値を入れておく
そこから後ろをArray.Copyで1個ずつ前にコピー
移動先を含めてArray.Copyで1個ずつ後ろにコピー
移動先に一時退避変数を代入

これでいいのか?
426デフォルトの名無しさん:2012/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デフォルトの名無しさん:2012/01/23(月) 20:29:27.09
リングバッファーではないよね。
428デフォルトの名無しさん:2012/01/23(月) 20:58:54.10
64バイトの中々ダブらない文字列を作るにはどうやれば良いですか?
429デフォルトの名無しさん:2012/01/23(月) 21:04:30.13
GUIDのテキスト表記からハイフン抜いて2つつなげる
っていうか64バイトもいらんだろ
430デフォルトの名無しさん:2012/01/23(月) 21:05:09.40
00000000
00000001
00000002
という感じで使える文字の範囲で順番に作ればダブらないよ
431デフォルトの名無しさん:2012/01/23(月) 21:06:24.15
GUID使うなら4つ必要じゃん
432デフォルトの名無しさん:2012/01/23(月) 21:07:12.53
guidって128ビットだった気がするんですが....
433デフォルトの名無しさん:2012/01/23(月) 21:09:25.20
33~126の乱数をcharに変換して64個並べる
434デフォルトの名無しさん:2012/01/23(月) 21:10:21.84
>>423
wwwwwwwww
435429:2012/01/23(月) 21:10:36.50
2進数のテキスト表記で32文字x2ってこと
436429:2012/01/23(月) 21:11:20.84
すまん16進数の間違い
437デフォルトの名無しさん:2012/01/23(月) 21:12:52.14
>>431
Guid自体は128bitだけど文字だと32文字→とりあえず32バイト→2つ必要
ってことなんじゃね?
438デフォルトの名無しさん:2012/01/23(月) 21:13:06.89
>>419
何だそのしょぼコードは!
おまけに結果が変だろ!
dがないだろ!
{"a","c","c","b","e"};
439デフォルトの名無しさん:2012/01/23(月) 21:26:35.48
guidを調べて見ます。どうもありがと
440デフォルトの名無しさん:2012/01/23(月) 21:35:35.57
いやいやいや
どういう仕様なのか分からないからあれだが
441デフォルトの名無しさん:2012/01/23(月) 21:37:32.99
普通にGUIDをそのまま使えよ
64バイトもいらん
442デフォルトの名無しさん:2012/01/23(月) 21:50:29.96
64バイト使って256ビット分の情報量ってすごくもったいない感じだね
443デフォルトの名無しさん:2012/01/23(月) 21:52:59.68
んなこと言い出したらテキスト中の数値は全部バイナリにしないといけなくなるぞ
444デフォルトの名無しさん:2012/01/23(月) 21:56:51.39
テキスト中の数値はテキストとして価値があるだろ
今回UUIDを文字列にする価値があるのかは知らんが
445デフォルトの名無しさん:2012/01/23(月) 22:01:29.10
listViewのチェックを変更させないようにしたいのでchangedイベントで前の状態に戻すように書いたのですが
スタックオーバーフローになってしまいますがよい書き方や設定があったら教えてください。
446デフォルトの名無しさん:2012/01/23(月) 22:15:20.97
Checkedイベントでチェック状態変更したらループするだろ

チェック状態変更する前にフラグ立てて、2回目以降のCheckedイベントを回避しろ
447デフォルトの名無しさん:2012/01/23(月) 22:21:17.99
できた^-^ありがとん
448デフォルトの名無しさん:2012/01/23(月) 22:21:55.11
できません
>>447
この人は偽者です。
449デフォルトの名無しさん:2012/01/23(月) 22:34:23.15
あるかないか分からないファイルを沢山削除したいのですが、
fileExistsで確認してから削除するのととりあえずdeleteでエラーを受け取るのではどっちが良い(早い)ですか?
450デフォルトの名無しさん:2012/01/23(月) 22:36:00.02
そうですか、できないですか
困りましたね…
451デフォルトの名無しさん:2012/01/23(月) 22:37:09.94
そんなもんファイルが無い確率によるわ
452デフォルトの名無しさん:2012/01/23(月) 22:38:48.73
5000個のうち5-10%無いかもです
453デフォルトの名無しさん:2012/01/23(月) 22:39:51.87
じゃあExists使っとけ
454デフォルトの名無しさん:2012/01/23(月) 22:40:50.26
そうする
455デフォルトの名無しさん:2012/01/23(月) 22:43:49.77
例外が嫌ならP/InvokeでDeleteFile打ちまくれば?
良し悪しで言えば最悪だろうけど
456デフォルトの名無しさん:2012/01/23(月) 22:48:40.28
全てを消し去ってくれる
457デフォルトの名無しさん:2012/01/23(月) 22:58:37.34
僅かな速さの違いを気にするような案件とは思えないな
458デフォルトの名無しさん:2012/01/23(月) 23:02:47.98
クライアントが神経質って要件があるやも試練
459デフォルトの名無しさん:2012/01/23(月) 23:04:49.19
お前らまた騙されてるな

ファイル無くてもDeleteでエラー出ないぞ…
460デフォルトの名無しさん:2012/01/23(月) 23:06:55.72
PInvokeとInvokeとどっちがボケなの?
461デフォルトの名無しさん:2012/01/23(月) 23:07:23.26
普通、例外のコスト<Existsのコストなんじゃないの
462デフォルトの名無しさん:2012/01/23(月) 23:07:29.28
何というか最近ハメ質問ばかりだな

川俣でもいるんだろうか…
463デフォルトの名無しさん:2012/01/23(月) 23:09:34.76
ほら一応MSDNから

File.Delete メソッド
指定したファイルを削除します。指定したファイルが存在しない場合、例外はスローされません。
464デフォルトの名無しさん:2012/01/23(月) 23:10:16.17
listViewのチェックの状態を別スレッドで知りたいのですがどうやって書けば良いですか?
チェックを付けたり外したりするdelegateはできましたが戻り値を受け取る方法がわかりません。
465デフォルトの名無しさん:2012/01/23(月) 23:18:09.80
つまり
>>449はそのままDeleteで削除する
466デフォルトの名無しさん:2012/01/23(月) 23:37:18.30
>>464
Control.Invokeの戻り値に「デリゲートの戻り値」が戻ってくると書いてあるだろう
http://msdn.microsoft.com/ja-jp/library/zyzhdc6b%28v=vs.80%29.aspx

デリゲートの中でListViewのアイテムにアクセスして、returnでCheckedを返せばいい
467デフォルトの名無しさん:2012/01/23(月) 23:40:01.54
Webページを取得してるんですけど
例えばこんなURLで
hoge.com/hoge?id=1

id=1~nまでのデータを取得したいんですけどどうすればいいですか?
468デフォルトの名無しさん:2012/01/23(月) 23:41:53.30
最近の初心者は文字列操作より先にWebClientが使えるようになるのか?
469デフォルトの名無しさん:2012/01/23(月) 23:42:03.23
URLのケツの数字をどうにかして書き替えるプログラムをまず書きます

WebClientでもなんでも使ってURLのリソースをGetします

Perfect!
470デフォルトの名無しさん:2012/01/23(月) 23:42:40.41
頭より手が動いてるんだろう
あとティンコ
471デフォルトの名無しさん:2012/01/23(月) 23:47:41.96
その方法教えろって言ってんだろくずが
472デフォルトの名無しさん:2012/01/23(月) 23:49:05.44
string filename = @"C:\sample.txt";
こんな感じの固定したい変数がたくさんあるんですが、
コード中の各メソッドにちりばめられてます
後で変更するときにきついのですが
これはどのように管理したらよいでしょうか?
473デフォルトの名無しさん:2012/01/23(月) 23:49:57.94
>>469
>>数字をどうにかして
どうすればいいんですか?
474デフォルトの名無しさん:2012/01/23(月) 23:50:48.06
よく分からないがフィールドに置いたらいかんのか?
メソッドの中にしか変数を置けないと思っているのなら入門を読み直した方がいい
475デフォルトの名無しさん:2012/01/23(月) 23:52:01.70
>>473
とりあえず=の後ろを切り取って、数字を付け直せばいいんじゃないのかな
そのくらいは調べてできるよな
476デフォルトの名無しさん:2012/01/23(月) 23:55:08.01
>>475
はい。 仮に今idが1~10まであって
突然11までとかになったら自分で修正するしかないのですか?
477デフォルトの名無しさん:2012/01/23(月) 23:55:18.02
>>474
classの真下に
private string filename = @"~";
って各方法以外にありませんか?
Cでいう構造体みたいなのができればいいんですが
478デフォルトの名無しさん:2012/01/24(火) 00:01:23.76
固定したいのか変更したいのかハッキリしなさい
479デフォルトの名無しさん:2012/01/24(火) 00:06:41.79
>>466
できたありがと。
でもデリゲート意味わからなすぎ
480デフォルトの名無しさん:2012/01/24(火) 00:08:50.79
>>478
あとでコード修正しやすいように1ブロックにまとめて管理したいんです
481デフォルトの名無しさん:2012/01/24(火) 00:19:32.14
internal static class XXX
{
internal static readonly string filename1= @"~";
internal static readonly string filename2 = @"~";
internal static readonly string filename3 = @"~";
internal static readonly string filename4 = @"~";
}

って感じでまとめれば
482デフォルトの名無しさん:2012/01/24(火) 00:20:01.76
フィールドだけ集めたクラスを作ったら同じように使えないかい
483476:2012/01/24(火) 00:39:59.24
返事待ってます!
分かる方お願いします!
484デフォルトの名無しさん:2012/01/24(火) 00:41:12.81
そこはenumじゃないのか
485デフォルトの名無しさん:2012/01/24(火) 00:41:37.39
>>483
アホらしいから何も言わなかったんだけどな
プログラムが「突然11になった」ことを認識できるように書けば自動化することもできるだろう

お前がAIを造ればいいんだよ
486476:2012/01/24(火) 00:42:33.16
>>485
どうすれば?
487デフォルトの名無しさん:2012/01/24(火) 00:43:10.62
そうだな、さしあたり人工知能関係の本でも読めばいいんじゃないか
488476:2012/01/24(火) 00:45:38.15
不可能ということですか?
489デフォルトの名無しさん:2012/01/24(火) 00:48:07.60
自動化するのに「必要なもの」があるなら
その「必要なもの」を入手する部分を自動化する
その「「必要なもの」を入手する部分を自動化するために必要なもの」があるならそれも自動化する
これを必要なものがなくなるまで繰り返してようやくあなたは仕事から解放される
490476:2012/01/24(火) 00:50:56.01
うーん。
+1を付け足しといたらいいんですかね
491デフォルトの名無しさん:2012/01/24(火) 00:50:57.94
その11って数字をどこからか探してこれるなら不可能じゃないさ。
どこから取ってくればいいかって?そんなことは知らん。
492476:2012/01/24(火) 00:52:21.14
うーん。意味ないっすね
難しいですね><
493デフォルトの名無しさん:2012/01/24(火) 00:58:53.72
winFormから別のスレッドを実行して
MessageBox.Show(this,"ほげ");
でモーダルなメッセージボックスを出したいのですがこれだとエラーになりますが
正しい書き方を教えて頂きたいです。
494デフォルトの名無しさん:2012/01/24(火) 01:02:50.29
495476:2012/01/24(火) 01:43:02.69
なんとかして出来そうな気がするんですけどね
496デフォルトの名無しさん:2012/01/24(火) 03:35:34.40
for 使えばできますよ。
497476:2012/01/24(火) 06:49:56.59
Forじゃできないと思うのですが、どういうことでしょうか?

1から10までってわけじゃないのですが
498デフォルトの名無しさん:2012/01/24(火) 07:02:54.31
C#にて下のページの上から5番目のようなフォントで文字を
描画したいのですがどのようにすればよいでしょうか?
http://www5f.biglobe.ne.jp/~ayum/gazouhenkan/jtrim/066.html
499476:2012/01/24(火) 07:08:31.00
相手が更新しなければ、うれしいんですけど。
うーん。突然idが20までになったら、、10以降のデータを取得てぎないんですよね。難しい。
500デフォルトの名無しさん:2012/01/24(火) 07:08:45.82
>>497
こういうことじゃないのけ?
ttp://ideone.com/9K7Rn

コレでいいなら基本だと思うんだけど。
501デフォルトの名無しさん:2012/01/24(火) 07:20:09.48
よく読んだらこういうことか。

リアルでやって捕まる前に「やめとけ」と一応言っておくよ。

ttp://ideone.com/YJuVK
502デフォルトの名無しさん:2012/01/24(火) 07:25:11.44
>>499
Accumulated PAIN revarse to you!! 
503476:2012/01/24(火) 07:28:52.65
え・・犯罪なのですか・・・
しりませんでした
ありがとうございます
504デフォルトの名無しさん:2012/01/24(火) 07:31:34.10
>>503
コレで鯖が止まったらどういう言い訳するんだよ。営利妨害じゃないか?
505デフォルトの名無しさん:2012/01/24(火) 07:44:00.79
岡崎図書館事件か
逮捕されて有罪になったんだっけ?
落ちる原因がなんであれ、侵入した事実があれば逮捕で臭いメシ食えるよ、やったね!
506476:2012/01/24(火) 07:47:33.54
リンクタグをパーサしたら出来そうな気がするんですけど
507デフォルトの名無しさん:2012/01/24(火) 07:51:21.09
じゃあそうすればいいじゃん
508476:2012/01/24(火) 07:51:45.65
専ブラ使っても2chが落ちないのはなんでだろう。。
509デフォルトの名無しさん:2012/01/24(火) 07:59:34.21
>>508
2chの鯖結構高性能なんだぜ。あとは専ブラ作者とユーザに良識があるからだな。
情報取りに行った鯖がMMXPentiumで運営してて、落ちたらどうするんよ。

相手が貧弱でした!って言って通るのかよ。
510デフォルトの名無しさん:2012/01/24(火) 08:13:45.83
専ブラは、dat だけ取ってきてHTML化はローカルでやるから、むしろ軽いのよね、普通にウェブブラウザーで見るよりも。
スレ一覧とかも、総当たりで取ってるんじゃなくてインデックス読んでるし。
511デフォルトの名無しさん:2012/01/24(火) 09:03:16.39
念のため通報しました
512デフォルトの名無しさん:2012/01/24(火) 11:05:59.37
意味不明なんだけど
ここまでの流れ詳しく…
513デフォルトの名無しさん:2012/01/24(火) 11:12:50.89
初心者向けに何かフォームプログラムのお題をください
514デフォルトの名無しさん:2012/01/24(火) 11:22:07.10
>>513
どのくらい初心者かわからんが、全くの初心者なら関数電卓とか
ちょっとかじったことあるならペイントとか静止画⇔動画変換とか
515デフォルトの名無しさん:2012/01/24(火) 11:41:27.44
アナログ時計もいいかもね
516デフォルトの名無しさん:2012/01/24(火) 12:15:30.78
関数電卓をぐぐって見たんですが
1+(2*3)+(4/5*(6/3))みたいに括弧が出てくるとどのようにパーサして計算していいのか分からず
JavaScriptみたいにevalってないんですね
これは初心者にはキツイです
静止画と動画はおもしろそうですね
アナログ時計なら出来そうです
517デフォルトの名無しさん:2012/01/24(火) 12:21:18.92
>>516
ツリーを作る
518デフォルトの名無しさん:2012/01/24(火) 12:21:49.03
二分木ね
519デフォルトの名無しさん:2012/01/24(火) 12:22:52.76
>>516
C# eval とか検索すればいいのに。
520デフォルトの名無しさん:2012/01/24(火) 12:25:32.86
アセンブリや型を生成せずにC#のコードを実行する方法は無い
オーバーヘッドがものすごいしメモリリークする
521デフォルトの名無しさん:2012/01/24(火) 12:29:48.18
別プロセスにすればリークは問題にならないな
AppDomainは動的コンパイルのリーク回避に使えなかったっけ?
522デフォルトの名無しさん:2012/01/24(火) 12:32:29.12
何でC#には数式のパーサライブラリがないんだろ
523デフォルトの名無しさん:2012/01/24(火) 12:35:07.26
カッコや演算子の優先順位くらいなら再帰下降パーサ手書きで案外簡単にできるよ
でも少なくとも初心者向けではないし頑張って勉強して作ったとしてもあんまり役に立たん経験
524デフォルトの名無しさん:2012/01/24(火) 13:48:41.96
Visual C# 2010 Expressなんですが、対象のフレームワークを「.NET Framework 4」に固定する方法はありますか?
毎回プロパティから変更するのは面倒&保存しなければならないので
525デフォルトの名無しさん:2012/01/24(火) 13:50:44.34
お金払えばできるよ
526デフォルトの名無しさん:2012/01/24(火) 13:57:46.95
なんてこった
527デフォルトの名無しさん:2012/01/24(火) 14:22:40.88
横だが、Expressはデフォが4.0だと思ってたw
528デフォルトの名無しさん:2012/01/24(火) 17:18:22.87
普通に前回使用したフレームワークになってないか? >Express
529デフォルトの名無しさん:2012/01/24(火) 17:21:40.11
そもそも4.0しか選べないし
530デフォルトの名無しさん:2012/01/24(火) 17:24:49.05
俺のは開いたら4.0Clientになってる

>>529
え?・・・え?
531デフォルトの名無しさん:2012/01/24(火) 17:25:22.14
>>529
嘘乙!
532デフォルトの名無しさん:2012/01/24(火) 18:08:57.57
「パーサする」じゃなくて「パースする」って言って欲しいなあ
533デフォルトの名無しさん:2012/01/24(火) 18:26:57.27
IMEの状態を知りたいのですが、自分にフォーカスがない状態や
何にもフォーカスがない状態でも知る方法を教えて頂きたいです
534デフォルトの名無しさん:2012/01/24(火) 20:09:48.06
数式をちょろっと計算したいだけならXPathNavigator.Evaluateあたりを流用すれば出来るんじゃね?
535デフォルトの名無しさん:2012/01/24(火) 20:28:35.85
すいませんDOSでdirの結果を取得したいのですが
なんてライブラリをusingして使うのでしょうか?
536デフォルトの名無しさん:2012/01/24(火) 20:30:24.22
System.Diagnostics.Process
537デフォルトの名無しさん:2012/01/24(火) 20:33:31.75
そしてStdoutをリダイレクトして受け取る
538デフォルトの名無しさん:2012/01/24(火) 20:47:20.53
http://sakurasite.homeip.net/imgboard/img-box/img20120124204241.png
新規プロジェクトのwindowsアプリケーションを作りテキストエリア(textBox1)を作って
string[] files = Directory.GetFiles("c:\\");
で取得したファイル一覧のテキストを表示してみようかな。と思っているのですが
static void fileListUpTest()内で"textBox1"にアクセスする方法がわかりません。
textBox1.Text="hogehoge";でテキストボックスの内容を書き換えるにはどうしたらよいのでしょうか
539デフォルトの名無しさん:2012/01/24(火) 20:52:57.08
そこでコード書くの?
540デフォルトの名無しさん:2012/01/24(火) 20:53:10.40
>>536
>>537
あいりがとうございます
541デフォルトの名無しさん:2012/01/24(火) 20:53:32.12
まずそんなとこにそんな処理を書くな
542デフォルトの名無しさん:2012/01/24(火) 20:53:37.19
まず
・fileListUpTestはフォームが閉じてメッセージループが終了してからしか呼ばれない
こう書いても理解できないと思うけど。

上の画像のフォームの何もないところダブルクリックすると
Form1_Loadというメソッドが作られるからそこにfileListUpTestの中を切り取って張り付けろ
543デフォルトの名無しさん:2012/01/24(火) 20:56:08.44
・STAThreadをMainから剥がすな
・素直にForm1内に書け
・一応そこからでもtextBox1にアクセスできなくはないが、実用性は無い
544デフォルトの名無しさん:2012/01/24(火) 20:57:54.88
Form1を右クリック→コードの表示
545デフォルトの名無しさん:2012/01/24(火) 20:58:08.47
素直も何もForm1の下に書くのを知らないんだと思うが
546デフォルトの名無しさん:2012/01/24(火) 21:03:50.25
文法は結構いくらでもあるんだが、まとまったFormsとかの入門になると川俣の駄文くらいしかないんだよな
547デフォルトの名無しさん:2012/01/24(火) 21:13:20.40
失礼しました。この通りに記述したら希望通りの処理が出来ました。
http://sakurasite.homeip.net/imgboard/img-box/img20120124210336.png

・・しかし、関数を書く場所がやはりわかりません。
20行目にfileListUpTest();と書いて処理を関数化する際
static void fileListUpTest(){textBox1.Text="okok";}(簡略化しました)
は何行目に入れればよいのでしょうか
http://sakurasite.homeip.net/imgboard/img-box/img20120124211203.png
548デフォルトの名無しさん:2012/01/24(火) 21:14:40.99
とりあえず21と22の間でいいよ
549デフォルトの名無しさん:2012/01/24(火) 21:18:24.03
staticの意味を正確に答えられるようになるまでstaticを書くな
550デフォルトの名無しさん:2012/01/24(火) 21:21:10.60
>>547
今書こうとしてるのがFormを継承したForm1クラスなので
その中に入れないとw
551デフォルトの名無しさん:2012/01/24(火) 21:26:37.29
>>548-550
ありがとうございます。21と22の間に
public void fileListUpTest() { textBox1.Text = "okok"; }
で動きました。
552デフォルトの名無しさん:2012/01/24(火) 22:54:54.78
前に同じコードを別の場所に複数書いたらダメと教えてもらいましたが
使う箇所は20箇所くらいあるものですが3行くらいのコードでもまとめないとダメですか?
553デフォルトの名無しさん:2012/01/24(火) 22:56:05.94
>>552
どういう処理かわからんけどクラスが別なら場合によっては分けるしかないんじゃないの?
554デフォルトの名無しさん:2012/01/24(火) 22:56:53.75
あくまでも決定を下すのはあなたの正義
555デフォルトの名無しさん:2012/01/24(火) 22:59:39.02
>>552
関数の呼び出し自体は複数なってもいいぞ
ロジックを複数書くのはおかしいけど
556デフォルトの名無しさん:2012/01/24(火) 23:00:21.55
Cバカみたいに1行マクロみたいなことはしなくていい
557デフォルトの名無しさん:2012/01/24(火) 23:06:29.73
>>552
内容によるね

これは○○を~する処理って明確にわかってるなら
メソッドに書き出したほうがいい

例えそれが一行だとしても明確な名前を付けてメソッドにしたら
確実にプログラムの理解度が上がるし後で変更しやすくなる
558デフォルトの名無しさん:2012/01/24(火) 23:09:24.94
こういう話は入門書では扱わないから
初心者は戸惑うよね
559デフォルトの名無しさん:2012/01/24(火) 23:15:35.49
>>558
Cのころだとどこかのソースに関数置いておいて使うところでヘッダー取り込んで
使うっていうのが普通だったけどオブジェクト指向となるとその辺をどう吸収するかって
初心者は悩みそう

まあ悩んだら機能を持たせるクラスを作ってそこへほうりこんで必要になったら
newして使えばいいんだけどね

System.IO関連のクラスのような感じで
560デフォルトの名無しさん:2012/01/24(火) 23:16:32.03
こういう視点から見ると今の入門書はすべて落第点

プログラム入門と歌いながら他言語から移ってきた人用にしか見えない入門書ばかり
561デフォルトの名無しさん:2012/01/24(火) 23:19:33.78
そこらへんは人のコード見て覚えた方が速いんだけどね
下手に考えながらやっても時間かかるだけ
最初は考えるより学ぶのが重要
562デフォルトの名無しさん:2012/01/24(火) 23:22:20.77
>>560
一応そういう本も擁護しとくと、「プログラミング入門」と「C#入門」はまた話が別。

まあそうは言っても、あえてそこを曖昧にしてたり、前書きにはっきりプログラミング初心者を
読者対象と書いてあるのに中身は全然そうなってない詐欺的な本とか実際あるね
563デフォルトの名無しさん:2012/01/24(火) 23:22:53.32
気になるならTargetedPatchingOptOutAttributeでも貼れば?
564デフォルトの名無しさん:2012/01/24(火) 23:23:26.70
オブジェクト指向と一言で済ますけど
オブジェクト指向じゃない言語をやって
初めて理解できるものだと思う
565デフォルトの名無しさん:2012/01/24(火) 23:23:40.78
ピクチャーボックスが20個あってクリックしたらそれをボタン名にするというものなのですがどうでしょうか
if (e.Button == MouseButtons.Left)
{
button1.Text = "1";
}
の4行か下の呼び出しの1行か
void setButton1Text(MouseEventArgs e,int num)
566デフォルトの名無しさん:2012/01/24(火) 23:24:45.80
部分的なコードはるな
567デフォルトの名無しさん:2012/01/24(火) 23:25:59.26
でもC#はまだましな方だな。
Androidの本は本当に酷いのが多い。っていうか、まともな本ってあるのかな。
568デフォルトの名無しさん:2012/01/24(火) 23:26:07.00
よく分からんがループ内でクロージャ使ったイベントハンドラ作れば対処できそう
569デフォルトの名無しさん:2012/01/24(火) 23:28:03.85
大量のコード貼る場合は>>2のサイト使ってね
570デフォルトの名無しさん:2012/01/24(火) 23:28:59.16
>>565
その様子だと、個々のPictureBoxごとにイベントハンドラを用意してそうだなw
まずそれを1つにまとめることを考えた方がいい。
571デフォルトの名無しさん:2012/01/24(火) 23:31:24.05
>>565
setButton1Text
この名づけ方はただやってることをそのまま名前にしただけだよね

もっと意味のある言葉で書き換えられないの?

俺はそのソース見てないけど
何のためにあるボタンに
なんでテキスト変更してんのかわからない

選択した画像に何か処理するためのボタンじゃないかと思うけど
572デフォルトの名無しさん:2012/01/24(火) 23:31:50.75
PictureBoxを継承すればいいじゃまいか
573デフォルトの名無しさん:2012/01/24(火) 23:31:56.48
>>565
そういう機能があるカスタムコントロールを作ればいいじゃん
もしくは、ピクチャボックス作成時に、イベントハンドラを登録するとか
var pb=new PictureBox();
pb.Click=new EventHnder(rename())
574デフォルトの名無しさん:2012/01/24(火) 23:41:53.93
>>565
書き捨て
つまりもう二度と変更しないならそのままでいい

ただしこれは今のレベルでの話
575デフォルトの名無しさん:2012/01/24(火) 23:44:18.56
偉そうに言ってる奴らが一番ズレてるなw
576デフォルトの名無しさん:2012/01/24(火) 23:47:29.61
いくつか方法があるみたいですね
>個々のPictureBoxごとにイベントハンドラを用意してそうだなw
が気になります。object sender, MouseEventArgs eを丸投げして一まとめはわかりますが、
イベントプロシージャが20個要らない書き方があるということですか?

名前の付け方はいつもこんな感じでやってることを書くようにしてますが処理の内容を書くべき?
でもそうすると処理をするメソッド名が困るような気が・・
577デフォルトの名無しさん:2012/01/24(火) 23:50:29.00
>>576
>イベントプロシージャが20個要らない書き方があるということですか?
あるよ

どういう目的の物を作ってて現状どういうコードなのかとかわかれば
アドバイスもしやすいんだが・・・
578デフォルトの名無しさん:2012/01/24(火) 23:51:23.04
>>576
うん、今の段階で君が最初に調べて覚えるべきことは、
コードでコントロールのイベントをメソッドに紐付けする方法。

あとのことはそれから考えればいいよ。
579デフォルトの名無しさん:2012/01/24(火) 23:55:30.52
ピクチャーボックスが20個あってクリックするとbutton1.Textが「nの画像を縮小する」になって
それを押すと縮小して保存するというものなんですが・・
>>578調べてみます
580デフォルトの名無しさん:2012/01/25(水) 00:09:13.33
webプログラムからC#にきたんですけど
フォームアプリケーション製作にMVCで作成できますか?
フレームワークをググってもasp.netばっかり引っかかってしまうので
581デフォルトの名無しさん:2012/01/25(水) 00:11:29.74
MVCぽいことをやる場合はWPFかな?
winformは・・・
582デフォルトの名無しさん:2012/01/25(水) 00:26:23.87
できた^^
http://pastebin.com/nbCye2hv
↑でいいですか? (ピクチャーボックス20個一まとめの件)
583デフォルトの名無しさん:2012/01/25(水) 00:26:40.44
javaといえばMVC
c#も言語的には大して変わらない

WPFは地獄w
584デフォルトの名無しさん:2012/01/25(水) 00:29:15.66
>>582
なんでインデックスが1からはじまってるんだろう・・・。
なぜfor文を使わないんだろう・・・。
585デフォルトの名無しさん:2012/01/25(水) 00:30:07.25
>>582
静的に設置してあるpictureBoxのインスタンスを配列に入れるのは譲ったとしても
その後のClickイベント割り当てはせめてループにしろw
586デフォルトの名無しさん:2012/01/25(水) 00:37:51.69
あ、ほんとだ^^これはforでいいですね
インデックス番号はコントロール名と統一してみました。
でも大体正解みたいでよかったです。こんなまとめ方は想像もしてなかったのですごく良いことを知った気分です♪
587デフォルトの名無しさん:2012/01/25(水) 01:26:45.39
using されているのに
button.MouseDown += new MouseDown(button_Click)
としないのはなんで。自分で完全修飾名書いたのか。
俺は冗長なのが嫌いだから new MouseDown もかかないで、暗黙の型変換に任せるが。
まあ、これは人によると思うけど。

+= のあとに tab 2 回押せばコードスニペットっていう機能で勝手に
メソッドが追加される。
あと、こういったコードを書くときは短形編集機能を知っておくといい。
alt 押しながらマウスなりキーボードなり (Shift + 矢印) で選択すると短形編集ができる。
588デフォルトの名無しさん:2012/01/25(水) 01:34:07.96
あと、テスト・サンプルコードかもしれないけど一応突っ込んでおく。初心者スレなので。
Load イベント内でイベントを登録するのはよろしくない。
Form1 ってことは MainForm だろうから問題はおそらくでないが、
一般に Form.Load イベントは 1 回しか呼ばれるとは限らないから。

今後の拡張も考慮して、コンストラクタ内で追加するようにしたほうがいい。
public Form1() {
. InitializeComponent(); // コントロールの初期化部分。この後に記述する。
. RegisterEvent(); // イベント登録するメソッドとしてまとめるほうが多分いい。
}
private void RegisterEvent() {
. p[1] = pictureBox1;
. ...
589デフォルトの名無しさん:2012/01/25(水) 02:27:40.37
VC# 2010 Expressを使ってます。

メインフォームとサブフォームで「Listviewをcsvファイルに保存する」という
同じメソッドを使うのですが、やはりクラスファイルなどを別に作って呼び出した方が
良いのでしょうか?(と言ってもその方法がわからないのでこれから勉強するのですが)

それともこれくらいならわざわざ別ファイルを作るのはかえって効率悪いのでしょうか?
590デフォルトの名無しさん:2012/01/25(水) 02:35:51.65
どう考えてもフォームクラスからは分離するべき。
ファイルは同じでもいいがせめてクラスは別にしなさい。
591デフォルトの名無しさん:2012/01/25(水) 02:41:57.21
>>589
別のファイルに分けた方がよい
当然クラスも別物が必要になる

ただ小規模で単機能の共通関数をいくつか使うだけなら、あえて専用のクラスにしなくても、
MyCommon みたいな共通関数格納用のクラスをあらかじめ作っておき、
そこに関数だけを追加していく手もある
592デフォルトの名無しさん:2012/01/25(水) 02:43:10.12
static class ListViewHelper {
public static void SaveAsCSV(ListView listview, string fileName);
}
みたいなの作るとか。拡張メソッドにしてもいい。
データを持つクラスがあるならそこにメソッド書いたほうが見通しがいいかもしれない。
593デフォルトの名無しさん:2012/01/25(水) 02:47:02.90
すいません、589じゃないけど便乗です。
589が言ってるみたいに複数のフォームから呼び出す場合は別クラスでいいとして、
1箇所こっきりしか使わない場合でも別クラスにすべきでしょうか?
正直、クラスの作り方とか概念は理解できても、どういう場合にクラスを分けるかって
ところで毎回迷います。入門書みたいに、従業員クラスがあってどうのこうのみたいな話だと、
ついフォームクラス複数+データ保持クラス1個みたいなとこで満足してしまい結局はフォーム
クラスが肥大化しがちで、これでいいのか迷ってます。
すいませんなんか抽象的な話で。
594デフォルトの名無しさん:2012/01/25(水) 02:49:23.54
public PictureBox[] p = new PictureBox[21];

p[1] = pictureBox1;
  :
p[20] = pictureBox20;

VB脳…
595589:2012/01/25(水) 02:49:39.45
皆さんありがとうございます。

>>590
やっぱり分離すべきですよね。

>>591
なるほど、そういう方法もあるのですね。
関数の分だけクラスファイルを作るのはどうなんだろうと思っていたので
良い勉強になりました。

>>592
なるほど。詳しく説明していただいてありがとうございます。
とりあえず「格調メソッド」をggってきますw
596デフォルトの名無しさん:2012/01/25(水) 02:50:00.39
魔法の言葉
#region
597デフォルトの名無しさん:2012/01/25(水) 03:10:21.20
>>593
良くないよ。
フォームには、「このボタンが押されたらこの処理を呼ぶ」みたいなルーティングと、
「データが更新されたらしいので描画しなおす」って処理以外書かない方が無難。
処理の実体は分離。
598デフォルトの名無しさん:2012/01/25(水) 03:17:41.66
別に複数のフォームから使うから別クラスにするわけではなくて、
関係したものをクラスとして扱う。
関係ないものがそのクラスにあるのは気持ち悪いと思うべき。

だから、クラス名とそのメソッドの処理内容がかけ離れていないかを基準とする。
例えば、ListView を CSV 化するメソッドはリストビュー関連または、
そのデータ関連のクラスに書かれるべきだ。Form ではなく。
(プロジェクトが小さいのならば余り考えなくてもいいと思うが)

特に、見た目と処理部分を分けることをビューとモデルの分離といい、
MVC, MVVM とかいったパターンがあるくらい重要な概念。
だから最終目標は、UI (見た目)クラスには UI 関係のみが書かれていて、
イベントで処理メソッドを呼ぶだけ、とすること。
まあ、数年勉強してから勉強するのがいい。難しいと思う。

まずは、関連性からクラスを分け、private なりを駆使して
他のクラスから使いやすいようにする。
次に見た目の部分も、UserControl でパーツ分けをするといい。
この時、TextBox.Text とかは直接公開するのではなくプロパティを使う。
UserControl を作るころには必然とデータとビューが分離してくる。はず。

あとは region 使ってまとめる。
599デフォルトの名無しさん:2012/01/25(水) 03:22:13.07
クラスとしてまとまっていると気持ちいい、そうでしょ?
600デフォルトの名無しさん:2012/01/25(水) 09:23:34.28
他人に使ってもらうことを意識するといい
601デフォルトの名無しさん:2012/01/25(水) 10:13:22.82
MS以外の他の人の作ったライブラリ使ったことがあると
結構勉強になると思う

これは何でこんな場所だ とか この名前はちょっと
とか その逆もまたしかり
602デフォルトの名無しさん:2012/01/25(水) 11:09:45.61
配列をランダムに入れ替える関数の作り方を教えてくれ

a[0]=3、a[1]=1,a[2]=5で
randomarray(a)
ってやったら
a[0]=5、a[1]=1、a[2]=3
みたいに配列の内容がぐちゃぐちゃになる関数です
603デフォルトの名無しさん:2012/01/25(水) 11:11:32.71
配列のシャッフルでぐぐれ
604デフォルトの名無しさん:2012/01/25(水) 11:42:47.03
いったん全部Listに突っ込んで乱数で一個ずつ取り出してListから削除して配列に前から順に入れるのがわかりやすい
ちょっと工夫すればインプレースでもできるけど考え方は全く同じ
605デフォルトの名無しさん:2012/01/25(水) 11:52:09.06
>>604
というか配列なんて使わないでList<T>そのまま使ったほうがリアルなシャッフルに近くなるけどね
乱数ででた数字の場所を抜き取って後ろにつけるとかやっていけば
606デフォルトの名無しさん:2012/01/25(水) 12:00:11.93
それやるならリスト使わずにそのまま配列でやればよくね
607デフォルトの名無しさん:2012/01/25(水) 12:11:55.00
>>606
使った奴消さないと何回も同じ奴選んじゃうでしょ
608デフォルトの名無しさん:2012/01/25(水) 12:43:28.54
そんな小難しく考えなくておk
http://ideone.com/lvlG7
609デフォルトの名無しさん:2012/01/25(水) 14:18:44.97
for(i = 0;i < n;i++)
{
j = 乱数(0~n-1)
array[i]とarray[j]を交換
}
610デフォルトの名無しさん:2012/01/25(水) 15:39:56.18
>>608
OrderByは同値の時に順序が残るから
同値の場合に元の配列の前にある方が前に来るので
完全なランダムになってないと思う
611デフォルトの名無しさん:2012/01/25(水) 15:46:28.43
for(int i = array.Length - 1; i >= 0; --i)
{
var r = rand.Next(i + 1);
array[i] = array[r];
}
これでいいはず
これが正解でしょ
612デフォルトの名無しさん:2012/01/25(水) 15:50:46.77
違うわ
for(int i = array.Length - 1; i >= 1; --i)
{
var r = rand.Next(i + 1);
var temp = array[i];
array[i] = array[r];
array[r] = temp;
}

こうかな
613デフォルトの名無しさん:2012/01/25(水) 15:55:15.25
適切なのはあっても正解なんざねぇよwww
614デフォルトの名無しさん:2012/01/25(水) 15:57:58.16
そうだな
プログラムにあるのは参考例であって正解はないよ

結果的に目的の動作をすれば極端な話どんなコード書いてもいいし
動けばいいんだよ

ただそれだと困るので参考例は必要だけどw
615デフォルトの名無しさん:2012/01/25(水) 16:49:02.93
実数の限界があるから何をどうやったって偏りは残るわい
選択して抜いていく方式の場合はすべての要素を等確率で選ばなければいけないが
丸めのせいで無理
616デフォルトの名無しさん:2012/01/25(水) 17:52:21.20
俺だったらiはカウントアップするな

ソートの逆のような感じ
617デフォルトの名無しさん:2012/01/25(水) 18:42:31.66
丸めどうこう以前に、擬似乱数は均等に分布しないだろ。
618デフォルトの名無しさん:2012/01/25(水) 18:44:45.54
とりあえず今日は何もコード書いてません
何か地震雲が発生したらしいじゃないですか
何で先輩方はやる気あるんですか
619デフォルトの名無しさん:2012/01/25(水) 18:49:43.11
2ちゃんねるの専ブラを作りたいのですが細かい機能は省くとして
初心者がやると手間取ったり難しそうな処理はどんなのが考えられるでしょうか
620デフォルトの名無しさん:2012/01/25(水) 18:51:59.69
>>619
今は作り方を解説してるところもあるので別になんにもないよw
http://cs2ch.blog123.fc2.com/blog-entry-1.html

面倒なのは今時差分取得を推奨する2ch特有のアクセス方法くらいかな?
621デフォルトの名無しさん:2012/01/25(水) 19:09:35.51
乱立してるからいまさら公開しても誰も使ってくれないだろうな
逆に使われだすと今度はキチガイユーザーの粘着に耐えられるかがポイント
622デフォルトの名無しさん:2012/01/25(水) 19:17:02.77
今から参入してもお金にならないので僕はこんなのやりたいと思いませんね
あるもの使えばいいじゃない
623デフォルトの名無しさん:2012/01/25(水) 19:18:47.37
ファイルを読み込んで1行ずつ配列にすることはできませんか?
PHPのfile関数と同じことがやりたいのです
624デフォルトの名無しさん:2012/01/25(水) 19:33:11.34
よく分からんが、File.ReadAllLines
625デフォルトの名無しさん:2012/01/25(水) 19:37:17.25
>>624
ありがとうございます
626デフォルトの名無しさん:2012/01/25(水) 19:38:01.10
richTextBox1.SelectionColorでColor.Blackみたいに指定するのではなくて
rgb 0,0,0と数字で指定する方法をご教示お願いします
627デフォルトの名無しさん:2012/01/25(水) 19:52:36.44
つ Colorのメンバ一覧
628デフォルトの名無しさん:2012/01/25(水) 20:56:14.01
Color.FromArgb メソッド
629デフォルトの名無しさん:2012/01/25(水) 20:59:31.77
>>627-628
補完だしたらBlackとかRedのところにそういうもの混じってたんですね
どうもありがとうございます
630デフォルトの名無しさん:2012/01/25(水) 21:43:13.46
Form1_Loadの中からフォームにキーダウンイベントを入れたいのですが
エラー 1 デリゲート 'System.EventHandler' に一致する 'form_KeyDown' のオーバーロードはありません
っていうエラーが出てしまいます
どうやってイベントを登録したらよいでしょうか?

this.KeyPreview = true;
this.KeyDown += new EventHandler(formEvent_KeyDown);
private void formEvent_KeyDown(object sender, KeyEventArgs e) { }
631デフォルトの名無しさん:2012/01/25(水) 21:45:08.26
自己解決
KeyEventHandlerって打ったらできました
632デフォルトの名無しさん:2012/01/25(水) 21:46:02.82
>>620
ブログって記事見難いんだよなー
そこもブラウザの記事見たくてもまとまってないからみれないし
633デフォルトの名無しさん:2012/01/25(水) 21:46:08.62
Form1_Loadから
private void formEvent_KeyDown(object sender, KeyEventArgs e) { }
を出す

それから入門書を読む
634デフォルトの名無しさん:2012/01/25(水) 21:47:35.50
>>632
そもそもc#の質問じゃないでしょ
635デフォルトの名無しさん:2012/01/25(水) 21:55:45.12
最近のVSならthis.KeyDown+=って打ってからTab連打すると勝手にハンドラー作ってくれなかったっけ?
アドインの機能かもしれないけど
636デフォルトの名無しさん:2012/01/25(水) 21:58:22.52
WinFormのwebBrowserはIEをアップデートすると一緒に新しいものになりますか?
637デフォルトの名無しさん:2012/01/25(水) 21:58:36.32
638デフォルトの名無しさん:2012/01/25(水) 22:04:47.12
教えてください。
クラスのプロパティにインデクサを利用したい場合、どのように実装するのが一般的でしょうか。

・やりたいこと
 xml 形式の設定ファイルを用意し、このファイルを管理するクラスを作成する。
 必要な要素にはプロパティを用意してファイルを意識させないように参照/設定を行う。
 参照する要素にはノードの属性値を利用したい項目があり、この属性値をインデクサで指定したい。

・対策案
  a. プロパティの型として専用のクラスを用意し、[] 演算子のオーバーロードを実装する。
   ‥‥ただ、基本的にはデータ型は string でやりたいのだけど、この代理クラスを用意すると
   プロパティへの参照をクラス経由で行うことになり煩雑? operator= があればなぁ。。。

  b. ファイルの内容をあらかじめ Dictionary なりに読み込んでおき、この Dictionary を直接外部公開してしまう。
   あるいは代理クラスを用意してそのインデクサを Dictionary のキーとして参照する。
   ‥‥必要ない項目をあらかじめ読むのもなぁ。。。

強引に書けばいくらでもやり方はありそうなんですが、なんだか美しくないような気がします。
美しいかどうかは別にいいとしても、一般的にわかりにくくなってしまっては面白くないので、どうしたものかと。
639デフォルトの名無しさん:2012/01/25(水) 22:12:00.77
普通にメソッドにする
C++脳みたいな妙なこと考えないで素直にするのが一番一般的にわかりやすい。
640デフォルトの名無しさん:2012/01/25(水) 22:18:47.26
みんな>>637の資料みてC#なりの書き方してるのに否定する>>632ってw
641デフォルトの名無しさん:2012/01/25(水) 22:18:59.72
VC#の右下のプロパティから設定してもフォームデザイナに反映されないのに
コードからプロパティを設定すると反映されるプロパティってありますよねreadonlyプロパティとか。
やっぱりプロパティって右下で設定しないものでしょうか?
642デフォルトの名無しさん:2012/01/25(水) 22:35:42.02
>>624
ttp://air-snowly.cocolog-nifty.com/rakkyo/2008/02/c2_223f.html
のようなことがやりたいのですが.Net4.0だと簡単にできませんか?
643デフォルトの名無しさん:2012/01/25(水) 22:36:40.98
>>642は誤爆です
644デフォルトの名無しさん:2012/01/25(水) 22:46:30.86
>>638
いまいち要領を得ないんだが、operator implicitで良くない?
XLinq系のように
645デフォルトの名無しさん:2012/01/25(水) 22:51:11.19
属性値をインデクサで指定しないが正解っぽい
646デフォルトの名無しさん:2012/01/25(水) 22:52:26.93
#000000と0xFF000000って同じ?
647デフォルトの名無しさん:2012/01/25(水) 22:56:18.75
禅問答か
648デフォルトの名無しさん:2012/01/25(水) 23:02:09.17
プログラムを終了するときにApplication.Exit();だと確実に終了できないって電車の中で盗み聞きしました
どのようにして終わらすのでしょうか?
649デフォルトの名無しさん:2012/01/25(水) 23:07:50.24
>>646
どういう状況においてだよ
色コード?
650デフォルトの名無しさん:2012/01/25(水) 23:34:17.32
c++/bliのwinフォームだとマネージ型classってexternできなかったんですが、
C#のwinフォームではマネージ型classをexternして別ファイルで参照。
みたいな事って出来るんですか?

後、できない場合、他の方法で上の条件を満足する動きをするように組むにはどうしたら良いですか?

最後に、今日からC#改めてやり始めようと思ってるんだけど、C++みたいなノリでは書けないですよね
651デフォルトの名無しさん:2012/01/25(水) 23:39:30.50
意味がわかってないかもしれない。すまん。
DLL にして(クラスライブラリを作成して) static なインスタンスとして
どっかに保持しておけばいいと思う。

そもそもマネージ型しか C# にはない。
652デフォルトの名無しさん:2012/01/25(水) 23:39:54.04
>>650
c++を使えて
c#やったら幸せになれる
653デフォルトの名無しさん:2012/01/25(水) 23:46:00.43
c#のバージョンと.netのバージョンって対応関係あるんですか?
c#4.0には、.net4必須みたいな。
654650:2012/01/25(水) 23:48:16.20
>>649
すいません、説明が足りませんでしたね。
外部からリソースを読み込んで、
その内容をclassに突っ込んで
他の.csから上のclassのメンバを参照しながら云々くんぬん処理してくって質問です。
655デフォルトの名無しさん:2012/01/25(水) 23:48:41.41
いまんところC#のバージョン=.NETのバージョン
少なくとも整数バージョンはね
656650:2012/01/25(水) 23:50:14.49
>>652
連レス申し訳ない。

なるほど。
二刀だとかなり良いみたいですね!
一度挫折しましたがもう一度頑張ってみます
657デフォルトの名無しさん:2012/01/25(水) 23:50:55.93
>>654
何だか20世紀の臭いがするな
658デフォルトの名無しさん:2012/01/25(水) 23:53:21.13
webBrowserでサイトを表示してファイル名の入力欄の隣にある参照というボタンを押したいのですが
DOMのエレメントの中には含まれないようなのでClickイベントを発生させられないみたいです
マウスポインタを操作する以外でほかに方法があったら教えてください。
659デフォルトの名無しさん:2012/01/25(水) 23:55:09.69
>>656
おれは >>652 じゃないけど、
C++ レベルで言語を知っていると C# を使う際にも効率的なコードが書けるよ、
という意味であって、C++ を頑張れという意味ではないと思うんだ。
もしくは、高速化のために部分的に C++ を使えるからいいという意味か。

マネージ型云々言うってことは、.NET 触っているのだろうけど、
それならば素直に C# 使うほうがいい。
660638:2012/01/25(水) 23:56:21.77
>>639,644,645
ありがとうございます。
operator implicit は知らなかったのですが、試してみます。

インデクサを使わずにメソッドを使うというのも選択肢ではあるのですが、
既存部分がプロパティを使ってるのと、自分の 趣 味 で。
前言と矛盾してますね。すみません。
661デフォルトの名無しさん:2012/01/26(木) 00:01:49.86
>>658
それC#の質問じゃないと思うけど、FileUploadはJavaScriptからロクに弄れないから無理だと思うよ
662デフォルトの名無しさん:2012/01/26(木) 00:04:37.27
>>658
セキュリティ的に無理じゃね
663650:2012/01/26(木) 00:06:50.01
>>659
回答ありがとうございます。
それはわかっていたつもりです。
C→C++とやってきてC#やってみようかな
と昔思った時にC#の本を借りてきたんですけどすぐ挫折してしまって
で、今またC#が必要っぽい状況になったので改めて学び直そうと思ったという事です。
664デフォルトの名無しさん:2012/01/26(木) 00:08:11.23
C++ ではなくて C# に挫折したのか。勘違いだったわ。ごめん。
665デフォルトの名無しさん:2012/01/26(木) 00:13:12.60
すいません、comoさんのところのサンプルコードなのですが、
var thumb = sender as Thumb;
if (thumb == null) return;
      var parent = thumb.Parent;
if (parent == null) return;

double x = Canvas.GetLeft(parent);
if (double.IsNaN(x)) x = 0;
double y = Canvas.GetTop(parent);
if (double.IsNaN(y)) y = 0;

Canvas.SetLeft(parent, x + e.HorizontalChange);
Canvas.SetTop(parent, y + e.VerticalChange);
というコードを実行するとParentに対して
'System.Windows.DependencyObject' から 'System.Windows.UIElement' に変換できません
というエラーが帰ってきます。親要素を取得したいのですが、どうすればいいのでしょうか?
666デフォルトの名無しさん:2012/01/26(木) 00:16:32.48
思っていたとおりだ。
Parent は DependencyObject という型だから、UIElement 型に変換しないといけない。
実際に、親要素はなんなのかな。

まあ、
if (parent == null) return; のあとに
parent = parent as UIElement; とでもしておけ。
667デフォルトの名無しさん:2012/01/26(木) 00:17:22.66
実際のUIツリーはVisualTreeHelperで調べるんだよ
668デフォルトの名無しさん:2012/01/26(木) 00:18:30.59
ごめんミスった。
var uiElement = parent as UIElement;
として、以降 parent -> uiElement
669デフォルトの名無しさん:2012/01/26(木) 00:19:11.28
それじゃだめだろ

var parent = thumb.Parent as UIElement;

としないと
670デフォルトの名無しさん:2012/01/26(木) 00:21:10.77
>>669 では return される。
>>668 なら throw される。
671デフォルトの名無しさん:2012/01/26(木) 00:21:11.08
(UIElement)で例外出す方が後の工程にやさしいと主張しておきたい
672デフォルトの名無しさん:2012/01/26(木) 00:23:32.68
>>670
returnされるならそれはそれで正しい動作だろ
あとでCanvas.GetLeft(parent);やってんだから
673デフォルトの名無しさん:2012/01/26(木) 00:24:54.17
おお、みなさん有難う御座います!とりあえずヒントもとにcomoさんのサンプルが再現できるよう頑張ってみます!
>>669さんのやり方でコンパイルは通りましたが後の処理がうまくいかないです…>>666さん、>>669さんのやり方試して見ます!本当に有難う御座います!
674デフォルトの名無しさん:2012/01/26(木) 00:28:31.55
Thumbだからドラッグアンドドロップでもやってんだろ
675デフォルトの名無しさん:2012/01/26(木) 00:40:18.14
だめですちょっと上手く動きません…みなさん本当にすいません。お力添えいただいたのですが完成させることできませんでした…
本当に本当にありがとうございました!
676デフォルトの名無しさん:2012/01/26(木) 00:43:48.22
Parent の中身がわからないと対応できないと思う
ステップ実行とか、ブレークポイントを覚えるといい
後は、というより前提として文法を覚えたほうがいい
677デフォルトの名無しさん:2012/01/26(木) 00:44:14.88
サンプルコードで勉強したいんだろうけど
そのサンプルコードすら動かせない

この世界ではそんなことが日常茶飯事だよ
でもめげないでね
678デフォルトの名無しさん:2012/01/26(木) 00:47:33.90
>>661-662
そうですか・・別の方法を考えて見ます。
ありがとうございました
679デフォルトの名無しさん:2012/01/26(木) 00:48:42.10
そうですね…知識、足りないですね。ExplessionBlendばっかりにかまけてて…
もっと勉強してきます!ありがとうございます!
680デフォルトの名無しさん:2012/01/26(木) 00:48:48.59
var parent = thumb.Parent;
Console.WriteLine(parent.GetType());

かなんかやると出力ウインドウに本当の型名が出てくるから
それをコピペしてググるといいよ

Console.WriteLineって書いてある行でF9を押して行を赤くしてから実行するとそこで止まるから
そうなったらparentにマウスカーソルを合わせても情報が見れる
681デフォルトの名無しさん:2012/01/26(木) 00:51:05.48
>>680
ありがとうございます!別の課題に当たってからもう一度やってみようと思います。その時参考にさせて頂きます!
682デフォルトの名無しさん:2012/01/26(木) 00:53:20.45
http://d.hatena.ne.jp/CoMo/20110316/1300288737
元ネタこれだろ?

double x = Canvas.GetLeft(parent);
ここが間違ってんだよ。親の位置取得してどうするのさ
683デフォルトの名無しさん:2012/01/26(木) 01:01:16.11
C#ユーザーの為のAndroidプログラムの本とかってないのかな
684デフォルトの名無しさん:2012/01/26(木) 01:03:35.34
queue はオワコン
685デフォルトの名無しさん:2012/01/26(木) 01:05:17.37
ないでしょ。
あなたが本の著者なら、そんな読み手をわざわざ限定するような本を書くでしょうか?
それもAndroidバブルの時に
686デフォルトの名無しさん:2012/01/26(木) 01:08:12.97
MONO for AndroidってGUIはXMLでしか編集できなくて端末内ライブラリがアプリ無しで50MBぐらいあるのな
687デフォルトの名無しさん:2012/01/26(木) 02:46:33.85
INotifyPropertyChangedの実装を簡単にする方法はありますか。
今は下のように書いてます。プロパティごとに毎回こんなの書きたくないです。
public string Hoge { get { return _hoge; } set { if (_hoge != value) { _hoge = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Hoge"); } }

↓みたいなマクロを使えたら嬉しいんですが。
#define MAKE_PROPERTY(NAME, TYPE) \
private TYPE _##NAME; \
public TYPE NAME { get { return _##NAME; } set { if (_##NAME != value) { _##NAME = value; if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(#NAME); } }

MAKE_PROPERTY(Hoge, string)
688デフォルトの名無しさん:2012/01/26(木) 06:47:36.70
コードスニペットでも登録すれば
689デフォルトの名無しさん:2012/01/26(木) 09:05:40.77
>>682
ありがとうございます。そのページのコードは問題なくどうさするんですけど、問題は次のオブジェクトを並べる部分で…
自分で
690デフォルトの名無しさん:2012/01/26(木) 10:37:33.40
.Net4.0がインストールされてるかどうか調べる方法はありませんか?
691デフォルトの名無しさん:2012/01/26(木) 10:39:55.40
.net4でコンパイルしたのに3.5でも動くのはなぜ?
692690:2012/01/26(木) 10:53:51.96
>>691
それって.Net4.0の新機能を使ってないからじゃないですか
693デフォルトの名無しさん:2012/01/26(木) 10:56:09.46
>>692
そうか。新機能を使ってなければ3.5でいいのか。
ありがとん。
694デフォルトの名無しさん:2012/01/26(木) 11:40:01.75
初心者で文法は終わったくらいなんですが、上達するには何をしたらいいですかね?
XNAでゲーム作りたくて、C#からプログラミング初めました
文法はわかってるつもりですが、でかいものを作ることができません
少ないコードのサンプルがいいんですが、何かいいホムペとかないですか?
695デフォルトの名無しさん:2012/01/26(木) 11:41:51.83
自分が欲しいツールを作っていくのが一番
文法わかっているなら、少ないコードのサンプルなんて不要だろ
DOBONで十分
696デフォルトの名無しさん:2012/01/26(木) 11:51:37.18
他人のソースを読むことは大変勉強になる

海外ではオープンソースのコードがいっぱい落ちてるからそれでも読んだらいい
codeprojectなどがいいかもしれない
697デフォルトの名無しさん:2012/01/26(木) 11:54:06.64
理想的なコードだけじゃなく、酷いコード読むのも勉強になるしなw
698デフォルトの名無しさん:2012/01/26(木) 11:56:28.96
まずは小さいものを大きくしていくのをやってからでいいのでは?
読んでばかりじゃ自分のものにならない。
699デフォルトの名無しさん:2012/01/26(木) 11:57:45.71
みなさまありがとうございます。>>695です
なんというかプログラマ的思考法に慣れてないようでかなり苦手意識感じてるんで少ないコードのって話になっちゃいました
幸いxnaのサンプルがあるんでそれが近道のようなので読んでみます ありがとうございます
700デフォルトの名無しさん:2012/01/26(木) 11:58:31.46
ちょこっとした物も作れないようなスキル者がいきなりXNAでゲームなんか作れるわけないじゃん
作れるとしたら単なるコピペで動かせるようになるだけ
701デフォルトの名無しさん:2012/01/26(木) 15:10:06.07
public MainWindow()
{
InitializeComponent();

_mediaelement = new MediaElement();
_mediaelement.Source = new Uri(@"D:\test\test.mp4");//テスト用の動画を指定。長さは30分
_mediaelement.ScrubbingEnabled = true;//シーク中の動画が描画されるように設定
_mediaelement.LoadedBehavior = MediaState.Manual;//再生・一時停止・停止が行えるように設定
_mediaelement.Position = new TimeSpan(0, 10, 0);//動画を10分までシーク
_mediaelement.Pause();//動画が描画されるように一時停止。

MediaArea.Children.Add(_mediaelement);
}

この後、ボタンをクリックして _mediaelement.Play();を呼び出すようにしたのですが、なぜか10分から再生されず、動画の最初から再生されてしまいます。
どこがいけないのでしょうか。
702デフォルトの名無しさん:2012/01/26(木) 15:31:39.92
Positionは再生後にしかいじれない

それより…
703デフォルトの名無しさん:2012/01/26(木) 19:21:14.80
>>694
プログラミングコンテストの問題で練習するというのはどうだろう。
http://wmecast.net/user/jonosuke
704デフォルトの名無しさん:2012/01/26(木) 21:29:44.55
コンストラクタに渡すパラメータのチェックって呼び出し元ですべきですか?それともコンストラクタ内でやるべきですか?
705デフォルトの名無しさん:2012/01/26(木) 21:39:05.19
DbC的には呼び出し元
706デフォルトの名無しさん:2012/01/26(木) 21:45:14.29
外部に公開しないのならパラメータのチェックをする必要性すらない
707デフォルトの名無しさん:2012/01/26(木) 21:48:11.00
失敗したらバグと見做すチェックは呼び出し先でやる
それをあらかじめ回避するのは呼び出し元の責任
708デフォルトの名無しさん:2012/01/26(木) 21:48:19.01
DbCは契約が守られなければAssertするんだから内部でチェックしてないってのとは全く違う
709デフォルトの名無しさん:2012/01/26(木) 21:53:02.58
visual studio2010を使っています。
設定ファイルを開くとかそういった細かい関数、クラスを
include "library.cs";とか簡単に外部ライブラリ化するにはどうしたらよいのでしょうか

やりたい事はこのサイトで書いてある事でいいのですが
http://smdn.jp/programming/netfx/classlibrary/0_howtocreate/
このサイトはVSのバージョンが古く、2010と画面が違う箇所があって躓いてしまいました。
710デフォルトの名無しさん:2012/01/26(木) 21:55:31.64
新規プロジェクトでクラスライブラリを作成して
ライブラリを使うプロジェクトでは既存のプロジェクト追加して使うのが簡単
711デフォルトの名無しさん:2012/01/26(木) 21:55:32.30
呼び出される側がチェックするのは事後条件と不変条件
パラメータのチェックは呼び出し側の仕事
712デフォルトの名無しさん:2012/01/26(木) 21:56:21.64
保証されていることを確認すんのは誰だよマヌケ
713デフォルトの名無しさん:2012/01/26(木) 21:58:35.31
コンストラクタ内でパラメータエラー見つけたら
例外を投げないといけない
714デフォルトの名無しさん:2012/01/26(木) 22:00:33.20
呼び出し側はパラメータの細かい条件なんて知らないでしょ
同じ人が書いてるならいいんだろうけど
715デフォルトの名無しさん:2012/01/26(木) 22:00:45.54
リリースコードに入らないだけでDebug.Assert(String.IsNullOrEmpty(name));が並んでいる
716デフォルトの名無しさん:2012/01/26(木) 22:02:06.87
staticのCreateメソッドでも作っとけよ
717デフォルトの名無しさん:2012/01/26(木) 22:06:53.39
総武ソフトウェア推進所ってなんやねん
718デフォルトの名無しさん:2012/01/26(木) 22:07:46.86
VC#2012って出ますか?
2008から2010って3年で出てるのでもしかして出ますか?
今から2010を入れて勉強するのはやめるべきでしょうか?
719デフォルトの名無しさん:2012/01/26(木) 22:11:34.31
2012が出たって基本は何も変わらないと思うけど
2008以降そんなに変わってないよねC#
720デフォルトの名無しさん:2012/01/26(木) 22:12:22.03
VS2012って何?VS11とは違うもの?
721デフォルトの名無しさん:2012/01/26(木) 22:12:26.04
2012は出るよ
次のバージョンのC#は非同期サポートがはいるのでものすごく変わる
722デフォルトの名無しさん:2012/01/26(木) 22:15:26.00
「別スレッドからフォームにアクセスできません><」

これは変わらない
723デフォルトの名無しさん:2012/01/26(木) 22:22:39.84
別スレッドで処理が一区切りついたらUIスレッドに戻って更新して別スレッド処理を再開して…
のよくある流れが自然に書けるようになるからBeginInvokeを使う機会は減るんじゃないの
ちゃんと理解してないと使えないのは変わらないだろうけど
724デフォルトの名無しさん:2012/01/26(木) 22:22:47.73
XPだと使わしてくれないんだよな、次verからは
725デフォルトの名無しさん:2012/01/26(木) 22:58:54.19
すみません。質問いいですか?

コンボボックスにテーブルをバインドしてDisplayメンバとValueメンバを割り当てています。

そのValueメンバとある文字列が一致したDisplayメンバを得たいのですが

どうしたら効率がいいでしょうか?


お願いします。
726デフォルトの名無しさん:2012/01/26(木) 23:02:50.30
その程度の処理に効率もクソもないだろ
727デフォルトの名無しさん:2012/01/26(木) 23:06:04.65
うん
コンボボックスに一度に表示できる程度の常識的な数なら線形検索でも全く問題ない
728デフォルトの名無しさん:2012/01/26(木) 23:11:44.83
一応DataRowCollection.FindとかDataView.Findは気持ち効率的ではある
DataTable.Selectはダメだぞ
LINQ to DataTableは知らん
729デフォルトの名無しさん:2012/01/26(木) 23:12:50.62
ありがとうございました。

foreachでやる方法でいいですかね?
730デフォルトの名無しさん:2012/01/26(木) 23:58:55.09
n=>n=とある文字列
731デフォルトの名無しさん:2012/01/27(金) 01:05:26.81
Windows 用アプリケーションとASP.netってのがありますけど
ここはWindows用アプリケーションのことを質問するスレですか?
732デフォルトの名無しさん:2012/01/27(金) 02:28:37.54
ピクチャーボックスへ画像ファイルをD&Dでファイル名を取得する部分なのですが、
訳があってドロップではなくボタンでもドロップと同じ経路で画像を表示したいのですが、
下のコードの?の部分の書き方を教えて頂きたいです。

http://pastebin.com/mFqtV9aC
733デフォルトの名無しさん:2012/01/27(金) 06:18:09.23
>>731
いいえ、C#のことを質問するスレです

>>732
var dataObj = new DataObject( DataFormats.StringFormat, filename );
var e = new DragEventArgs( dataObj, 0, 0, 0, DragDropEffects.All, DragDropEffects.Copy );

かな
だけどこんな糞な呼び出し方しないで、
画像を文字列で設定するメソッドを書いて
それをpictureBox1_DragDropとbutton1_Clickの両方で呼ぶ方がいいよ
734デフォルトの名無しさん:2012/01/27(金) 06:23:03.71
ああ違うわ
DataFormats.FileDrop形式でデータオブジェクトにデータをセットしないといけないんだけど
それはグローバルメモリ確保したりCOMの知識がいるからこのスレ的にはほぼ無理
735650:2012/01/27(金) 08:28:14.01
ちょっとC#の入門ページみれば
ref修飾子がありました。
やりたい事にうってつけの動作でした。
ありがとうございます。
736デフォルトの名無しさん:2012/01/27(金) 09:23:09.32
refはすごく便利だからなぁ
よくわからんかったらとりあえずrefでいいし
でも、ちゃんとoutも理解しておくんだぞ
737デフォルトの名無しさん:2012/01/27(金) 13:07:29.75
c++の人はすんなりoutわかるだろ
738デフォルトの名無しさん:2012/01/27(金) 13:18:26.28
>よくわからんかったらとりあえずrefでいいし
おま・・・なんて恐ろしい事を・・・
739デフォルトの名無しさん:2012/01/27(金) 13:50:08.38
正直refの使い道は少ないし
多用するべきではない
740デフォルトの名無しさん:2012/01/27(金) 14:08:07.70
>>738
あ、dllの挙動がわからんかったら、とりあえずrefで渡して値が変わったか確認しろって意味ね
言葉足らずですまん
741デフォルトの名無しさん:2012/01/27(金) 14:14:05.59
dllの挙動ってDllImportのことか?
742デフォルトの名無しさん:2012/01/27(金) 21:34:12.71
>>733の方法でできました。
どうもありがとうございます
743デフォルトの名無しさん:2012/01/27(金) 21:40:21.99
Graphics.DrawImageについて教えてください。
マルチスレッドで、各スレッドの中でDrawImageを多用します。するとどうしても
CPU使用率が25%前後(クアッドコアなので1スレッドぶん)しか稼働しません。
いろいろ調べると、下記のサイトで全く同様の症状の人がいらっしゃったのですが、
どうも最終的には解決していないようです。ここにあるnew Bitmap(filename)で
ファイルをひらくのはやっています。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=42683&forum=7

また調べるとBitBltを使う方法もあるようですが、機能的にどうしてもGraphics
クラス、またはそれと同等の回転縮小平行移動が自由にできる機能が欲しいです。
高速化に良い方法ありませんか?
744デフォルトの名無しさん:2012/01/27(金) 21:43:53.18
DirectXかWPFを使う
745デフォルトの名無しさん:2012/01/27(金) 21:51:30.81
>>743
解決しているように見えるけど?
746デフォルトの名無しさん:2012/01/27(金) 21:57:18.79
ソフトウェア描画は遅いもの。どう頑張ってもGPUアクセラレーションには全然敵わないから
速度を求めるなら無駄な努力するよりWPF使ったほうがいいよ。
本当に画像の回転縮小平行移動だけでいいなら直Direct3Dも難しくないけど。
747デフォルトの名無しさん:2012/01/27(金) 22:17:50.18
なんか不思議な挙動だな
http://ideone.com/0fs5O

SetPixelを連打するだけなら余裕で100%行くんだけどな
748デフォルトの名無しさん:2012/01/27(金) 22:20:28.66
ownerって前もいたな
またお前か
注意力散漫だぞ
749デフォルトの名無しさん:2012/01/27(金) 22:22:39.76
すぐそうやってWPFを薦めるが、本当に速いと思っているのか?
WPFはGPU描画って鵜呑みにしてんじゃないの
750743:2012/01/27(金) 22:30:03.87
みなさんアドバイスありがとうございます。
GPUアクセラレーションより遅いのは仕方ないとして、1スレッドぶんしか動かない
ことが問題だと思っています。まさに>>747が指摘再現してくれているとおりです。

で、オススメしてくれたWPFはちょっと描画全体書き直しになりそうなので敬遠して
DirectXを調べてみようかと思います。今まで使ったことないのでまた苦労しそうだけど。
ちなみにDrawImageは画面描画のためではなくて画像処理だけに使うので、本当に回転
縮小平行移動しか使いません。>>746の難しくないという言葉をはげみに頑張ってみます。
751デフォルトの名無しさん:2012/01/27(金) 22:43:21.97
そもそもDirectXも仮想化レイヤ(GDIよりドライバに近いというだけ)だから、
DirectXを使用している=ハードウェア支援が受けられるではない。
752デフォルトの名無しさん:2012/01/27(金) 22:55:45.76
画像の線形変換付き描画だけならWPFは速いよ
ビットマップキャッシュをオンにすれば直接Direct3Dと遜色ない速度が出る
753デフォルトの名無しさん:2012/01/27(金) 23:56:28.08
>>747
Bitmapをファイルパス指定のコンストラクタで作るとロックがかかるから1スレッドしか動かんって>>743に書いてあるでしょうが
754デフォルトの名無しさん:2012/01/28(土) 00:15:35.30
ASPで、新しいタブで同じASPを表示したら同じセッションになってしまいます。
別のセッションにしたい場合はどうすればいいですか?
Abandonしたら元のタブのセッションも消えてしまいました。
755デフォルトの名無しさん:2012/01/28(土) 00:20:42.22
そういう仕様のブラウザをデプロイしてあげる
756デフォルトの名無しさん:2012/01/28(土) 00:41:35.18
>>754
同一マシンなら当然だろ…
タブ変えたら別セッションにしてたら通信できないだろ
757デフォルトの名無しさん:2012/01/28(土) 11:15:24.64
あるdllを参照に入れてから
そのdll用のusing System.○○をコードに書いてます
もしdllがない場合はエラーで例外とか強制終了になりますと思いますが
プログラム起動時にdllの存在を確認してなければエラーダイアログを出して終了させるという処理はForm_Loadに入れればいいのでしょうか?
758デフォルトの名無しさん:2012/01/28(土) 11:36:56.36
>>753
SetPixelは100%行くっていってんじゃん
人の話はちゃんと把握しろよ?
759デフォルトの名無しさん:2012/01/28(土) 11:38:49.90
>>757
プロジェクトの参照に追加しているのなら
プログラムのMainに入る前にロードの処理をやるから
確認する暇は与えられない
760デフォルトの名無しさん:2012/01/28(土) 11:42:34.98
いっそのことローカルコピーをtrueにしちゃえば

サイズはでかくなるけど
761デフォルトの名無しさん:2012/01/28(土) 11:45:27.41
だいたい>>743に書いてあれば正しいって頭おかしいんじゃねえか?
実測が最も正しいに決まってんだろ
そもそも>>743にすら

>Bitmapをファイルパス指定のコンストラクタで作るとロックがかかるから1スレッドしか動かん

などと書いていない

>using (FileStream fs = File.OpenRead("イメージファイル"))

>ここでファイル開いてますよね?
>そして、using句を抜けるまで、開きっぱなしってことですよね。
>この行をなくしたら、非同期になりません?

>Bitmap bitmap = new Bitmap("mypicture.jpg")

>とかならOKかと思いますが。

全然逆じゃねえか
ロックされたくなければnew Bitmap(fileName)使えといってんだよこいつは
自分が参照した文書すらまともに確認せずに人様にケチつけるとはどういう了見だ?
死ね
二度と俺に話しかけるな
762デフォルトの名無しさん
そんなことくらいでキレ過ぎw
初心者スレなんだから、回答者にもしたり顔の初心者くらい混じってるよ。
話に口を挟んだ挙句、それが間違ってるとなれば、腹が立つことは否定しないけど。