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
等を使えばいけると思うけど
223:デフォルトの名無しさん
09/08/04 09:20:43
C#でMySQLに接続するプログラムを作っています。
接続の際のID、パスワードをユーザーから隠したいのですが
どのような方法がありますでしょうか?
224:デフォルトの名無しさん
09/08/04 09:29:22
どういうレベルで隠したいわけ?
225:デフォルトの名無しさん
09/08/04 09:58:22
>>224
すいません、どういうレベルでと聞かれるとどう答えればいいのかわからないのですが・・・。
とりあえず今、考えているのはIDやパスワードをWeb上のファイルから都度読み込んで
あくまでソース内にはIDやパスワードを入れておかないようにしようかと思っています。
他にいい方法があればと思って質問しました。
226:デフォルトの名無しさん
09/08/04 11:01:49
>>222
いけるのか?
参考HPなにかありませんか?
227:デフォルトの名無しさん
09/08/04 11:19:31
それjavascriptじゃない?
翻訳記事だけど、
URLリンク(japan.internet.com)
とかどう
228:デフォルトの名無しさん
09/08/04 11:20:21
XMLだった
229:デフォルトの名無しさん
09/08/04 11:37:18
>>226
いや
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.WebBrowser1.Navigate("c:\hoge.html")
End Sub
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Dim hdoc As HtmlDocument = Me.WebBrowser1.Document
Dim inputs As HtmlElementCollection = hdoc.GetElementsByTagName("input")
For Each inputElement As HtmlElement In inputs
Dim type As String = inputElement.GetAttribute("type")
Dim lvi As New ListViewItem(type)
Dim nsi As New ListViewItem.ListViewSubItem(lvi, inputElement.Name)
lvi.SubItems.Add(nsi)
Dim value As String = ""
Select Case type.ToLower()
Case "text"
value = inputElement.InnerText
Case "radio", "checkbox"
' 繝√ぉ繝・け縺輔l縺ヲ縺・k縺九←縺・°縺ョ蝣エ蜷・
value = inputElement.GetAttribute("checked")
' value縺ョ蝣エ蜷・
'value = inputElement.GetAttribute("value")
End Select
Dim vsi As New ListViewItem.ListViewSubItem(lvi, value)
lvi.SubItems.Add(vsi)
Me.ListView1.Items.Add(lvi)
Next
End Sub
という感じで組めば、リストビューにリストアップできるけど。
こういうことではないのか!?
230:デフォルトの名無しさん
09/08/04 11:40:05
ゴメン文字化けしてたので、再レス
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.WebBrowser1.Navigate("c:\hoge.html")
End Sub
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Dim hdoc As HtmlDocument = Me.WebBrowser1.Document
Dim inputs As HtmlElementCollection = hdoc.GetElementsByTagName("input")
For Each inputElement As HtmlElement In inputs
Dim type As String = inputElement.GetAttribute("type")
Dim lvi As New ListViewItem(type)
Dim nsi As New ListViewItem.ListViewSubItem(lvi, inputElement.Name)
lvi.SubItems.Add(nsi)
Dim value As String = ""
Select Case type.ToLower()
Case "text"
value = inputElement.InnerText
Case "radio", "checkbox"
' チェックされているかどうかの場合
value = inputElement.GetAttribute("checked")
' valueの値の場合
'value = inputElement.GetAttribute("value")
End Select
Dim vsi As New ListViewItem.ListViewSubItem(lvi, value)
lvi.SubItems.Add(vsi)
Me.ListView1.Items.Add(lvi)
Next
End Sub
231:デフォルトの名無しさん
09/08/04 12:52:12
>>230
C#じゃなくないですか?
C#.NET開発で、自分も似たようなことで悩んでいます。
パーサーというものの使い方がいまいちわからない……
232:デフォルトの名無しさん
09/08/04 13:00:39
VB.NETはコードの見た目がなんとなく違うだけのC#。
C#できるならVB.NETもできるようにならないともったいない。
だからってわざわざVB.NETで貼るのはどうかと思うけど。
233:デフォルトの名無しさん
09/08/04 13:09:19
>>231
あ、そだった、すまん。C#でのソースを再レス
private void Form1_Load(object sender, EventArgs e){
this.WebBrowser1.Navigate(@"c:\hoge.html");
}
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlDocument hdoc = this.WebBrowser1.Document;
HtmlElementCollection inputs = hdoc.GetElementsByTagName("input");
foreach(HtmlElement inputElement in inputs)
{
string type = inputElement.GetAttribute("type");
ListViewItem lvi = new ListViewItem(type);
ListViewItem.ListViewSubItem nsi = new ListViewItem.ListViewSubItem(lvi, inputElement.Name);
lvi.SubItems.Add(nsi);
string value = "";
switch(type.ToLower())
{
case "text":
value = inputElement.InnerText;
break;
case "radio":
case "checkbox":
value = inputElement.GetAttribute("checked");
//value = inputElement.GetAttribute("value");
break;
}
ListViewItem.ListViewSubItem vsi = new ListViewItem.ListViewSubItem(lvi, value);
lvi.SubItems.Add(vsi);
this.ListView1.Items.Add(lvi);
}
}
234:デフォルトの名無しさん
09/08/04 13:18:42
>>232
すまん。よく使う言語がVB.NETのほうだもんだから、
時々こうC#スレでVB.NETのソースをはっつけてしまうことがある。
235:デフォルトの名無しさん
09/08/04 13:22:32
いいわけするな
236:デフォルトの名無しさん
09/08/04 13:29:42
>>235
別に言い訳ではないんだが。
237:デフォルトの名無しさん
09/08/04 15:41:05
フォルダ内にあるファイル名を配列に、
ファイル名順で入れたいのですが上手くいきません。
string[] fs = System.IO.Directory.GetFiles(フォルダ指定, "*.*");
Array.Sort(fs);
フォルダ内のファイルは
temp0・temp1・temp2……temp10
です。(拡張子略)
結果は
temp0・temp1・temp10・temp2……
となります。数字が二桁を超えるとおかしくなります。
238:デフォルトの名無しさん
09/08/04 15:55:30
文字列で比較してるんだから当然の並び順になってるだけ
239:デフォルトの名無しさん
09/08/04 15:56:43
>>237
別におかしいわけではないよ。
そもそもエクスプローラとC#(というか.net)の文字列の比較方法が異なる
どのくらい分からんのかよく分からんので、適当にぐぐった結果はってみる
URLリンク(dobon.net)
URLリンク(nekoaruki.com)
240:デフォルトの名無しさん
09/08/04 16:06:41
>>238
>>239
ありがとうございます。
まさにエクスプローラの表示順にしたかったのです。
リンク先で可能そうです。ありがとうございました。
241:デフォルトの名無しさん
09/08/04 16:38:40
あれ、Explorerも昔はC#的な並べ替えだったよね・・・?
気のせいかな・・・
242:デフォルトの名無しさん
09/08/04 16:46:03
XP辺りから変わった
レジストリに使用する比較関数の項目があるんで変更も可能なはず
ロジックは相当複雑
243:デフォルトの名無しさん
09/08/04 16:49:35
>>241
intuitive sortってやつだろ。XPの目玉機能だよ
>>240
Explorerと同じにするならStrCmpLogical使うべき。
244:デフォルトの名無しさん
09/08/04 20:47:02
>>233
記憶があいまいですまないのだが、確かフレーム分割されてるとだめだよな
違ったっけ?
245:デフォルトの名無しさん
09/08/04 21:32:20
>>244
そんなん、frames で取ればいいだろ。
適当言うなよハゲ
246:デフォルトの名無しさん
09/08/04 22:35:34
>>245
いや、フレームごとに取得は無理だろ
一括で取得なら可能だけど。
まぁ、>>218がどこまで作るのか知らないけど
247:デフォルトの名無しさん
09/08/04 22:37:41
>>242-243
あーやっぱXPから変わったんですか。
ありがとう
248:デフォルトの名無しさん
09/08/05 01:11:01
Form1からForm2を開くようにしたいのですが、
Form2は1こしか作らせない。
Form1_loadあたりで、Form2を作っておきたい。
Form2の変数をForm1でも使いたい。
どのようにすればいいんでしょうか?
249:デフォルトの名無しさん
09/08/05 01:15:48
shingleton
250:デフォルトの名無しさん
09/08/05 01:37:38
やりたいことは、
Form1を半分隠すみたいなかんじで、
ボタン押すと、ぴーって出るみたいな
できないかな?
251:デフォルトの名無しさん
09/08/05 01:45:26
>>246
いや、可能だよ
foreach (HtmlWindow f in this.webBrowser1.Document.Window.Frames)
{
HtmlDocument hdoc = f.Document;
// 以下略
}
252:デフォルトの名無しさん
09/08/05 01:51:27
トイレ逝け
253:デフォルトの名無しさん
09/08/05 06:16:53
GetAttributeでいける
foreach (HtmlElement element in all_Input)
{
if (element.GetAttribute("type") == "hidden")
{
name = element.GetAttribute("name");
value = element.GetAttribute("value");
}
}
254:デフォルトの名無しさん
09/08/05 12:08:12
フレーム分割してるページのソースとかも同じやり方でできるのかな?
255:デフォルトの名無しさん
09/08/05 18:14:54
数ヶ月に1つのプログラミングをするぐらいなんだけど
dataGridViewなど設定や扱いが面倒なのは
以前どういう風に設定したのか忘れてしまって
(項目のコピペや自動で列が追加されないようにしたりなど)
毎回一から解説サイトとかを回って調べているのが激しく無駄な気がして
こういうことにならないように、あらかじめ設定したコントロールを
追加するだけで他のプロジェクトでも簡単に使える方法はないでしょうか?
例えば、
dataGridView.SelectRetuCopy()
dataGridView.SelectRetuDelete();
など毎回同じような動作をする機能をあらかじめ盛り込んでおきたいのです
256:デフォルトの名無しさん
09/08/05 18:22:46
コード・スニペットはどう?
257:デフォルトの名無しさん
09/08/05 18:41:16
>>255
既存のコントロールを継承した独自のコントロールクラスを定義して、
それをフォームデザイナーで使ったりは普通にできるよ。
258:デフォルトの名無しさん
09/08/05 18:53:53
Buttonコントロールで影が付く条件を教えてください
既定のボタンを表している影だと思うのですが、出てこなくなりました
259:デフォルトの名無しさん
09/08/05 19:18:36
FormのAcceptButtonとCancelButtonのことか?
260:デフォルトの名無しさん
09/08/05 19:46:01
AcceptButtonで影付いてたんですね
ありがとうございました
261:デフォルトの名無しさん
09/08/05 19:51:19
>>260
テキストボックスにUSB入力してボタンクリックしたらIEで表示させることって可能ですか?
262:デフォルトの名無しさん
09/08/05 19:54:54
エスパー召喚質問過ぎる
263:デフォルトの名無しさん
09/08/05 19:59:04
>>262
すみません。USBでなくURLでつ…
264:デフォルトの名無しさん
09/08/05 20:04:17
FileSystemWatcherでテキストファイルの生成を監視しているとき、テキストファイルだと、2回生成したとメッセージが表示されるのですが、原因と回避策を教えてください。
private void fileSystemWatcher_Created(object sender, FileSystemEventArgs e){
MessageBox.Show("created!")
}
265:デフォルトの名無しさん
09/08/05 20:04:31
可能姉妹
266:デフォルトの名無しさん
09/08/05 20:09:06
>>265
出来ましたらヒントかなにかを……
267:デフォルトの名無しさん
09/08/05 20:14:10
>>266
グーグルの使い方ぐらい覚えた方がいいよ
URLリンク(www.google.com)
268:デフォルトの名無しさん
09/08/05 20:32:11
>>267
ありがとうございます。
少し甘えすぎていました。すみません。
269:255
09/08/05 20:35:04
>>256
>>257
どうもありがとうございます
皆さんはこういう場合どうしているんでしょうか?
毎回form1でガリガリ書いちゃうのかな
それとも継承したコントロールクラスを作ったりするのでしょうか?
270:デフォルトの名無しさん
09/08/05 20:46:39
DataViewを作成してRowFilterを設定しようとしています。
フォーム上のテキストボックスで入力された文字列で
「フィールド」の列をあいまい検索しようとしています。
DataView dv = new DataView(datatable);
dv.RowFilter = "フィールド like '*" + テキストボックス.Text + "*'";
この時に、特殊な文字列が入っているとエラーになります
[]%\<>+|^'"
だから、Replaceメソッドを使ってあらかじめ[]でそれらの文字をくくってやろうと
しました。
Joken = Joken.Replace("[", "ESCAPETemporary");
Joken = Joken.Replace("]", "[]]");
Joken = Joken.Replace("ESCAPETemporary", "[[]");
Joken = Joken.Replace("%", "[%]");
Joken = Joken.Replace("\\", "[\\]");
Joken = Joken.Replace(">", "[>]");
Joken = Joken.Replace("<", "[<]");
Joken = Joken.Replace("+", "[+]");
Joken = Joken.Replace("|", "[|]");
Joken = Joken.Replace("^", "[^]");
Joken = Joken.Replace("'", "''");
たのですが、くくってやるとエラーは出ないのですが検索にかかりません。
これらの文字をエスケープする方法を教えて下さい。
また、エスケープするのにわざわざReplaceでこうやって置き換える以外の方法があったら教えて下さい。
271:デフォルトの名無しさん
09/08/05 21:03:17
教えてあげないよ
_,∩_ _,∩_ _,∩_
(_____)ゝ、 (_____) y (_____)
/ :: :: :: ヽ 〉 /-‐:: ::‐-ヽ / / :: :: :: ヽ
_./ (・ )ll(・ ) ∨ _/ 0) i! 0) ∨ _/ ( ・)i!(・ ) ゙、_
// :: :: ∈ゝ :: ::ヽ // :: ‐-‐ :: ヽ // :: ー一 :: ヽ\
. ゝ/:: :: :: :: :: ::ヽ ゝ/ :: :: :: :: :: ヽ ゝ/ :: :: :: :: :: ヽく
 ̄ ̄ | ̄ ̄ | ̄ ̄  ̄ ̄ | ̄ ̄ | ̄ ̄  ̄ ̄ | ̄ ̄ | ̄ ̄
| | | | | |
⊂! !つ シ! !つ ⊂! !つ
ジャン♪
272:デフォルトの名無しさん
09/08/05 21:12:51
>>270
LIKE演算子に使う文字列で[]使ってエスケープする必要があるのは[*%だけだぞ
'もエスケープが必要だがこれは'をもう一つ重ねることでエスケープする
String.Replaceで良いんじゃね Regex.Replace使っても良いけど
273:デフォルトの名無しさん
09/08/05 21:13:12
コピペ君って馬鹿だな、まで読んだ。
274:デフォルトの名無しさん
09/08/05 21:32:58
>>270
そういうのはクエリのサニタイズと呼ばれる。
普通は入力値は直接テキスト処理せず、DBライブラリ側に処理させる。
C#だとどうやるのかは知らんけど、データソースオブジェクトを使ったらクエリ書く必要すらないんじゃね?
275:270
09/08/05 22:13:59
>>272
指摘されてあらためてヘルプをよく読んだら、
フィールド名に使ってたらエスケープしないといけない文字列と
データの中でエスケープしないといけない文字列は違うということがわかりました。
[*%'
についておっしゃるとおりエスケープしたらうまくいきました。
ありがとうございました。
最初に想定していたよりも文字数が減ったのでReplaceでやることにします。
276:デフォルトの名無しさん
09/08/05 22:30:34
VB厨で申し訳ないのですが、
VBのFormat、FormatNumber関数に相当するメソッドを
ご存知の方おられたら教えてください。
数値を三桁カンマ区切りにしたいというのが目的です。
277:デフォルトの名無しさん
09/08/05 22:31:41
>>276
string.Format()
278:デフォルトの名無しさん
09/08/05 22:38:11
int.ToString(string)
279:デフォルトの名無しさん
09/08/05 23:37:58
1234567890.ToString("N0")
280:デフォルトの名無しさん
09/08/06 01:34:46
foreachでbreakで抜けなくてもいい場合にbreak使わないで全部回すってどうですか?
281:デフォルトの名無しさん
09/08/06 01:40:34
言ってることがよくわからないが推測で答えると場合によるとしか言えない。
282:デフォルトの名無しさん
09/08/06 01:43:16
breakで抜けなくてもいい場合ならbreakを使っちゃダメでしょ。当然全部回る。
で?
283:デフォルトの名無しさん
09/08/06 02:07:19
一つだけ抽出する場合に決まってんだろオタンコナス!
284:デフォルトの名無しさん
09/08/06 02:11:48
エスパーでも太刀打ち出来ないだと!?
285:デフォルトの名無しさん
09/08/06 02:12:03
それならEnumerable.Firstの述語を引数に取るほうを使えばいい。
286:デフォルトの名無しさん
09/08/06 03:06:27
>>280
next
287:デフォルトの名無しさん
09/08/06 08:23:28
お前達は何を言っているんだ・・・
288:デフォルトの名無しさん
09/08/06 10:15:15
nextでふと思ったが、、、continue のことか?
289:デフォルトの名無しさん
09/08/06 10:23:46
現在、あるソフトの試用版を製作中です。
試用版ということなので、メインの機能の回数制限をつけようと思っているのですが
残り回数をレジストリに書き込んだ場合、ユーザーに書き換えられてしまう危険性がありますよね?
これをユーザーから編集不可にする方法はありますか?
290:デフォルトの名無しさん
09/08/06 10:44:33
ないよ
291:デフォルトの名無しさん
09/08/06 10:48:44
回数限定版ではなく機能限定版を考えてみてください
292:デフォルトの名無しさん
09/08/06 10:49:54
>>290
>>291
やはりそうですか。
機能限定版、もしくは正規版の機能充実に時間を使います。
ご回答、ありがとうございました。
293:デフォルトの名無しさん
09/08/06 10:52:49
暗号化すればある程度は大丈夫だけど削除されたら元も子もないし
完璧な方法はないかも
究極はそもそもその機能を入れてないバージョンを別に作ることだがそれだと試用できないな
294:293
09/08/06 10:54:09
既に回答されてて泣いた
295:デフォルトの名無しさん
09/08/06 11:36:15
ユーザーのPCはユーザーの管理下にあるから、まっとうな方法で確実なのは無理だね。
ネット使って認証とかのレベルでやらないと無理。
296:デフォルトの名無しさん
09/08/06 12:06:00
webBrowserで表示しているページをボタンクリックしたらIEで表示させる。
こんなの作りたかったけど難しい。
URLって簡単には取得できないのね。
舐めてたわ
297:デフォルトの名無しさん
09/08/06 13:01:34
現在表示されてるURLはプロパティから直接取れる。
ページ変移もNavigatingイベントで拾える。
298:デフォルトの名無しさん
09/08/06 14:18:12
>>297
例えば、グーグルとかで日本語検索したページをIEで表示させるとURLに検索文字が直接はいってしまう。
あと、フレーム分割されてるようなページだとうまくURL取得出来ないです
299:デフォルトの名無しさん
09/08/06 15:32:56
>>298
後者は WebBrowser.Document.Window.Frames.Item(int) でなんとかできると思う
前者は日本語でおk
300:デフォルトの名無しさん
09/08/06 15:53:23
URLエンコードしたいんじゃね
301:デフォルトの名無しさん
09/08/06 16:07:41
Uri.OriginalStringの事か?
302:デフォルトの名無しさん
09/08/06 16:40:12
Aというフォームを起動させて、あるボタンを押せば
Aを閉じてBというフォームを表示させたいんですが、どうすればいいでしょうか?
Aを閉じるとアプリケーション自体終了したり、AのVisibleをfalseにしたままだと
Bを閉じたときに、Aは非表示なだけで終了はしていませんよね?
303:デフォルトの名無しさん
09/08/06 16:47:22
・AはHideにしておいて、BのClosedイベントでAも終了する
・ApplicationContextを使ってMainFormを差し替える
・Application.Run(new B())する前にAをShowDialogで表示する
304:デフォルトの名無しさん
09/08/06 17:03:53
>>303
ありがとうございます。
305:デフォルトの名無しさん
09/08/06 21:09:45
c#EE2008
datagridviewを継承した独自のコントロールを
デザイナの左にあるコンポーネントに追加する方法ありますか?
コントロールのサイズを視覚的に調整したいので・・
306:デフォルトの名無しさん
09/08/06 22:01:03
>>305
なーんか言ってることが意味不明だな、と思うのはたぶん俺だけじゃないと思う。
307:デフォルトの名無しさん
09/08/06 22:13:14
>>305
同じプロジェクトならビルドすればいい
違うプロジェクトなら参照に加えればいい
308:デフォルトの名無しさん
09/08/06 22:21:58
ああ、>>307を見てやっと意味が分かった
309:296
09/08/06 22:24:07
frameはDocumentCompletedの最後にメインページが読み込まれるみたいで意識しないでいいみたいです
>>299さんのコード使わずとも何とかなりました。
ただ、JavaScriptで描画している部分はどうにもならない・・・
こればっかりは仕方ない見たいですね。
学校ではJava習ってるんで、C#を自主でやろうかな~と思ってタブブラウザもどきを作っています。
310:305
09/08/06 22:50:05
>>307
ビルドすれば左のコンポーネントのところに表示されるのですか?
継承しただけだと無理だと思うんだけど
継承したクラスを作ってその後どうすればいいんでしょうか?
311:デフォルトの名無しさん
09/08/06 23:04:20
それだけで出るけど?
312:デフォルトの名無しさん
09/08/06 23:17:00
試してみたが、普通に表示されるぞ?
VS2005 Standard でだが。
using System.Windows.Forms;
namespace MyControl {
public class MyDataGridView : DataGridView {
}
}
313:デフォルトの名無しさん
09/08/06 23:18:08
ふと・・・public付け忘れなんてオチは却下だ。
314:デフォルトの名無しさん
09/08/06 23:28:22
DataGridViewを継承って使い道が全く思いつかないんだが
外から弄り放題だからコンポーネントとしては失格だし
315:296
09/08/07 00:12:14
>>309
JavaScriptか・・・
専門学校のときに似たようなの作らされたっけ
なんか、
url = e.Url.ToString();
これでurlを取得しようとしたら、なんかJavaScript:false:
こんなわけ分からん値が取得してた気がする。面倒になって他の奴に投げたがなんだったんだろう。
316:デフォルトの名無しさん
09/08/07 00:28:08
WPFで、一般的なペイントツールを作ろうと思ったら、カンバス部分はどう実装するの?
はじめからInkCanvasが用意されてるけど、これと似た自前のクラスを作ることになるのかな
317:305
09/08/07 00:37:53
>>314
弄り放題すぎて目的の関数見つけるのが大変なんです
318:デフォルトの名無しさん
09/08/07 00:42:44
WiiRemoteについての質問です
wiiリモコンとバランスボードを制御するとき
どちらか片方ずつなら制御できたのですが
両方を同時に制御するにはどうすればいいですか?
319:デフォルトの名無しさん
09/08/07 01:21:19
個別のライブラリに関しては提供元もしくは専用のフォーラムで聞いてください。
320:デフォルトの名無しさん
09/08/07 08:18:32
DataGridViewを継承したやつって
実体はなんなの?
DLL?
Formにぺこって貼り付けるやつって、実体はなんですか?
321:デフォルトの名無しさん
09/08/07 08:25:13
>>320
フォームデザイナーは見た目をいじるだけ。
あくまで出来上がるのはC#のソースコード。
ソースコードに何が書かれているかをよく見てご覧。
いくつか質問してるが、ソースコードに全部書いてある。
322:デフォルトの名無しさん
09/08/07 09:35:02
抽象クラスとインターフェースって似てると思いますが、インターフェースで出来ないことを抽象クラスでやるってことなんでしょうか?
323:デフォルトの名無しさん
09/08/07 10:24:52
>>332
それくらいググりなさいよっ、初心者のくせにっ!
URLリンク(blog.shos.info)
324:デフォルトの名無しさん
09/08/07 10:37:34
機能は似ているが由来が違うと思えばいい。
インターフェイスという概念は必ずしもオブジェクト指向ではない。
325:デフォルトの名無しさん
09/08/07 12:09:59
>インターフェイスという概念は必ずしもオブジェクト指向ではない。
そうか?
interfaceではstaticメソッドが作れないわけだから、
interfaceを使うと出来上がるものが必ずオブジェクトになると思うんだが?
326:デフォルトの名無しさん
09/08/07 12:51:05
C#のinterfaceというキーワードは完全にクラス周辺の仕組みの一部。
ただし他から借りてきた概念だといいたいわけさ。
APIだってインターフェイスだがWin32APIはオブジェクト指向じゃないだろ。
COMやCORBAのインターフェイスになるとオブジェクト志向の風味が漂ってくる。
いわゆる分散オブジェクト。
327:デフォルトの名無しさん
09/08/07 13:25:46
どう考えてもC#のインターフェースについて聞いてるだろ
328:デフォルトの名無しさん
09/08/07 13:43:14
>>322
抽象クラスじゃできないことをインターフェースでやる場合もあるだろ
多重継承とか
329:デフォルトの名無しさん
09/08/07 21:11:20
補色ってどう作ればいいのかな。
330:デフォルトの名無しさん
09/08/07 21:15:15
>>329
補色っていってもいろいろ定義がありそうだけど、
一番普通のは単にRGBの1の補数でいいんじゃないの?
331:デフォルトの名無しさん
09/08/07 21:17:06
>>330
なるほど。thx。
332:デフォルトの名無しさん
09/08/07 23:22:32
C#でHPをローカルに保存するようなプログラムは作成可能でしょうか?
フレームに分かれていないページなら、CSSと画像などを気にしなければ簡単に作成することが出来ました。
ただ、フレーム分割されているページにも対応したプログラムの作成方法が分からず、そもそも出来るのかと頭を抱えています
333:デフォルトの名無しさん
09/08/07 23:32:40
できなかったらIEだのFirefoxだのはどんな魔法を使ってるというのか
334:デフォルトの名無しさん
09/08/07 23:36:00
テクマクマヤコンテクマクマヤコン
335:デフォルトの名無しさん
09/08/08 00:03:56
WinFormsにおいて
ウィンドウがリサイズされたとき
子のコントロールがそれに合わせてリサイズしたり移動したりするには
どうすればいいでしょうか
336:デフォルトの名無しさん
09/08/08 00:06:39
抽象的で答えにくいが
取り敢えずDockとかAnchorとかを使うとか
337:デフォルトの名無しさん
09/08/08 04:05:46
ひょっとして
Image img = Properties.Resources.Image1;
のように、画像リソースを取得した場合って
img.Dispose();
しないとダメだったりする?
338:デフォルトの名無しさん
09/08/08 04:42:24
>>337
不要
339:デフォルトの名無しさん
09/08/08 04:46:44
>>338
行った場合って何か不都合が生じたりする?
340:デフォルトの名無しさん
09/08/08 06:51:29
する
341:デフォルトの名無しさん
09/08/08 09:16:54
>>333
どうやって実装するばいいのか分からず悩んでいます。
HtmlDocument doc = webBrowser1.Document ;
textBox2.Text = doc.GetElementsByTagName("html")[0].OuterHtml ;
メインページのhtmlしか取得できません。
342:デフォルトの名無しさん
09/08/08 09:20:52
frameタグを見ろ
343:デフォルトの名無しさん
09/08/08 09:30:26
Button_Clickの内容をFormクラスに書くのっておかしくないですか?
Buttonがクリックされた時の処理はButtonが持っているべきだと思うのですが、これがVisual C#というものの特性なのでしょうか?
344:デフォルトの名無しさん
09/08/08 09:30:30
DOM に window.frames があるんだからそっちのほうがいいだろ
345:デフォルトの名無しさん
09/08/08 09:33:00
>>343
ん?Controlだろ?
346:デフォルトの名無しさん
09/08/08 09:35:06
>>343
全然おかしくない。いわゆる「処理の移譲」ってやつ。
JavaをはじめほとんどのGUIライブラリはこの考え方をもとにして設計されている。
347:デフォルトの名無しさん
09/08/08 09:56:22
つまり、機能毎に新しいButtonカスタマイズクラスを書け、ということだろうか
348:デフォルトの名無しさん
09/08/08 10:04:36
Buttonは「クリックされた」を検知するだけのもので,具体的な処理を行うのはフォームだろ。
単純に考えれば,ボタンがクリックされたらButtonがフォームの「ボタンが押された時の処理」
を行うメソッドを呼び出すのが自然だけど,それではButtonが特定のフォームに依存してしまうので
それをうまく切り離すのが「委譲」の考え方。
349:デフォルトの名無しさん
09/08/08 10:14:36
>>343
マウスがクリックされたときの動作を
ココのアプリケーションが実装するのはおかしいって言ってるようなもんだぞ。
350:デフォルトの名無しさん
09/08/08 10:21:14
>>343は良い質問
初心者ではなさそうだけど
351:デフォルトの名無しさん
09/08/08 10:29:36
まあ、「家=Form」だけあっても、「ドア=Control」が無ければ
「家に入る=Event」というのは実現できないわけだし、
「ドア」単体には、そもそも「家に入る」というイベントを実現することは出来ない
というわかるようでわからない説明してみる
352:デフォルトの名無しさん
09/08/08 11:02:31
昔のjavaのAWTが確か派生クラスで処理を書く形式じゃなかったかな?
で欠点が多かったから委譲モデルに変更された。
C#というか.NETのイベントはまさに委譲モデル。
353:デフォルトの名無しさん
09/08/08 11:30:51
>>342
>>344
各フレームの情報が見たいのではなく、あくまでしたいのはwebbrowserで表示しているページのローカル保存です。
WebページをMHT形式(.mhtファイル)で保存するには?[C#、VB]
URLリンク(www.atmarkit.co.jp)
こんなの見つけたのでもう少しがんばってみようと思います
354:デフォルトの名無しさん
09/08/08 11:36:25
取り敢えずHTMLの仕組みぐらいは知っといた方が良いよ
355:デフォルトの名無しさん
09/08/08 11:51:09
>>354
あぁ、何か的外れなことをしようとしてるみたいですね。私。
VBAで表計算の自動化くらいしかしたことがなく、突然webのダウンロードソフトを作ってといわれてかなりテンパっています。
少し落ち着いて、考え直していこう「と思います。
理想。
1,IEの名前をつけて保存のようにメインページは任意の名前で保存
2,フレーム分割されているようなページの場合、それぞれを保存する。
こんな感じです。2のフレームページの保存は当然それぞれのhtml名で保存しなければいけないんですが・・・
難しいですね。プログラミングって。
356:デフォルトの名無しさん
09/08/08 12:05:45
保存するだけならばwget使えばいいじゃん
357:デフォルトの名無しさん
09/08/08 12:48:26
>>340
なんで?
358:デフォルトの名無しさん
09/08/08 13:16:39
>>357
共同風呂で他人が入っている可能性があるのに電気消す馬鹿がどこにいる
359:デフォルトの名無しさん
09/08/08 13:32:08
それは一見同じ風呂だが実は別の風呂
Resourcesの画像プロパティ参照するごとに毎回新しいインスタンスが作られてるよ
だからDisposeもやっとかないとメモリが無駄に食われる可能性がある
360:デフォルトの名無しさん
09/08/08 13:44:01
>>359
ResourceManager.GetObjectを使ってるようだから、それも不正解。
毎回は作られない。
長く使用されずにGCで回収されてしまった場合や
意図的にDisposeされた場合は再ロードが発生する。
361:デフォルトの名無しさん
09/08/08 13:54:10
>>360
Resources.Image1 == Resources.Image1
がfalse返したり、
using (var g = Graphics.FromImage(Resources.Image1)) {
// 適当に描画
}
this.BackgroundImage = Resources.Image1
で描画がまるで無視されたりするけど?
362:デフォルトの名無しさん
09/08/08 13:59:51
>>361
下は意図的にDisposeしてるんじゃないの?
363:361
09/08/08 14:00:31
ごめんなんでもない
364:363=362≠361
09/08/08 14:01:31
>>363は>>362で>>361じゃない
もう寝る。
365:デフォルトの名無しさん
09/08/08 14:01:41
>>362
そりゃGraphicsはDisposeしてるがそれは全く関係ないだろ
366:デフォルトの名無しさん
09/08/08 15:10:39
どうでもいいが、”例え”は余計分らんw
367:デフォルトの名無しさん
09/08/08 16:36:28
MSDNを見た感じは>>360だけど
実際に動かすと>>359なので
同一インスタンスであるという保証も同一でないという保証もないという前提にして、
フォームのロードと同時にリソースを読み込んでフォームのメンバにキャッシュする。
Disposeはしないという使い方をしている。
368:デフォルトの名無しさん
09/08/08 16:44:21
>>365
>>367
まーその辺は、1MBくらいの大きめの画像をループで1000回くらい呼び出して
メモリの消費量がどうなるか眺めればよさそうですな。
369:デフォルトの名無しさん
09/08/09 01:10:05
webBrowserコントロールでMouseDownやMouseMoveのイベントハンドラーを実行したいのですが
規定のイベントには定義されていないみたいです。
どうにか実行できないでしょうか?
370:デフォルトの名無しさん
09/08/09 03:35:25
マイクロソフトのサイトで初心者向け10行で出来るシリーズだったと思うのですが、
デスクトップにカレンダーを表示するアプリの作成ページがあったと思うのですが、
どなたかURLを覚えている人いませんか?
探したけど見つからない。
371:デフォルトの名無しさん
09/08/09 03:39:38
>>203
インデントをずらせ!化す!!
372:デフォルトの名無しさん
09/08/09 07:54:35
サイトを見ていたら、
ソースの中に
[ReadOnly(true)]とか
[Category("新規カテゴリ")]
という行がありました。
上記の"[ ]"
はどういうケースに使うのですか?
373:デフォルトの名無しさん
09/08/09 07:59:24
>>369
URLリンク(homepage1.nifty.com)
374:デフォルトの名無しさん
09/08/09 08:00:08
フルで入れちゃった。
h抜いてると思ってくれ
375:デフォルトの名無しさん
09/08/09 09:06:49
>>373
VBですか
何書いてるのかサッパリです^^
376:デフォルトの名無しさん
09/08/09 09:54:47
>>372
それは属性という機能。
URLリンク(ufcpp.net)
377:デフォルトの名無しさん
09/08/09 17:02:05
アドバイスお願いします。
WPFである条件のときだけチェックボックスを表示したいです。
Formとおなじように、.csに、
if ( ) checkBox.Hide();
else checkBox.Show();
と書いたところ、
'System.Windows.Controls.CheckBox' に 'Hide' の定義が含まれておらず、型 'System.Windows.Controls.CheckBox' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
といわれました。
CheckBox chetkBox = new CheckBox();
checkBox.Hide();
としてもだめでした。
checkBox.Visibility = Hidden;
では、
名前 'Hidden' は現在のコンテキスト内に存在しません。
checkBox.Visibility = "Hidden";
では、
型 'string' を型 'System.Windows.Visibility' に暗黙的に変換できません。
でした。
どうすればいいでしょう?
378:デフォルトの名無しさん
09/08/09 17:09:44
checkBox1.Visibility = Visibility.Hidden;
379:デフォルトの名無しさん
09/08/09 17:18:32
<CheckBox Name="..."
XamlのName属性は何になってる?
380:デフォルトの名無しさん
09/08/09 17:22:24
そもそもそのコードでは checkBox というインスタンスが…
いや、何でもない。
381:デフォルトの名無しさん
09/08/09 17:32:15
>>378
ありがとうございます。
できました。
382:デフォルトの名無しさん
09/08/09 18:25:08
ひょっとして、ずれてるかもしれませんがご容赦ください。
fileSystemWatcherのファイルの生成の捕捉について教えてください。
IE7.0でファイルをダウンロードして、それを契機にアクションしたいと思います。
private void fileSystemWatcher_Created(object sender, FileSystemEventArgs e){//処理}
で監視しているのですが、ダウンロードのときだと、うまく監視できません。
別のフォルダから移動してくると、監視に成功します。
IEのダウンロードの場合は、Createdでは監視できないんですか?
383:デフォルトの名無しさん
09/08/09 18:38:58
取り敢えず名前を付けて保存時はちゃんと反応するな
384:デフォルトの名無しさん
09/08/09 19:11:32
テキストボックスのハイトやパディングを自由に指定できないのはなぜ?
見栄えのいいフォームができないじゃないか。
C#ってこの程度のもんだったんだ…。
385:デフォルトの名無しさん
09/08/09 19:13:47
WPF使うか自前で描画しろ
386:デフォルトの名無しさん
09/08/09 19:18:51
>>384
大丈夫、君ならJavaでもC++でも見栄えの良いフォームを作れないさ
387:デフォルトの名無しさん
09/08/09 19:30:16
>>383
ありがとうございます。
それでできないのですが、なぜでしょう?
もうすこし考えてみます。
388:デフォルトの名無しさん
09/08/09 19:48:53
WPFよりWindowsフォームアプリケーションが勝る点はどこですか?
…女子高なので聞いても誰も知りません。
389:デフォルトの名無しさん
09/08/09 20:15:01
.Net2.0でも動くこと。WPFはXPのsp2以降とか条件が厳しくなるので
使えるユーザーが限定されてしまうことかな。
390:デフォルトの名無しさん
09/08/09 20:24:07
殆どのユーザーはXPSP2以降なので問題なし
391:デフォルトの名無しさん
09/08/09 21:01:21
星形のウィンドウズフォームってどうやって作るのでしょうか?
392:デフォルトの名無しさん
09/08/09 21:03:15
>>389
ありがとう。
では、WPFの方がこれから主流になるのかな。
393:デフォルトの名無しさん
09/08/09 21:06:10
>>391
URLリンク(dobon.net)
ココ見ればできる
394:デフォルトの名無しさん
09/08/09 21:06:32
>>391
Regionプロパティつかう
395:デフォルトの名無しさん
09/08/09 21:08:12
>>393
そこは見ましたが多角形のフォームが作れないんですよ
396:デフォルトの名無しさん
09/08/09 21:14:50
見たけど作れないってどういう事よ
397:デフォルトの名無しさん
09/08/09 21:18:26
あれを見てわからないなら、素直にあきらめろよ。
398:デフォルトの名無しさん
09/08/09 21:26:18
うるせえだまれ
399:デフォルトの名無しさん
09/08/09 21:28:19
やだよーん
400:デフォルトの名無しさん
09/08/09 21:32:02
>>396
Point[] points ={ new Point(0, 0), new Point(100, 300), new Point(200, 400),
new Point(300, 300), new Point(200, 200)
};
System.Drawing.Drawing2D.GraphicsPath path =
new System.Drawing.Drawing2D.GraphicsPath();
path.AddPolygon(points);
this.Region = new Region(path);
こんな感じにやってみたけど
401:デフォルトの名無しさん
09/08/09 21:41:00
多角形は作れてるじゃないか
402:デフォルトの名無しさん
09/08/09 21:43:00
BorderStyle を none にしてないとか
403:デフォルトの名無しさん
09/08/09 21:43:48
ポリゴンの意味を理解しろよ。
Point[] points =
{new Point(100, 400),
new Point(300, 300),
new Point(500, 400),
new Point(400, 200),
new Point(600, 100),
new Point(400, 100),
new Point(300, 000),
new Point(200, 100),
new Point(000, 100),
new Point(200, 200)};
こんな感じ。
あと types とフォームのサイズも増やしとけよ。
404:デフォルトの名無しさん
09/08/09 21:46:47
ペンタゴンなら…
405:デフォルトの名無しさん
09/08/09 21:48:05
いろいろ作ったらさ
SS見せてほしいんだけどw
406:デフォルトの名無しさん
09/08/09 21:53:01
>>403
typesは関係ないのでは?
407:デフォルトの名無しさん
09/08/09 22:05:49
>>406
pts 配列内の対応する各点の型を指定する PathPointType 列挙体の要素の配列。
の数と、増やした点の数って一致して無くてもいいの?
408:デフォルトの名無しさん
09/08/09 22:24:43
営業日報システムをC♯で作りたいけど、
テキストボックスの高さが自由になりません。
皆さんはどう工夫してますか?
409:デフォルトの名無しさん
09/08/09 22:29:50
ふつうにやってるけど?
410:デフォルトの名無しさん
09/08/09 22:32:44
MultLineをonにしる
411:デフォルトの名無しさん
09/08/09 22:33:30
>>408
textBox.Multiline = true;
412:デフォルトの名無しさん
09/08/09 22:46:54
マルチラインをオンにして、さらに縦方向の位置を中央にすることはできますか?
413:デフォルトの名無しさん
09/08/09 22:51:39
>>412
何に対する何の位置が中央?
414:デフォルトの名無しさん
09/08/09 22:55:24
Forms に HorizontalAlignment はあるのに何で VerticalAlignment が無いんだろう・・・
415:デフォルトの名無しさん
09/08/09 22:58:26
>>413
垂直方向に対するテキストの位置。
うまく言えなくてごめん。
416:デフォルトの名無しさん
09/08/09 23:02:30
テキストボックスに垂直位置という概念は普通ないだろ
位置固定するならテキストボックス使う意味ないじゃん
417:デフォルトの名無しさん
09/08/09 23:06:47
だいたい、VerticalAlignmentが仮にあったとしてだ
常に垂直位置を中央に固定しておくと言うことは行数が増減する度に
テキストボックスの垂直方向のサイズを伸縮しなければ
追加した最後の行がコントロール内に収まらないだろ
418:デフォルトの名無しさん
09/08/09 23:19:03
それを言うなら、HorizontalAlignment にも言えることではないか?
419:デフォルトの名無しさん
09/08/09 23:20:17
常に水平位置を中央に固定しておくと言うことは桁数が増減する度に
テキストボックスの水平方向のサイズを伸縮しなければ
追加した最後の桁がコントロール内に収まらないだろ
420:デフォルトの名無しさん
09/08/09 23:25:02
ちなみに、412の言いたいことが分かるから俺も疑問に感じた。
あれだろ、Officeの縦位置。
421:デフォルトの名無しさん
09/08/10 00:38:47
>>420
そういう疑問を感じる自分に疑問を感じようよ。
目的が全然違う。
ワードやエクセルの表セルやテキストボックスは、
(最終的に印刷されることを意識した)の文字列のレイアウトを
制御するためにある。
Windows FormのTextBoxは、あくまでユーザーからの文字入力を受け付けるためのもの。
422:デフォルトの名無しさん
09/08/10 01:49:37
>>421
別に、垂直方向に中央があってもいいだろ。
目的とか関係なく。
見映えを考えたらやりにくくて仕方ないんだよ。
423:デフォルトの名無しさん
09/08/10 04:18:30
16x16の画像2000枚を描画しなきゃならんのだが、どうにも遅い。
大量の画像の描画を高速にするにはどうしたらいい?
424:デフォルトの名無しさん
09/08/10 04:28:16
描画が遅いってどうやって検証した?
425:デフォルトの名無しさん
09/08/10 04:58:02
>>424
なるほど。
試しにDrawImage無くしても時間変化しなかった。
他の要因だ。thx。
426:デフォルトの名無しさん
09/08/10 05:22:26
結局、メモリケチろうとWeakReference使ってたのがダメだったっぽい。
427:デフォルトの名無しさん
09/08/10 06:52:25
背景変えたPanelの真ん中に枠線消したTextBoxでも置けばいんじゃね
428:デフォルトの名無しさん
09/08/10 08:03:15
パネルの中にラジオボタンをたくさん配置し、けど、全て選択することも可能にすることはできますか?
429:デフォルトの名無しさん
09/08/10 08:17:25
なぜチェックボックスではだめなのかね
430:デフォルトの名無しさん
09/08/10 08:17:34
パネルの中にパネルなどを置いてその中にボタンを入れればおk
431:デフォルトの名無しさん
09/08/10 11:15:10
だから見た目を重視するならWPF使えと
432:デフォルトの名無しさん
09/08/10 12:10:37
>>429
ラジオボタンで統一させたいんです。
ところで、これからはWPFの時代が来そうですか?
今からVSを学ぶならばWPFでしょうか。
433:デフォルトの名無しさん
09/08/10 12:33:51
>>430
その方法じゃチェックを外すことは出来ないぞ。
>>432
なんでラジオボタンで統一するんだ?
複数チェックが可能ならチェックボックスにすべきだろ。
434:デフォルトの名無しさん
09/08/10 12:42:26
>>433
パネルの中にパネルを碁盤上に敷き詰めて、
1つ1つにラジオボタンを入れたらできる?
435:デフォルトの名無しさん
09/08/10 12:51:04
>>432
チェックボックスの□をラジオボタンの○にするような事が簡単にできる。
WPFやるのはWinFormsを使い慣れてからでも遅くはない。その頃にはVS2010出てるだろうしね。