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

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

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


2:デフォルトの名無しさん
09/07/26 11:02:42
2 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/24(水) 18:47:58
-----関連スレ

C#, C♯, C#相談室 Part53
スレリンク(tech板)

WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part4
スレリンク(tech板)

----参考サイト

URLリンク(www.google.co.jp)
URLリンク(msdn.microsoft.com)
URLリンク(homepage3.nifty.com)
URLリンク(www.atmarkit.co.jp)
URLリンク(dobon.net)
URLリンク(jeanne.wankuma.com)
URLリンク(www.labasp.net)

3:デフォルトの名無しさん
09/07/26 11:04:08
OTU

4:デフォルトの名無しさん
09/07/26 11:33:34
4ならおっぱい晒します

5:デフォルトの名無しさん
09/07/26 11:51:08
しつもんです
親フォームを閉じたときに
子フォームを全部閉じたいのですが
どうすればいいんでしょうか?

6:デフォルトの名無しさん
09/07/26 11:58:54
そこで悩むってことは参照の向きがおかしいんだよ
子フォームが親フォームを参照するんじゃなくて,親フォームが子フォームを参照するんだ
それなら親が子を閉じるのは何も難しくないし余計な依存もできない

7:デフォルトの名無しさん
09/07/26 12:46:11
>>5みたいなレベルの質問もどうかと思うけど、
>>6のいう参照の向きがどうこうって話もちょっと意味不明だな。
なんでいきなりそんな話になるのかw

8:デフォルトの名無しさん
09/07/26 13:08:16
つまり、親フォームは子フォームの存在をすべて知りうる立場にいるんだから
たとえば子フォーム作るたびに、List<Form>とかに記録しとけばいいってことだろ
で、親が閉じるとき、いちいち子フォームをClose()してけばいい

これを子フォーム視点で考えて、「親が閉じたら自分も自動的に閉じさせるには?」
とか考えはじめるとめんどくさくなる

9:5
09/07/26 13:28:30
わかった
子formをnewした時の戻り値をlistに入れといて
それを使って消すようにする

10:デフォルトの名無しさん
09/07/26 13:37:52
えっ?

11:デフォルトの名無しさん
09/07/26 13:38:29
>>9
その部分だけクラス化しておくと後で再利用……しないかw

12:デフォルトの名無しさん
09/07/26 13:58:55
C#とVB.NETってできることに差はあるんスか?

13:デフォルトの名無しさん
09/07/26 14:06:39
どうだろね。本質的にそんな差はないと思うけど

C# - unsafeなポインタ演算ができるとか…
VB.NET - 初心者に「これならぼくにも使えそう」と淡い期待を抱かすことができるとか…

14:デフォルトの名無しさん
09/07/26 14:09:08
なんだそれ

15:5
09/07/26 14:46:24
親フォームから、子フォームの関数を実行させて
子フォームのほうで、this.close()すればいいのか?

16:デフォルトの名無しさん
09/07/26 14:50:27
Form.Closeってパブリックメソットだと思うのですが

17:デフォルトの名無しさん
09/07/26 16:54:34
UMLって使っているんですか?

18:デフォルトの名無しさん
09/07/26 18:10:30
使いたかったら使えるし使わないと作れないわけでもない

19:デフォルトの名無しさん
09/07/26 18:13:01
>>15
何で親フォームから子フォームのFome.Close()を直接呼ばないんだ?

20:デフォルトの名無しさん
09/07/26 20:05:41
Ownerちゃんと設定してたら勝手に閉じるだろ


21:デフォルトの名無しさん
09/07/26 20:07:24
Owner設定しないんなら親側でコレクションしといて普通にClose呼ぶだけ


22:5
09/07/26 22:05:03
コレクションって
インスタンスをとっておくってこと?

普通は子ウィンドウ作って、値渡してShowして終わりってかんじだから

23:デフォルトの名無しさん
09/07/26 22:44:14
>>22
>8で詳しく書かれている通りじゃないか。
>20,21で書かれている方法もある。
ようするにわざわざ答えを貰っているその意味が分からないレベルなんじゃないのか?

コレクションという用語の意味が分からないなら、MSDNなりチュートリアルサイトなりで自分で調べろ。
いちいち人に聞くより既に解説されていることを理解した方が早いぞ。

24:デフォルトの名無しさん
09/07/26 23:49:16
MSDNってちょこちょこコード出てくるけどライセンスどうなってるの?

25:デフォルトの名無しさん
09/07/26 23:52:51
好きに使えばいいよ保証しないけど
というのが正しいかどうかは保証しないよ?

26:デフォルトの名無しさん
09/07/27 00:06:01
MSDN Terms Of Use - MSDN 使用条件
URLリンク(msdn.microsoft.com)

27:デフォルトの名無しさん
09/07/27 00:24:22
コンパイルして配布するなら自由で、ソースコードが露になってる場合はライセンスのコピーを一緒に配布しなきゃいけないみたいですね

28:デフォルトの名無しさん
09/07/27 09:41:41
Fomeってのが新鮮だった

29:デフォルトの名無しさん
09/07/27 19:25:59
自分が作るソースはForm1.csの中にnamespace WindowsFormsApplication1があって
その中にpublic partial class Form1 : Formがあって更にその中にメソッドとかイベントを詰め込んでいます

namespaceとか別のcsファイルを作って細かく分けた方がメンテナンスには有利でしょうか?
どういうときに分けた方がいいのかいまいちよく分かりません
オープンソースの2chブラウザtwintailのソース見ると非常に細かく分けてあって俺もこういう風に書いて見たいな
とあこがれがあったりします。

30:デフォルトの名無しさん
09/07/27 19:51:50
クラスごとに分ける
partialで分けなきゃいけないほどバカでかいクラスは作らないのが基本

31:デフォルトの名無しさん
09/07/27 19:52:45
全部を1ソースにまとめるのが一番楽ですよ

32:デフォルトの名無しさん
09/07/27 20:00:02
partialなのはポトペタ使ったからではないかと

33:デフォルトの名無しさん
09/07/27 20:58:36
>>29 partialはIDEの自動コード生成が使うものであって、人が使うものでは無いと思う。


34:デフォルトの名無しさん
09/07/27 21:25:48
>>29
原則としてクラスごとに分ける。

ただしそれほどの規模のものでなく、互いに密着して使うようなクラス群なんかは
1つのソースに書いたりする。また、クラス内クラスも使う。
ある程度の規模になったらフォルダごとに分ける。
同時にnamespaceも切る。

自分で把握できないくらいソースツリーがでかくなったときは、
まずnamespaceを切って交通整理をすることを考えると良い。

35:デフォルトの名無しさん
09/07/27 22:56:59
namespaceはあくまで文字通り名前にすぎないのであまり意味はない
規模が大きいなら適宜プロジェクトを切ってdllに分割する

36:デフォルトの名無しさん
09/07/27 23:28:50
プロジェクトを分けるのはコードの見通しを良くするため、というより
(確かにそういう効果も期待できなくはないが)再利用のしやすさを考えて、
というのが主な動機じゃないのかな。

再利用するつもりもないものを別プロジェクトに切り出す人はあまりいない気がするけど。

37:デフォルトの名無しさん
09/07/27 23:49:45
重いからというのもある

38:デフォルトの名無しさん
09/07/28 02:55:53
Program.csって何のためにあるの?

39:デフォルトの名無しさん
09/07/28 03:41:56
あなたのため

40:デフォルトの名無しさん
09/07/28 08:28:43
あながち間違いではないなww

ユーザのために生成されたスタートアップのコードなんだから。


41:デフォルトの名無しさん
09/07/28 09:59:54
>>38
それが本体。

エディタで開いて見てみればわかることだが、Program.csの中にMain関数があって、
プログラムはそっからスタートするんだと思えばいい。
Windowsアプリでフォームが表示されるより前に何かやりたい時は、そこにコードを書き足す。

42:デフォルトの名無しさん
09/07/28 10:12:49
いや、たぶんMain関数は別の場所にも置けるから、
MainしかないProgram.csって何?って聞いてるのだと思うが。

43:デフォルトの名無しさん
09/07/28 10:26:49
デザイナ使うと生成される・・・ってそんなことはsammaryに書いてあるだろ

>アプリケーションのメイン エントリ ポイントです。

44:デフォルトの名無しさん
09/07/28 11:37:42
>>42
何か特別な理由がない限り、Program.MainをProgram.csから
別の場所に移すケースって無いと思うんだが。

標準があって無きが如しのC/C++ならともかく、
C#はVisual Studioのやることがデファクトスタンダードだから。

45:デフォルトの名無しさん
09/07/28 11:42:43
if文での||の使い方が分かりません

string s;
string t;
string r;
if (s == t || r)
 return;

このごく自然で人間の感覚に則した書き方がコンパイルエラー

46:デフォルトの名無しさん
09/07/28 11:43:29
if (s == t || s == r)

47:デフォルトの名無しさん
09/07/28 11:50:39
ty
でもそれを許可すると可読性が低下しそう
比較元は必ず一つであることを保証した>>45の書き方に死角は無かった
C# 4.0で改定されるといいですね^^

48:デフォルトの名無しさん
09/07/28 11:52:19
自然が良ければキャンパスノートにでも書いてろ

49:デフォルトの名無しさん
09/07/28 11:52:23
無理です
はい次の方どうぞ

50:デフォルトの名無しさん
09/07/28 11:54:16
>>47
演算子の優先順位変えられるわけねーだろ

51:デフォルトの名無しさん
09/07/28 11:56:39
恐怖だなw

52:デフォルトの名無しさん
09/07/28 11:59:11
COBOLにそういう文法があって・・・
まあそういう出自の人なんだろう。

53:デフォルトの名無しさん
09/07/28 12:02:11
>>44
MSとか他のサンプルソースでけっこうMain移してるの多いよ

54:デフォルトの名無しさん
09/07/28 12:09:17
ジェネリック型を使ったインスタンスの生成がうまくいきません。
このような形でListの中に入れるものを変える形でジェネリック関数を定義しようとしたのですが、

エラー CS1502: 'sample.Program.BuildList(out System.Collections.Generic.List<int>)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。
エラー CS1503: 引数 '1': 'out System.Collections.Generic.List<T>' から 'out System.Collections.Generic.List<int>' に変換できません。

というエラーが出てしまいます。

public List<T> Build<T>()
{
List<T> list;
BuildList(out list);
Console.WriteLine(list.Count);
return list;
}


public void BuildList(out List<int> list)
{
list = new List<int>() { 1, 2, 3 };
}

public void BuildList(out List<string> list)
{
list = new List<string>() { "a", "b", "c", };
}


55:デフォルトの名無しさん
09/07/28 12:58:23
>>53
ファイル数を減らすためじゃね

>>54
コンパイルエラーだからインスタンス生成関係ない

56:デフォルトの名無しさん
09/07/28 13:26:03
>>55
失礼しました。コンパイルエラーを回避する実装法が分からないんです。

57:デフォルトの名無しさん
09/07/28 13:45:30
>>56
Build メソッドを消して BuildList を呼ぶようにすればいい。

58:デフォルトの名無しさん
09/07/28 13:52:40
>>57
提示した再現サンプルとしてはそうなりますね。
ただ、実際はBuild作業が長く、その中で使い分けたいんです。
また、Build()とBuildList()は別クラスの中にそれぞれあります。

59:デフォルトの名無しさん
09/07/28 14:05:10
そもそも、それは本当にジェネリック型が必要な作業なの?
BuildはList<T>を返すってなってるけど、実際にはList<int>固定だったりしない?
>>54がどこまで再現してるコードなのかはよく分からないけど

60:デフォルトの名無しさん
09/07/28 15:04:26
半端にC++のテンプレートをかじってる感じだな。
コンパイル時に型が確定するわけじゃないのでBuildListのオーバーロードは解決できない。
あとはoutはむやみに使わないことだな。
Build側でnewして参照を渡すか、BuldListでnewするなら戻値にするべきだろう。

61:デフォルトの名無しさん
09/07/28 15:57:10
>>45 携帯で書いてるからエラーでるかもしれんが
if (new []{t, r}.any(x => x == s))

62:デフォルトの名無しさん
09/07/28 16:39:31
string += int が出来るのに、
string -= int が出来ないのは犯罪的な理由を孕んでいる為ですか?

63:デフォルトの名無しさん
09/07/28 16:48:24
どうも先ほどから頭悪そうな人がいますね^^

64:デフォルトの名無しさん
09/07/28 16:49:34
ネタをふりたいならもう少し面白いのにしろ。

文字列同士の減算をサポートしてるスクリプト言語はありそうな気がするな。
掛け算が出来るのは結構ある。

65:デフォルトの名無しさん
09/07/28 17:00:54
"test" -= "t"
で期待される結果が
"tes"

"es"
の二通りが存在するためやっぱだめじゃね?

66:デフォルトの名無しさん
09/07/28 17:07:42
+= が後ろへ足すならば、 -= は後ろから引くになる
これが自然な発想

67:デフォルトの名無しさん
09/07/28 17:11:20
なんで?

68:デフォルトの名無しさん
09/07/28 17:13:18
+=で前に足されたことある?

69:デフォルトの名無しさん
09/07/28 17:15:15
むしろ
"test" - "a"
の方が問題じゃね?

文字列 * 数値は分かりやすいけど、数値 * 文字列だと途端に意味不明に
* なのに交換法則が成り立たないのは気持ち悪い

70:デフォルトの名無しさん
09/07/28 17:16:36
まあ文字列の足し算は前後入れ替えると結果が変わるから特別扱いじゃないかな。
最初の、+= int だとintが文字列になって追加されるけど、-= int だとどういう結果が予測される?

71:デフォルトの名無しさん
09/07/28 17:16:43
前に足したければ逆に書けばいい
前を引くにはどうする?

72:デフォルトの名無しさん
09/07/28 17:17:15
自然な発想とかそういうことじゃなくて
演算子の意味とか順序はきちんと規格で決められてることなんだし

個人の直感と食い違っていても規格書に従わなきゃならない
それがコンピュータ言語

73:デフォルトの名無しさん
09/07/28 17:20:05
掛け算は交換則が成り立つというのは思い込みだよ。

74:デフォルトの名無しさん
09/07/28 17:26:13
x = 1
1 = x
むしろこれが出来ないならそれが成り立つ方が気持ち悪い

75:デフォルトの名無しさん
09/07/28 17:27:55
結合則もたいがい成り立たない

76:デフォルトの名無しさん
09/07/28 17:28:26
うるさいから俺言語でも作って喋ってろ
タコども

77:デフォルトの名無しさん
09/07/28 17:35:44
"test" - "a"
→"test"
左辺が右辺の最後尾に存在しなかったので0の扱い

1-0
→1

78:58
09/07/28 17:50:58
>>59
BuildList()で返すべき型が、バイナリレベルで配置が決められてる
いくつか定義したstructのひとつになっています。
今は3つの型ごとに処理関数を用意していて構築手順が3段階あるので9個定義してると。

>>60
C++のtemplateと動作原理が違うのは知ってますが、
どういう記述ができないのかのドキュメントがあまり見当たらなくて困りますね。
最初は戻り値で返していたのですがエラーが出たのでoutに切り替えたわけです。(変わりませんでしたが)
最終的にベタのbyte[]にならすので、そこの部分まで一括で行うクラスを用意した方がいいのかもしれません。

79:デフォルトの名無しさん
09/07/28 17:59:09
public List<T> BuildList<T>() {
 if (typeof(T) == typeof(int)) return (List<T>)(object)new List<int>() { 1, 2, 3 };
 else if (typeof(T) == typeof(string)) return (List<T>)(object)new List<string>() { "a", "b", "c", };
 else throw new ArgumentException();
}
こんなふうに実行時にやってしまうことはできる
outは原則使うな

80:デフォルトの名無しさん
09/07/28 18:15:38
何が駄目って型を解決できなきゃ全部駄目だよ
「変換できません」ってエラーが出てんだから

81:デフォルトの名無しさん
09/07/28 18:23:20
.NETのジェネリックはコンパイル時ではなく実行時に特殊化されるから
凝ったことするには実行時にリフレクションで頑張るのが基本

82:デフォルトの名無しさん
09/07/28 20:52:12
ジェネリックデリゲートを作って実行時にバインドしてやれば何でもありだぜ。


83:デフォルトの名無しさん
09/07/28 21:35:13
コンパイル時にはTの部分がすべてobjectだと思えば間違いない。
制約をつければ別だけど。
それでコンパイル時にはBuildList(out List<object>) で検索に行く。
BuildList(out List<int> list)
BuildList(out List<string> list)
と順に探すが一致するのものがないのでコンパイルエラー。

84:デフォルトの名無しさん
09/07/28 21:42:52
それは間違いだ
ジェネリックの共変・反変はサポートされていないので
BuildList(out List<object>)が仮に定義されていたとしてもコンパイルエラーになる
C#4.0でジェネリックの共変・反変が制限つきでサポートされるけどList<T>には使えないと思われる
(List<T>は書き込みが可能なので型安全性が保証できないため)

85:デフォルトの名無しさん
09/07/28 23:23:38
入社して1年半がたった。オペレータ部署に配属されたときは絶望を感じた
ただ、仕事を始めると、どちらかというと人と多くかかわる仕事でやりがいが出てきた。
いろいろ怒られたけど、楽しいと思えた。

そして昨日、ついにその部署の廃止が決まった。廃止というより仕事が完了したから解散か・・・
明日からC#.NETをやってもらうからと告げられた。

俺が分かる言語は、MOVE、COMPUTE、PERFORMです。
オブジェクト指向?なにそれ?Java?名前は知ってる。

さて、どうするかな・・・

今日は部署移動とPCのセットアップで時間使ったが明日からやらなくてはいけない。

86:デフォルトの名無しさん
09/07/28 23:25:29
マ板でやれ

87:デフォルトの名無しさん
09/07/28 23:26:11
>>77
それだと
"test" + "0" が "test0" で、
"test0" - "0" が "test0" になるよ

88:デフォルトの名無しさん
09/07/28 23:30:03
このスレは職業マに厳しいです
アマチュアが当り散らしてきます

89:デフォルトの名無しさん
09/07/28 23:31:49
プログラマがシュミグラマに質問するしてるのもあきれるけどな

90:デフォルトの名無しさん
09/07/28 23:47:11
加法にはゼロ元と逆元が存在するはずだが
文字列の結合を加法とした場合、
ゼロ元は空文字列だが逆元は何なのかね?

91:デフォルトの名無しさん
09/07/28 23:47:20
まーね

92:デフォルトの名無しさん
09/07/28 23:56:23
ネタのつもりかもしれないけど、面白くないし
数学の本質が分かってないからinterestingでもないな。

93:デフォルトの名無しさん
09/07/29 12:55:37
メインフォームよりShowDialogで表示した自作モーダルから、更に同様に表示した別の自作モーダルを閉じると、
最初のモーダルも閉じてしまいます。
OpenFileDialog等だと大丈夫なのですが。

94:デフォルトの名無しさん
09/07/29 13:03:07
本当かよ思って下のようなコードで試しましたが、ごくまともに普通に動作します

public partial class Form1 : Form
{
public Form1() {
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e) {
Form1 f = new Form1();
f.ShowDialog();
}
}

99%なんかやらかしてます。

95:デフォルトの名無しさん
09/07/29 15:37:27
>>94
ありがとうございます。
やらかしてました・・・。
DialogResult.OKのままでした・・・orz

96:デフォルトの名無しさん
09/07/29 18:25:32
C# 2008EE。
Processクラスを使用しコマンドラインプログラムをcmdで起動したいのですが、
スペースを含むフォルダにあるコマンドのパイプラインを使うコマンドの起動ができません。
Process.StartInfoのArgumentsの「"」の問題と思いますが、わかりますでしょうか?
info.FileName="cmd";で、

info.Arguments = @"/c ""c\a.exe"" | ""c:\b.exe""";
がダメで、「ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。」になる。
info.Arguments = @"/c c:\a.exe | c:\b.exe";
info.Arguments = @"/c ""c:\a.exe""";
は成功します。@をとって\->\\、""->\"にしても同じです。よろしくお願いします。

97:デフォルトの名無しさん
09/07/29 18:38:36
パッと見てもどこで区切れるか迷うな

""c\a.exe"" | ""c:\b.exe""

これとかどう解釈するんだろう

98:デフォルトの名無しさん
09/07/29 18:49:27
c\a.exe これCのあとにコロンが抜けてないか?

99:デフォルトの名無しさん
09/07/29 18:53:03
これ試したら普通に動いたぞ

"/c \"\"F:\\User\\xxxxxxxx\\Documents\\Visual Studio 2008\\Projects\\test\\test\\bin\\Debug\\test1.exe\" | \"F:\\User\\xxxxxxxx\\Documents\\Visual Studio 2008\\Projects\\test\\test\\bin\\Debug\\test2.exe\"\""

100:デフォルトの名無しさん
09/07/29 18:54:29
>>99で動くってことはパイプ記号の前後が1つずつ多いんじゃない。

101:デフォルトの名無しさん
09/07/29 19:03:36
実にくだらないな

102:デフォルトの名無しさん
09/07/29 19:47:26
>>97,100
URLリンク(msdn.microsoft.com)
いわゆる逐次的文字列リテラルとか


個人的には>>98が正しいような気がする

103:デフォルトの名無しさん
09/07/29 19:55:13
>>99
ありがとう!全体を更に\"さらに囲むとできました。
>>98
コロン抜けは書き損ねです。すいません。

104:デフォルトの名無しさん
09/07/29 20:16:10
ちなみに 
間違い
 info.Arguments = @"/c ""c:\Program Files\aa.exe"" | ""c:\Program Files\bb.exe""";
正解 
 info.Arguments = @"/c """"c:\Program Files\aa.exe""  | ""c:\Program Files\bb.exe""""";
でした。お騒がせしました。

105:デフォルトの名無しさん
09/07/29 21:47:50
最近C#始めた者ですが質問いいですか

1行n列のcsvファイルがあって、これを一行ずつdouble型の配列に収めたいのですが、
ファイル参照の後、
string path = openFileDialog1.FileName;
string[] x = File.ReadAllLines(path);
で一旦stringで確保した後でconvert.ToDouble()
する感じでいいのでしょうか。もっといいやり方ってありますか?

string[]には「”4.2274893747417E-07”」みたいな感じで入ってます。
アドバイスお願いします

106:デフォルトの名無しさん
09/07/29 22:01:54
それでいいんじゃね
よほどでかいファイルならともかく

107:デフォルトの名無しさん
09/07/29 22:07:40
>>105
n行1列じゃなくて?
とりあえずTextFieldParser

108:デフォルトの名無しさん
09/07/29 22:09:12
n列あるんだったらそのままじゃ駄目じゃないの?
まあそういうこと聞いてるんじゃないんだろうとは思うが。

行が多いなら、StreamReaderで1行ずつ読みながらの方が望ましい。
楽したいならVBのTextFieldParser使うって手もなくはない。


109:デフォルトの名無しさん
09/07/29 22:10:37
ああ、n行1列の間違いか、ならTextFieldParser使うような意味はないな。
しかしそれってCSVって言うのか?やっぱりn列あるの?

110:デフォルトの名無しさん
09/07/29 22:11:59
csvっていうかただズラーッと数値が書かれたtxtファイルかな
それだったらそれのやり方でいいと思う

111:デフォルトの名無しさん
09/07/29 22:22:53
ご指摘のとおりカンマ区切りが出てこないのでcsvファイルである必要は無いんですが、
そういう出力のデータなんで・・・。>>110さんのイメージが適切です。(拡張子がcsvなだけ)

あと、縦がnで、横が1です。なんかすいません。
もうちょい頑張ってみます。ありがとうございます。

112:デフォルトの名無しさん
09/07/30 07:12:18
DataGridViewでReadOnly=falseになってるのですがセルの編集ができません
最近は表示のみで使っていてわかりませんが、最初のころは編集できたはずなのです
なにが原因かわかる方いますか

113:デフォルトの名無しさん
09/07/30 11:30:02
すみません質問です

あるクラスの内部でスレッドを作成し、IDisposableを実装してスレッドを終了させるようにしました
しかし、明示的にDisposeを呼び出さない限り、プログラムが終了しないようです

スレッドが終了しないとアプリケーションが終了しない

アプリケーションが終了しないとDisposeが呼び出されない?

明示的にDisposeを呼び出さず、プログラム終了時に正しく解放するにはどうすればいいんでしょう

114:デフォルトの名無しさん
09/07/30 11:31:27
>>113
パラサイトルーチンでDisposeをクロージャに内包したらよいのでは?

115:デフォルトの名無しさん
09/07/30 11:39:18
同期オブジェクト使っちゃうのが一番手っ取り早そうだけどな

116:デフォルトの名無しさん
09/07/30 11:45:11
>>114
C#で出来ます?探しても見つからない・・・

>>115
同期オブジェクトでどうやったら出来るんでしょうか

117:デフォルトの名無しさん
09/07/30 11:46:19
即レスありがとうございます

118:デフォルトの名無しさん
09/07/30 11:47:00
>>116
リフレクター使ってDisposeが呼び出されてるところの先頭アドレスを割り出す
その後main関数のアドレスも調べてオフセット値を調べ、ポインタ演算で目標アドレスを設定してDisposeを生成

119:デフォルトの名無しさん
09/07/30 11:51:02
IsBackgroundがtrueなスレッドにしたら?

120:デフォルトの名無しさん
09/07/30 11:57:26
そもそも、メインスレッドはほかのスレッドを終了させる義務があると思うんだが。

121:デフォルトの名無しさん
09/07/30 12:50:21
,NET Frameworkって具体的にどのバイナリを指すの?
System*.dllとmscorlib.dll?

122:デフォルトの名無しさん
09/07/30 13:10:19
>>121
C:\WINDOWS\Microsoft.NET\Framework内のDLLすべて

123:デフォルトの名無しさん
09/07/30 23:56:21
ふらっとC#
fileSystemWatcherについて教えてください。
フォルダを監視して、ファイルの生成で処理をしたいのですが、ファイルの生成直後だと、ファイルができていないこともあるので、しばらくウエイトしてから処理をしたいと思います。
そこで、

private void fileSystemWatcher_Created(object sender, FileSystemEventArgs e){
MessageBox.Show(e.FullPath);
}



private void fileSystemWatcher_Created(object sender, FileSystemEventArgs e){
backgroundWorker_DoWork(this, DoWorkEventArgs.Empty);
}

private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e){
Thread.Sleep(5000);
MessageBox.Show(e.FullPath);
}
}

としてみたところ、eが引き継がれないことがわかりました。
backgroundWorker_DoWork(this, DoWorkEventArgs.Empty);
のIDを.Equallとかしてもだめでした。
こういう場合は、どうすればよいでしょう?


124:デフォルトの名無しさん
09/07/30 23:57:58
>>123
まず多重継承でfileSystemWatcher_Createdメソッドをオーバーライドした後、演算子のオーバーロードで中間言語単位のウエイトをかければいい

125:デフォルトの名無しさん
09/07/31 00:01:30
まずそれコンパイル通らないだろ

126:デフォルトの名無しさん
09/07/31 00:02:11
質問です
decimal型って少数入れるときって、mつけますよね
decimal aaa = 0.1m;
じゃあ
decimal aaa = 1;
1はOK何でしょうか?

お願い教えてください

127:デフォルトの名無しさん
09/07/31 00:06:08
>>126
URLリンク(msdn.microsoft.com)

128:デフォルトの名無しさん
09/07/31 00:09:07
早速ありがとうございます。
>>125
はい。コンパイル通りません。
>>124
初心者にはすこしむずかしすぎます。
理解できた単語は、
fileSystemWatcher_Createdメソッドをオーバーライド
ウエイトをかける
だけです。
どうしたらいいでしょう。


129:デフォルトの名無しさん
09/07/31 00:29:57
thk127

130:デフォルトの名無しさん
09/07/31 00:48:59
たびたびすいません質問です
Microsoft Visual C# 2008 Express Editionで参照の追加をしてクラスライブラリを参照してるんですけど
クラスライブラリの内容を変更したとき、その内容が反映される(staticなら使用できるように)のは、何をやったタイミングで
反映されるのでしょう・・・

謎です・・・

131:デフォルトの名無しさん
09/07/31 00:58:52
クラスライブラリをビルドしてから
それを参照しているプロジェクトをリビルドすればいいんじゃね

132:デフォルトの名無しさん
09/07/31 01:00:27
と・・いうかクラスライブラリのクラス変えたのにインテリセンスで反映されていません
クラスライブラリをビルドしたのにもかかわらず!
眠れん。。。。

133:デフォルトの名無しさん
09/07/31 01:05:05
>>131
うまくいきません
私が、なんか勘違いしてるのかも
もういっかいやってみま

134:デフォルトの名無しさん
09/07/31 01:11:28
>>133
クラスライブラリのビルド先パスとプロジェクトからの参照先パスは合ってる?

135:デフォルトの名無しさん
09/07/31 01:13:45
合ってないなー多分

136:デフォルトの名無しさん
09/07/31 01:16:27
>>134
参照先のクラスライブラリの方に問題があるみたいです
なんか元々あったクラスは見えるのに新しく作ったクラスは登録されていないみたいです
うーん
明日に持ち越します
自分はもう少しがんがッてみます

137:デフォルトの名無しさん
09/07/31 01:22:33
参照元(Classを使う方のプログラム)のオブジェクトブラウザには出ない(汗


138:デフォルトの名無しさん
09/07/31 01:32:21
参照先にクラス追加しました
反映されたーキター
でも、本命は反映されてないオブジェクトブラウザ見ると
なんかクラスは3個の四角が線で結ばれているが
(参照先で見える参照元では見えない)反映してほしいのには「上の絵+手紙のマークがついてる」限界だZzz


139:デフォルトの名無しさん
09/07/31 01:34:09
わかったたぶんパブリッククラスにしてなZzz
ありがとうございますたー^^Zzz

140:デフォルトの名無しさん
09/07/31 04:00:12
二葉亭四迷

141:デフォルトの名無しさん
09/07/31 13:18:18
くたばってしまえ

142:デフォルトの名無しさん
09/07/31 14:30:48
アーーーメン♪


143:デフォルトの名無しさん
09/07/31 19:34:59
>参照
ソリューションにライブラリのプロジェクト自体を追加して依存したほうが安心。

144:デフォルトの名無しさん
09/07/31 21:13:18
それって ファイル->テンプレートのエクスポート->「テンプレート種類の選択」 のことですか?

145:デフォルトの名無しさん
09/08/01 20:51:55
>>144
143へのレスだったら、違う。
多分、意識しないでやっているとは思いたいけど、なんかやっていない臭がしたから。

1.ソリューションエクスプローラでは、複数の関連プロジェクトを登録できる。
  これで、アプリとライブラリのプロジェクトを纏めておく。これは基本だよな?
2.アプリのプロジェクトから参照する時はライブラリのプロジェクトを指定。
  これで、依存関係で、ライブラリプロジェクトに依存するようになる。
  ビルド順序もライブラリが先にビルドされるように注意しとくと完璧。

こうしておくとライブラリを更新していたときには自動的にアプリも再ビルドされる。
もちろんbinフォルダにもライブラリの最新アセンブリがコピーされる。
何も考えなくていいんで楽チン。

ただこれは、そういうものと思って何も考えないでこうしてるだけだから、実際は問題
あるかも。
何か問題あるなら教えてくれ。

146:デフォルトの名無しさん
09/08/01 21:44:14
なんか、自分のオナヌーって変じゃないでしょうか、というノリだな。

147:デフォルトの名無しさん
09/08/01 21:48:05
質問です。
マルチスレッドの中でメンバ変数を使うのですが、
その値をすべての場所で一致させるにはどうしたらいいですか?

148:デフォルトの名無しさん
09/08/01 21:48:48
>>147
遅延評価を使って参照渡しされるポイントにブレークポイント仕掛ければいい

149:デフォルトの名無しさん
09/08/01 21:50:57
大雑把な質問で申し訳ないんですが、
Formsの単体テストって皆さんどうやって記述してます?

デバイスに依存する部分があって、
マウスカーソルをじかに読んだりする部分もあるから
どうやって書いたらいいのか途方にくれてしまって……。

150:デフォルトの名無しさん
09/08/01 21:51:26
147と148が何を言ってるのかまるで分からない

151:デフォルトの名無しさん
09/08/01 21:51:59
>>149
まずは量子レベルでのテストを兼ねて世界1で実験、
その後エラーなしの世界2で実験して差分検討法で一致させてる

152:147
09/08/01 21:54:49
1このとこで変えられたら、
その瞬間は全部の場所で同じ値に変わるというのはOKですか?

153:デフォルトの名無しさん
09/08/01 22:00:06
>>152
だからこそ遅延評価
総称関数でパックしてやれば評価されるタイミングは関数依存
だから大丈夫

154:147
09/08/01 22:04:26
>>153
意味わかんないです

155:デフォルトの名無しさん
09/08/01 22:06:22
>>154
メンバ変数への参照が一箇所でも残されていれば大丈夫ということ
だから手ごろな無名関数でクロシージャ作ってやればおk

156:147
09/08/01 22:07:07
>>155
それならわかります
パラサイトルーチンを使ってクロージャを生成すればよいのですね?

157:デフォルトの名無しさん
09/08/01 22:11:41
こんな自作自演して何が楽しいんだ

158:デフォルトの名無しさん
09/08/02 08:07:09
webBrowserでドキュメントの読み込みが終了したタイミング
で次の処理をするプログラムです。当然、DocumentCompleted
で次の処理をして行くのですが、そのサイトは表示後に
JavaScriptで描画している部分があって、完全に描画が終了
するまで若干のタイムラグが生じています。なので、
DocumentCompletedにそのまま記述しただけではうまく動作
しないので、今は、timerを使って次の処理のスタート時間
を遅らせていますが、スマートなやり方でないので、何か
うまい方法はないでしょうか。

159:デフォルトの名無しさん
09/08/02 13:56:12
>>147からの流れが意味不明すぎてワロタ

160:デフォルトの名無しさん
09/08/02 15:45:30
Adv/ノベルゲーというのは、皆が思っている以上にOVAのセルビデオに近いんだ。
既に一定の市場が確保できているからそう簡単に廃れることはない。
だが年単位で推移を見ると市場規模が倍になったり逆に半分になったりはするだろう。
すると会社を大きくできるところがあるかと思えば大手でもつぶれるところが出てくる。

161:デフォルトの名無しさん
09/08/02 15:48:14
どこの誤爆だww

162:デフォルトの名無しさん
09/08/02 16:28:44
アセンブリを動的ロードし使用する為に、次のコードを書いたのですが、
(A)の部分でどうすれば文字列型の引数("あいうえお")を渡せばいいか分りません。
どうすれば new Type[0] の部分に引数 "あいうえお" を指定する事が出来ますか?
※引数を渡さないメソッドの呼び出しは普通に出来ています。

string assemblyPath = @"C:TestLibrary.dll";
Assembly asm = Assembly.LoadFrom(assemblyPath);
type = asm.GetType("TestClass");
insDll = Activator.CreateInstance(type);

//TestMethodメソッドの宣言・・・(A)
MethodInfo mi = type.GetMethod("TestMethod", new Type[0]);


string getMessage = Convert.ToString(mi.Invoke(insDll, null));



163:デフォルトの名無しさん
09/08/02 16:31:28
意味わからん。引数を渡すのは、Invoke のときだろ?

164:デフォルトの名無しさん
09/08/02 16:32:07
なんで動的ロードはできてそんなくだらないところで躓くんだ
思い込みは捨てて全体を見ようぜ
string getMessage = Convert.ToString(mi.Invoke(insDll, null));
なんでnullを渡してると思う?

165:162
09/08/02 16:33:07
>>163
そうなんですか。てっきり(A)の部分でしなくちゃならないと思ってました。

因みに、
string getMessage = Convert.ToString(mi.Invoke(insDll, null));
の部分でメソッドに引数 "あいうえお" を渡す場合にはどうすれば良いでしょうか?

166:デフォルトの名無しさん
09/08/02 16:33:08
ついでに
> MethodInfo mi = type.GetMethod("TestMethod", new Type[0]);
第二引数の意味は知ってるよな?

167:デフォルトの名無しさん
09/08/02 16:36:48
なるほどそこでエラーが出るから(A)がおかしいと考えてたのかw

168:デフォルトの名無しさん
09/08/02 16:37:33
public Object Invoke(
Object obj,
Object[] parameters
)

だろ、ヘルプ見ろよハゲ。

new object[]{ "あいうえお" }


169:162
09/08/02 16:40:17
引数を渡す為に次の様なコードに修正してみたのですが、
駄目でした。。。なぜ???困った。
これじゃ、動的ロードが出来ても肝心の引数を渡すが事が出来ない。。。
動的ロードしたい意味が無い。

object[] o = new object[1];
o[0] = "あいうえお";

string getMessage = Convert.ToString(mi.Invoke(insDll,o));



170:デフォルトの名無しさん
09/08/02 16:43:00
(A) がおかしいんだろ。Type の配列じゃなくて、BindingFlags.Public でも指定しとけ。

171:162
09/08/02 17:03:19
出来ません。。。

やっぱり引数を指定するとエラーが出ます。
自分なりに(A)(B)に色々と引数を渡す為に試してみたのですが、
ことごとく「オブジェクト参照が存在しません。」みたいなエラーが出てしまいます。
どなたか具体的に引数を渡す方法をぜひお願いします。


//(A)
MethodInfo mi = type.GetMethod("TestMethod", new Type[0]);
//(B)
string getMessage = Convert.ToString(mi.Invoke(insDll, null));

172:デフォルトの名無しさん
09/08/02 17:15:19
サンプルでも探せよハゲ

URLリンク(www.atmarkit.co.jp)

173:デフォルトの名無しさん
09/08/02 17:17:47
これでリフレクションによく手を出す気になったモンだなぁ

174:162
09/08/02 18:24:59
>>172
ありがございます!!
出来ますた!!

175:デフォルトの名無しさん
09/08/02 19:22:09
流れたので再度

webBrowserでドキュメントの読み込みが終了したタイミング
で次の処理をするプログラムです。当然、DocumentCompleted
で次の処理をして行くのですが、そのサイトは表示後に
JavaScriptで描画している部分があって、完全に描画が終了
するまで若干のタイムラグが生じています。なので、
DocumentCompletedにそのまま記述しただけではうまく動作
しないので、今は、timerを使って次の処理のスタート時間
を遅らせていますが、スマートなやり方でないので、何か
うまい方法はないでしょうか。


176:デフォルトの名無しさん
09/08/02 19:26:17
そのサイトを出せよ

177:デフォルトの名無しさん
09/08/02 19:30:31
無理だろ。

JavaScript の最後にイベントくっつけるくらいしかないんじゃね?

178:デフォルトの名無しさん
09/08/02 19:33:41
同じく流れたので再度

Formsの単体テストって皆さんどうやって記述してます?

デバイスに依存する部分があって、
マウスカーソルをじかに読んだりする部分もあるから
どうやって書いたらいいのか途方にくれてしまって……。

179:デフォルトの名無しさん
09/08/02 19:38:24
フォームは単体テストなんてやらない。

180:デフォルトの名無しさん
09/08/02 20:05:22
そういうライブラリはあるらしいけど、
使ったことないので知らない

181:デフォルトの名無しさん
09/08/02 23:25:37
string[] か IEnumerable<string> で部分配列を取得したいんですが、

 string[] ary = {...};
 ary.Hoge(start,length);

みたいなメソッドありますか?

182:デフォルトの名無しさん
09/08/02 23:32:40
Array.Copy

183:デフォルトの名無しさん
09/08/02 23:37:10
IEnumerable<T>相手ならSkipとTakeの組み合わせ

184:デフォルトの名無しさん
09/08/03 01:14:20
.netのexeの中身が分かるツールって知ってます?
雷みたいな水色のアイコンで、
ISDN.exeみたいな名前でした

185:デフォルトの名無しさん
09/08/03 01:16:31
それは知らんが
ildasmとReflector

186:デフォルトの名無しさん
09/08/03 02:08:50
正規表現で次の様にHTMLページ内にある<title></title>タグの中の文字列を
変更するにはどうすればよいでしょうか?

<title>太郎</title>

<title>マイケル</title>



187:デフォルトの名無しさん
09/08/03 02:20:33
スレ違い

188:デフォルトの名無しさん
09/08/03 02:22:19
せめて
こうやってみたが(結果がこうなってしまった|こんな例外が出た|こんなコンパイルエラー)
ぐらいは書けよ

189:デフォルトの名無しさん
09/08/03 09:29:42
URLリンク(www.atmarkit.co.jp)
Regex regex = new Regex(@"(<title>)(.*)(</title>)");
string s = regex.Replace(html, @"$1マイケル$3");

190:デフォルトの名無しさん
09/08/03 12:56:41
みんな見れる? 見れなくなった。
C# と VB.NET の質問掲示板 - ASP.NET
URLリンク(bbs.wankuma.com)

191:デフォルトの名無しさん
09/08/03 13:04:10
わんくま掲示板が落ちているのは稀によくあること

192:デフォルトの名無しさん
09/08/03 13:04:41
>>191
日本語でOK

193:デフォルトの名無しさん
09/08/03 13:14:24
わんくま掲示板とブログが落ちているのはよくあること。
ああまたか、という感想しか湧かない。


194:デフォルトの名無しさん
09/08/03 13:26:15
C#でメソッド内静的変数が使えない理由がわからないんですが…

195:デフォルトの名無しさん
09/08/03 13:28:55
ヘジたんの趣味

196:デフォルトの名無しさん
09/08/03 13:34:47
C風に使いだす馬鹿が出るから

197:デフォルトの名無しさん
09/08/03 15:18:08
必要な場面があまりないからだろ。
大抵単なるstatic変数で事足りるし。


198:デフォルトの名無しさん
09/08/03 15:37:53
オブジェクト指向的にはstatic変数で状態持つこと自体極力避けるべきなんだから
それを助長するような機能をわざわざ付けるわけがない

199:デフォルトの名無しさん
09/08/03 18:39:30
最大の理由はマルチスレッドが普通にプログラミングモデルに組み込まれる事になったので
一撃必殺でスレッドセーフを叩き潰す関数内staticは、無い方がいいだろうって所だと見た。

200:デフォルトの名無しさん
09/08/03 19:15:55
そういえば、VB.NETではメソッド内静的変数が使えるんだけど、
どう実装されてんのかReflectorで見たら、ものすごい力技で笑った。
基本的にはインスタンスのメンバ変数なんだけど、それをうまくメソッドローカルな静的変数に見せかけてる

201:デフォルトの名無しさん
09/08/03 21:22:49
>200
ほーほー、スコープ的に他のメソッドから見えないようにしてるのかな?
と、尻馬に乗って試してみた。

Public Class Class1
Shared a As Integer
Dim a2 As Integer
Public Shared Sub Test()
Static Dim a As Integer
a = 0
End Sub
Public Sub Test2()
Static Dim a As Integer
a = 0
End Sub
Public Shared Property prop() As Integer
Get
Return a
End Get
Set(ByVal value As Integer)
Static Dim a As Integer
a = value
End Set
End Property

(続く)

202:デフォルトの名無しさん
09/08/03 21:24:50
Public Property prop2() As Integer
Get
Return a
End Get
Set(ByVal value As Integer)
Static Dim a As Integer
a = value
End Set
End Property
End Class

これの結果が

Int32 a2
Int32 $STATIC$Test2$2001$a
Int32 $STATIC$set_prop2$20118$a
Static Int32 a
Static Int32 $STATIC$Test$001$a
Static Int32 $STATIC$set_prop$0118$a

という感じになる。
Static とか Int32 は区別のためにつけた。
VBだとSharedがクラス変数っぽい。

203:デフォルトの名無しさん
09/08/03 21:26:41
おまけ

class Program {
static void Main(string[] args) {
Class1 cls = new Class1();
Type typ = typeof(Class1);
FieldInfo[] infos;
infos = typ.GetFields(BindingFlags.NonPublic
| BindingFlags.Instance
| BindingFlags.Static);
foreach (FieldInfo f in infos) {
Console.Out.WriteLine((f.IsStatic?"Static ":"") + f.ToString());
}
}
}


204:デフォルトの名無しさん
09/08/03 21:26:56
っぽい、ってそれはMSDN見ればわかるじゃんことじゃん言っちゃ悪いがw

205:デフォルトの名無しさん
09/08/03 21:30:50
VBのStaticはVB6にもある。
Staticがクラス変数扱いになったのはCOMの影響。

206:デフォルトの名無しさん
09/08/03 21:32:12
Out って何? Java?

207:デフォルトの名無しさん
09/08/03 21:34:59
1つのメソッドでしかつかわないRegexオブジェクトとかを置いときたいなと思ったことはある

208:デフォルトの名無しさん
09/08/03 21:48:27
htmlの解析とか無理だろ・・・
Cはやめて今日からC#するってうちの教授なにかんがえてんだよ・・・
そもそも俺プログラムなんてVBAしか知らないしorz

すまん、ぐちってみた

209:デフォルトの名無しさん
09/08/03 21:50:41
VBA → VB.NET → C#

でおk

210:デフォルトの名無しさん
09/08/03 21:53:20
html の解析なんて、DOM ですぐじゃん。

211:デフォルトの名無しさん
09/08/03 21:56:04
>>209
VB.NETってのをかますと勉強しやすいのか。
ってか、Cの授業自体、休憩時間とかしてたしな・・・

がんばってみるよ。そもそもHTML自体分からんのだがな。
何でも、formタグの中にある<input type="ほにゃほにゃ" name="ほにゃほにゃ2" size="30" maxlength="20">

ほにゃほにゃとほにゃほにゃ2を抜き出して表示させろだと。さて、イミフだ

212:デフォルトの名無しさん
09/08/03 21:58:54
VB.NETなんか無意味だからやめとけ
VBAできるっていったってそんな深くまで理解して使ってるわけじゃないだろ

213:デフォルトの名無しさん
09/08/03 22:05:02
HtmlAgilityPackとXPathでサクサクっと

214:デフォルトの名無しさん
09/08/03 22:09:42
IEコンポ関係が一般的では?VBAでもC#でも。

215:デフォルトの名無しさん
09/08/03 22:11:45
>>214
IEが不具合起こしたら手がつけられんからなー。
HTMLブラウジングそのものが目的じゃないんだったら避けたほうがいいんじゃないかな。

216:デフォルトの名無しさん
09/08/03 22:15:37
mshtml がどれだけの実績あると思ってんだよ

217:デフォルトの名無しさん
09/08/03 22:18:38
極端な話,HTMLの解析自体はHTMLが全くわからなくてもできちゃう
それよりもC#覚える方がずっと大変だからがんばれ

218:デフォルトの名無しさん
09/08/03 22:42:53
皆さん、サンクスです・・・
いろいろなアドバイスを頂、少し前向きに取り組んで意向と思います。

input type = A
name = B
value = C

html中のA,B,Cを取得して一覧表示させればいいみたいです。
とりあえず教授の話してることメモしてるのを読み直しとこんな感じみたいです。

なにか参考書を買ってがんばってみようと思います。

WebBrowserを使えばhtmlの表示とソースの取得は出来ると教えてもらいました。
まずはその辺から組み立てていこうと思います。

219:デフォルトの名無しさん
09/08/04 01:31:56
>>208

まじめにやると意外と大変。多分、html tidyあたりでxhtmlに変換した上で、XMLDocumentで読み込むべきかな。


220:デフォルトの名無しさん
09/08/04 04:29:37
218の教授がWebBrowserと言っているんだからそれ使ってやろうぜ。

221:デフォルトの名無しさん
09/08/04 08:06:45
>>218
それ、たぶん不可能だと思うんだけど・・・
教授にきちんと聞いたほうがいい。なんか聞き間違いとかあるんでない?

222:デフォルトの名無しさん
09/08/04 09:18:32
>>221
GetElementByName
GetAttribute
InnerText
等を使えばいけると思うけど


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

4684日前に更新/214 KB
担当:undef