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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

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

 
2デフォルトの名無しさん:2008/11/24(月) 19:16:56
C#, C♯, C#相談室 Part49
http://pc11.2ch.net/test/read.cgi/tech/1224754660/

WPF(XAML,XBAP,.NET3.5)GUIプログラミング
http://pc11.2ch.net/test/read.cgi/tech/1211453941/

Live3
http://pc11.2ch.net/test/read.cgi/tech/1221395634/

初心者のためのプログラミング言語ガイド Part11
http://pc11.2ch.net/test/read.cgi/tech/1218282605/
3デフォルトの名無しさん:2008/11/24(月) 19:17:27
4デフォルトの名無しさん:2008/11/24(月) 19:17:58
前スレ
ふらっとC#,C♯,C#(初心者用) Part33
http://pc11.2ch.net/test/read.cgi/tech/1225648701/
5デフォルトの名無しさん:2008/11/24(月) 20:11:01
いちょつ
6デフォルトの名無しさん:2008/11/24(月) 21:00:09
>>1おつ
7前スレ991:2008/11/25(火) 00:11:00
前スレ997さん
ソートされてれば何か速い方法あるんじゃないかなとは思ってたんですが、
Array.FindIndex滅茶苦茶速いですね・・・助言ありがとうございました
8デフォルトの名無しさん:2008/11/25(火) 03:28:29
[デザイナの表示]が無い新たなpartical crass Form1のファイルはどうやって作るんですか?
これは独自メソッドだけのファイルでデザイナ要らないんです
9デフォルトの名無しさん:2008/11/25(火) 03:32:58
>>8
クラスを追加
10デフォルトの名無しさん:2008/11/25(火) 03:42:21
独自メソッド内でthis.Sizeとかthis.が多いからそのフォームのクラスにしないと駄目なんです
11デフォルトの名無しさん:2008/11/25(火) 03:52:42
クラスを追加して、パーシャルにすればいいだろよ
12デフォルトの名無しさん:2008/11/25(火) 04:07:24
マルチウィンドウのアプリケーション作るときって
専用クラス作ってインスタンスを纏めて管理した方がやっぱりいいの?
13デフォルトの名無しさん:2008/11/25(火) 04:12:12
>>12
やりたいことによるだろ。各ウィンドウがどういう関係なのか、だな。
14デフォルトの名無しさん:2008/11/25(火) 04:19:54
>>13
Form1がメインウィンドウ、Form2以下がツールウィンドウです
とりあえず、わけわからなくなりそうなので今は専用クラスで管理してます
おおざっぱに書くと↓みたいな感じで

class FormsInstance
{
public FormsInstance()
{

}
public Form1 F1{ }
public Form2 F2{ }
public Form3 F3{ }
}
15デフォルトの名無しさん:2008/11/25(火) 09:58:30
それだとグローバルと変わらないよ
理想は,フォームは隠蔽して
public void ShowHoge(Hoge hoge) { hogeViewerForm.Hoge = hoge; }
みたいに目的で考える
16デフォルトの名無しさん:2008/11/25(火) 15:09:59

日本医師会総合政策研究機構 「’02公的年金基積立金の運用実態の研究」より

      不景気どこ吹く風の儲かり続ける官僚会社とは・・・??

・存在するはずの年金積立金           143兆9858億円
・実上’破綻’と評価される特殊法人や地方自  87兆8857億円 
治体 などに融資され回収見込みがない積立金
・残っている年金積立金                56兆1001億円   
               (年金食い潰しの主な泥棒公益法人)
@住宅金融公庫       23兆4518億円  A地方自治体         17兆5000億円
B年金資金運用基金    10兆6150億円  C特別会計(裏国家予算) 10兆6000億円
D日本政策投資銀行     4兆3490億円  E国際協力銀行        3兆9683億円
F都市基盤整備公団     3兆9017億円  G日本道路公団        3兆5212億円
H国民生活金融公庫     2兆7982億円  I農林漁業金融公庫     1兆 823億円
J福祉医療機構           9800億円 K中小企業金融公庫       8478億円
L首都高速道路公団  6196億円  M阪神高速道路公団       5292億円
N沖縄振興開発金融公庫    4660億円  O鉄道建設。運輸整備機構    3158億円   
P本州四国連絡橋公団      3052億円 Q日本育英会            2871億円  
R 電源開発             2795億円  S石油公団              1431億円 

レポートを行った森宏一郎氏は、「特殊法人だけで約60兆円の積立金を食い潰しています。特
殊法人は営利団体ではないので、これらの’借り入れ’は税金で返済しているだけです。特殊法
人へ流れた年金は役人の高額給与や退職金、公共事業、傘下のグループ企業等に食い潰され
ているのが実情です。」とコメント。

また、同氏が慶大客員教授・土居丈朗氏と、年金原資を’借り入れ’している特殊法人と自治体
の財務分析をおこなったところ、なんと24機関がCCランクの格付けで、事実上「経営破たん状態」
であることが判明した。
17デフォルトの名無しさん:2008/11/25(火) 16:56:47
見た目サンプル用に多数のラジオボタンを置いてしまったのですが、後からグループ化
することは可能でしょうか。
18デフォルトの名無しさん:2008/11/25(火) 17:05:06
できるよ
1917:2008/11/25(火) 17:23:59
やり方教えて下さいませ。
20デフォルトの名無しさん:2008/11/25(火) 17:50:07
ドラッグ&ドロップ
2117:2008/11/25(火) 19:12:49
あれれ、それでできますか?
GroupBoxやPanelをドラッグして、グループ化したいラジオボタンを囲ったのですがだめでした。
何かコツが有りますでしょうか。
22デフォルトの名無しさん:2008/11/25(火) 19:20:17
それでいいはずだけど
23デフォルトの名無しさん:2008/11/25(火) 20:27:01
そうなのですか。
念のためですが、普通はGroupBoxを置いてそこにドラッグしますが、今やりたいのはその逆です。
いろいろ試してみます。
何か有りましたらまたよろしく。
24デフォルトの名無しさん:2008/11/25(火) 21:04:03
>普通はGroupBoxを置いてそこにドラッグし
たばあいのhoge.Designer.csを見たらいいんじゃね
25デフォルトの名無しさん:2008/11/25(火) 21:06:03
>>23
1つ聞くけど、君はファイルを別のフォルダにコピーや移動するときとか、
あるいはアプリでファイルを開こうって時に、フォルダやアプリの方をファイルに
ドラッグ&ドロップするのかい?w
26デフォルトの名無しさん:2008/11/25(火) 21:26:42
順序なんかどうでもいいよ
目的のものが得られるかそうでないか、それだけ
2716:2008/11/25(火) 21:46:19
>>15
実際のプロパティはprivateになっているのでグローバルとまでは行かないですが
おっしゃるとおりもう少し検討してみます。
28デフォルトの名無しさん:2008/11/25(火) 22:43:29
正規表現で、文末を表現するにはどうしたらよいですか?
行頭・行末は、^$でできるのですが。
^$*
とか?
29デフォルトの名無しさん:2008/11/25(火) 22:45:34
イベントハンドラ内でProcess.Start(string,string)の後に速攻でreturnすると
CallWindowProcでAccessViolationException起こして止まる時があるんだけど何でだよ?

Closeしても駄目だったが、WaitForInputIdleしたら起こらなくなった
30デフォルトの名無しさん:2008/11/25(火) 22:53:33
イミフ
31デフォルトの名無しさん:2008/11/25(火) 22:59:18
>>29
日本語で
32デフォルトの名無しさん:2008/11/25(火) 22:59:36
>>28
シングルラインモードなら$が文末って言えるんじゃねえか?
33デフォルトの名無しさん:2008/11/25(火) 23:01:37
>>32
それが、シングルラインじゃないんですよ…。
34デフォルトの名無しさん:2008/11/25(火) 23:01:58
>>33
はぁ?
35デフォルトの名無しさん:2008/11/25(火) 23:14:25
>>34
テキストファイルを読み込んで、その末尾の文字を知りたいのです。
というか、末尾の文字とマッチングしたいのです。
36デフォルトの名無しさん:2008/11/25(火) 23:16:26
それってReadToEndでもいいような用途じゃないのか
37デフォルトの名無しさん:2008/11/25(火) 23:17:07
文字数分だけseekでもなんでもすりゃいいじゃん
38デフォルトの名無しさん:2008/11/25(火) 23:26:20
>>36
当然、ファイルはReadToEndしてます。
で、最後の文字を知るには?
ってところで困ってるのです。
>>37
もうすこし詳しくお願いします。
39デフォルトの名無しさん:2008/11/25(火) 23:31:07
string str = reader.ReadToEnd();
char lastChar = str[str.Length-1];
40デフォルトの名無しさん:2008/11/25(火) 23:31:54
プロパティくらい調べようぜー
41デフォルトの名無しさん:2008/11/25(火) 23:33:06
ここってさあ、C#初心者のためのスレであって
日本語初心者のスレじゃないはずだよなあ。
42デフォルトの名無しさん:2008/11/25(火) 23:35:23
ここは初心者用のスレであって、C#の初心者のためのスレとは明言されてませんよ
43デフォルトの名無しさん:2008/11/25(火) 23:36:52
そういう屁理屈はいらん
44デフォルトの名無しさん:2008/11/25(火) 23:38:32
>>41
答えられないなら口を挟むな
45デフォルトの名無しさん:2008/11/25(火) 23:40:28
>>38
>>32

string str = "ahoうんこ\nbaka\nmanuke\nうんこ";
Regex re = new Regex( "うんこ$", RegexOptions.Singleline );
MessageBox.Show( re.Replace( str, "まんこ" ) );

これやってみれば分かる
46デフォルトの名無しさん:2008/11/25(火) 23:41:09
ガキかお前
47デフォルトの名無しさん:2008/11/25(火) 23:45:09
このスレは煽るだけの回答者が一人常駐してるな
48デフォルトの名無しさん:2008/11/25(火) 23:47:08
煽るだけなのは回答者とは言わないな
49デフォルトの名無しさん:2008/11/25(火) 23:49:32
>>41
煽るだけに来るなんて何がたのしいんだ
氏ねば?
50デフォルトの名無しさん:2008/11/26(水) 02:12:17
>>39
ありがとう。できそうです。
51デフォルトの名無しさん:2008/11/26(水) 03:31:00
ぶw
52デフォルトの名無しさん:2008/11/26(水) 05:12:15
>>28
string str = "abc \n def \n ghi";
Regex re = new Regex(@".\z");
Console.WriteLine(re.Match(str).Value);

>>45
ま た お 前 か
53デフォルトの名無しさん:2008/11/26(水) 09:26:58
ファイルの存在しないデータをZIP32J.DLLで圧縮する方法などはありますでしょうか?
54デフォルトの名無しさん:2008/11/26(水) 12:58:11
そういう小器用な機能はなさそうだね
DeflateStreamでも使ってみれば
55デフォルトの名無しさん:2008/11/26(水) 13:04:56
しかしいつ見ても統合アーカイバプロジェクトのAPIって最低だな
56デフォルトの名無しさん:2008/11/26(水) 13:16:18
見なきゃいい
5753:2008/11/26(水) 14:48:16
パスワードも掛けたいのですがDeflateStreamでは無理なのでしょうか、
見つけきらないだけ?。

ところでgoogleで検索する時に自動補完される機能が激しく邪魔なのは
おらだけ?
58デフォルトの名無しさん:2008/11/26(水) 14:55:54
CryptoStreamでも噛ませろ
59デフォルトの名無しさん:2008/11/26(水) 14:58:17
Googleの方は検索クエリの候補を表示しない設定にすればいいだけ
60デフォルトの名無しさん:2008/11/26(水) 15:22:24
なんでgoogleの検索の自動補完まで面倒みなくちゃいけないんだ
つぎはなんだ? おしめの交換か?
61デフォルトの名無しさん:2008/11/26(水) 15:24:58
うん
62デフォルトの名無しさん:2008/11/26(水) 15:50:20
googleの自動補完が使いたいがためにスレイプニルの検索バーを使わずに
わざわざgoogleのホームページまで行って検索するよ。
わざわざって言ってもマウスジェスチャーですぐだけどな。
googleツールバーがスレイプニルでも使えるようになればいいんだけどな。
63デフォルトの名無しさん:2008/11/26(水) 15:52:38
スレ違いだ頭かち割って死ね
64デフォルトの名無しさん:2008/11/26(水) 18:02:54
64bit環境がないんで試せないんですが
64bit環境だと (IntPtr)( -1 ) は
new IntPtr( Int32 ) を呼んじゃって 0x00000000FFFFFFFFになっちゃったりします?
0xFFFFFFFFFFFFFFFFが欲しいときは(IntPtr)( -1L ) としなけりゃ駄目ですか?
65デフォルトの名無しさん:2008/11/26(水) 19:21:31
>>64
せめて質問は日本語で書こう。
66デフォルトの名無しさん:2008/11/26(水) 20:04:05
0xffffffffffffffff になった。
67デフォルトの名無しさん:2008/11/26(水) 20:34:43
符号拡張してくれるだろそりゃ
68デフォルトの名無しさん:2008/11/26(水) 20:35:56
ところでビットローテートしたいときってベタに演算組み合わせるしかない?
69デフォルトの名無しさん:2008/11/26(水) 20:40:50
>>66
>>67
ども。
ド素人ですみません……
70デフォルトの名無しさん:2008/11/26(水) 20:42:11
質問です。
ListviewのColumnsで順番を変えてるんですが
OKを押すと編集前に戻ってデザインで反映されません。
実行をしたら反映されてるんですが..

ColumsでOKを押すと一瞬だけ適用されたようになりますが
すぐに戻ってしまいます。コレクションエディタでは反映されています。

対処法があれば教えてください。
OSはVistaでVS2008SP1です。
よろしくお願いします。
71デフォルトの名無しさん:2008/11/26(水) 20:44:19
必要そうなとこだけオーバーロードすれば?
72デフォルトの名無しさん:2008/11/26(水) 20:45:01
71は68だ
73デフォルトの名無しさん:2008/11/26(水) 22:58:08
Visual Studio 2008スレより


Visual Studio 2008 Service Pack 1(SP1)用Intellisenseの修正プログラムが公開されました
この修正プログラムをインストールすることによって、すべての Intellisense が日本語で表示されるようになります。

ttp://blogs.msdn.com/dd_jpn/default.aspx
74デフォルトの名無しさん:2008/11/26(水) 23:04:10
初心者にお勧めな書籍ってどんなのがいいでしょうか?
なにから手をつけていいかわからない・・
75デフォルトの名無しさん:2008/11/26(水) 23:18:05
独習C#がいいのでは
なんでも書いてあるから
76デフォルトの名無しさん:2008/11/26(水) 23:27:02
>>75
ありがとうございます!
明日買いに行ってみます
77デフォルトの名無しさん:2008/11/26(水) 23:48:59
>>70
ちゃんと、DisplayIndex変えた?
一個一個設定するのが面倒なら、ここか相談室の過去ログに(ry
78デフォルトの名無しさん:2008/11/27(木) 00:47:22
>>77
おお!できました!
ありがとうございます。
79デフォルトの名無しさん:2008/11/27(木) 09:48:53
プログラム暦2ヶ月のとても初心者っぽい質問ですがよろしくお願いします。

classAの中に、画面から入力された変数 x と yがあります。
classAからclassBを呼び出し、classBの中にある、メソッドcalcのみでxとyを利用したく、
他のclassBのメソッドには影響を及ばせたくありません。
どんな風に変数をclassAからclassBに渡せばスマートでしょうか?
80デフォルトの名無しさん:2008/11/27(木) 10:05:16
classBを呼び出すとかそもそも意味不明だが
まあ普通にコンストラクタなりプロパティなりで渡してフィールドに持っとけばいいだろ
なんで他のメソッドに影響が及ぶんだ?
81デフォルトの名無しさん:2008/11/27(木) 10:35:17
>classBの中にある、メソッドcalcのみでxとyを利用したく

classAのもつx,yを、classBのメソッドのみにスコープを限定してアクセスしたいなら
メソッドの引数として渡すしかない
classB.calcメソッドがprivateならそもそも不可能

x,yのスコープをclassB限定になら>>80のやり方で。
82デフォルトの名無しさん:2008/11/27(木) 17:22:45
メソッドの戻りの型って絶対固定なの?
たとえば

public object GetControl(){}

みたいなメソッドでTextBoxの1〜5までを戻したい時ってなんか良い方法ある?
戻り値をキャストしなくても良い方法であればかまいません。
83デフォルトの名無しさん:2008/11/27(木) 17:29:01
>>82
ジェネリックメソッド
84デフォルトの名無しさん:2008/11/27(木) 17:37:54
>>82
ん?

public TextBox GetTextBox(){}

でなんか問題ある?
85デフォルトの名無しさん:2008/11/27(木) 21:17:12
>>82
TextBoxが5個固定なら、StructやClassの配列でいいし、
可変ならList<TextBox>を返してあげればいいと思う。

将来的にTextBox5個以外にも渡すデータが増えそうなら、
ClassにしてClassのメンバにList<TextBox>を持たせればいいと思う。
86デフォルトの名無しさん:2008/11/27(木) 21:44:19
C#で日本語も含めたメッセージの数値化とその復元のサンプルはありませんでしょうか?
87デフォルトの名無しさん:2008/11/27(木) 21:44:35
TextBoxをそのまま扱う必要あるの?
可能ならStringで出し入れした方がいいよ
88デフォルトの名無しさん:2008/11/27(木) 21:46:27
>>86

どういうメッセージをどういうルールで数値化したいのか
89デフォルトの名無しさん:2008/11/27(木) 21:49:03
ラッパーって駄目なの?
90デフォルトの名無しさん:2008/11/27(木) 22:03:25
>>86
メモ帳を開く
→日本語も含めたメッセージを書き込んで保存する
→バイナリエディタで開いてみる
→数値化されてる(゚д゚)ウマー
91デフォルトの名無しさん:2008/11/27(木) 22:14:52
>>90
おぉ、それでやってみます!
92デフォルトの名無しさん:2008/11/27(木) 22:22:57
エェェェェェェェェェェェ
93デフォルトの名無しさん:2008/11/27(木) 22:32:29
>>87
EnabledするTextBoxの一覧を抽出するメソッドという可能性もあるから、
なんとも言えないけどね

>>90
思いつくのだと、Base64にエンコードして、
その文字列をASCIIコードに変換して、16進数を二桁の数値に変換するとかかな?
何が一番簡単だろう。
94デフォルトの名無しさん:2008/11/28(金) 13:05:43
>>85
List<>を渡したり返したりするのはガイドライン違反っていう話題が出た気がするけど。
それ以降、いちいちToArray()してやりとりしてる。
95デフォルトの名無しさん:2008/11/28(金) 13:15:31
代わりにCollection<T>返せって話じゃなかったっけ
96デフォルトの名無しさん:2008/11/28(金) 13:24:29
IList<T>とか
97デフォルトの名無しさん:2008/11/28(金) 15:28:48
なんでList<>を返したらいかんの?
98デフォルトの名無しさん:2008/11/28(金) 15:35:19
>公開するときは System.Collections.Generic.List ではなく、これを使用してください。
>System.Collections.ObjectModel.Collection
>System.Collections.ObjectModel.ReadOnlyCollection
>System.Collections.ObjectModel.KeyedCollection


>>97
継承を前提としていないので、仮想メンバを含んでいないかららしい。
その点、上であげたコレクションは継承を目的としているから利用してもいいらしい。
99デフォルトの名無しさん:2008/11/28(金) 15:45:01
List<T>はCollection<T>やIList<T>にどうやって変換するんですか?
100デフォルトの名無しさん:2008/11/28(金) 15:47:16
はじめからListに入れずCollectionに入れろってことでしょ
101デフォルトの名無しさん:2008/11/28(金) 15:52:37
>>98
難しくてよくわからん・・・
102デフォルトの名無しさん:2008/11/28(金) 16:04:23
List<T>が使い易すぎてガイドラインのために使うななんて言われたら…
103デフォルトの名無しさん:2008/11/28(金) 16:13:25
参考書で家計簿ソフト作りながら勉強中なんですが、
そこではデータセットの中身をテキストに変換してCSVで保存してるのですが、
データセットをそのままの形(と言うか特に変換しないまま)で保存することはできますか?
104デフォルトの名無しさん:2008/11/28(金) 16:16:47
オブジェクトは抽象化されてるのでそのままの形とか言われても困る
DataSet.WriteXml辺りでXMLとして保存するとか
というかSQLServer使えば?
105デフォルトの名無しさん:2008/11/28(金) 16:26:00
>>101
Collectionの定義を見ればわかるけど、
Public class Collection<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
protected virtual void InsertItem(int index, T item);
protected virtual void RemoveItem(int index);
protected virtual void SetItem(int index, T item);
のように各メソッドが仮想メンバとなってるので、Collectionを継承して、
InsertItemメソッドをoverrideするなどしてイベントを発生したりさせることが可能ということらしい。

あとは、List<T>を公開すると、List<T>に関係する多くのメソッドも公開することになってしまうので、
少しのメソッドだけしか公開しないCollection<T>のほうが良いということも書いてあるね。

つまり速度優先List<T>、拡張性優先Connection<T>といったところか。
List<T>はクラスのメンバでprivateで置いといて、プロパティや戻り値、引数で公開しないというガイドライン。
106デフォルトの名無しさん:2008/11/28(金) 16:30:07
受け取っても返してもだめってことだよね?
privateメンバやメソッド内で使ったList<T>の中身を返そうとしたら
ToArray()するのが常套手段なのかな?
他に方法ある?
元からList<T>使わないって選択肢はあまりにも雑だと思うんだけど…。
107デフォルトの名無しさん:2008/11/28(金) 16:31:12
>>105
再現性のないバグの温床とかそういう問題じゃなくて、
単に思想の問題なのか
108デフォルトの名無しさん:2008/11/28(金) 16:31:48
ToArray()して返したりしたらオーバーヘッドが心配だな
109デフォルトの名無しさん:2008/11/28(金) 16:34:43
だったららSSCLI見てごらん
110103:2008/11/28(金) 16:35:54
>>104、さっそくどうもです。
参考書では項目と金額を1列ごとにテキストに変換してCSV化してるのですが、
外部で使う必要が無ければ、その抽象化されたデータをそのまま外部に保存して、
またそのまま読み込めないのかなと思いました。xlsとかmdbみたいな感じで。
いずれにしても、根本的な理由は分かりませんが、取りあえずそんなことは
できないということですね?
111デフォルトの名無しさん:2008/11/28(金) 16:41:53
>>106
面倒だから、ArrayListに格納してキャストしてしまえ
それかList<T>をprivateに持つClassを自作して、それぞれのメソッドを自前で実装して、
そのClassをやりとりするとかww

>>107
自分もそう思ってたんだけど、調べた範囲では思想の問題なのかな?
という答えが多く見つかるね・・・
速くソートするために内部で値渡しになっていて、書き換えても本物は書き換わらないとかを
想像してたんだけど・・・
112デフォルトの名無しさん:2008/11/28(金) 16:43:53
>>110
シリアライズ C# とかでぐぐってみては
オブジェクトをXMLやバイナリで書き出す方法がどっかに出てると思うよ
113デフォルトの名無しさん:2008/11/28(金) 16:47:13
>>112
ありがとうございます、調べてみます。
114デフォルトの名無しさん:2008/11/28(金) 16:58:24
>>110
C/C++とか低レベルな言語を扱ったことがあるC#初心者が、「C#は便利だから抽象化されたデータをそのまま外部に保存できないか」と考えたなら正解。
ttp://dobon.net/vb/dotnet/file/xmlserializer.html
ここら辺見てみて。

もしプログラミング自体初心者で同じように考えたのならちょっと危ない気がする。
115デフォルトの名無しさん:2008/11/28(金) 17:12:57
>もしプログラミング自体初心者で同じように考えたのならちょっと危ない気がする。

kwsk
116110:2008/11/28(金) 17:20:55
>>114、どうも。
かなり初心者なんで、かなり危ないかも知れませんが、参考にさせて頂きます。
117デフォルトの名無しさん:2008/11/28(金) 18:35:00
List<T>の話は定期的に出てきて、毎回ぐだぐだになるよな
駄目な理由は拡張性によるもの(>>98)だし、その解も戻り値の型を

1. インターフェイスにする(>>96)
2. 専用クラスにする(>>105)

と明確なんだが
118デフォルトの名無しさん:2008/11/28(金) 18:43:10
>>117
1.どうやってList<T>をIList<T>にするの?
2.メソッド内でList<T>を生成して中身を返したいだけなのにいちいちクラスにして返さないといけない?
119デフォルトの名無しさん:2008/11/28(金) 18:44:50
>>117
だめな理由がわかりにくいのが問題だと思う
拡張性といっても、素朴に使ってるぶんには何の問題もないから
120デフォルトの名無しさん:2008/11/28(金) 18:47:39
>>117
明確なのは、その流れで見てきたからだろ
流れを知らない人が見にきていて、それは仕方のない事だから、同じ話題が繰り返されるわけで

「くだくだになる〜明確なんだが」と、「またそんな話題かよ」みたいな、
非論理的で生産性の無いレスをするなら、どうすれば、そういう無駄な事が繰り返されずに済むのか、
テンプレ化するとか、まとめwikiを作るとか、プログラマらしく論理的に考えろよ。


と喧嘩を売ってみる

121デフォルトの名無しさん:2008/11/28(金) 19:01:39
>>118
List<T>はIList<T>を実装してるよ?
122デフォルトの名無しさん:2008/11/28(金) 19:17:59
IList<T>じゃなくあえてCollection<T>を返す場合がわからん
ほとんどの場合IList<T>を返してりゃいいのかしら?
123デフォルトの名無しさん:2008/11/28(金) 19:20:27
ということは戻り値をList<T>じゃなくてIList<T>にすればいいだけ?
でも受け取る側はIList<T>を受け取っても、それをList<T>にするにはどうしたら…?
124デフォルトの名無しさん:2008/11/28(金) 19:24:23
受け取る側はIList<T>として扱うの
ひょっとしたらそのIList<T>はList<T>じゃなくてT[]かもしれないんだから
初めはList<T>だったのにいつの間にかT[]に摩り替えられるかもしれない
125デフォルトの名無しさん:2008/11/28(金) 19:24:54
>>122
IEnumerable<T>、IList<T>、ICollection<T>、Collection<T>のどれかでいいらしいよ。

IListを継承しているから返すことはできるけど、
それでよければ、引数や戻り値はすべてObjectで返したりもらったりすればいよね?
と言うことと同じで、それでは意味がないと思う。
126デフォルトの名無しさん:2008/11/28(金) 19:30:19
>>123
キャストすればいいじゃん

private void button1_Click(object sender, EventArgs e)
{
 List<string> list = new List<string>();
 list.Add("123");
 IList<string> ilist = list;
 List<string> list1 = (List<string>)ilist;
 MessageBox.Show(list1[0]);
}
127デフォルトの名無しさん:2008/11/28(金) 19:39:08
IList<T>→List<T>のダウンキャストはいいんですね。
128デフォルトの名無しさん:2008/11/28(金) 19:40:20
IList<T>ってインタフェースなのにキャストとかあるの?
そのへんちゃんと理解してないから良く分からんな
129デフォルトの名無しさん:2008/11/28(金) 19:46:15
ダウンキャストしたら意味無いだろ
後でIList<T>の実体がList<T>じゃなくて別の実装に変えられて動かなくなっても文句言えんよ
130デフォルトの名無しさん:2008/11/28(金) 19:46:52
>>128
キャストできなきゃインターフェイスなんてどうやって使うんだよw
131デフォルトの名無しさん:2008/11/28(金) 19:49:35
>>129
じゃあ>>126じゃだめってことね?
だったらIList<T>返されてどうしろというのさ。
132デフォルトの名無しさん:2008/11/28(金) 19:51:13
IList<T>のままで普通に使えるだろ
List<T>にしたかったらList<T>のコンストラクタに渡せ
133デフォルトの名無しさん:2008/11/28(金) 19:51:36
IList<T>のまま操作、List<T>の便利なメソッドとか使いたいならToList<T>()じゃね?
134デフォルトの名無しさん:2008/11/28(金) 19:52:58
>>127
いいんだけど、それがまかり通るなら、なんでもいいわけで、
Objectを返り値とするメソッドを作って、そこにList<T>を返してやって、
受け取る側でキャストすればいいだけの話。

あくまで原則的な話なので、コンパイラがエラーをはかなければ
List<T>を返り値や引数にしてもまったく問題ない。

>>128
誤解を恐れずに言えば、多重継承みたいなもんだから、インターフェースにもキャストできるよ。
効能的には、ISyainを持つクラスには、必ずSyainName(int syainID)というメソッドがあるということを
保証しますよ的な使い方。

社員給料Classや、社員日報ClassなどがISyainインターフェースを持っていれば、
必ずSyaunName(int SyainID)メソッドがあることが保証されるので、
社員給料Classも社員日報Classも必要あればISyainにキャストして、SyainIDからSyainNameを取得できますよ
という仕様ですよということを示すもの。
135デフォルトの名無しさん:2008/11/28(金) 19:55:49
>>134
ああそういうことか
IEnumerableとIEnumeratorの説明と合わせてみて分かった
136デフォルトの名無しさん:2008/11/28(金) 19:55:52
>>131
自分で定めて、一人でコーディングしてて、
そのメソッドの返り型のIList<T>が、絶対にList<T>だと保証できるなら使用してもok

チームでやってるなら、IList<T>には、IList<T>を継承するすべてのClassが入る余地があるから駄目
137デフォルトの名無しさん:2008/11/28(金) 19:57:47
FileInfo、DirectoryInfoが返すファイル名のリストって、
辞書順にソートされてることって保証されますか?
138デフォルトの名無しさん:2008/11/28(金) 19:58:37
>>122
Collection<T>はパブリックな派生クラスを作るためにあるんだぜ
HogeCollection : Collection<Hoge>を返すことはあってもCollection<T>をそのまま返すことはまずない
139デフォルトの名無しさん:2008/11/28(金) 19:59:34
>>137
されないよ
140デフォルトの名無しさん:2008/11/28(金) 19:59:35
しろうとなんでよくわからないけど、
IList<>で返したら実体がなんだか分からないから困るんじゃね?
141デフォルトの名無しさん:2008/11/28(金) 20:00:13
>>139
ありがとうございます
142デフォルトの名無しさん:2008/11/28(金) 20:03:58
>>141
保証はされないことは前提として……
結果はWindowsの一般的な環境ならファイルシステム依存っぽいね
NTFSだとソートされてるみたいだがFAT32だと駄目みたいな
143デフォルトの名無しさん:2008/11/28(金) 20:04:01
>>140
だから、だったらインターフェイスって一体何のためにあると思ってるの?w
144デフォルトの名無しさん:2008/11/28(金) 20:04:21
>>140
Object.GetType()で判別できるから、目的のType以外はExceptionを吐けばいい。



そう俺は鬼
145デフォルトの名無しさん:2008/11/28(金) 20:05:25
>>136
それを言ったらpublicメンバもおkってことになっちゃうよ
146デフォルトの名無しさん:2008/11/28(金) 20:06:04
>>142
なるほど、明示的にSort()したほうがよさそうですね
あ、でもその場合NTFSだとクイックソートだと遅くなっちゃうんでしょうか・・・?
147デフォルトの名無しさん:2008/11/28(金) 20:06:45
>>143
>>144
あーリフレクションなんてあったな
使わないからそんなの存在すら忘れてた
148デフォルトの名無しさん:2008/11/28(金) 20:09:21
IList<T>では足りず、どうしてもList<T>を公開しないといけない局面って、そう多くないだろ。
149デフォルトの名無しさん:2008/11/28(金) 20:14:48
リフレクション使わないって考えられないわ
初心者スレ的には「リフレクションを使わない普通のやり方もわからないうちは使うな」なんだろうけど
150デフォルトの名無しさん:2008/11/28(金) 20:19:38
>>138
あ〜、なるほど完璧にわかったわ、トンクス
151デフォルトの名無しさん:2008/11/28(金) 20:22:37
>>149
どんなときにある?
自分だと、ASP.NETでSessionに格納できるのがObjectだから、
そういうのでGetTypeを利用して自作Classを判別するぐらいかな
あとは、Classのオーバーロードで判別できるし

>>150
でも面倒だからList<T>をそのまま返せたら返せたで便利だよね。
自前でIEnurableを実装すればいいのかもしれないけど。
152デフォルトの名無しさん:2008/11/28(金) 20:25:20
議論しないで実現できる方法書けばいいよ
初心者向けなんだから
153デフォルトの名無しさん:2008/11/28(金) 20:28:55
>>147
リフレクションとか関係ないし、ダウンキャストも必要ない
一度、インターフェイスについて調べた方が良い

IList<int> list = new List<int> { 100, 200, 300 };
Console.WriteLine(list[0]); // => 100

逆に、インターフェイスにキャストしなきゃ使えない場合ならある
(インターフェイスの明示的な実装)
154デフォルトの名無しさん:2008/11/28(金) 20:32:22
結局、運用の問題だから、
約束事が守られていればList<T>を返せばいいよw

むしろ、これを禁止するとIList<T>で返す奴とか、ArrayListを返す人がいて
型宣言の意味がなくなるだろw
155デフォルトの名無しさん:2008/11/28(金) 20:32:33
どうしてもIList<T>ではなくてList<T>にしないといけないことってほとんど無いような
渡した先でソートするとかありえないし
156デフォルトの名無しさん:2008/11/28(金) 20:48:41
List<T> → 毎日見てる顔なじみ
IList<T> → ん? 誰おまえ?
157デフォルトの名無しさん:2008/11/28(金) 20:50:16
>>155
一応論点は分かっているつもりで、しかしあえて反論するけど
確かにより依存性が小さいインターフェイスを返す方が「ベター」までは
ほとんどの人が納得的な話だと思うんだが、でもそれって「すべき」とか「しなければならない」
って程のことでもないと思うんだよな。

俺なんてこれまで無頓着にList<T>とか返すメソッド平気で書いてるけど、
それで困ったことなんて一度もないし。

しかし何回同じ事書くんだよw
15882:2008/11/28(金) 20:51:28
なんかえらい議論になってるようですみません
とりあえずジェネリックメソッドを使う方向でやってます
答えてくれた人ありがとう
159デフォルトの名無しさん:2008/11/28(金) 20:53:08
というか、こんなに便利なものを返してはいけないとする、
マイクロソフトのクラス設計が間違ってる
160デフォルトの名無しさん:2008/11/28(金) 20:55:41
>>159
同意
161デフォルトの名無しさん:2008/11/28(金) 20:56:41
すくりぷとげんごみたいに、そういうの気にしないで書けるような設計にしろよな
162デフォルトの名無しさん:2008/11/28(金) 21:01:07
どうでもいいけど>>82にジェネリックメソッドは全く意味がわからないw
163デフォルトの名無しさん:2008/11/28(金) 21:05:18
すみません、これって初心者スレなんでしょうか。
俺にはもう行き場が無いorz
164デフォルトの名無しさん:2008/11/28(金) 21:07:11
>>163
初心者用だし、いま人がたくさんいそうだから、相談し放題でお得だぜヽ(´ー`)ノ
165デフォルトの名無しさん:2008/11/28(金) 21:08:33
次の質問が来ないといつまでもこういう話題がだらだら続く
166デフォルトの名無しさん:2008/11/28(金) 21:10:19
イベントハンドラのデリゲートを新しく定義するなEventHandler<TEventArgs>使え
なんてのもあるのね
167デフォルトの名無しさん:2008/11/28(金) 21:10:33
結局はこういう事だろ

個人・少人数開発
・面倒だしList<T>返しときゃいいじゃないか。
・俺は全部把握している。もし変更が必要になっても、ちょっと書き換えればおk

チーム開発・クラスライブラリ
・俺が担当してない所まで責任持てない。勝手に余計な操作するな馬鹿野郎。
 操作を制限・監視したり、使う側を気にせず実装を変更できるようにIList<T>などを使う。
168デフォルトの名無しさん:2008/11/28(金) 21:12:34
IList<int> list = new IList<int>();
ってやったらコンパイルエラーになるんだが
16982:2008/11/28(金) 21:12:42
>>162
どういう意味でしょうか?
170デフォルトの名無しさん:2008/11/28(金) 21:16:38
>>169

そもそもなんで戻り値がobjectなの?
TextBoxか,複数返すならTextBox[]でいいんじゃないの?
171デフォルトの名無しさん:2008/11/28(金) 21:17:54
>>168
IListは抽象クラスだから、インスタンス化はできない
17282:2008/11/28(金) 21:20:52
>>170
それだと受け取った側でTextBoxからTextBox1へキャストしなければなりませんよね?
173デフォルトの名無しさん:2008/11/28(金) 21:21:30
>>172
TextBox1は型なのか変数名なのかはっきりしろ
174デフォルトの名無しさん:2008/11/28(金) 21:22:40
コンソールアプリで、キーボードやマウスで全て選択→コピーに相当する処理を実現しようとすると
SendKeysを使うしかないでしょうか?
System.Consoleには範囲指定して画面バッファを反転するようなメソッドとかないですよね?
175デフォルトの名無しさん:2008/11/28(金) 21:23:49
そりゃコンソール=コマンドプロンプトとは限らないもん
176デフォルトの名無しさん:2008/11/28(金) 21:26:25
>>171
違うよ
インターフェースだよ
177デフォルトの名無しさん:2008/11/28(金) 21:27:30
public T[] GetControl<T>() where T : Control {}

こんなの用意して、GetControl<TextBox>();で呼ばれると
フォームにぶら下がってるTextBoxを全部返してくれるようなやつを作りたいって意味か?

と思ったけど・・>>172見ると、型とインスタンスと変数名を理解していないような気がする
178デフォルトの名無しさん:2008/11/28(金) 21:27:42
>>172
TextBox1は名前だから、キャストしなくていいんじゃないか?
Object.Nameで得られるのが、そのオブジェクトの名前で、
Object.GetType()で得られるのが、そのオブジェクトの型の名前
179デフォルトの名無しさん:2008/11/28(金) 21:28:29
>>174
MoveBufferAreaとかそれっぽいよ
180デフォルトの名無しさん:2008/11/28(金) 21:31:07
ああ全然違った。>>179はスルーで
181デフォルトの名無しさん:2008/11/28(金) 21:35:37
>>178
それも違うぞ
NameはControlのプロパティ
VSのデザイナがコントロールのフィールド名として利用してるだけ
GetTypeで取れるのはその型を表すTypeオブジェクト
182デフォルトの名無しさん:2008/11/28(金) 22:10:39
Object.Nameって変数名と違うのか
183デフォルトの名無しさん:2008/11/28(金) 22:12:08
>>176
インターフェースと抽象クラスの違いって何?
書き方の違いとかじゃなくて本質的な違いを教えてください。
184デフォルトの名無しさん:2008/11/28(金) 22:21:09
インターフェイスは実装を持てない(フィールド以外のメンバの宣言のみ)が抽象クラスは持てる
インターフェイスは複数継承できるが抽象クラスは一つだけ
185デフォルトの名無しさん:2008/11/28(金) 22:22:15
>>183
インターフェース 抽象クラス
でググればいくらでも出てくるよ
186デフォルトの名無しさん:2008/11/28(金) 22:28:07
リフレクション大好き人間は不要なとこまでリフレクション使いたがるんだよな。
例えば is とか as で十分っていうよりその方が正しいのになのに Type 使うとか
メソッド呼び出しまでみんなリフレクションで平気でやったり。

別にやっちゃダメとはいわないが、あまり使わないですむように考えてほしいもんだ。
大抵の場合はインターフェイスなり何なり利用して、最小限で済ませられるはずだ。
187デフォルトの名無しさん:2008/11/28(金) 22:34:13
メンバにコレクション持ってる場合はList<T>で返したくないことはある。
List<T>で返すってのは、基本的に呼び出し側でコレクションを操作していいよって意味が含まれる。
キャストしたらどっちにしても出来るとかそういうことではなくて、
型が意味を表すこともある。

もちろん安全性重視でコピーしか返さないこともあるが。
セキュリティに関わる場合とかね。
188デフォルトの名無しさん:2008/11/28(金) 22:36:46
AsReadOnlyはListで受けるとエラーになるね。
IList<int> hoge = ( new List<int>() { 1, 2 } ).AsReadOnly();
189デフォルトの名無しさん:2008/11/28(金) 22:38:59
読み取り用にしたいならそれが基本だな
19082:2008/11/28(金) 22:48:33
TextBox1〜5はインスタンスです。
呼び出す側から指定したインスタンスを返したいだけです。
191デフォルトの名無しさん:2008/11/28(金) 22:50:01
>>187
それが正解だと思う

List<T>を返すと便利なのは、それを操作して後から追加したり削除したい場合があるから。
これは一つのClassで完結するか、同じ開発チーム内で完結するので、
List<T>を返しても問題ない。

Classごとに開発チームが違うような場合、
Objectの一覧を返すような場合には、配列にObjectを格納して渡せばいいだけなので、
わざわざList<T>で渡す必要もないし、追加されるような状況であればむしろまずいわけで。

理想はList<T>を返さないのがいいかもしれないけど、
面倒見切れる範囲であれば、List<T>を返すようなことをしても問題ないのではないかと思う。
要はいろいろと継承ができないということで、多態性がないだけの問題らしいので。
192デフォルトの名無しさん:2008/11/28(金) 22:50:57
>>190
インスタンス?型は同じならTextBoxの配列かコレクションでいいじゃん。
キャストは不要だよ。
193デフォルトの名無しさん:2008/11/28(金) 22:52:04
Object.Nameと変数名の関係を教えてくれ
Object.Nameはフォームデザイナで出てくるNameとはまた別物?
194191:2008/11/28(金) 22:53:43
× これは一つのClassで完結するか、同じ開発チーム内で完結するので、
   List<T>を返しても問題ない。
○ これは一つのClass内で完結するか、同じ開発チーム内で完結している場合、
   自分で面倒を見られるのでList<T>を返しても問題ない。

195デフォルトの名無しさん:2008/11/28(金) 22:55:08
>>193
ObjectにNameはないぞ、Control.Nameが正解。
デザイナと名前と同じもの。
名前は付けてもつけなくてもいいが、IDEのフォームエディタは名前必ず付けて、
あわせて同じ名前のメンバ変数を宣言する。
196デフォルトの名無しさん:2008/11/28(金) 22:55:15
>>190
なんじゃそりゃw

TextBox GetTextBox( int num )
{
    switch( num )
    {
        case 1:
            return textBox1;
        case 2:
            return textBox2;
        case 3:
            return textBox3;
    }
    return null;
}
もうこれでいいよ
197デフォルトの名無しさん:2008/11/28(金) 22:59:06
>>193
「MSにとっての」公開するって意味が重すぎるんだよな結局

ただ、多態性がないだけの問題と言い切ってしまうのは微妙な
気もして、そもそも論としてコレクションライブラリ自体がそういう
風に使うように設計されている感じがする。
要はなんで ObjectModel なんて名前空間に分かれているか、
そしてそこにはなんで論理的なコレクションが集合しているか
って話な。
198197:2008/11/28(金) 23:00:42
>>191 でしたごめんなさい
199デフォルトの名無しさん:2008/11/28(金) 23:11:54
うん
MSの意図に従うのであれば,
引数,戻り値はすべてインターフェイスまたは配列
プロパティで公開するコレクションはすべてそれぞれ専用のコレクションを使う
(Collection<T>含め,ジェネリックコレクションはそのまま使わない)
が正解だろ
20082:2008/11/28(金) 23:12:41
>>192
配列やコレクションで纏めてではなく、指定したインスタンスを個別に返したいのです。

>>196
そのコードと全く同じものを最初に考えましたが、受け取った側でキャストが必要でした。

(TextBox1) GetTextBox(1)

こんな感じで。これだと困る(というかめんどくさい)ので個別にそのまま返せる方法を
お聞きしたんですが、逆にジェネリックメソッドではダメな理由を聞かせてください。
201デフォルトの名無しさん:2008/11/28(金) 23:12:42
>>184
間違った。
インターフェースと純粋仮想クラスでした。
202デフォルトの名無しさん:2008/11/28(金) 23:15:50
>>200
(゚Д゚)ハァ?

もしかしてTextBox継承して、TextBox1,TextBox2,TextBox3,TextBox4,TextBox5と大量のクラス作ってたりするのか・・?
203デフォルトの名無しさん:2008/11/28(金) 23:16:13
>>200
もう一回確認するよ。TextBox1は型なわけだよね。
インスタンスというのは用法が間違ってる。
204デフォルトの名無しさん:2008/11/28(金) 23:16:23
>>197
>「MSにとっての」公開するって意味が重すぎるんだよな結局
同意
ひょっとしたら命名規則について論議しているぐらいの話なのかもしれないw

>要はなんで ObjectModel なんて名前空間に分かれているか、
>そしてそこにはなんで論理的なコレクションが集合しているかって話な。
確かにClassの宣言をみると、List<T>よりCollection<T>のほうが、
メソッドをOverrideできていろいろできそうなので、継承して拡張すれば、
返り値の型を変更せずとも済むので、便利といえば便利そう。

ただ、List<T>は速度重視のために設計しました。
拡張性重視でCollection<T>を作りました。それぞれ使って下さいっていっても、
Class内部では速度重視でList<T>を使って、受け渡しにCollection<T>を使ったとき、
それに変換しなくちゃいけないので、その分のオーバーヘッドはどうなるの?と思う

//List<T>からCollectionへの単純なキャストはできなかったよね?
205デフォルトの名無しさん:2008/11/28(金) 23:16:37
>>200
基本的な用語上の齟齬があるみたいね

TextBox1はクラス名なのか? >>190ではインスタンスと言い、
今度はやっぱりキャストしたいと言う。どっちやねん
206デフォルトの名無しさん:2008/11/28(金) 23:18:58
>>204
Collection<T>っていうのは自分でコレクションを作るときに使うんだよ
Collection<T>型のプロパティや引数なんて使わない
IList<T>ならList<T>そのまま使えるだろ
20782:2008/11/28(金) 23:23:26
ちょっとわからなくなって来ましたw

複数のコントロールを管理するクラスに
各コントロールのインスタンスを保持するプロパティを作って
指定したコントロールのインスタンスを呼び出すメソッドを作っています
呼び出すのはプロパティなので型なのかな?
208デフォルトの名無しさん:2008/11/28(金) 23:24:26
C#でFormの真ん中にプルダウンメニューを配置したいのですが
左側にあるメインメニュー意外で配置するとすれば何を利用する
物なのでしょうか?

メインメニューだと上に表示されてしまうのですが??
20982:2008/11/28(金) 23:25:39
最初に型ってちゃんと質問してました・・・
インスタンスというのは間違いです
210デフォルトの名無しさん:2008/11/28(金) 23:27:33
>>206
>IList<T>ならList<T>そのまま使えるだろ
IList<T>でList<T>を必ず返すという場合には使えるね。

string[] test = new string[4];
IList<string> test1 = test;
test1.Add("123");

でも、こういう代入がある可能性もあるから、そのままでは使えないでしょ
受け取る側では、List<T>が入ってるという保証がないわけだから

21182:2008/11/28(金) 23:27:55
>>82がジェネリックメソッドと関係ないのはどういう理由からでしょうか?
ちょっと理由がわからないんですが・・・
212デフォルトの名無しさん:2008/11/28(金) 23:28:45
>>208
すごいUIでふね
213デフォルトの名無しさん:2008/11/28(金) 23:30:36
>>210
考えるのは簡単だけど,それが実際に問題になることってめったに無いよ

>>211
型ということは,どこかに
class TextBox1 : TextBox { ... }
みたいなのがあるの? 何のために?
ジェネリックメソッドとか持ち出す前に,何かすごく基本的なところがわかってないと思う
214デフォルトの名無しさん:2008/11/28(金) 23:31:18
>>211
FormにTextBoxのコントロールが5個あって、
そのいずれか一つを選択したいってこと?

であるならば、どうして、その5つあるTextBoxから一つを選択したいのかな?
選択する理由がよくわからない。
21582:2008/11/28(金) 23:33:47
>>213>>214
すみません、質問に答えてるとまた混乱するので
とりあえず>>82がジェネリックメソッドと関係ない理由を教えてください。
216デフォルトの名無しさん:2008/11/28(金) 23:33:59
>>213
>考えるのは簡単だけど,それが実際に問題になることってめったに無いよ
だったら、すべての返り値と引数はObjectで問題ないってことになるから、
ここまでの話はすべて意味がなくなるね
そういう判断をせずにプログラムを組めるという「型」を公開する範囲と、
その面倒をどのレベルまで見ることができるかという点を論じてるんだからさ。
217デフォルトの名無しさん:2008/11/28(金) 23:35:20
>>215
複数のオブジェクトを、一つのメソッドで同時に返す必要があると思ったから、ジェネリックが有効だと思ったという話
一つのオブジェクトを返すだけでよければ、ジェネリックは必要ないということ
218デフォルトの名無しさん:2008/11/28(金) 23:35:20
>>215
あなたが欲しいと言っているのは
実行するとそのとき欲しかった型の特定のコントロールを返してくれる魔法のメソッドだから
219デフォルトの名無しさん:2008/11/28(金) 23:37:23
>>215
頭の中を整理しないでとりあえずレスしてみると
望んだ答えを教えてくれる魔法の回答者がいると思ってるから
22082:2008/11/28(金) 23:38:58
>>217
それが>>162の意味ですか?

>>218
呼び出す側から指定するんですが魔法?ですかね?

221デフォルトの名無しさん:2008/11/28(金) 23:39:56
何かC#の分かるお勧め本はないですか?
222デフォルトの名無しさん:2008/11/28(金) 23:41:25
>>220
>>162じゃないからわからないけど、TextBoxというオブジェクトのインスタンスを一つだけ
返すメソッドが欲しいのであれば、ジェネリックを使う必要はまったくないよ。

だから、具体的に何をしたいのかを書いたほうが良い。
例えば、TextBoxが5個あって、その5個の中で「1」と記入されたTextBoxを返すにはどうすればいいか?とか
223デフォルトの名無しさん:2008/11/28(金) 23:44:00
>>222
いやTextBox1〜5は型らしいぞ
224デフォルトの名無しさん:2008/11/28(金) 23:45:03
TextBoxは型なのかフィールドなのかいいかげんはっきりさせよう
型であれば,class TextBox1のような宣言がどこかにあるはずだ
もし本当に型だとすれば,一体何のためにそんなことをしているのか

君の頭の中を誰一人理解できていないんだ
225デフォルトの名無しさん:2008/11/28(金) 23:47:55
>>82
>>222も書いていることだが、質問の仕方がなってない。

自分の疑問を抽象化する能力もないくせに無理に抽象的に語らないこと。
具体的に何をしたいと思っていてどう躓いているのかを最初から書こうよ。
226デフォルトの名無しさん:2008/11/28(金) 23:48:47
出来てる所までのコードを固めて張れば5分で解決しそうな気がする
227デフォルトの名無しさん:2008/11/28(金) 23:52:46
やりたいことがよく把握できないが、
ひとつの関数で同時に複数の値を戻したいなら戻り値専用のラッパクラスを準備する。
ひとつの関数で状況に合わせて異なる種類の型を戻したいなら、
ジェネリックよりオーバーロードの方が向いてると思う。

つまり・・・
public TextBox1 GetControl(){ .. } 
public TextBox2 GetControl(){ .. } 
public TextBox3 GetControl(){ .. } 
public TextBox4 GetControl(){ .. } 
public TextBox5 GetControl(){ .. } 
228デフォルトの名無しさん:2008/11/28(金) 23:54:07
戻り値だけ異なるオーバーロードはできないよ
229デフォルトの名無しさん:2008/11/28(金) 23:56:07
>>228
そうでした。書いた後気がついた。
230デフォルトの名無しさん:2008/11/28(金) 23:57:55
TextBox1 ITextBox1Getter.GetControl(){ .. }
TextBox2 ITextBox2Getter.GetControl(){ .. }
TextBox3 ITextBox3Getter.GetControl(){ .. }
TextBox4 ITextBox4Getter.GetControl(){ .. }
TextBox5 ITextBox5Getter.GetControl(){ .. }
こうすれば解決
231デフォルトの名無しさん:2008/11/29(土) 00:00:49
void GetControl(out TextBox1 x) { }
void GetControl(out TextBox2 x) { }
 :
うぽ
232デフォルトの名無しさん:2008/11/29(土) 00:01:07
1つの関数で複数の型を返す可能性があってなおかつキャストをなくしたいなんて
23382:2008/11/29(土) 00:01:18
具体的にやってることは>>196さんのコードと同じですが
呼び出すのはインスタンスを保持するプロパティです。
プロパティがnullで無ければ呼び出したインスタンスのプロパティを見たい。

public TextBox GetControl(string name)
{
switch(name)
{
case"TextBox1"
return TextBox1Instance;
case"CheckBox2"
return Checkbox2Instance;
case"PictureBox1"
return PictureBox1Instance;
}
}

private TextBox1 TextBox1Instance { get; set; }
private CheckBox2 CheckBox2 { get; set; }
private PictureBox1 PictureBox1 { get; set; }

メソッドを型ごとに複数作れば問題ない話なのかも知れないですが
一々めんどくさいので一つのメソッドでできないのかと>>82を質問しました。
234デフォルトの名無しさん:2008/11/29(土) 00:02:35
>>221
C#の何を知りたいか・・・だと思うけど、入門書という意味では、どれも大差ないと思うな・・。
一つ必要なのは、何か作るものを決めて、そのために悩むことが必要。

例えば、TextBoxを2つとLabelを一つ配置して、TextBoxに記入された数字をかけ算してLabelに表示するとか。
入門書を完遂するより、これを悩んで作るほうがよほど重要。
調べて分からなかったら、ここの人に聞いてみるのもいいし。
235デフォルトの名無しさん:2008/11/29(土) 00:07:24
で,何のためにいちいち型が必要なの?
意味あるの?それ
236デフォルトの名無しさん:2008/11/29(土) 00:07:50
>>195
あれってエイリアスみたいなもんなの?
何の目的で存在してるのかよくわからん
237デフォルトの名無しさん:2008/11/29(土) 00:09:22
>>233
だから推敲ってものを知らないのかよ。
分かってないんだから無理に分かってる風に書こうとするなって。
その文章じゃ誰にも内容が伝わらないと思うわ。
238デフォルトの名無しさん:2008/11/29(土) 00:11:38
>>233
publicの返り値の型がTextBoxなのに、
CheckBoxやPictureBoxのオブジェクトを返すことはできないよ。

TextBoxの名前から、目的とするTextBoxのオブジェクトを取得したいなら、
こういう方法があるね

private TextBox GetTextBox(string name)
{
 TextBox textBox = (TextBox)this.Controls[name];
 return textBox;
}
23982:2008/11/29(土) 00:24:05
>>238
勉強になります。ありがとう。

最初にもらった回答のいくつかで解決できそうなのでもう落ちます。
>>162の意味とかはできてから考えます。
改めて回答くれた人ありがとう。
240デフォルトの名無しさん:2008/11/29(土) 00:25:34
private T GetControl<T>(string name) where T : Control

{
return (T)this.Controls[name];
}
こうか
241デフォルトの名無しさん:2008/11/29(土) 00:25:59
public T GetControl<T>(string name) where T : Control

{
 return this.Controls[name] as T;
}
TextBox textBox1 = GetControl<TextBox>("TextBox1");

nameのコントロールが見つからなかったり、型が違ってたらnullを返す。
242241:2008/11/29(土) 00:26:29
>>240
被ったwwww
243デフォルトの名無しさん:2008/11/29(土) 00:27:13
変な場所の改行までかぶってんなw
244デフォルトの名無しさん:2008/11/29(土) 00:31:32
>>240-241
へー、こんなのできるんだ。VS2008以降から?

string nameはユニークだから、帰ってくるオブジェクトとは1:1だから重なることはないんだよな・・
異なるobjectごとに別メソッドを書かなくていいから楽そうだね
245デフォルトの名無しさん:2008/11/29(土) 00:31:39
>>240-241みたいなものが欲しいと思う場面が想像できない。
というより、絶対にいらんと断言できるわ。
24682:2008/11/29(土) 00:33:23
>>240-241
あー、それです。ありがとうございます。

実は>>83さんに教えてもらって調べて近いところまで言ってたんですが
>>162からの流れって何だったんでしょうか・・・。
すごく時間を無駄にしたような気が・・・。

247デフォルトの名無しさん:2008/11/29(土) 00:35:03
>>245
動的にObjectが生成される場合とかには有効だと思うよ。
他にも、「ア」〜「ン」まで記述されたButtonがあって、
SQLから会社の頭文字だけを抽出して、存在する会社の頭文字だけ抽出してEnabled=trueするとか。
248デフォルトの名無しさん:2008/11/29(土) 00:36:09
>>244
どういうセンスしてるんだよw
どう考えてもコードの複雑性を不要に上げるだけだろこんなの。
249デフォルトの名無しさん:2008/11/29(土) 00:36:13
>>246
>すごく時間を無駄にしたような気が・・・。
日本語は難しいということだねw
250デフォルトの名無しさん:2008/11/29(土) 00:37:16
>>246
最初から>>233書いておけばすぐ解決してたぞw
次からは、最初に情報をしっかり書いてくれ

>>244
.NET2.0以降(VS2005〜)
25182:2008/11/29(土) 00:39:39
>>250
確かにそうかも知れません。コードまで書いてもらえると思ってませんでした。
>>83さんすごいですねw
252デフォルトの名無しさん:2008/11/29(土) 00:40:26
>>248
>>247でも書いたけど、動的にコントロールが追加されて、
例:TextBox_ID01、Label_ID02
それを、それぞれEnabled=Trueとかしたいときに、名前と型でオブジェクトが拾えるから便利だと思って。
253デフォルトの名無しさん:2008/11/29(土) 00:44:49
>>247
意味がわからない。
それなら>>240-241である必要はない。
Controlを返せば済む。そもそもそのための多態性だ。

それに具体的なコードを書く場面を想像すればわかるはずだと思うけど、
>>240-241のようなことをすると(いやまともなセンスしてれば絶対にしないが)
呼び出す側にもメソッドの中にも同じ分岐を書くハメになる。
254デフォルトの名無しさん:2008/11/29(土) 00:49:19
>>253
正しい設計を語りだすと
お前が>>82に、1から全部教える(代わりに書く)羽目になるぞ?
255デフォルトの名無しさん:2008/11/29(土) 00:50:11
>>253
それぞれ、別々のコントロールを探して返すメソッドを作るより、
名前からジェネリックメソッドを通じて取得できるほうが便利じゃん?
256デフォルトの名無しさん:2008/11/29(土) 00:52:13
>>255
だからどんなセンスしてりゃそういう結論になるのよ。
「名前」と「型」を対応させる同じ作業が呼び出す側にもメソッドの中にも
必要になるのに。
257デフォルトの名無しさん:2008/11/29(土) 00:55:52
>>256
例えば

foreach(i in array)
{
 TextBox textBox = this.GetControl<TextBox>("TextBox" + i.ToString());
 Label label = this.GetControl<TextBox>("Label" + i.ToString());

 textBox.Visible = false;
 label.Visible = false
}

とか?
258デフォルトの名無しさん:2008/11/29(土) 00:57:09
× Label label = this.GetControl<TextBox>("Label" + i.ToString());
○ Label label = this.GetControl<Label>("Label" + i.ToString());

259デフォルトの名無しさん:2008/11/29(土) 01:00:30
>>257
だから(まあケアレスミスは突っ込まないとして)そのGetControlを
具体的に実装してみ?

で、無理くり1つにまとめたことで何か「嬉しい」ことがあったかどうか
考えてみれば、どれだけバカバカしいかすぐわかるよ。
260デフォルトの名無しさん:2008/11/29(土) 01:02:16
初心者スレで議論ふっかける人ってなんなの・・・
初心者の居場所なくなるじゃん
261デフォルトの名無しさん:2008/11/29(土) 01:03:32
>>259
すまん
これで不具合がないと思うから、何がばかばかしいかよくわからんな・・・

何かある?
262241:2008/11/29(土) 01:04:26
何やら議論になってるけど
俺もControlを名前で扱う事なんてないから、こんな物いらんだろ。と思いながら書いたわけで(ry

何で書いたか?って、そりゃ彼が欲しがってたからさ
263デフォルトの名無しさん:2008/11/29(土) 01:05:21
>>261
不具合というより、単に手間を増やしてるだけに過ぎないから「バカバカしい」んだよ。
書いてみりゃ分かるよ。
本来書く前に分かるべきだけど。
264デフォルトの名無しさん:2008/11/29(土) 01:06:09
>>262
それはもちろん分かってるけどね。。
265デフォルトの名無しさん:2008/11/29(土) 01:06:40
>>263
んんん?なんで馬鹿らしいの?
煽りじゃなくて、マジでわからん。

すまないが教えてくれないか?
26682:2008/11/29(土) 01:18:26
>>83>>240-241
できましたー、ありがとう神様><

>>262
素人発想、わんぱく坊主あたりでw

>>263
私も気になるので今後のためにご教示ください
267デフォルトの名無しさん:2008/11/29(土) 01:19:39
>>265
微妙すぎて説明できん。サンプルコード書けばいいんだろうけどめんどい。
だから自分で書いてみれば絶対わかるって。

本質的にプログラミング初心者(つーか筋が悪い人)が行数が多いメソッドを
好む病気と同じだから。
268デフォルトの名無しさん:2008/11/29(土) 01:23:40
>>266
失せろゴミ
269デフォルトの名無しさん:2008/11/29(土) 01:25:08
>>267
例えば、コントロール決めうちで考えるとばからしいけど、
ASP.NETの各コントロールはSystem.Web.UI.WebControlsを継承してるので、
コントロールの種類如何を問わず、名前でVisibleをfalseしたりするのに有用だと思うんだが。

他にもASP.NETのRepeaterコントロールなんかでも、データベースの行数だけ
動的にコンとロールが動的に生成されるので、そのコントロールを名前から取得するのに
便利だと思うんだけど。
んー、何がばからしいのかがまったくわからないな・・・

>本質的にプログラミング初心者(つーか筋が悪い人)が行数が多いメソッドを好む病気と同じだから。
行数は少なくなると思うんだが・・・
教えて貰えないなら謎のままになって、なんか気持ちが悪いな・・・
27082:2008/11/29(土) 01:25:57
何もしてないのにゴミって・・・
271デフォルトの名無しさん:2008/11/29(土) 01:30:45
あとは、ASP.NETで、動的にテーブルを生成する時、
それぞれのHTMLのセルに対してスタイルシートを適用するような場合でも、
メソッドが統一できるからコードが短くで済むんじゃないかな

iが行数で、動的に生成された行に配置されたボタンのクリックで、
その行のテーブルのセルのオブジェクトを取得して背景色を変えるとか。
HtmlTableCell tmpTDSyainType = (HtmlTableCell)this.tblSyainSyousai.FindControl("tdSyaunType" + i.ToString());
272デフォルトの名無しさん:2008/11/29(土) 01:31:14
なぜASP.NETの話に?
273デフォルトの名無しさん:2008/11/29(土) 01:36:04
>>269
>ASP.NETの各コントロールはSystem.Web.UI.WebControlsを継承してるので、
>コントロールの種類如何を問わず、名前でVisibleをfalseしたりするのに有用だと思うんだが。
自分で俺の言ってることを追認してるじゃん。
そうその場合は「コントロールの種類如何を問」う必要性はどこにもないでしょ?

>行数は少なくなると思うんだが・・・
なるわけないでしょ。
名前を引数にとってコントロールを返すメソッドを、コントロールの型ごとに
分けて書いた場合には必要がない処理を書く必要があるのだから。

筋が悪い人が1つのメソッドにゴチャゴチャ詰め込みたがる病気そのまんまだよ。
274デフォルトの名無しさん:2008/11/29(土) 01:41:40
>>273
>そうその場合は「コントロールの種類如何を問」う必要性はどこにもないでしょ?
それは、そういう継承元のClassを取得する場合でしょ。
この場合は、継承されていないようなオブジェクトにも利用できるから、
補足であって単純な追認とは違う。

>なるわけないでしょ。
いやなるでしょ。
>return (T)this.Controls[name];
ですべてのオブジェクトを持ってこれるのに、
別々のオブジェクトに対して処理したい場合には、それぞれのメソッドを作らないといけないわけだから。
275デフォルトの名無しさん:2008/11/29(土) 01:52:51
>>274
Tで返すためにTでキャストすることに何の欺瞞も不安も感じとれないのなら
何も言う言葉がないよ。

それってObjectで返して呼び出し側でTにキャストするのと何が違うの?
276デフォルトの名無しさん:2008/11/29(土) 01:58:31
>Tで返すためにTでキャストすることに何の欺瞞も不安も感じとれないのなら
Tで返すためにTでキャストすることなんて主張してないよ?
例えばよくあるパターンとして、データベースの内容に従って、社員の数だけコントロールが動的に生成される場合。

一人の社員に、名前、年齢、部署名などを記述するTextBoxが配置されると思うんだけど、
それぞれ、別のメソッドを設けなくとも

TextBox birthDay
Label age
CheckBox isMarry;

というオブジェクトを、一つのreturn (T)this.Controls[name]; というメソッドで取得ができるといってるわけ。
もしジェネリックメソッドが利用できなかったら、それぞれのコントロールを取得するメソッドを記述する必要がある。
しかも、CheckBoxはIsCheckedを操作したいとしたら、これはTextBoxにもLabelにもないプロパティだから
画一的に操作できないわけで。

>それってObjectで返して呼び出し側でTにキャストするのと何が違うの?
指定した型しか返ってこないから、それが保証される。
「だったらObjectでいいじゃん?」だったら話す意味はないから、そういう問いかけは無意味だと思うんだけど・・・。
27782:2008/11/29(土) 02:02:38
ROMさせてもらってますが議論の核心がわかりませんでした・・・

おやすみなさい
278デフォルトの名無しさん:2008/11/29(土) 02:04:34
>>276
>Tで返すためにTでキャストすることなんて主張してないよ?
いやそう主張してるんだよ。
自分で自分の書いていることの意味を理解していないだけだ。
まあこれ以上俺が言っても耳に届かないだろうから他の人のセカンドオピニオンを聞いた方がいいだろうね。
279デフォルトの名無しさん:2008/11/29(土) 02:14:23
>>278
>いやそう主張してるんだよ。
return (T)this.Controls[name];
これを勘違いしてるだけじゃないか?
returnされるものが、<T>であれば、キャストする必要はないんだから。
280デフォルトの名無しさん:2008/11/29(土) 02:17:40
ジェネリックメソッドが不必要だというなら、引数で場合わけされるオーバーロードも同じことでしょ。
これもObjectで渡せば必要ないといえば必要ないし、場合によっては行数が増えるかもしれない。
でも受け渡される型をif文で判断しなくて済むようにオーバーロードを利用するパターンとかよくあるでしょ。
ジェネリックメソッドについても、それと同じこと。
281デフォルトの名無しさん:2008/11/29(土) 02:23:41
private T GetControl<T>(string name) where T : Control

{
return (T)this.Controls[name];
}

これってwhere T : Controlで制約付いてるけど
そもそも同じ型でも内部的にキャストしてるのC#って?
同じ型ならそのまま渡すの?
282デフォルトの名無しさん:2008/11/29(土) 02:30:01
>private T GetControl<T>(string name) where T : Control
は宣言であって、実際に返しているのは
return (T)this.Controls[name];

this.Controlsが<T>を返すのなら、わざわざキャストしてreturnする必要はない
283デフォルトの名無しさん:2008/11/29(土) 02:33:47
GetControlなんて作らなくても(T)this.Controls[name];でいいじゃないと思えてくる。
284デフォルトの名無しさん:2008/11/29(土) 02:35:05
うん
285デフォルトの名無しさん:2008/11/29(土) 02:36:35
>>282
ControlからTに暗黙的な変換はできないから、明示的にキャストしてやらないとダメじゃね?
286デフォルトの名無しさん:2008/11/29(土) 02:38:46
結局コードの複雑性を不要に上げてる要素ってなんだったんだろ
287デフォルトの名無しさん:2008/11/29(土) 02:45:59
既にあるものをまた作ってるところ
288デフォルトの名無しさん:2008/11/29(土) 02:47:30
>>285
なので、this.Controls[name]でなくて、例えば自前で実装したメソッドで、
this.GetCntls(name)が<T>を返すのなら、わざわざキャストする必要がないってこと。

この場合は、this.Controlsがobjectを返すから<T>を返さないといけないというだけ。
289デフォルトの名無しさん:2008/11/29(土) 02:50:06
>>287
>既にあるものをまた作ってるところ
それをいったらすべてが無意味だろ。
なら高級言語なんか必要なくて、昔のマシン語レベルでしこしこ書いてればいいわけだから。
既にあるものだけど、使い勝手によっては便利だから、
様々な手法や言語が改良されて世に出てきているわけで。
290デフォルトの名無しさん:2008/11/29(土) 02:53:16
はい的外れ&極論来ました
291デフォルトの名無しさん:2008/11/29(土) 02:55:03
public static bool TryGetControl<T>(this Control parent, string name, out T child) where T : Control
{
Control tmp = parent.Controls[name];
if(tmp is T)
{
child = (T)tmp;
return true;
}
else
{
child = default(T);
return false;
}
}

こういうのならどうだべさ?
292デフォルトの名無しさん:2008/11/29(土) 03:01:11
ROMってた人から言わせてもらうと
具体的なこと何一つわからなかったけど、なんだったんだ?って感じ
293デフォルトの名無しさん:2008/11/29(土) 03:01:54
拡張メソッドにジェネリック?
294デフォルトの名無しさん:2008/11/29(土) 03:02:56
>>291
そういうメソッドを作らねばならないなら、俺はこうする。
child = parent.Controls[name] as T;
return child != null;

>>292
1つ言えることは、>>82がTextBox1からTextBox5などという「型」を作っていると告白したのが元凶。
295デフォルトの名無しさん:2008/11/29(土) 03:05:06
思うんだが、今の話題ってスレ違いじゃね?

今あるC#のスレって初心者用と相談室と宿題と
あとは複合・単発ネタくらいなんかな。
なんで総合みたいなスレたってないの?
296デフォルトの名無しさん:2008/11/29(土) 03:07:25
ああ、as使えば短くできたんだな
まだまだだなちくしょう
297デフォルトの名無しさん:2008/11/29(土) 03:10:51
>>295
前は.NET総合みたいなのもあったけど、あれは埋まってから誰も立てなかったな。
総合作っても 過疎・質問・終わりの見えない議論 のどれかになる予感。
298デフォルトの名無しさん:2008/11/29(土) 03:14:55
終わりの見えない議論したい人は過疎スレに行かない
すぐ終わっちゃうからw
299デフォルトの名無しさん:2008/11/29(土) 07:13:05
結局>>82への回答を思いつかなかった人が具体的な例を何も挙げずに
意味が無いとか無駄とか絡んでいただけに見える終わり方だな。
300デフォルトの名無しさん:2008/11/29(土) 08:38:35
VB6の厨精神は脈々と受け継がれてるな
>>299とかに
301デフォルトの名無しさん:2008/11/29(土) 08:45:34
>>300
ごめんなさいごめんなさい
302デフォルトの名無しさん:2008/11/29(土) 10:08:21
「指定したの型のオブジェクトを返す」のはリフレクション絡みで使われることも多いから,
ジェネリックにするとかえって不便になったりするんだよね
ジェネリック型にダウンキャストしたり,typeof(T)とかやった時点で実質的な意味は失われるんだし
303302:2008/11/29(土) 10:10:10
まあ>>291の場合は意味がないこともないか…
304デフォルトの名無しさん:2008/11/29(土) 12:26:16
よし、じゃあ初心者が相談しちゃうよ。
SplitterのCollapseってどうやるのが一般的なの?
305デフォルトの名無しさん:2008/11/29(土) 13:52:39
とりあえず、すぐに煽る人は初心者スレに必要ないことだけは確か
306デフォルトの名無しさん:2008/11/29(土) 15:55:58
>>234
秀和システムの「Visual C# 2008パーフェクトマスター」と言うのを買ってきました。
全編カラーで見やすいです。
307デフォルトの名無しさん:2008/11/29(土) 18:22:19
>>306
とりあえず、TextBox2個、Labelを1個配置して、
TextBoxに入力された数字を足し算してLabelに表示するソフトを作りなさい
308デフォルトの名無しさん:2008/11/29(土) 18:28:48
ある程度は何となく使えるよ
そうやって遊んでると必ず限界にぶつかるから,それから本格的に言語の勉強するといいよ
何が嬉しいか,何に使うかが分かってないとなかなか頭に入らないからね
309デフォルトの名無しさん:2008/11/29(土) 18:28:53
>>307
めんどくさいんでこんなんでいいですか

try { label1.Text = Convert.ToString(Convert.ToInt32(textBox1.Text) + Convert.ToInt32(textBox2.Text)); }
catch { label1.Text = "0"; }
310デフォルトの名無しさん:2008/11/29(土) 18:31:47
>>309
0点
311デフォルトの名無しさん:2008/11/29(土) 18:36:22
ワロス
312デフォルトの名無しさん:2008/11/29(土) 18:40:32
入門書買ってまだ2時間半だぞw
313デフォルトの名無しさん:2008/11/29(土) 18:49:29
汚いtryだなあ
314デフォルトの名無しさん:2008/11/29(土) 18:52:09
よく入門書に

オブジェクトは型です。
金型にプラスティックを流し込むと同じ製品がいくつも作れるられるように、
オブジェクトから製品をいくつも作ることができます。
この製品のことをインスタンスといいます。

みたいなこと書いてあるけど、これのほうがよっぽどわかりにくいよな。
315デフォルトの名無しさん:2008/11/29(土) 18:56:32
そうか?俺はよくわかったけど
もっとも俺が読んだ本はタイヤキの型とタイヤキだったけど

同様にanimalクラスからcatやdogを派生してる例を突っ込む奴とかいるけど
理解できない


そんなわかりにくいか?
316デフォルトの名無しさん:2008/11/29(土) 18:57:57
いや、わかりやすいけど?
317デフォルトの名無しさん:2008/11/29(土) 18:59:57
おっと
ジェネリックメソッドを頑なに拒否していた人が
また喧嘩を売りにきましたよ
318デフォルトの名無しさん:2008/11/29(土) 19:01:27
よほど、昨日、悔しい思いをしたんじゃないか?
319デフォルトの名無しさん:2008/11/29(土) 19:06:16
煽らなくていいよ。
320デフォルトの名無しさん:2008/11/29(土) 19:59:44
C#でいう「ポインタ型」は,クラスや構造体や列挙型やデリゲート型と並ぶんじゃなくて
参照型・値型・ポインタ型と考えればいいの?
321デフォルトの名無しさん:2008/11/29(土) 20:06:59
>>320
だから分かってない人が無理して分かったように語らないこと。
意味不明すぎるよその文章。
322デフォルトの名無しさん:2008/11/29(土) 20:10:50
クラスのインスタンスも構造体もデリゲートも
それを格納する変数にはその存在を指し示すアドレス
つまりポインタが入ってるんだよ?
323デフォルトの名無しさん:2008/11/29(土) 20:12:37
C#は構造体を=で代入したら実体がコピーされます?
324320:2008/11/29(土) 20:13:01
「ポインタ型」っていうのは型の種類を指す言葉だよね
型の種類には2つの系統があるよね
○クラス・構造体・列挙型・デリゲート型
○参照型・値型
ポインタ型はどちらなんだろうと思った
325320:2008/11/29(土) 20:15:11
種類の系統というのも変な言い方だな
型の分類方法といえばいいかな
326デフォルトの名無しさん:2008/11/29(土) 20:16:20
ポインタってメモリの場所なんじゃない?
327デフォルトの名無しさん:2008/11/29(土) 20:18:38
クラスのメンバを外部に公開したいんだが、

private List<string> names;

public List<string> Names
{
  get
  {
    return names;
  }
}

これだと外部から変更できてしまう。
変更できないように間に噛ませるクラスなんていうんだっけ?
328デフォルトの名無しさん:2008/11/29(土) 20:21:12
>>323
構造体は値型
なのでコピーされる
329デフォルトの名無しさん:2008/11/29(土) 20:22:10
>>327
ReadOnlyCollection<T>
names.AsReadOnly()で作れる
プロパティで毎回作って返すのはあんまりよろしくないので
コンストラクタあたりで作って別のフィールドに入れとく
330デフォルトの名無しさん:2008/11/29(土) 20:22:16
>>327
昨晩の再現の予感
public IList<string> Names 

  get {  return names.AsReadOnly(); } 

331デフォルトの名無しさん:2008/11/29(土) 20:24:18
>>329-330
ありがとう。
332デフォルトの名無しさん:2008/11/29(土) 20:28:21
>>324
解釈の仕方はいろいろあるから、MSDNの記述に従うのが吉。
333デフォルトの名無しさん:2008/11/29(土) 20:31:15
>>330
これやられると使うときにいちいち結果をキャッシュしないといけなくなるんだよね
中身は連動してるから,一回作ったらフィールドに入れといた方がいい
334デフォルトの名無しさん:2008/11/29(土) 20:31:39
>>328
なるほど
ありがとうございます
335デフォルトの名無しさん:2008/11/29(土) 20:39:31
>>329
毎回作って返していいぐらいの薄いラッパだよ。
元のコレクションが変更されればそれはラッパにも反映される。
public ReadOnlyCollection( IList<T> list )
逆にスナップショットが必要なら使う側でコピーしないといけない。

336デフォルトの名無しさん:2008/11/29(土) 20:48:52
>>330
ReadOnlyList<T>はどーせ変更できないんだからIList<T>通さずにそのまま返していいよ
その方が変更できないことがはっきりして分かりやすい
337336:2008/11/29(土) 20:50:02
ReadOnlyCollection<T>の間違い
338デフォルトの名無しさん:2008/11/29(土) 20:57:51
なんで標準でReadOnlyDictionaryって無いんだろう
みんな自分で作ってるんじゃないの
339デフォルトの名無しさん:2008/11/29(土) 21:07:02
先生方、質問です
Formで初期表示前にコントロールに値を設定したり初期化処理するのは
よくあるケースだと思うのですが、この場合FormのコンストラクタとOnLoad
イベントとどちらに書くのが正しいやり方なのでしょうか?

今いじっている他の方が作成されたソース見てたら

public class AboutDialog : System.Windows.Forms.Form
{
AboutDialog {
InitializeComponent();

なんかの初期処理
コントロールへの初期設定
}

protected override void OnLoad(System.EventArgs e) {
なんかの初期処理
コントロールへの初期設定
}
}

とこんな感じでどちらにも処理書いてたりしているのですが、作法としては
どちらが正しいのでしょうか?
340デフォルトの名無しさん:2008/11/29(土) 21:14:58
>>338
System.Collections.ObjectMod.KeyedCollection<TKey, TItem>
抽象クラスならあるな。
System.Collections.ObjectModのは裏方のクラスだから、
そのまま使うようなことはしないのがマナーだと思うよ。
341デフォルトの名無しさん:2008/11/29(土) 21:29:37
>>339
コンストラクタはFormのインスタンスを作成した時しか呼ばれないが
LoadはShowDialogする度に呼ばれる
342デフォルトの名無しさん:2008/11/29(土) 21:33:19
>>341
あ、そうか...
先生、理解しました!
まさに目から漆が落ちた気分です。
ありがとうございました。
343デフォルトの名無しさん:2008/11/29(土) 21:40:38
>>339
>Formで初期表示前にコントロールに値を設定したり初期化処理するのはよくあるケースだと思うのですが
プロパティを設定して、それによってFormの初期化をしたい場合には、Loadに記述したほうがいいと思う。

NullpoForm nullpoForm = new NullpoForm();
nullpoForm.Caption = "NULLPO";
nullpoForm.FormType = 1;
nullpoForm.FormSize = 200;

というように、プロパティを設定してOnLoadでそれに従って表示を変えるという感じ。
344デフォルトの名無しさん:2008/11/29(土) 21:41:17
orz
345デフォルトの名無しさん:2008/11/29(土) 21:42:03
AboutDialogのインスタンスなんて使い回すかなあ?
346デフォルトの名無しさん:2008/11/29(土) 21:48:30
人それぞれだし
ソフトによってもそれぞれ
347デフォルトの名無しさん:2008/11/29(土) 22:20:41
俺はデザイナでポトペタするから、結果的に使いまわすことになる
348デフォルトの名無しさん:2008/11/29(土) 22:31:33
>>345
普通は使い回さないですね(;´Д`)

どちらに書いてもプログラム的には問題ないのであくまで作法上の
話を聞きたかっただけなんです。
結果、>>341だったので、あ、そういえばそうだと鱗が落ちたわけです。

>>343
プロパティ設定はInitializeComponent()のこと?
で、表示を変える場合はOnLoadでやるということですか?
349デフォルトの名無しさん:2008/11/29(土) 22:32:12
なんで"AboutDialog"が出てくるのか意味不明だが、
設定ダイアログみたいなものを弱参照で持ちたいことは場合によってはあるんじゃないの?

いずれにせよ、>>339は作法とか何とかそういうVB厨チックな思考はやめたほうがいいよ。
350デフォルトの名無しさん:2008/11/29(土) 22:38:53
>>348
Formもオブジェクトでインスタンスとして存在するわけだから、
そのインスタンスも当然、プロパティを保持しているわけで。

コンストラクタで全部初期化しようとしたら、
AboutDialog() { }
の引数で、初期設定の情報をすべてやりとりしなきゃいけないわけでしょ?
351デフォルトの名無しさん:2008/11/29(土) 22:48:18
StringCollectionって文字列のソートはできないんですか?
List<string>を使わないとだめでしょうか?
352デフォルトの名無しさん:2008/11/29(土) 22:51:18
そういえばそんなのあったな
今となってはそういうのは存在価値がなくなったから,ジェネリックコレクションだけを使ってればいいよ
353デフォルトの名無しさん:2008/11/29(土) 22:56:48
あえて使うならOrderBy
まあList<string>の方が良いけどな
354デフォルトの名無しさん:2008/11/29(土) 22:58:42
ああ、そんなのあったね
355デフォルトの名無しさん:2008/11/29(土) 22:59:48
あれ?
http://d.hatena.ne.jp/matturo/20060722/1153586919
このサイトみてStringCollectionの方がいいと読んだんですが
List<string>のほうがいいんですか?
356デフォルトの名無しさん:2008/11/29(土) 23:02:46
その記事古いよ
ジェネリックが使えない.NET1.1が対象だと思う
357デフォルトの名無しさん:2008/11/29(土) 23:12:38
2004ぐらいならともかく2006の記事でこれはひどいな
と思ったが2006年中ぐらいはまだ.NET2.0は主流になりえてなかったっけ?
358デフォルトの名無しさん:2008/11/29(土) 23:14:43
2.0以降はジェネリック推奨
359デフォルトの名無しさん:2008/11/29(土) 23:15:52
1.1から2.0の時は何らかの不評でなかなか移行しなかった記憶がある

2.0は06/11月リリース
360デフォルトの名無しさん:2008/11/29(土) 23:16:12
間違えた05/11だた
361デフォルトの名無しさん:2008/11/29(土) 23:18:38
>>350
だから、どこで初期化するかなんかは状況しだいでしょうが
とりあえずOnLoadが何度も呼ばれる可能性があることを知らなかったわけだし
362デフォルトの名無しさん:2008/11/29(土) 23:21:44
>>361
質問しといて逆ギレとはいい神経してるな
363デフォルトの名無しさん:2008/11/29(土) 23:31:44
>>356-360
あれ?
ということは、StringCollectionを使う意味は何もないということですか?
速度が早くなるとかそういうのもないんでしょうか
364デフォルトの名無しさん:2008/11/29(土) 23:37:10
今はもうないよ
365341:2008/11/29(土) 23:37:33
>>361-362
なんというか、おちけつ

俺の回答が全てだろ
366361:2008/11/29(土) 23:41:22
>>362
>>361は質問者じゃないよw
べつに煽るつもりはなかった。反省はしている
367デフォルトの名無しさん:2008/11/30(日) 00:07:11
おまえら沸点低すぎ

よくそんなんで社会人やってられんな
368デフォルトの名無しさん:2008/11/30(日) 00:11:27
>>367
うるせぇ氏ね
369デフォルトの名無しさん:2008/11/30(日) 00:40:03
IDが見えないと自作自演にしか見えないから困る
370デフォルトの名無しさん:2008/11/30(日) 00:45:10
自作自演しすぎるのはよくないぞ
371デフォルトの名無しさん:2008/11/30(日) 00:47:53
俺もそう思う
372デフォルトの名無しさん:2008/11/30(日) 00:48:50
>>371
お前=俺のことだぞ?
373デフォルトの名無しさん:2008/11/30(日) 00:50:23
でもプログラマならこういうカオスな状態は嫌いじゃないよな?
374デフォルトの名無しさん:2008/11/30(日) 00:51:24
お前もそう思う
375デフォルトの名無しさん:2008/11/30(日) 00:52:20
     カタカタ
  || ̄ Λ_Λ
  ||_(Д`; ) 「なに?このお前ばっかりのスレ・・・」
  \⊂´   )
    (  ┳'
376デフォルトの名無しさん:2008/11/30(日) 00:53:56
>>367
そう、俺は窒素並みに沸点が低いんだ。
なのに熱い男といわれるんだぜ?
377デフォルトの名無しさん:2008/11/30(日) 00:55:29
  ワケ     ワカ       ラン
  ∧_∧   ∧_∧    ∧_∧
 ( ・∀・)  ( ・∀・)   ( ・∀・)
⊂ ⊂  )  ( U  つ  ⊂__へ つ
 < < <    ) ) )     (_)|
 (_(_)  (__)_)    彡(__)
378デフォルトの名無しさん:2008/11/30(日) 01:41:15
ダイアログのインスタンスをずっと保持しておくのって、フォームデザイナでダイアログを
配置すると自然にそうなるじゃないか。
379デフォルトの名無しさん:2008/11/30(日) 11:00:41
それはよくわかるけど,AboutDialogだよ?
380デフォルトの名無しさん:2008/11/30(日) 11:13:51
起動が早いじゃん
AboutDialogの
381デフォルトの名無しさん:2008/11/30(日) 12:44:14
もう、やめてぇぇぇぇぇぇ
About dialogのHPは(ry
382デフォルトの名無しさん:2008/11/30(日) 12:51:57
面白いと思ってやってるのかもしれんが(まあたぶんそうなんだろう)
何も笑えないぞ。
むしろ苛立ちを喚起されるだけ。

20年ぐらいは生きてるんだろうから、いい加減自分の笑いの感性は
標準的な人間とズレているんだってことを学習したらどうだよ。
383デフォルトの名無しさん:2008/11/30(日) 12:53:49
っていうか、だからお前は人からヲタって言われるんだよ。
趣味が人と違うからじゃない。
その鈍感さを指して蔑まれているとなぜ分からんのかね。
384デフォルトの名無しさん:2008/11/30(日) 13:08:46
2chまで来てスルーもできずに説教を垂れる男の人って
せめて一、二行に抑えてくれ
385361:2008/11/30(日) 13:58:07
っていうか(笑)
ヲタ(笑)
分からんのかね(笑)
386デフォルトの名無しさん:2008/11/30(日) 14:03:43
最近変なのが居ついててうぜぇ
おまえの自分はオタじゃないアピールなんてどうでもいいんだよ
387339:2008/11/30(日) 14:47:42
つうかよ、例としてAbout dialog書いただけなのになんでこれだけ
いろいろと書き込むかね?
>>341の回答で全て終わってるだろ。
しかも>>381はスルーされるだろと思って書いたらわざわざ
噛みついてきて。
>>382>>383は絶対おっさんだろ?
消えろよな、話合わねぇんだからよ。

>>382>>383のバカ以外の回答してくれたみなさん、ありがとうございました。
388デフォルトの名無しさん:2008/11/30(日) 15:25:36
>>387 お前キモイ、自分の性格が悪いことに気づくべきだよ。
頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。
精神レベルも低い。
389デフォルトの名無しさん:2008/11/30(日) 15:30:57
↓387は私ではありませんというレス
390デフォルトの名無しさん:2008/11/30(日) 15:33:39
お前キモイ、自分の性格が悪いことに気づくべきだよ。
頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。
精神レベルも低い。
お前キモイ、自分の性格が悪いことに気づくべきだよ。
頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。
精神レベルも低い。
お前キモイ、自分の性格が悪いことに気づくべきだよ。
頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。
精神レベルも低い。
お前キモイ、自分の性格が悪いことに気づくべきだよ。
頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。
精神レベルも低い。
お前キモイ、自分の性格が悪いことに気づくべきだよ。
頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。
精神レベルも低い。
お前キモイ、自分の性格が悪いことに気づくべきだよ。
頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。
精神レベルも低い。
お前キモイ、自分の性格が悪いことに気づくべきだよ。
頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。
精神レベルも低い。
お前キモイ、自分の性格が悪いことに気づくべきだよ。
頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。
精神レベルも低い。
お前キモイ、自分の性格が悪いことに気づくべきだよ。
頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。
精神レベルも低い。
お前キモイ、自分の性格が悪いことに気づくべきだよ。
頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。
精神レベルも低い。
391デフォルトの名無しさん:2008/11/30(日) 15:35:24
392デフォルトの名無しさん:2008/11/30(日) 15:47:55
キモキモキモキモキモキモキモキモキモキモキモキモキモキモキ
モキモキモキモキモキモキモキモキモキモキモキモキモキモキモ
イモイモイモイモイモイモイモイモイモイモイモイモイモイモイ
393デフォルトの名無しさん:2008/11/30(日) 15:49:02
キモイキモイキモイキモイキモイキモイキモイキモイキ
モヤキイモヤキイモヤキイモヤキイモヤキイモヤキイモ

394デフォルトの名無しさん:2008/11/30(日) 15:57:36
おいしいやきいもはいかがですか?
395デフォルトの名無しさん:2008/11/30(日) 16:32:07
>>388
おっさん、必死だな( ´,_ゝ`)プッ
396341:2008/11/30(日) 16:39:12
お前ら俺みたいにスマートに要点だけ伝えられる人間になろうぜ

とりあえずこの件はここで手打ちな
文句がある奴は表に出ろ
397デフォルトの名無しさん:2008/11/30(日) 16:42:36
表に出たら、とっても寒かったです・・・
398デフォルトの名無しさん:2008/11/30(日) 16:45:15
罠かッ!?
399デフォルトの名無しさん:2008/11/30(日) 20:23:11
>>82への回答が思いつかなくてウダウダ絡んでた奴と同じ奴が荒らしてるのか?
400デフォルトの名無しさん:2008/11/30(日) 20:34:58
蛇足なので終了。次の質問者が来るまで黙ってね。OK?
401デフォルトの名無しさん:2008/11/30(日) 20:40:36
へびあし?
402デフォルトの名無しさん:2008/11/30(日) 20:45:40
ムカデのすばらしい絵が描けたので得意になって足を2本書き加えてみたが
たいして変わらなかったという故事から。
403デフォルトの名無しさん:2008/11/30(日) 20:51:49
蛇足は蛇の絵を書く競争をしていた男が早く書き上がったので
俺は足も書けるぜと調子に乗ったら、足を書いている間に負けてしまった故事から。
余計なこと。
404デフォルトの名無しさん:2008/11/30(日) 21:05:37
dasoku.cs(4,6): warning CS0162: 到達できないコードが検出されました。
405デフォルトの名無しさん:2008/11/30(日) 21:54:40
何一つ役に立ってないな
406デフォルトの名無しさん:2008/11/30(日) 23:10:24
ワロタw

先手:オレ
後手:森内俊之(指導)

▲2六歩 △3四歩 ▲7六歩 △3五歩 ▲2五歩 △3二飛
▲4八銀 △6二玉 ▲5八金右 △7二玉 ▲6八玉 △3六歩
▲同 歩 △同 飛 ▲3七歩 △7六飛 ▲2二角成 △同 銀
▲6五角 △9五角 まで20手で森内の勝ち
407デフォルトの名無しさん:2008/11/30(日) 23:32:55
なんかのコピペかよ
408デフォルトの名無しさん:2008/12/01(月) 00:22:04
>>304
で、俺はこれに対するレスを待っていたわけだが・・。
409デフォルトの名無しさん:2008/12/01(月) 00:23:38
まずは質問を日本語で書こうね。
410デフォルトの名無しさん:2008/12/01(月) 01:15:24
TCPListenerを使用して通信プログラムを書いているのですが、

通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できます。

というエラーがたまに出るのですが、この例外を補足したらどのように処理すればいいでしょうか?

通信時間、通信バイト数、通信間隔によらず再現性がないので
起きないようにするのは諦めて、起きた場合適切に対処するようにしようと思いました。
よろしくお願い致します。
411デフォルトの名無しさん:2008/12/01(月) 01:37:03
使用中のポートを使用しようとしてるんじゃね?
412デフォルトの名無しさん:2008/12/01(月) 03:04:07
あーなるほど、他のアプリがたまたま使ってるっていうことですかね
Port1300を使うことにしてるんですけど、なんか使われる可能性あるんでしょうか
413デフォルトの名無しさん:2008/12/01(月) 03:44:04
可能性とかいわれてもナー

h323hostcallsc 1300/tcp H323 Host Call Secure
h323hostcallsc 1300/udp H323 Host Call Secure
#192.168.0.1 と 192.168.0.2 は、わたしが使っている IP アドレスですので勝手に使わないでください。なおこの件に付いては
414デフォルトの名無しさん:2008/12/01(月) 07:25:36
415デフォルトの名無しさん:2008/12/01(月) 09:40:05
>>413
192.168.0.1はいいけど、127.0.0.1は私のアドレスだから使わないでね
416デフォルトの名無しさん:2008/12/01(月) 11:45:01
リソースの名前に$がつくの?
417デフォルトの名無しさん:2008/12/01(月) 12:33:36
WndProcを複数のクラスから操作する事はできますか?
可能であればその方法もお願いします。
418デフォルトの名無しさん:2008/12/01(月) 12:35:14
もうちょっと具体的に説明してくれ
419デフォルトの名無しさん:2008/12/01(月) 12:53:18
肝心の「複数のクラスから操作する」が意味不明なのねん
420417:2008/12/01(月) 12:59:15
すいません。普通にそれぞれのクラスでオーバーライドすれば
いいだけのような気がしてきました。帰宅後不明な点あれば
再度質問します。
421デフォルトの名無しさん:2008/12/01(月) 14:36:12
文字列の判定をしています。
string RegexNames = null;
string RegexPeople = null;
RegexNames = ("みかん|いちご|りんご|");
RegexPeople = ("姫|王|王妃|");
if (Regex.Match("みかん", RegexNames).Success){
MessageBox.Show("みかんはあります");
}
if (Regex.Match("姫", RegexNames).Success){
MessageBox.Show("姫は果物です。");
}
if (Regex.Match("姫", RegexPeople).Success){
MessageBox.Show("姫はいます");
}
これで、○×○のつもりなのですが、ぜんぶ○になりなぜかふたつめの姫は果物です。でもマッチしてしまいます。
どこがまずいのでしょう? アドバイスお願いします。
422デフォルトの名無しさん:2008/12/01(月) 14:38:32
最後のうまか棒
423デフォルトの名無しさん:2008/12/01(月) 16:16:20
おお。わかりました。まさかうまか棒がわたしへの回答とは気づかず、しばらく(かなり長いあいだ、2時間くらい)、悩んでました。できました。感謝。
424デフォルトの名無しさん:2008/12/01(月) 16:30:08
ああ、一瞬悩んだけど

>姫|王|王妃 | ← これかよw
425デフォルトの名無しさん:2008/12/01(月) 16:58:52
>>413
>>414
>>415
ありがとうございます
H323とかいうのが使ってるんですね
取り敢えず>>414でUnassingnedのポートにして様子を見てみます
426デフォルトの名無しさん:2008/12/01(月) 17:58:51
いや323が使ってるというのは冗談だヨ
続けるならネットワークプログラミングのスレがいいかもね
427デフォルトの名無しさん:2008/12/01(月) 18:11:48
>>425
コマンドプロンプトで「netstat -an」したら使用されている
ポートが確認出来るから、10000以上で空いているポート使えば
いいと思いますよ。
428デフォルトの名無しさん:2008/12/01(月) 19:05:26
ボタンのOnPaintをオーバライドして独自描画をしようとしています。
ボタンをクリックすると、ボタン表面の描画が右下に2ピクセルほど動きますよね。
(ボタンを押したままボタンの外側にカーソルを動かすと、その状態が元に戻る。)
これは、マウスの動きに反応して、ボタン表面の描画の原点がずらされているものと思うのですが
この原点の値を取得することはできるでしょうか?
429デフォルトの名無しさん:2008/12/01(月) 19:10:23
>>428
原点は(クライアント座標で)(x, y) = (0, 0)に決まってるじゃん。
いくら初心者でもそんなところで躓いてるようじゃヤバいんじゃないのマジで。
430デフォルトの名無しさん:2008/12/01(月) 19:18:02
>>429
クライアント座標は(0. 0)だとしてもボタンがクリックされてるときだけ、
どれかのプロパティが(2, 2)になったりしないのかな?
自分でも探してみたのですが見つからなくて
431デフォルトの名無しさん:2008/12/01(月) 19:29:03
ないとおもうな…
432デフォルトの名無しさん:2008/12/01(月) 19:30:45
>>431
ないですか…
ありがとうございました
433デフォルトの名無しさん:2008/12/01(月) 19:48:10
ButtonRendererで描画しても完全無視だな
434デフォルトの名無しさん:2008/12/01(月) 19:56:59
>>430
エスパーするに、ボタンがポイントなりホールドされているかどうかを示すプロパティが
ないかどうか、ってことだな。
そりゃ、自分でマウス関係のイベントを拾って状態を管理するんだよ。その上で描画内容を
適当に変えるわけ。押したら位置がずれるコントロールばかりじゃないだろ?

ちなみに、蛇足だが、クリックってのはボタンを放して初めて成り立つものだからな。
435デフォルトの名無しさん:2008/12/01(月) 20:01:34
ビジュアルスタイルONなら押してないときと押したときで画像が切り替わるだけだったりするし
436デフォルトの名無しさん:2008/12/01(月) 20:08:23
>>434
ESP能力低すぎないか?w

俺も最初読めなかったが、どうも>>428はボタンが印下されたときの、
ボタンのテキストならテキストの描画位置の(通常状態に対する)オフセット量を
知りたいんだろう。

これって>>435の言うとおりOS依存らしいので、取得できるとしてもレジストリとかからに
なるんだろうねたぶん。
437デフォルトの名無しさん:2008/12/01(月) 20:10:29
エスパーじゃない人は黙っててください。ウザいだけです。
438デフォルトの名無しさん:2008/12/01(月) 20:16:13
>>437
APIスレの作法をこんな所まで持ち込むなw
439デフォルトの名無しさん:2008/12/01(月) 22:12:09
ZOrderってどこで設定するの
440デフォルトの名無しさん:2008/12/01(月) 22:15:52
直接は設定しない
デザイナならコントロール右クリックから手前にしたりとか
441デフォルトの名無しさん:2008/12/01(月) 22:34:27
MonthCalendarを使用してセレクトされた日が
その月の第何週目となるか求めるには
どのようにしたら良いのでしょうか?

週の始まりは日曜日から始まるとして考えてみたのですが
イマイチわかりません。
442デフォルトの名無しさん:2008/12/01(月) 22:58:17
n日の曜日が分かれば1日の曜日は分かる
ここで、n日がHoge曜日 ならば n-7m日もHoge曜日
n-7m>0を満たす最大のmを求め、そのときのn-7mをpとする
p日の曜日も分かるから、曜日的に1日の曜日より前ならp日は第二週、
そうでないなら第一週である。pの周目をqとすると、p=n-7mであるから
n=7m+pすなわちn日はq+m週である。

443デフォルトの名無しさん:2008/12/01(月) 23:15:50
んな難しく考えなくても小学生の算数の発想でいいじゃんこんなの。

まず日曜日は月曜日より、月曜日は火曜日より「小さ」くなるように
曜日に番号を振る。

今月の一日の曜日と選択された日の曜日を比べて、「小さい」なら
選択された日xは第(((x - 1) / 7) + 2)〜曜日だ。
444デフォルトの名無しさん:2008/12/01(月) 23:16:01
日本語でおk
445441:2008/12/01(月) 23:16:26
まず上の例で考えて、1日の曜日はnから求めるのですか?

それともDateTime で求められますか?



446デフォルトの名無しさん:2008/12/01(月) 23:24:14
年月日がわかれば計算できるだろ
ググレ
447デフォルトの名無しさん:2008/12/01(月) 23:32:51
>>445
MonthCalendarによって選択された日付の情報から
その月の一日をあらわすDateTimeを作るぐらいの知恵は持とうよ。
これ初心者とか関係ないレベルの話だと思うよ。
448441:2008/12/01(月) 23:37:52
お忙しい最中につまらない質問に答えて頂き
ありがとうございました。

これで失礼します。
449417:2008/12/02(火) 00:34:57
自分のやりたいことはNativeWindowを使ってサブクラス化
すれば目的は達成出来そうでした。

ところで、WndProcでWM_DRAWCLIPBOARDを拾っていると
エクセル等では2回程メッセージが来てしまうのですが
最初のメッセージしか拾わない方法はないでしょうか。
(APIスレで聞いた方がいい?)
450デフォルトの名無しさん:2008/12/02(火) 00:40:45
テキストとOLEのオブジェクトを別にコピーしてるからか
451デフォルトの名無しさん:2008/12/02(火) 02:36:03
>>448
1日の曜日x(0〜6)、d日は第n週目とすると
n = 1 + (d + x - 1) / 7
452デフォルトの名無しさん:2008/12/02(火) 03:17:24
つーか、曜日なんてグリニッジ天文台からの秒数で出せば
453デフォルトの名無しさん:2008/12/02(火) 11:48:08
先生方に質問です。
起動後できるだけ早いうち(たとえば10分以内とか)のアイドル時間に、
一度だけ処理をしたいときに、
アイドル状態であるかどうかを判定するには、どうすればよいですか?

キー入力があるかどうかと、マウスの移動の有無と、
CPUの処理量を調べればいいのかと思いますが、
それぞれなんというメソッドを使うのか、アドバイスをお願いします。
454デフォルトの名無しさん:2008/12/02(火) 12:23:33
System.Diagnostics.PerformanceCounter
455デフォルトの名無しさん:2008/12/02(火) 13:40:23
Application.Idle
456デフォルトの名無しさん:2008/12/02(火) 14:42:09
>>441
もういないだろうけど。
enum Week
{
First,
Second,
Third,
Fourth,
Fifth,
Sixth
}
Week GetWeek(DateTime time, CultureInfo culture, Calendar cal)
{
DateTime firstDayOfMonth = new DateTime(time.Year, time.Month, 1);

CalendarWeekRule weekRule = culture.DateTimeFormat.CalendarWeekRule;
DayOfWeek dow = culture.DateTimeFormat.FirstDayOfWeek;

int week1 = cal.GetWeekOfYear(time, weekRule, dow);
int week2 = cal.GetWeekOfYear(firstDayOfMonth, weekRule, dow);
return (Week)(week1 - week2);
}

とか。
457デフォルトの名無しさん:2008/12/02(火) 15:07:44
恥ずかしい質問なのですが、どなたか教えて下さい
CとVB6.0の経験が少しある程度の若輩者です

この度C#でのWindowsアプリケーションを開発することになり、現在スタディ期間です
関数はClassファイルに記述し、フォーム内でクラス宣言すればいいことはわかったのですが
グローバル変数やグローバル定数を定義する場所と、対象ファイルがよく理解できません

普通にクラスファイルにグローバル値を設定し、クラス.変数(定数)のように使えばいいのでしょうか?
グローバル値を使うことが、C#で普通のことなのかそもそもわからないのですが…
それともクラスファイルに定義するのではなく、別のファイルに定義するのが一般的なのでしょうか?

本当におかしな質問で申し訳ありませんが、宜しくお願いします
458デフォルトの名無しさん:2008/12/02(火) 15:26:05
普通にクラスファイルにグローバル値を設定し、クラス.変数(定数)のように使えばいいのでしょうか?

はい
459デフォルトの名無しさん:2008/12/02(火) 16:55:17
「クラスファイル」という概念はない
変数はクラスのメンバとして宣言する
グローバル変数や定数はないと思ったほうがいい

スタディ期間がどんだけか知らんが本読むかWebサイトざーっと見れば
そんな質問しないだろってレベル
460デフォルトの名無しさん:2008/12/02(火) 17:44:02
http://www1.axfc.net/uploader/Img/so/27413.png

これどういうことですか?
編集していいの?駄目なの?
461デフォルトの名無しさん:2008/12/02(火) 17:52:26
>>459
頭の固いおバカちゃん
質問者の言いたいことをちゃんと理解してあげましょうね
462デフォルトの名無しさん:2008/12/02(火) 17:55:49
答える気の無い奴は相談スレから出てくるなよ
463デフォルトの名無しさん:2008/12/02(火) 18:34:21
流石にこれは459の言うことも間違っていないと思うが・・・
464デフォルトの名無しさん:2008/12/02(火) 18:53:09
>>457
C#では、ファイルに1つのクラスのある状態がVBのクラスモジュールに最も近い。
ただし、フォームはVisual Studioがやや特別扱いしているものの、
C#言語としては標準・クラス・フォームモジュールのような区別はない。
設計次第で好きに使え。

まああんまりstaticに溢れたVBを抜け切れていないようなコードは好まれないがな。
465デフォルトの名無しさん:2008/12/02(火) 20:12:38
全部一つのフォームクラスに突っ込めばいいよ
ファイル分けたかったらpartial class使えばOK
466デフォルトの名無しさん:2008/12/02(火) 20:16:41
…美しくないなあ…
467デフォルトの名無しさん:2008/12/02(火) 20:21:15
いくらCだVBだといっても
世間を吹いてるオブジェクト指向言語の風の匂いくらい嗅いだことあんだろ
468デフォルトの名無しさん:2008/12/02(火) 20:31:20
>風の匂い

新聞社かおのれは
469デフォルトの名無しさん:2008/12/02(火) 21:16:18
この風、オブジェクト指向じゃな
470デフォルトの名無しさん:2008/12/02(火) 21:51:57
動けばいいんだろ?
バカ丁寧に説明して理解できるレベルじゃないんだから動く方法を適当に答えてやればいいんだよ
そのうちほっといても理解できるようなことだ
それを重箱の隅をつつくような御託並べて459は本物の天狗だな
471デフォルトの名無しさん:2008/12/02(火) 21:54:02
>>470
動く方法を適当に答えてくれない人は黙っててください。ウザいだけです。
472デフォルトの名無しさん:2008/12/02(火) 21:54:59
            , ;,勹
           ノノ   `'ミ
          / y ,,,,,  ,,, ミ
         / 彡 `゚   ゚' l
         〃 彡  "二二つ
         |  彡   ~~~~ミ  
     ,-‐― |ll  川| ll || ll|ミ―-、
   /     |ll        |   ヽ
  /       z W`丶ノW     ヽ
 /        \\   / /      |
/    天      \`i / /  狗   |
473デフォルトの名無しさん:2008/12/02(火) 21:55:21
初心者スレなんだから、きちんと説明は書いとけばいい
理解するとか別の話だ
建前上の授業だけすればいいような日教組じゃないんだから
474デフォルトの名無しさん:2008/12/02(火) 21:59:32
学生とかならいいけどさぁ
業務でスタディ期間とか言ってるタコになんかしてやる必要あんの?
そのコストは会社が払うべきじゃないのかなぁ
475デフォルトの名無しさん:2008/12/02(火) 22:07:40
お前がそんな心配する必要は無いんだよ
476デフォルトの名無しさん:2008/12/02(火) 22:08:26
>>474
なんでここに居るの?
477デフォルトの名無しさん:2008/12/02(火) 23:14:34
データセットの使い方を勉強中なのですが、型付きデータセットを作っても、
2台のPCの内、片方にはなぜかツールボックスに型付きデータセットが追加されません。
試しに新しいプロジェクトを作ってすぐにデータセットを追加して、空のデータテーブルを
置いてビルドした時点で、片方はツールボックスに表示されるのに、片方は
追加されません。
何かツールボックスの表示の設定とかが有るのでしょうか?
478477:2008/12/02(火) 23:20:43
あ、ツールボックスに表示されるのは、最低限、空のフォームを作って、
その画面デザイナを表示した時ですね。
その時にツールボックスに出るはずの型付データセットが表示されません。
479デフォルトの名無しさん:2008/12/03(水) 00:39:36
英語でもいいよ
480デフォルトの名無しさん:2008/12/03(水) 01:01:09
asp.netでWEBアプリを作成しています。
DBからデータを取得しDataSetに格納しているのですが、そのデータはアプリ起動中の間保持したいと考えております。


1.カプセル化し静的に保持する

2.Session、またはCacheを使い保持する

二通り考えていますが、どちらを使った有効性が高いでしょうか?また別の方法で良い方法はありますか?

ちなみに返されるデータの量は、テーブル数5、各20フィールド程です。
またマスターテーブルですので、テーブル内容の変更は基本的にありません。
481デフォルトの名無しさん:2008/12/03(水) 06:03:51
>>480
キャッシュに保持するのが楽。
482デフォルトの名無しさん:2008/12/03(水) 07:54:11
CacheってViewStatとは違うの?
483デフォルトの名無しさん:2008/12/03(水) 09:11:40
全然違う!
484デフォルトの名無しさん:2008/12/03(水) 10:28:45
>>454
ありがとうございました。
NextValue()で値を取るんですね。
485デフォルトの名無しさん:2008/12/03(水) 11:26:18
C# 2.0 で質問です。

今までVB6とかである数値のビットが立っているかどうかは

8 and 2
8 and 4
みたいな感じでそれぞれの結果が 2,4 が返るとビットがON 0の場合ビットがOFF
と判定していたのですが

C#だと
8 & 2
8 & 4
のように記述し、それぞれの結果が 2,4 が返るとビットがON 0の場合ビットがOFF
と言うように考えていいのでしょうか?
それとも何か他のC#風のやり方というのがあるのでしょうか?

ご存知の方よろしくお願いします。
486デフォルトの名無しさん:2008/12/03(水) 11:33:19
それでいい
487デフォルトの名無しさん:2008/12/03(水) 11:35:31
>>486

サンクスです。
安心したw
488デフォルトの名無しさん:2008/12/03(水) 14:41:24
class A{
int hoge;
}

class B{
A m_a;
public B(){
}
public RenewA(){
m_a = new A();
}
public GetA(){
return m_a;
}
}

class C{
List<A> m_listA;
}

Bはメンバ変数としてAのインスタンスを持っており、時々中身がRenewメソッドで変更されます。
CのメンバであるAのリストは、BのGetAメソッドで時々もらって集めたものです。

クラスというのは参照型なので、
Cのリストに入っているAのインスタンスたちは
Bのメンバm_a参照ということになり、
Bでm_aが新調されると、Cのリストの中身は全部入れ替わってしまうのでしょうか?
それとも、CのリストはBからGetした段階でのAの別個のインスタンスが保持されるのでしょうか?
489デフォルトの名無しさん:2008/12/03(水) 14:52:24
参照してるのはnew A()で作られたインスタンスであってm_aなんてメンバ変数ではない
490デフォルトの名無しさん:2008/12/03(水) 15:04:57
こういうときこそ鯛焼きで説明ですね。
491デフォルトの名無しさん:2008/12/03(水) 15:39:11
>>489
そうですか。わかりました。ありがとうございます。

すいませんがもう一つ質問です。
LinkedListでもっている構造体を一個ずつ走査して
必要なら中身を書き換えたいです。

foreach(StructHoge hoge in hoges)
{
hoge.age = 10;
}

上みたいに書いたら
foreach 繰り返し変数' であるため、このメンバを変更できません
とエラーが出ました。

クラスだったら上記のようにして内容を書き換えられるとは思うのですが
構造体の場合はどうやって書いたらいいのでしょうか?
492デフォルトの名無しさん:2008/12/03(水) 16:05:33
構造体を使わない

どうしてもってんならノード一つずつ辿ってって
ひとつ前に新しい構造体を挿入して現在のノードを削除の繰り返し
493デフォルトの名無しさん:2008/12/03(水) 16:07:08
>>491
static IEnumerable<LinkedListNode<T>> GetNodes<T>(LinkedList<T> list) {
LinkedListNode<T> node = list.First;
while (node != null) { yield return node; node = node.Next; }
}

foreach(LinkedListNode<StructHoge> hogeNode in hoges) {
StructHoge hoge = hogeNode.Value;
hoge.age = 10;
hogeNode.Value = hoge;
}
foreach使うならこういう小細工が必要
494493:2008/12/03(水) 16:08:13
間違い
foreach(LinkedListNode<StructHoge> hogeNode in GetNodes(hoges)) {
495デフォルトの名無しさん:2008/12/03(水) 16:08:27
>>492
そうですか・・・わかりました。ありがとうございました。
496デフォルトの名無しさん:2008/12/03(水) 16:10:35
構造体とクラスって同じなのに文法上で分かれてる意味がわからん
497デフォルトの名無しさん:2008/12/03(水) 16:11:29
>>493
なんだLinkedListNode<T>.Valueは{get;set;}だったのか……
ヘルプのサマリに
>ノードに格納された値を取得します。
て書かれてたから{get;}かと思った
498デフォルトの名無しさん:2008/12/03(水) 16:16:09
>>493
foreachならってことですが、
他の書き方ならもっと簡単にかけるんでしょうか?
よかったら参考に教えてください。
499デフォルトの名無しさん:2008/12/03(水) 16:18:20
>>498
いやGetNodesのwhileの中にforeach内の処理を書くことになるだけ
GetNodesは使い回せるからforeachの方が簡単
500デフォルトの名無しさん:2008/12/03(水) 16:26:58
>>498
static void ModifyValues<T>(this LinkedList<T> list, Func<T, T> modify) {
var node = list.First;
while (node != null) { node.Value = modify(node.Value); node = node.Next; }
}

list.ModifyValues(hoge => { hoge.age = 10; return x; });
こういうのもアリ
501500:2008/12/03(水) 16:31:07
また間違えた
hoges.ModifyValues(hoge => { hoge.age = 10; return hoge; });
502デフォルトの名無しさん:2008/12/03(水) 16:33:06
おちつけw

503デフォルトの名無しさん:2008/12/03(水) 16:37:23
>>496
C#だとぜんぜん違うよ。
504デフォルトの名無しさん:2008/12/03(水) 16:51:02
>>499-501
なるほど。なにかと構造体だと面倒なんですね。勉強になりました。
ありがとうございました。
505デフォルトの名無しさん:2008/12/03(水) 17:40:39
FrameWork 2.0 C# のWindowsアプリ環境で質問です。

DataGridViewを使用する際に
綺麗に枠線を出したいと思っているのですが

GridColorプロパティでセルの部分の枠線の色は変更できるのですが、
行ヘッダと列ヘッダの枠線を同じ色にできないためちょっと見た目の悪いグリッドになって困っています。

FlexGridのように綺麗にヘッダからグリッドへと繋がる線を標準機能で設定することはできませんか?
出来ないのであれば自前でオーバーライドして線を描画するしかないと思っているのですが・・・

出来ればFA環境で使いたいのであまり自前で処理して遅くなるのは避けたいなぁ…と
この辺りはテクノニックの問題だとは思いますがorz

よろしくお願いいたします。
506デフォルトの名無しさん:2008/12/03(水) 21:34:07
テクノニック・・・だと?
507デフォルトの名無しさん:2008/12/03(水) 21:36:22
うほっ
508デフォルトの名無しさん:2008/12/03(水) 22:15:54
YMO
509デフォルトの名無しさん:2008/12/03(水) 23:50:17
VS2005で作ったWebサービスを動かしているのですが、わからないエラーが出たので教えて下さい。
・C#のクライアントからWebサービスにアクセス
・Webサービスの動作にエラーは無しで処理も完了している
・クライアント側で、Webサービス呼び終わって結果が帰ってきた直後にエラー発生
・Webサービスは WebService( ref ReqestAndResponse obj )のように、リクエストが含まれるオブジェクトにレスポンス
 情報を付加して返す
・ReqestAndResponseは、メンバ変数の末端はlong、string等で構成されており、
 通常(当たり前ですが)XmlSerializerでシリアライズ/デシリアライズできる

出たエラーは以下です。

System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
 場所 System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
 場所 System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
 場所 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
 場所 WebService( ReqestAndResponse& obj ) ←Webサービスのメソッド
 場所 ClientMethod() ←クライアント側メソッド

XMLとして解析できない変なコードや文字がオブジェクトに含まれたのかなぁと思うのですが、.NETのWebサービスは
SOAPにする際に中身の文字列をちゃんとエスケープしてくれるはずなので、それも違うのかなぁと悩んでいます。
再現もできない状況です。
どなたかわかるかた、教えていただけると助かります。
よろしくお願いします。
510デフォルトの名無しさん:2008/12/04(木) 00:02:38
例外の名前が見当たらないが。
たぶん例外よく見りゃわかるんじゃね?
511デフォルトの名無しさん:2008/12/04(木) 00:20:06
StackTraceの中身だけ出力してるようで、何Exceptionが発生したのか
という情報は無いのです
512デフォルトの名無しさん:2008/12/04(木) 00:21:47
場所がわかってるなら拾えないの?
513デフォルトの名無しさん:2008/12/04(木) 00:29:15
オーバーライドしたいのでやり方おしえてくださいな
514デフォルトの名無しさん:2008/12/04(木) 00:48:30
誰かできるなら
C#になおして…

Option Explicit
Const rmax = 100
Dim r As Integer
Dim xl As Single, xr As Single
Dim yt As Single, yb As Single
Dim Stopped As Boolean

Private Sub Form_Load()
r = rmax
lblR = "半径 : " & r
With hscR
.Max = rmax
.Min = 10
.Value = r
End With
End Sub

Private Sub Form_Resize()
Init
End Sub

515デフォルトの名無しさん:2008/12/04(木) 00:51:12
誰かできるなら
C#になおして…


Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
mnuExe_Click
End Sub

Private Sub hscR_Change()
r = hscR
lblR = "半径 : " & r
Init
End Sub

Private Sub mnuEnd_Click()
End
End Sub







516デフォルトの名無しさん:2008/12/04(木) 00:52:14
誰かできるなら
C#になおして…
Sub Init()
Dim ratio

ScaleMode = 3
ratio = -ScaleWidth / ScaleHeight
yt = 240: yb = -240
ScaleTop = yt
ScaleHeight = yb - yt
ScaleWidth = ratio * ScaleHeight
xl = -ScaleWidth / 2: xr = -xl
ScaleLeft = xl

Cls
FillStyle = 0
Circle (0, 0), r, RGB(255, 0, 0)
FillStyle = 1
DrawStyle = 2
Circle (0, 0), rmax, RGB(255, 0, 0)
DrawStyle = 0
Stopped = True
End Sub





517デフォルトの名無しさん:2008/12/04(木) 00:54:59
誰かできるなら
C#になおして…

Private Sub mnuExe_Click()
Dim y As Single

Stopped = False
For y = 85 To 5 Step -10
DrawLine y
Next
End Sub

518デフォルトの名無しさん:2008/12/04(木) 00:56:27
誰かできるなら
C#になおして…

Sub DrawLine(y0 As Single)
Const Ze = 700, dt = 1
Dim x As Single, y As Single
Dim xx As Single, yy As Single
Dim vx As Single, vy As Single
Dim vxx As Single, vyy As Single
Dim d As Single, f As Single
Dim x1 As Single, y1 As Single

519デフォルトの名無しさん:2008/12/04(木) 00:58:07
これ何が流行ってるんだ
520デフォルトの名無しさん:2008/12/04(木) 01:00:58
>>512
再現しないのです
ので、このエラーなら多分これだよというのがあれば、
それを試して再現させたいのです
521デフォルトの名無しさん:2008/12/04(木) 01:03:04
>>514-518
才能ねーよ。プログラム辞めた方がいい。

答えが欲しければ宿題スレでやって下さい。
ぞんざいな聞き方じゃ殴られるから丁寧に質問するように。

C#,C#の宿題片付けます。
http://pc11.2ch.net/test/read.cgi/tech/1197620454/
522デフォルトの名無しさん:2008/12/04(木) 04:02:31
ダブルバッファリング(以下、DB)ってtrueの方が描画処理が早いんですか?
523デフォルトの名無しさん:2008/12/04(木) 04:18:20
>>514-518
死ね
524デフォルトの名無しさん:2008/12/04(木) 07:47:01
>>522
一概にそうでもないと

むしろちらつきを抑えるための技術だし
525デフォルトの名無しさん:2008/12/04(木) 09:19:07
>>520
ふつうにXmlExceptionじゃないかなとは思うが
XmlException を使用した XmlTextReader の例外処理
http://msdn.microsoft.com/ja-jp/library/ch49a7ch(VS.80).aspx

catchしてるなら例外の名前分かるはずだけど。

Deserializeで発生しうる例外:
ThreadAbortException
StackOverflowException
OutOfMemoryException
TargetInvocationException
InvalidOperationException
526デフォルトの名無しさん:2008/12/04(木) 09:25:25
>>513
class BaseClass
{
    public virtual void Method1()
    {
        ...
    }
}

class InheritClass : BaseClass
{
    public override void Method1()
    {
        ...(継承クラスでの処理)...
            
        // ベースクラスでの処理を継続したいなら
        base.Method1();
    }
}
527デフォルトの名無しさん:2008/12/04(木) 10:04:14
【国籍法改正】 5日に成立、「DNA鑑定」は民主党が拒否…数万人に日本国籍取得の道★12
http://mamono.2ch.net/test/read.cgi/newsplus/1228350598/


                     ''';;';';;'';;;,.,    ニダ・・・
                       ''';;';'';';''';;'';;;,.,   ニダ・・・
     やっとやっと国籍法ニダ   ;;''';;';'';';';;;'';;'';;;   
                        ;;'';';';;'';;';'';';';;;'';;'';;;      レイープさせろニダ
                        vymyvwymyvymyvy、
     日本に住んでやるニダ   MVvvMvyvMVvvMvyvMVvv、  参政権もよこすニダ
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
    謝罪しろニダ       ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ      
   賠償しろニダ __,.ヘ /ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ ウリは武装スリをするニダ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\ ニダニダ
  . |  \丶,  、/、 ...:| \,    .|  \,   、/ 、.:|、/ |  \,   、/  、.:|  
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,,  .::| 
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::|
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/  ウェーッハッハッハッハ!!
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\

民主は「売国党」。
528デフォルトの名無しさん:2008/12/04(木) 13:16:48
C++趣味グラマからC#趣味グラマへ引越し中です。

C#にはシステムメニューを扱うクラス・方法は無いのでしょうか。
1項目加えたいだけなのですが、調べてみても自前で
[DllImport("user32.dll")] でextern GetSystemMenu() や AppendMenu()
みたいのしか無いような。
選択した際の処理は、override WndProc() でやっぱりC++みたいに?

何か常識的なやり方があったら教えてください。
529デフォルトの名無しさん:2008/12/04(木) 13:30:05
>>514-518

がんばれ。がんばれ。やればできる。絶対できる。絶対できるよ。

ああ”あ”あーー!!1
530デフォルトの名無しさん:2008/12/04(木) 13:34:08
>>528
それでいい
まあcodeprojectとか探せばライブラリ化してる人もいるかも知れんけどどうかな
531デフォルトの名無しさん:2008/12/04(木) 13:49:21
>>530
ありがとうございます。
難しい事をやろうとしてるわけではないので、
SDKのWinUser.h見ながら頑張ります。
532デフォルトの名無しさん:2008/12/04(木) 15:08:02
>>505
DataGridViewのヘッダ枠線の色をセルに合わせる方法
1.ColumnHeadersBorderStyleプロパティをSingle
2.RowHeadersBorderStyleプロパティをSingle
3.EnableHeadersVisualStylesプロパティをfalse
533デフォルトの名無しさん:2008/12/04(木) 15:26:38
>>532
おぉぉ!!!!!!!!
出来ました!
それも簡単に

EnableHeadersVisualStyles がポイントのようですね。
ちょっと詳しく調べますが 助かりました。
ありがとうございました。
534デフォルトの名無しさん:2008/12/04(木) 16:26:55
535デフォルトの名無しさん:2008/12/04(木) 18:03:37
まじでエラーログにスタックトレースだけ出してるシステムとか
Messageとスタックトレースだけ出してるシステムとか見るんだが、
単にToStringの方がシンプルかつほぼ必要な情報をみんな出してくれるのに、何なんだろうね。
536デフォルトの名無しさん:2008/12/04(木) 20:16:22
ListViewで、項目名を編集中にIMEモードを変更したとき、編集が終わると、
IMEモードが編集前のものに戻ってしまいます。
これを戻さないようにはできないのでしょうか?

ImeModeChangedイベントも編集中はイベント発行がされないようでした。
例えば、日本語入力ONの状態で編集に入り、編集中に日本語入力OFFにしても、
AfterLabelEditイベントでの ListView.ImeMode = On になっている状態です。
537デフォルトの名無しさん:2008/12/04(木) 20:21:52
Marshal.StringToHGlobalAnsi で得られたAnsi文字列のサイズ(というか確保された
アンマネージドなメモリのサイズ)を調べる方法ってありますか?
538デフォルトの名無しさん:2008/12/04(木) 20:29:41
>>536
編集中はListViewの内部コントロール(TextBox?)がフォーカス取ってるからじゃないの?
そうなら内部コントロールの参照を何とかして持てば解決できるんじゃない?
539デフォルトの名無しさん:2008/12/04(木) 20:33:39
>>537
str.Length + 1バイト
540デフォルトの名無しさん:2008/12/04(木) 20:39:08
>>539
str をANSI変換して、マルチバイトが含まれてたらそれだとまずいので質問したのですが。
541デフォルトの名無しさん:2008/12/04(木) 20:47:47
>>538
ありがとうございます。
内部コントロールへのアクセスは、やはりカスタムコントロールを作るとかしないと無理ですか?
542537:2008/12/04(木) 20:55:48
とりあえず API の lstrlenA 使って済ます事にしました。

[DllImport("kernel32", EntryPoint = "lstrlenA")]
private static extern int lstrlenA(IntPtr str);
543デフォルトの名無しさん:2008/12/04(木) 21:02:05
GetByteCount + 1
とか?
544デフォルトの名無しさん:2008/12/04(木) 22:22:20
>>541
カスタムコントロールというか、ListViewを派生していろいろやらないとダメだろうね。

ちょっとやってみたところEN_SETFOCUSでEditBoxのハンドルが取れるんだけど、
なぜかこのハンドルからはControl.FromHandle()で参照を取れないから
直接Win32APIでやるしかなさそうで面倒臭そう。
545デフォルトの名無しさん:2008/12/04(木) 22:32:44
>>544
どうもです。なんだか難しそうですね…
全然わからんので、色々調べながらやってみます。
546デフォルトの名無しさん:2008/12/05(金) 06:49:53
大学内にて、ユーザー名とパスワードによる認証が必要な共有フォルダ
\\HogeServer\HogeHoge
に現在接続しているか否か(net use で表示される状態か)
を確認する手段を模索しています

そのフォルダに普通にアクセスして例外が返ってきたら
未接続であると見なそうと考えていたのですが、レスポンスが悪いので
Directory.Exists を使ってみました
この時 Directory.Exists だとダメなケースなどありますでしょうか
よろしくお願いします
547デフォルトの名無しさん:2008/12/05(金) 10:36:50
正規表現について教えてください。○のみを抜き出したいと思っています。

×(1)前髪をカットする
×(2)カットをする
×(3)ショートにカットする。
○(4)カットで尋ねる。
×(5)ヘアカット方法を知る。

[に]*カット[を]*[(方法)]*[(する)]*[。]*
でよいかと思ったら、(4)以外もヒットしてしまうようです。
ご助言お願いします。
548デフォルトの名無しさん:2008/12/05(金) 10:44:48
>>547
正規表現の問題ではないと思いますが。
(4)だけにマッチさせるだけなら、
new Regex("カットで尋ねる。")
ですみますが、そんなことがやりたいわけじゃないでしょう?
549デフォルトの名無しさん:2008/12/05(金) 10:52:24
>>548
早速ありがとうございます。
そうでした。
プログラムとデータをじっくり見たら、
○(6)カット
としたいのでした。
550デフォルトの名無しさん:2008/12/05(金) 11:02:41
いやいや、あなたの欲しい条件分かんないからw
551デフォルトの名無しさん:2008/12/05(金) 11:03:49
何の説明にもなってないだろ
前にどんな言葉があったら駄目なのか後ろにどんな言葉があったら駄目なのか
552デフォルトの名無しさん:2008/12/05(金) 13:44:13
つまりは正規表現がわかってない
553デフォルトの名無しさん:2008/12/05(金) 13:57:41
文章でいいから、自分が抜き出したい条件をじっくり箇条書きにでもしてみ。
その条件で本当に抜き出したい物だけを特定できるのか考えて。
そしたらそれをそのまま正規表現にすればいい。
554デフォルトの名無しさん:2008/12/05(金) 16:56:49
WebBrowserの操作で質問です。
ttp://jp.youtube.com/
YouTubeの検索ボタンを自動でクリックする方法を教えていただけませんか?

InvokeMemberで出来ると思ったんですがCSS作られているのでよくわかりませんOrz
よろしくお願いします。
555デフォルトの名無しさん:2008/12/05(金) 17:27:52
整理できてきました。
×を排除したいのでした。それならオーケー?
結果として○のみを抜き出すことになります。
排除したい条件は今後増える可能性があり、比較的条件を明示しやすいので、○のみを抜き出すのではなく、×を排除する、という条件を正規表現で書きたいです。

×(1)前髪をカットする
×(2)カットをする
×(3)ショートにカットする。
○(4)カットで尋ねる。
×(5)ヘアカット方法を知る。
○(6)カット。

[に]*カット[を]*[(方法)]*[(する)]*[。]*
556デフォルトの名無しさん:2008/12/05(金) 17:30:21
>>555
全然条件を示せてない
>>553
557デフォルトの名無しさん:2008/12/05(金) 17:38:38
自分ルールで[]や()の記号を使うなら
その記号の意味も書けよ。
558デフォルトの名無しさん:2008/12/05(金) 17:40:23
正規表現どころか俺DSLにしか見えないんだが
559デフォルトの名無しさん:2008/12/05(金) 17:51:56
なぜカットをするがだめでカットに尋ねるがOKなのか全く分からないな
560デフォルトの名無しさん:2008/12/05(金) 17:57:39
「カット」の直後に「を」があるとダメなんだろう、たぶん。
561デフォルトの名無しさん:2008/12/05(金) 18:06:18
>>555
そもそも何をしたいのかよく分からない。
仮に自由な文字列が入っている可能性があって、さらにマッチさせたい条件そのものも変更するとか言うんだったら
もうそんな設計見直せとしか言えない
562デフォルトの名無しさん:2008/12/05(金) 18:20:06
自然言語処理の課題かなにかなのかな。
それとも顧客から来たメールの内容を自動判別するようなアプリケーション?
前者ならもう少し自分でがんばれっていいたくなるところだし、
後者なら内容を大まかに表すリストと、フリーフォームのテキストボックスを用意して
入力するようにしてもらえばやりたいことができる気がする。
563デフォルトの名無しさん:2008/12/05(金) 18:30:48
例文は、自由な文字列から抜き出した実例です。
○のものを使いたい、×のものは使いたくない。
それ以上どう整理しろっておっしゃるのでしょう?

すでに自由な文字列があり、そこから抜き出す条件を書くとしたら、ある程度の条件を書き、条件に合わないときには、条件を適宜追加する以外にないと思うのだけど。
この方針でないとしたら、見直してどうすればいいですか?
すべての可能性をあらかじめ予期するのは無理だし。
564デフォルトの名無しさん:2008/12/05(金) 18:34:59
じゃあ正規表現で扱うのは無理だろ
カットで尋ねる。
が駄目でも
カットで尋ねる人
やら
カリカットで尋ねる。
ならOKになる可能性があるんだろ?
565デフォルトの名無しさん:2008/12/05(金) 18:37:50
>>563
意味分からん
なぜ〇にしたか、なぜ×にしたかの理由を書けって言ってるんだ
つーかC#と関係ないだろ
566デフォルトの名無しさん:2008/12/05(金) 18:37:52
じゃ、俺の解釈。
"[にを]" にマッチするものを除外する。
567デフォルトの名無しさん:2008/12/05(金) 18:38:51
>>563
> 例文は、自由な文字列から抜き出した実例です

そもそもどういう条件の元で抜き出したんだよ
お前はどう判断して例文に○と×をつけたんだ
そこがまさに正規表現のパターンそのものになるんだろうが。
568デフォルトの名無しさん:2008/12/05(金) 18:41:09
皆さんが書いてるように
○と×の判定基準を示さないと判らないよ。

書いてること理解できますか?
569デフォルトの名無しさん:2008/12/05(金) 18:53:51
俺予想
!Regex.IsMatch(input, "(ヘアカット|カットを?する)");
570デフォルトの名無しさん:2008/12/05(金) 19:22:11
GUIでなかったアプリをGUI化しないといけないんですが、

今までC/C++で書いてきた関数を使いたい
GUI部分の作成が楽といわれるC#を使いたい


という2つがあるんですが、

GUIだけC#で作って、C/C++の関数を呼び出すということは可能ですか?
571デフォルトの名無しさん:2008/12/05(金) 19:26:09
できるけどそれが楽かっつーと微妙
572デフォルトの名無しさん:2008/12/05(金) 19:26:34
dll化してC#からDllImportで使う
コマンドライン操作できるようにしてProcess.Start辺りから使う
って所か?

っていうかC++CLIにしたら良いんじゃねーかと思うけど
573デフォルトの名無しさん:2008/12/05(金) 19:27:17
C#から P/Invoke で直接呼び出すか、
C++/CLI でラッパーDLLを作り、それをC#から呼ぶと良い。
574デフォルトの名無しさん:2008/12/05(金) 19:29:13
いやフォームデザイナが使いたいだけなら、
C++/CLIでラッパーなんか作る必要ないだろ。
575デフォルトの名無しさん:2008/12/05(金) 19:33:58
C++のクラス使ってるかもよ
となるとやはりC++/CLI一本で作成だな
たしかフォームデザイナも使えたよね
576デフォルトの名無しさん:2008/12/05(金) 20:37:37
>>307
TextBox1 + TextBox2ですが、
TextBox1 = 200 TextBox2 = 300として
二つを足し算したら200300と出てきましたょ。
まだまだです。
577デフォルトの名無しさん:2008/12/05(金) 21:11:27
>>575
C++/CLI使ったことないでしょ
フォームデザイナ,あれはおまけ
578デフォルトの名無しさん:2008/12/05(金) 21:17:46
http://opencv.jp/sample/estimators.html

このサイトに載っているサンプルプログラムをテキストにコピーすると改行されずズラーっと表示されてしまうんですけど、
これはなぜですかね?解決策があれば教えていただきたいです。
579デフォルトの名無しさん:2008/12/05(金) 21:22:46
ここはC#のスレ
VC++に貼り付けたらちゃんと改行されたが
580デフォルトの名無しさん:2008/12/05(金) 21:26:50
間違えました、すみません・・・
VC++に貼り付けても改行されないんです。不思議だ。
581デフォルトの名無しさん:2008/12/05(金) 22:43:30
>>577
言語自体は触ってるが確かにデザイナを使ったことはないな
そんなにひどいのか
582デフォルトの名無しさん:2008/12/05(金) 22:58:15
・C++/CLIでクラスライブラリ
・C#でフォームアプリ

の2プロジェクト構成にすればいいだけじゃん
583デフォルトの名無しさん:2008/12/05(金) 23:34:30
C#で
IEを起動する。
HPの移動のアドレスを監視し
特定のページに来たとき(ヤフーのログイン画面など)
パスをテキストボックスに自動入力するツールを作りたいです。

まずはじめにログイン画面でテキストボックスのnameの値を見て
値をいれるようなクラスはありますか?
584デフォルトの名無しさん:2008/12/05(金) 23:47:56
んな至れり尽くせりなもんがあるかよ

↓読んでIHTMLDocument2取ってくれば実装は可能
http://www.usefullcode.net/2006/12/ieihtmldocument2.html

理解できないなら無理だから諦めろ
585デフォルトの名無しさん:2008/12/06(土) 01:46:56
>>583
試してないけどこれ使えるかも

Internet Explorer 相互運用性の技術サンプル
http://msdn.microsoft.com/ja-jp/library/a7f97x5e.aspx
586デフォルトの名無しさん:2008/12/06(土) 04:38:51
>>555
前髪をカットする
カットをする
ショートにカットする。
ヘアカット方法を知る。

の4つを省けばいいだけじゃないの?
無理に条件を絞る必要ないと思うし、本人もそう言ってる気がするんだけど…。

関係ないけど、「カットで尋ねる。」ってどこの日本語?
587デフォルトの名無しさん:2008/12/06(土) 08:39:52
>>583
BHO
588デフォルトの名無しさん:2008/12/06(土) 10:48:56
>>555は、(1)がなぜ×なのか、(2)がなぜ×なのか、(3)がなぜ・・・
(4)がなぜ○なのか、以下同様

の説明が全然できてない。
589デフォルトの名無しさん:2008/12/06(土) 11:16:17
毎回「これは○ですか×ですか」ってダイヤログを出す
インタフェースを作るのが正解だったりしてw
590デフォルトの名無しさん:2008/12/06(土) 11:19:40
ファジーだとかの学習機能をつんでおいて
最初は>>589みたいに振り分けていけば
いつかは学習してくれて、自動で○×つけてくれる。
ってどうでしょうか?
591デフォルトの名無しさん:2008/12/06(土) 12:45:01
中の人にあんまり仕事させるなよ
592デフォルトの名無しさん:2008/12/06(土) 12:48:59
適用するならファジーじゃなくて、同じ時期に流行ったニューラルネットワークの方でしょ。
しかしニューラルネットって最近全く聞かんな。
593デフォルトの名無しさん:2008/12/06(土) 14:33:20
すみません、キャストについて教えて下さい。
MasterPageを使用するWebPageを作っていますが、

'System.Web.UI.MasterPageクラス
'└OriginalMasterPageクラス
'  + public int hogehoge;
'
'System.Web.UI.Page
'└OriginalUIPage
' └画面1
' └画面2
'  :

となっていて、OriginalUIPage内からhogehogeに値をセットしたいんです。
ただ、OriginalUIPage内では "this.Master" は System.Web.UI.MasterPage
クラスとして見えているので、無理矢理 "OriginalMasterPage" にキャスト
して

((OriginalMasterPage)Master).hogehoge = 10

としてもいいんでしょうか?
一応Buildも通るし、それっぽく動作している様なんですが。
無理矢理異なる型にCastする事になんとなく危険な感じがするんです。
594デフォルトの名無しさん:2008/12/06(土) 14:38:52
Masterが常にOriginalMasterPageだとわかっているなら問題ない
まあ子が親の特別な型に依存するような設計はあんまり良くないけど
それよりもpublicフィールドやめよう
595デフォルトの名無しさん:2008/12/06(土) 14:41:54
>>555 >>563
>すでに自由な文字列があり、そこから抜き出す条件を書くとしたら、
>ある程度の条件を書き、条件に合わないときには、条件を適宜追加する以外にないと思うのだけど。
>この方針でないとしたら、見直してどうすればいいですか?
>すべての可能性をあらかじめ予期するのは無理だし。

機械的にプログラムでやるのは無理です、って言ってるようなもんじゃん。
>>555の最下行の暗号を文章で書いてみろよ。
・カットの前が「に」なら×
・カットの後ろが「を」なら×
とかさ。
これが「ある程度の条件」だよ。
コンピュータ君はコレに当てはまるかどうかを判断するしかできないないわけで、
実例出されて「こんなふうに」と言われても煙吐きます。
596デフォルトの名無しさん:2008/12/06(土) 14:55:09
>>593
is as は?
597デフォルトの名無しさん:2008/12/06(土) 15:05:07
>>593
webプログラミングやったことないんでよー知らんけど、普通に

(1) OriginalUIPageのコンストラクタでOriginalMasterPageを引数にとるようにする。

(2) OriginalUIPageでは、Masterをnewでシャドウしてコンストラクタでもらった
  OriginalMasterPageを返すようにするか、OriginalMasterPageを取得する別の
  プロパティを追加する。

みたいな感じにできんの?
598デフォルトの名無しさん:2008/12/06(土) 15:26:13

小沢民主党の根本は 「官僚に搾取されてナイナイナイナイと催眠にかけられてしまって
いる財源は、実はその悪党官僚搾取予算をやめれば6兆円を浮かせて出せるのだ!」
「無いんじゃないんです!」 ということを言ってるのです。

小沢さんへの薄汚い、意図的な人格攻撃、HateSpeechばかり自民党工作員は貼り付けますが、
あれは全部為にする攻撃でしかありません。

たとえば、この中でまずは 19:00 ぐらいから聴いてみてください。財源の件への質問に
対してしっかりと答えています。この意気込みをみれば、国民は小沢代表の気迫を見て
人気が盛り上がるのは間違いありませんよ!!

【ネット中継】小沢代表記者会見 2008/09/01
http://www.dpj.or.jp/news/?num=13972

この辺をみれば、国民的人気は爆発すると思うのですが、マスコミはニュースでこの辺の
肝心なところを大きく取り上げないで来たわけです。小沢人気がなぜ低いのかの原因は、
実はそこにあったでしょう!

それから、民主党代表選挙時の記者会見!これも聴いてみてください。最後までお聴きに
なれば小沢さんがどれだけ立派な政治家なのか、認識、理解することができます。

民主党・小沢さんの国家ビジョン、日本の腐敗の極みの官僚政治をぶっ壊す!!小泉が
誤魔化しで何もしなかった、本当の改革の本丸だったもの、それこそが今なされようとして
いる、これなのです!
                ↓
【ネット中継】代表選挙立候補者記者会見 2008/09/16
http://www.dpj.or.jp/news/?num=14009
599デフォルトの名無しさん:2008/12/06(土) 15:27:52
コピペ君って馬鹿だな、まで読んだ。
600デフォルトの名無しさん:2008/12/06(土) 15:28:21
こういうのをもっとコピペ爆撃していけばIDが導入されるかもしれない
601デフォルトの名無しさん:2008/12/06(土) 16:13:59
「コピペ君って馬鹿だな、まで読んだ。」ってコピペじゃね?
602デフォルトの名無しさん:2008/12/06(土) 17:28:28
CheckedChangedとCheckStateChangedの違いがよくわからない
半チェックを評価するかしないかってこと?
603デフォルトの名無しさん:2008/12/06(土) 17:29:28
名前付きパイプの実行権限(?)について教えてください。
クラスライブラリにこんなコードを書いています。

1 public void SendPipe(string TargetPipe, Byte[] RecBytes) {
2 using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", TargetPipe, PipeDirection.InOut)) {
3 pipeClient.Connect();
4 using (StreamWriter sw = new StreamWriter(pipeClient, SJISencoding)) {
5 string RecString = SJISencoding.GetString(RecBytes);
6 sw.WriteLine(RecString);
7 }
8 }
9 }

これをWebサービスから呼ぼうとすると、3行目のConnectで
「System.UnauthorizedAccessException: パスへのアクセスは拒否されました。」
になってしまいます。
VSのデバッグページから起動したり、Winowsフォームから呼んだりするとちゃんと動くのですが・・・
ASPNETにAdministrator権限を付与しても同じでした・・・
webサービスから名前付きパイプを動かす場合なにか他に対応が必要なのでしょうか???
あまり詳しくないので適切に説明できているか判りませんが宜しくお願いします。
604デフォルトの名無しさん:2008/12/06(土) 17:30:46
作法として、enumを文字列定数代わりに使うのは、ありですか?

enum Medal { Gold, Silver, Bronze };
string prize = ((Medal)(order - 1)).ToString + " Medal";
605デフォルトの名無しさん:2008/12/06(土) 17:37:04
列挙体としての意味があれば可
enum Strings { Silver, Hello, Apple }
こういうのはダメ
606デフォルトの名無しさん:2008/12/06(土) 18:55:30
>>604
どういう意味で「作法」って言っているのかよくわからないけど、
他にもっと明示的に同じことを実現する方法があるのにわざわざenumを使うのは
合理的な選択とは思えない。
607デフォルトの名無しさん:2008/12/06(土) 19:27:35
Regex.Match(" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx", "\s+((\w+\.?)+)$")
これはすぐ処理が終了するのですが
Regex.Match(" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx,", "\s+((\w+\.?)+)$")
こっちは最後にカンマが着いているだけなのに物凄く時間がかかります
どうすれば速くなりますか?
608607:2008/12/06(土) 19:35:23
すみませんやりたいことは
"ほげほげ Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx" が "\s+((\w+\.?)+)$" にマッチするなら
((\w+\.?)+)の部分を後で別の処理に使い、マッチしないなら次に行く、というような感じです
" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx," は マッチしないので次に行ってほしいのですが、falseと判定されるまで時間がかかります
"\s+((\w+\.?)+)$" にマッチする場合 ((\w+\.?)+)の部分と同じ文字列が取得できるパターンで
上記のパターンより処理の速いものがあれば教えてください
609デフォルトの名無しさん:2008/12/06(土) 19:40:07
607が「そう」思い込んでいるだけの予感。。。
つーか8bit時代じゃないんだから処理時間なんて体感で語れないよ
610607:2008/12/06(土) 20:04:38
>>609
いえ、ほんとに遅いんです
こんな感じで試したんですが、カンマなしはなかなか応答が戻ってきません
Console.WriteLine("カンマなし");
if (Regex.Match(" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx", @"\s+((\w+\.?)+)$").Success)
{
Console.WriteLine("True!");
}
else
{
Console.WriteLine("False!");
}
Console.WriteLine("カンマあり");
if (Regex.Match(" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx,", @"\s+((\w+\.?)+)$").Success)
{
Console.WriteLine("True!");
}
else
{
Console.WriteLine("False!");
}

WindowsXPSP2 VC2008SP1 で試してます
611デフォルトの名無しさん:2008/12/06(土) 20:07:35
VC はスレ違い。
612607:2008/12/06(土) 20:10:20
すみません、VC#2008の間違いです・・・
613デフォルトの名無しさん:2008/12/06(土) 20:10:28
>>610
たった一つの文字列でその正規表現で応答が返って来ない?
ありえないな
614607:2008/12/06(土) 20:13:24
すみませんもう一つ訂正です>>610で応答がなかなか返ってこないのはカンマありのほうです
>>613
ほんとにどうしてなんでしょう・・・
615デフォルトの名無しさん:2008/12/06(土) 20:33:50
カンマ有りだとマッチが失敗するのが大きな違い。
正規表現のエンジンによっては
なかなか処理が返って来ないってことはありうる。

詳しく知りたければ再現可能なコードにして、
正規表現スレに投げるといいかも。
616デフォルトの名無しさん:2008/12/06(土) 20:35:24
正規表現って内部的には状態機械だからね。
ワーストケースでは組み合わせ論的な計算量(指数とか階上オーダー)かかる。

1つ目の方は1発マッチしてるから早くて、
2つ目の方は、マッチしないから延々総当たり探索してる状態なんでは。
617607:2008/12/06(土) 21:02:31
>>615,616
そういうものなんですね・・・
正規表現スレに行ってみます
618デフォルトの名無しさん:2008/12/07(日) 00:02:02
@ MasterType ディレクティブ
619デフォルトの名無しさん:2008/12/07(日) 01:31:18
C#でゲームを作っています。

ゲームのクラスの中に
毎フレーム呼ばれるUpdateっていうメンバ関数があるとして、
この中で一時的に計算に使うだけのために
あるクラスをnewしてたりするんですが、
それってGCの原因になるのでしょうか?

そういう場合、メンバ変数としてコンストラクタで一回だけnewしておいて、
中身を書き換えて使った方が効率がよかったりするのでしょうか?
620デフォルトの名無しさん:2008/12/07(日) 01:32:48
それが問題になるまでは気にしなくていい気がする。
621619:2008/12/07(日) 01:37:31
大きな問題であるのか、たいした問題じゃないのか、
もしくはまったくGCの理解として間違っているのか、
その辺が知りたいです。
622デフォルトの名無しさん:2008/12/07(日) 01:58:01
実際の環境で動かして問題が無ければおk
623デフォルトの名無しさん:2008/12/07(日) 01:58:32
PCでは Gen 0 世代のGCで回収されるのが期待できるため、通常気にする必要はない。
まぁ、パフォーマンス気にするなら、ちゃんとプロファイル取らないと論外。
624デフォルトの名無しさん:2008/12/07(日) 02:20:51
けど毎回newするのも効率悪い気がするなぁ。
newするコストが微々たるものなら気にしなくていいと思うけど。
625デフォルトの名無しさん:2008/12/07(日) 02:58:37
まずは率直できれいな実装で作ってみて、
よっぽど性能に問題があるようだったら、そのときはじめて高速化を考える。
626デフォルトの名無しさん:2008/12/07(日) 05:20:33
気にする気にしない、考える考えないの問題じゃなくて
物理的・理論的に毎回newするのとしないのでGCに影響があるかどうかを聞いているのに。
627デフォルトの名無しさん:2008/12/07(日) 05:27:39
GCへの影響は大なり小なりあるだろうけど
具体的にどの程度かは実装してテストしてみるまで分からんでしょ

設計段階で分かるのなんてオーダーぐらいだろ
628デフォルトの名無しさん:2008/12/07(日) 06:25:51
.NETで自動的にエンコード判別してくれるメソッド無いの?
629デフォルトの名無しさん:2008/12/07(日) 06:29:36
そのものズバリは今の所は無い
↓でも貼り付けて使え

http://dobon.net/vb/dotnet/string/detectcode.html
630デフォルトの名無しさん:2008/12/07(日) 07:14:55
なんにもnewしなければGCはおそらくおこらないし
毎回newすればGCはすぐに起こる
631デフォルトの名無しさん:2008/12/07(日) 07:37:51
XP+VisualC#2008でC#の勉強をしています。
イベントハンドラの必要性がいまいちぴんと来ていません。
ボタンにイベントハンドラを割り当ててそのイベントに機能を割り当てるのと、ボタンのクリックのメソッドに機能を割り当てるのの違いはなんでしょう?
これまでは、Formでボタンをレイアウトしてダブルクリックして自動的に記述される
private void button_Click(object sender, EventArgs e)
に書いてきたので、イベントハンドラを使ったこともないのです。
イベントハンドラが必要なことはあるのでしょうか?
イベントハンドラを使うと、得なことはあるのでしょうか?
ご教示お願いします。
632デフォルトの名無しさん:2008/12/07(日) 07:40:40
それは間接的にイベントハンドラを利用しているんだよ?
フォームデザイナの生成したコードを見ると
イベントにデリゲート追加してる箇所があるはずだ
633デフォルトの名無しさん:2008/12/07(日) 09:05:53
ラムダ式に[Serializable]属性は付けられないのでしょうか?
634デフォルトの名無しさん:2008/12/07(日) 09:17:42
>>631
試しにそのメソッドを削除してビルドしてみれば、隠れたイベントハンドラの存在がわかるだろう。
635デフォルトの名無しさん:2008/12/07(日) 10:49:17
>>633
デリゲートはもともとSerializableだよ
636デフォルトの名無しさん:2008/12/07(日) 10:53:26
>>635
ラムダ式で暗黙に作られる匿名クラスもSerializableですか?
637デフォルトの名無しさん:2008/12/07(日) 10:56:12
いいから試せばわかる
638デフォルトの名無しさん:2008/12/07(日) 10:59:11
外の変数を取り込んだらダメみたいだな
当たり前のことだから引数に渡すとか工夫しろ
639デフォルトの名無しさん:2008/12/07(日) 11:02:04
仮想関数を一個持つabstractクラスを作りましたよ、ええ
嫌々ですけども
640デフォルトの名無しさん:2008/12/07(日) 13:16:28
>>631
Click += button_Click;
あるだろ。
そのbutton_Click()はいつ動いてると思ってるんだ。
641デフォルトの名無しさん:2008/12/07(日) 13:36:02
名前で判断してリフレクションで代入することもできるけどね
WPFはそうやってたはず
642デフォルトの名無しさん:2008/12/07(日) 13:40:13
button_Clickという名前だからbutton.Clickに対するイベントハンドラだ
というようにWPFが処理してるわけじゃないよ
ただリフレクションを使ってると言いたかっただけ。念のため。
643デフォルトの名無しさん:2008/12/07(日) 15:38:24
今売れに売れてる一押しのデザインパターン教えてください
644デフォルトの名無しさん:2008/12/07(日) 16:03:32
GOFならStrategy
645631:2008/12/07(日) 16:05:49
>>みなさま
ありがとうございます。
646デフォルトの名無しさん:2008/12/07(日) 16:08:26
Observer超オヌヌメ
647デフォルトの名無しさん:2008/12/07(日) 16:41:43
インテリセンス日本語化きてんじゃんか
おまえら知ってたならおしえろよな〜
648デフォルトの名無しさん:2008/12/07(日) 16:48:50
C#を使っているなら
イベント=Observer
foreach=イテレータ
649デフォルトの名無しさん:2008/12/07(日) 17:13:15
TextBoxのTextデータを更新するたびに、毎回スクロール位置が一番上にいってしまいます。
これを、例えば中間の位置に移動していた状態で、Textデータを更新しても
位置が移動しないようにするにはどのようすればいいでしょうか?

間違っているかもしれませんが、今考えている方法は、
現在のスクロール位置を取得し、Caretをその位置まで移動し、
Textデータ更新後にScrollToCaret()で移動するのかと思っています。
ただ、現在のスクロール位置の取得方法などが解からないので困っています。

他の方法でもかまいません。よければご存知の方教えてください。
650デフォルトの名無しさん:2008/12/07(日) 17:39:18
インテリセンス日本語化のページの日本語が壊れまくってて入れるのが怖い
651デフォルトの名無しさん:2008/12/07(日) 17:56:59
>>647
わざわざこっちにも貼りに来てたのにお前ときたら・・>>73
652デフォルトの名無しさん:2008/12/07(日) 19:26:42
>>649
これで一応できたよ。
Win32に詳しくないのでベストな方法かどうかは自信ない。

  public class TextBoxEx : TextBox
  {
    public void SetText(string text)
    {
      int topLine = GetFirstVisibleLine;
      this.Text = text;
      VerticalScroll(topLine, true);
    }

    public int GetFirstVisibleLine
    {
      get {return SendMessage(this.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);}
    }

    public bool VerticalScroll(int lineCount, bool scrollsToDown)
    {
      if (!scrollsToDown) lineCount *= -1;
      int ret = SendMessage(Handle, EM_LINESCROLL,0, lineCount);
      return ret == 1;
    }

    protected const int EM_GETFIRSTVISIBLELINE = 0xCE;
    protected const int EM_LINESCROLL = 0xB6;
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
    static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
  }
653デフォルトの名無しさん:2008/12/07(日) 19:26:44
//更新前
int x = textBox1.SelectionStart;

// 更新後
textBox1.Select(x, 0);
654デフォルトの名無しさん:2008/12/07(日) 19:37:14
直接メッセージ送るなんてことせず、この辺使えよ
ttp://msdn.microsoft.com/ja-jp/library/cc430235.aspx
655デフォルトの名無しさん:2008/12/07(日) 19:44:10
>>654
この辺って具体的にどれ?
656デフォルトの名無しさん:2008/12/07(日) 20:18:32
GetScrollPosらへん?
657デフォルトの名無しさん:2008/12/08(月) 04:21:30
enumってintのように扱っても大丈夫ですか?
たとえば今、
enum Flag
{
A = 0,
B,
C,
D,
E,
F
}
private Flag flag;
のようなenum型があって、A,B,Cの時にキーが押された時は次の状態へ遷移したいです。
このとき、単純に
if (flag == Flag.A || flag == Flag.B || flag == Flag.C)
{
flag++;
}
このような書き方をしてもいいのでしょうか?
試した結果、思い通りの挙動でしたが、intのように扱ってもいいのか疑問だったのでお聞きしました。
658デフォルトの名無しさん:2008/12/08(月) 08:30:52
>>657
enumがintと互換なのは仕様。

個人的にflag++が作法的にいいとは思わないけども。
659デフォルトの名無しさん:2008/12/08(月) 08:36:31
>>658
そうですかありがとうございました。
ちなみにこういった場合、どんな作法が適切ですか?
660デフォルトの名無しさん:2008/12/08(月) 08:43:56
SetClipboardするとWM_DRAWCLIPBOARDが4回来るのは何故ですか?
661デフォルトの名無しさん:2008/12/08(月) 09:00:56
1回に1データフォーマットしか登録できないから
何個も登録するようなコピー動作すると何個も飛んでくる
662デフォルトの名無しさん:2008/12/08(月) 09:49:59
なるほど。普通に文字列をセットしているだけなのですが
データフォーマットを比較するとそれぞれ違う形式で
送られて来ているのでしょうか。

一回しか送らない、もしくは一回しか受け取らない方法はないでしょうか。
663デフォルトの名無しさん:2008/12/08(月) 12:00:17
その都度フォーマット見て欲しいフォーマットのときだけ処理したらいいんじゃね?
664デフォルトの名無しさん:2008/12/08(月) 12:06:54
オブジェクトってクラスのことなの?
665デフォルトの名無しさん:2008/12/08(月) 13:38:18
タイトルバーのところってFormじゃないの?
Form_MouseHoverなどが発生しないんですが
666デフォルトの名無しさん:2008/12/08(月) 13:53:34
その辺りはノンクライアント領域という箇所
WndProcでWM_NCMOUSEHOVERとかNC用の独自メッセージを受け取る
667649:2008/12/08(月) 15:08:24
お返事遅れて申し訳ないです。
当方C#を始めて数日なので時間かかりました^^;
>>652
実装することが出来ました。ありがとうございます。

>>653
上手く行きませんでした。
私のやり方がおかしいのかもしれません。
現状>>652さんのやり方で解決できたのそれでいかせていただきます。
ありがとうございました。

>>654
もう少し勉強して時間があるときに自分でも考えてみようと思います。
現状>>652さんの方法で上手く行きました。
ありがとうございます。
668デフォルトの名無しさん:2008/12/08(月) 15:14:28
>>659
flagの順序を定義するメソッドをつくるとか?
669デフォルトの名無しさん:2008/12/08(月) 18:18:14
順序が存在している時点で、それはフラグではないのでは?
670デフォルトの名無しさん:2008/12/08(月) 18:30:12
確かに
enum State{
}
とかがいいかもね。
671660:2008/12/08(月) 19:30:05
実験してみたところ、以下でクリップボードに文字列を送った後
Clipboard.SetText("test");

WM_DRAWCLIPBOARDに送られてきたメッセージを以下で確認した所
IDataObject data = Clipboard.GetDataObject();
string[] clipformats = data.GetFormats();

同じメッセージが2回飛んできていました。
どうにかして違いを拾う方法は無いでしょうか。

エディタ等で文字を選択してコピーした場合は1回しかメッセージは
来ないので、一番良いのは1回しか送信しない事なんですが…。

672デフォルトの名無しさん:2008/12/08(月) 20:14:23
配列を引数に渡すとき、
C++なんかだと確か先頭のポインタかなんかが送られるんだったと思いましたが、
C#の場合はどうなってるんでしょうか?
配列の中身の型によって振る舞いが変わったりするんでしょうか?
673デフォルトの名無しさん:2008/12/08(月) 20:46:07
配列は参照型
C#の最重要事項だからこれだけでわからなかったら勉強してきて
674デフォルトの名無しさん:2008/12/08(月) 20:48:34
参照型をrefで渡しても速度的な恩恵はなし?
675デフォルトの名無しさん:2008/12/08(月) 20:51:16
間違いなく遅くなる
676デフォルトの名無しさん:2008/12/08(月) 21:47:34
>>668
めんどくさ〜
677デフォルトの名無しさん:2008/12/08(月) 22:13:03
>>657
flagっていうより、(ステートマシンとかの)ステートに近い?
遷移って言ってるし。

それならそのenumをひとつだけフィールドに持つクラスを作って
implicitでそのenumと暗黙的に変換できるようにするとかどうかな。

そうすれば++とかは「次の状態に遷移することだな」って推測できるし、
順序をいじるのも循環させることも可能になるし。
678デフォルトの名無しさん:2008/12/08(月) 22:16:23
クラスにするなら外にenum見せる必要ないだろ
state.Next()でいいじゃん
679デフォルトの名無しさん:2008/12/08(月) 22:22:44
>>678
本気で言ってる?
680デフォルトの名無しさん:2008/12/08(月) 22:24:49
>flagっていうより、(ステートマシンとかの)ステートに近い? 
を受けての言だろ?その前提ならおかしくはないぞ。
681677:2008/12/08(月) 22:32:06
やっぱり余計にどれが何を表す型なのか分かり難くしてるだけだね。。
682デフォルトの名無しさん:2008/12/08(月) 22:46:51
ファイル読み込みで test.iniと言うファイルに
123
456
789

と記述がある場合に↓のプログラムだと
ラベル1に789しか表示されません。

123と456と789を個別に取り出すには
どうすればいいのでしょうか?
label1.に123を表示
label2に345を表示と言う具合にしたいのですが・・・・


private void read_file(string file_name)
{
if (!File.Exists(file_name)) return;

StreamReader reader = new StreamReader(file_name,
Encoding.GetEncoding("Shift_JIS"));
string A;
while ((A = reader.ReadLine()) == null)
{

label1.Text = A;

}
reader.Close();
      }
683デフォルトの名無しさん:2008/12/08(月) 22:48:07
なんでそうなってるのか、ステップ実行して確認してみたら?
684デフォルトの名無しさん:2008/12/08(月) 22:59:53
>>682
当たり前だろw
685682:2008/12/08(月) 23:18:31
すみませんでした。
失礼します。
686デフォルトの名無しさん:2008/12/08(月) 23:18:53
>>677-681
拡張メソッドでいいじゃん

static class StateEx {
  public static State Next(this State state) {
    switch(state) {
      case State.A:
      case State.B:
      case State.C:
        return ++state;
      default:
        throw new ArgumentException();
    }
  }
}

--
var s1 = State.A;
var s2 = s1.Next(); // B
var s3 = s2.Next(); // C
687デフォルトの名無しさん:2008/12/09(火) 03:28:31
Form1_FormClosedがあるのにForm1_FormLoadedが無いのはMS側の不備なのでしょうか?
688デフォルトの名無しさん:2008/12/09(火) 03:32:01
必要性が無いんじゃね
689デフォルトの名無しさん:2008/12/09(火) 03:43:14
Loadedな時にe.Cancel出来無いじゃん
690デフォルトの名無しさん:2008/12/09(火) 03:52:40
例外でも投げりゃいいんじゃね
691デフォルトの名無しさん:2008/12/09(火) 05:29:39
無限ループや無限再帰って何にゃ?
692デフォルトの名無しさん:2008/12/09(火) 06:49:29
int Hoge(int fuga)
{
while (true)
fuga++;
return Hoge(fuga);
}
693デフォルトの名無しさん:2008/12/09(火) 09:25:27
スタックオーバーフローが起きるんですね
僕わかります
694デフォルトの名無しさん:2008/12/09(火) 10:14:46
私わかります
695デフォルトの名無しさん:2008/12/09(火) 10:31:03
私もかります
696デフォルトの名無しさん:2008/12/09(火) 10:40:14
void Hoge()
{
Hoge();
}
697デフォルトの名無しさん:2008/12/09(火) 10:59:40
すごく良く解ります

じっちゃんの名にかけて真実はたった一つの謎が解けました!!!!
698デフォルトの名無しさん:2008/12/09(火) 11:31:02
二つのLinkedListの連結ってできますか?

もしくは、そういう操作ができる、あるいは向いているという
コレクションがあれば教えてください。
699デフォルトの名無しさん:2008/12/09(火) 11:32:22
>>698
連結ってどういうイメージ?

元のコレクションの項目の後ろに別のコレクションの内容を追加するってことではなくて?
700デフォルトの名無しさん:2008/12/09(火) 11:43:30
>>699
そういうことです。
LinkedListなら最後のポインタに別のLinkedListのポインタの先頭っつけるだけで
高速にできるのかなと思ったのですが、どうもそれっぽいメンバが見当たらないので・・・
701698:2008/12/09(火) 11:45:14
ちなみにできるだけ高速なものがほしいです。
702デフォルトの名無しさん:2008/12/09(火) 12:06:35
LinkedListNode<T>はLinkedList<T>への参照を持ってるからそういうわけにもいかない
List { get; }だしな

foreachでAddLastしていくのがいやなら新しくリンクリストクラス作ったら?
大した手間じゃないし
703698:2008/12/09(火) 16:12:21
LinkedListバージョン

for (int j = 0; j < 100; j++)
{
for (int i = 0; i < 50000; i++)
{
LinkedListNode<face> node = linkedlist2.First;
while (node != null)
{
linkedlist1.AddLast(node.Value);
node = node.Next;
}
}
linkedlist1.Clear();
}

Listバージョン

for (int j = 0; j < 100; j++)
{
for (int i = 0; i < 50000; i++)
{
list1.AddRange(list2);
}
list1.Clear();
}


こんな風に、沢山連結させては消す、ってのを繰り返して計測してみましたが、
Listの方がはるかに早かったのですが、妥当でしょうか?
理由はなぜですか?
704デフォルトの名無しさん:2008/12/09(火) 16:16:51
LinkedListNode<T>の存在
705デフォルトの名無しさん:2008/12/09(火) 16:19:53
>>704
すいませんが素人なもんでもう少し詳しく教えてもらえないでしょうか。
706デフォルトの名無しさん:2008/12/09(火) 16:25:33
LinkedListはTじゃなくてLinkedListNode<T>を管理する
つまりAddLastするごとにLinkedListNode<T>のインスタンスが作られる
707デフォルトの名無しさん:2008/12/09(火) 16:31:22
>>706
そういうことですか。ありがとうございました。
708デフォルトの名無しさん:2008/12/09(火) 16:31:42
for (int j = 0; j < 100; j++)
{
for (int i = 0; i < 50000; i++)
{
LinkedListNode<face> node = linkedlist2.First;
while (node != null)
{
//ここでLinkedListNodeクラスのコンストラクタが呼ばれまくってないかな?
//変更前
//linkedlist1.AddLast(node.Value);
//変更後
linkedlist1.AddLast(node);
node = node.Next;
}
}
linkedlist1.Clear();
}

こうしてみたらどうなる?
709デフォルトの名無しさん:2008/12/09(火) 16:55:11
> InvalidOperationException
>  node は他の LinkedList に属しています。
710デフォルトの名無しさん:2008/12/09(火) 17:07:44
関数とメソッドの違いがよくわからない
711デフォルトの名無しさん:2008/12/09(火) 17:29:20
なにかやらしたらやりッパがメソッド
なにかやらしたら結果を教えてくれるのが関数


とかあいまいな感じでいいんじゃね?w
712デフォルトの名無しさん:2008/12/09(火) 17:44:56
メソッドが返値を持ったっていいじゃない
713デフォルトの名無しさん:2008/12/09(火) 17:46:19
メソッド=関数
714デフォルトの名無しさん:2008/12/09(火) 18:04:28
メソッド=C#における関数
715デフォルトの名無しさん:2008/12/09(火) 18:14:25
関数はインスタンスメンバの値を参照できない
メソッドはできる

クラスメソッド=関数
716デフォルトの名無しさん:2008/12/09(火) 18:35:29
メンバ関数の立場は…
717デフォルトの名無しさん:2008/12/09(火) 19:02:10
C#にメンバ関数なんてないよw
718デフォルトの名無しさん:2008/12/09(火) 19:11:04
C#に関数なんて存在するのか?って話に
719デフォルトの名無しさん:2008/12/09(火) 19:22:28
>>687
FormClosedはClosedがobsoleteというか非推奨にするために
後から追加されたイベントだからね。
720デフォルトの名無しさん:2008/12/09(火) 19:25:01
取りあえず私見をば

メソッドも関数も(プログラミングにおける)機能や意味は同じで、

・関数
  まず、機能ありきで、その機能の中で特定のデータ(オブジェクト等)を
  操作するという、非オブジェクト指向的な観点に基づいた用語

・メソッド
  まず、オブジェクトありきで、そのオブジェクトに対する操作(命令)を定義することで
  さまざまな機能を実現するという、オブジェクト指向的な観点に基づいた用語
721デフォルトの名無しさん:2008/12/09(火) 19:34:50
>>720
そんな深読みするような意味なんてないって。
むしろただのハッタリだと思った方がまだしも真相に近い。

だいいち、オブジェクト指向的な発想で言えば"method"より"function"の方が
よりしっくりくるでしょ。

訳語の「関数」で考えても意味ない。
722デフォルトの名無しさん:2008/12/09(火) 19:44:08
>>703
ListのAddって内部ででかい配列を作ってはコピーしてるのかな。
だとしたら、要らなくなった小さい配列はGCの対象になるの?
とすれば、長期的にはパフォーマンス悪くなったりしない?
723デフォルトの名無しさん:2008/12/09(火) 19:50:46
内部容量は倍々に増やされるのですぐ打ち止める
724デフォルトの名無しさん:2008/12/09(火) 20:04:39
MSDN的には関数というとFunc<>オブジェクトのことを指すらしいよ
725デフォルトの名無しさん:2008/12/09(火) 20:21:23
一応、値を返すのが関数ということになってたはず
VBもVBAも
726デフォルトの名無しさん:2008/12/09(火) 20:22:59
>>725
それはVBの特殊事情。
だから関数ってのは訳語だから。
元ネタはfunction
727デフォルトの名無しさん:2008/12/09(火) 20:43:08
functionって日本語では関数のほかに機能って意味もあるよね

なんで関数じゃなくて機能って訳さないんだろう

特にC言語系では機能って言ったほうがいいと思うんですがどうですかね?
728デフォルトの名無しさん:2008/12/09(火) 20:43:08
function→ふぁんしゅー→函数(中国読み)→関数
729デフォルトの名無しさん:2008/12/09(火) 20:44:18
>>727
こーいうー機能をつけるためにこーいうー機能を定義する・・・

とか会話したら発狂するから
730デフォルトの名無しさん:2008/12/09(火) 20:56:05
>>727
だいたいプログラミング言語ってはじめは数学が好きな人が作って数学が好きな人が使うから
731デフォルトの名無しさん:2008/12/09(火) 23:09:31
>>729
ならアメリカ人は関数という意味も機能という意味もあるfunction
という言葉を使って会話するから発狂してるのか?

発狂してプログラマ人口激減したからインド人プログラマ大量に
引っ張って来てたりしてな

あ、インド人プログラマもfunctionて言葉使うのか・・・・・
732デフォルトの名無しさん:2008/12/09(火) 23:21:15
インド人はファンクショラヤーナとかいうんだよきっと
733デフォルトの名無しさん:2008/12/09(火) 23:32:00
>>732
ワロタ
734デフォルトの名無しさん:2008/12/09(火) 23:52:50
Windowsアプリケーションの内部でperlを実行してその計算結果を使いたいんですが
どう書けばいいでしょうか?
735デフォルトの名無しさん:2008/12/10(水) 00:10:59
普通にプロセス実行して標準入出力でやりとりすればいいんじゃね
perlでなくていいならironpythonとかWSHとか使ったほうが遥かに簡単だよ
736デフォルトの名無しさん:2008/12/10(水) 00:58:55
あいろんふぃそん?
737デフォルトの名無しさん:2008/12/10(水) 04:50:26
アイアンパイソン
pythonの.net上で動く奴
738デフォルトの名無しさん:2008/12/10(水) 09:13:01
VB的には値を返せないのがサブルーチンで
値を返せる(が、返さなくてもいい)のが関数だよ
739デフォルトの名無しさん:2008/12/10(水) 12:19:41
以下のソースがあります。
BoundingBoxとVector3はstructです。
BoundingBoxのメンバはVector3二個で、
Vector3のメンバはfloat3個です。

forの中のv0,v1で「未割り当て〜」というエラーがでます。
forの前やforの中でv0やv1をnew Vector3()しないと怒られます。
でもなぜかBoundingBoxはnewしなくても怒られません。
なぜですか?

BoundingBox bb;
Vector3 v0,v1;
for(〜)
{
v0.X = ○;
v0.Y = ○;
v0.Z = ○;
v1.X = ○;
v1.Y = ○;
v1.Z = ○;
bb.Min = v0;  ←v0とv1が未割り当てで何たらとエラー
bb.Max= v1;  ←
}
740デフォルトの名無しさん:2008/12/10(水) 12:29:51
>>739
もうちょっとこっちで再現可能な情報出してくれないか。
環境とかバージョンとか。
とりあえず、VS2008でVista64の環境でエラーでないが。
741デフォルトの名無しさん:2008/12/10(水) 12:58:11
まあVector3に初期化できてないメンバがあるんだろう
742デフォルトの名無しさん:2008/12/10(水) 12:58:46
XNAというライブラリを使っていて、
Vector3とかBoundingBoxはそれで定義されています。

Vector3はこれ
http://msdn.microsoft.com/ja-jp/library/microsoft.xna.framework.vector3.aspx
BoundingBoxはこれ
http://msdn.microsoft.com/ja-jp/library/microsoft.xna.framework.boundingbox.aspx

環境はXPのsp3とVS2005で、Windows用のプロジェクトです。
後は取り立てて特別な環境ではないと思いますが、他に何か必要な情報はあるでしょうか。

自分の認識では、構造体は値型だからnewしなくても使える、
クラスなどの参照型はnewしないと使えない、
という理解なのですが、それは誤っているでしょうか?
で、このVector3は構造体のはずなのにnewしないとエラーがでるというのが解せません。
743739:2008/12/10(水) 13:04:43
あれ、XNAっていうのはWin用とXBOX用のゲーム開発ができるんですけど、
Win用のプロジェクトだとエラーがでません。
XBOX用のプロジェクトだけエラーがでてるみたいです。

ソースは両方で共有してるんですが、参照してるライブラリの中身とか
Win用とXBOX用で挙動が違うのかな・・・
744デフォルトの名無しさん:2008/12/10(水) 13:15:55
このスレの住人は役立たずだからXNAスレで質問しる
745デフォルトの名無しさん:2008/12/10(水) 13:27:22
>>744
XNAスレから来ました。
しかしこれは文法とかC#の一般的問題ではない気がしてきました。
よってしかるべきところで聞いてみます。ありがとうございました。
746デフォルトの名無しさん:2008/12/10(水) 13:29:37
Vector3って自前のじゃなくてXNAのじゃないかよ・・・
747デフォルトの名無しさん:2008/12/10(水) 13:30:16
デフォルトコンストラクタがメンバを初期化してるなら二度手間だよなぁ
748デフォルトの名無しさん:2008/12/10(水) 13:33:37
XNAのVectorって最適化されてるんじゃなかったっけ?
とりあえず報告よろ
749デフォルトの名無しさん:2008/12/10(水) 15:08:54
if (Point >= Point)が出来ないのはMicrosoft側の不徳の致すところですか?
750デフォルトの名無しさん:2008/12/10(水) 15:11:33
>>749
今こそ拡張メソッドを使う時だ
751デフォルトの名無しさん:2008/12/10(水) 15:20:42
>if (Point >= Point)
意味不明
752デフォルトの名無しさん:2008/12/10(水) 15:25:39
おまえが理解できない対象は全て意味不明か
こりゃおもしろい
753デフォルトの名無しさん:2008/12/10(水) 15:28:51
Pointって構造体?
754デフォルトの名無しさん:2008/12/10(水) 15:28:52
Point(1, 100) と Point(30, 20) の大小比較はどうやるんだ?
755デフォルトの名無しさん:2008/12/10(水) 15:34:37
もちろん距離です
756デフォルトの名無しさん:2008/12/10(水) 15:36:16
>>755
何とのw?
757デフォルトの名無しさん:2008/12/10(水) 15:41:48
何との?
原点からの距離に決まってるだろ
オペレーターオーバーロードなんて直感に反したものばかりなんだから
細かいことでガタガタ騒ぐなよ
758デフォルトの名無しさん:2008/12/10(水) 15:42:40
おおこわいこわい
難癖のつけ方だけ一流だな
759デフォルトの名無しさん:2008/12/10(水) 15:44:21
ベクトル的に比較なんてPointなんて名前でやる話じゃない気がする。

それこそ付けたきゃ自分で勝手に付ければいい話じゃないの。
760デフォルトの名無しさん:2008/12/10(水) 15:44:47
Q:東京と大阪の大小比較はどうやるんだ?

A:もちろん距離です
761デフォルトの名無しさん:2008/12/10(水) 15:45:59
Q:何とのw?

A:何との?
地球の中心からの距離に決まってるだろ
オペレーターオーバーロードなんて直感に反したものばかりなんだから
細かいことでガタガタ騒ぐなよ
762デフォルトの名無しさん:2008/12/10(水) 15:46:02
距離の比較は距離を表すクラスでやればいいじゃない。
点は点を表してればいいんだよ。
763デフォルトの名無しさん:2008/12/10(水) 15:48:36
釣れた釣れたw
ちなみに>>749とは別人。ごめんな>>749

おまえらみたいな頭の固い人種とは付き合えないなぁ
嘘を嘘とm
764デフォルトの名無しさん:2008/12/10(水) 15:49:41
>>762
全世界のベクトルに謝れ
765デフォルトの名無しさん:2008/12/10(水) 15:50:10
>>763
釣ったの俺だよ。
勝手に騙るなテメェ。
766デフォルトの名無しさん:2008/12/10(水) 15:51:24
>>764
ベクトルは「点」じゃなくて「量」だから
767デフォルトの名無しさん:2008/12/10(水) 15:51:28
お馬鹿さん大集合
768デフォルトの名無しさん:2008/12/10(水) 15:52:26
>>762
その程度のことでクラス持ち出すなよ
これだからゆとり.NET厨は・・・
769デフォルトの名無しさん:2008/12/10(水) 15:53:54
俺の辞書に位置ベクトルという言葉はない!
770デフォルトの名無しさん:2008/12/10(水) 15:55:58
位置ベクトルも量が点の位置に等しいだけで量だぞw
771デフォルトの名無しさん:2008/12/10(水) 15:57:47
>>754
false
772デフォルトの名無しさん:2008/12/10(水) 16:01:28
ここまで高校数学レベルのアホ数名がお送りしました。

引き続き正常な流れのスレをお楽しみ下さい。
773デフォルトの名無しさん:2008/12/10(水) 16:02:07
>>770
そりゃそうだが、「方向と量」と「位置」はベクトルの共変性という観点から別に扱われる対象だぞ
・・・釣られたか?
774デフォルトの名無しさん:2008/12/10(水) 16:04:37
点も量がベクトルの位置に等しいだけで量だぞw
775デフォルトの名無しさん:2008/12/10(水) 16:05:17
急に伸びてると思ったら何なのw。
776デフォルトの名無しさん:2008/12/10(水) 16:05:56
複素数も量が2Dベクトルの位置に等しいだけで量だぞw
四元数も量が4Dベクトルの位置に等しいだけで量だぞw

バロスwwwwwwwww
777デフォルトの名無しさん:2008/12/10(水) 16:09:07
点だろw
778デフォルトの名無しさん:2008/12/10(水) 16:11:29
点かなあ?
779デフォルトの名無しさん:2008/12/10(水) 16:15:20
量です
780デフォルトの名無しさん:2008/12/10(水) 16:15:47
いつまで続くのw?
781デフォルトの名無しさん:2008/12/10(水) 16:18:34
馬鹿が自分の間違いを認めるまで
782デフォルトの名無しさん:2008/12/10(水) 16:19:30
つまり永遠に
783デフォルトの名無しさん:2008/12/10(水) 16:20:58
つまり点ベクトル構造体を定義する必要があるわけだな
784デフォルトの名無しさん:2008/12/10(水) 16:21:50
原点(0,0)からの距離とした場合、Point(100,1)とPonit(1,100)が等価になってしまうのが悩ましいな。
785デフォルトの名無しさん:2008/12/10(水) 16:23:31
PointFって何?
786デフォルトの名無しさん:2008/12/10(水) 16:23:56
Point<float>
787デフォルトの名無しさん:2008/12/10(水) 17:07:22
結局どうすればいいんですか?
788デフォルトの名無しさん:2008/12/10(水) 17:14:48
if (Rectangle >= Rectangle)
789デフォルトの名無しさん:2008/12/10(水) 17:14:54
ほらな、お前らが馬鹿なことばっかり言ってるから正解が紛れて見つけられないんだとさ。
790787:2008/12/10(水) 17:17:13
マジでネタかどうかの区別もつかんのか・・・
791デフォルトの名無しさん:2008/12/10(水) 17:20:20
大したスキルもないのにいつも質問者に対して上から目線なもんだからボロが出るんだよw
792デフォルトの名無しさん:2008/12/10(水) 17:24:02
ベクトルについては
http://imai927.web.fc2.com/free9/kigou/index.html
このサイトが一番詳しいんじゃないか?
793デフォルトの名無しさん:2008/12/10(水) 17:26:18
一番詳しいってことはないだろう
794デフォルトの名無しさん:2008/12/10(水) 17:50:39
WPFについての質問があります。
タイマーを使うにはどうしたらよいでしょう?
VisualC#2008では、ツールボックスにTimerがあって、
ドラッグ&ドロップで使えたのですが、
WPFには見当たらないのです。
探し方が悪いんでしょうか?
795デフォルトの名無しさん:2008/12/10(水) 17:54:31
>探し方が悪いんでしょうか?
意味不明
796デフォルトの名無しさん:2008/12/10(水) 17:55:56
実行時にデザイナの時より2ptだけFormが横に膨張するんですがどうすればいいですか?
797デフォルトの名無しさん:2008/12/10(水) 17:57:05
>>794
探し方が悪いというかろくに探してないように見えるが
System.Windows.ThreadingのDispatcherTimerでも使えば
798デフォルトの名無しさん:2008/12/10(水) 17:57:36
>>795
探す場所を間違えているんでしょうか?
799デフォルトの名無しさん:2008/12/10(水) 18:00:45
>DispatcherTimer
ワラタ

>大したスキルもないのにいつも質問者に対して上から目線
まさにこれだw
800デフォルトの名無しさん:2008/12/10(水) 18:01:36
物置の中でも探してろ
801デフォルトの名無しさん:2008/12/10(水) 18:08:26
>>796
デザイナの時より2ptだけ小さくする
802デフォルトの名無しさん:2008/12/10(水) 18:13:45
台所を探して見つけました
KitchenTimer
803デフォルトの名無しさん:2008/12/10(水) 18:17:30
System.Home.Living空間にあるQuickleWiperでいけないか?
804デフォルトの名無しさん:2008/12/10(水) 18:23:34
もっとよく探すのだ
805デフォルトの名無しさん:2008/12/10(水) 18:30:51
つまんねーよ
つーかこういう流れはWin32APIスレだけでたくさんだ
806デフォルトの名無しさん:2008/12/10(水) 18:32:28
>>799
笑い所が分からないんだけど…
807デフォルトの名無しさん:2008/12/10(水) 18:33:07
で?
808デフォルトの名無しさん:2008/12/10(水) 18:33:39
>>799 こそ本当のバカだな
809デフォルトの名無しさん:2008/12/10(水) 18:34:17
>>805
APIスレもお腹いっぱいだよ。
分からないなら(ryのせいで。
810デフォルトの名無しさん:2008/12/10(水) 18:34:37
だから何なんだ
荒れるから自重しろクソガキ
811デフォルトの名無しさん:2008/12/10(水) 18:38:08
粗を探していかに人を馬鹿にするかを考えている人達の集まりなので
812デフォルトの名無しさん:2008/12/10(水) 18:42:27
ポトペタではサポートされてない。
Windows.Forms.Timer相当のものが欲しければDispatcherTimerで正解。
Timers.TimerとThreading.TimerはWPFでも使っていいが、
UIいじるときはDispatcher経由になる。
あと視覚効果程度ならタイマーでなくStoryboardやTriggerを使うとよい。
813デフォルトの名無しさん:2008/12/10(水) 19:09:12
ツルペタはサポートされていますか?
814デフォルトの名無しさん:2008/12/10(水) 19:53:05
ツルペタ欲しいならJSchool使え
ライセンス取得に手間と時間はかかるが結構おすすめ
815デフォルトの名無しさん:2008/12/10(水) 19:53:53
いつまでやってんだよ。幼稚だな。
816デフォルトの名無しさん:2008/12/10(水) 19:55:39
たしかにツルペタは幼稚だが
817デフォルトの名無しさん:2008/12/10(水) 19:59:27
そんなつもりで言ったんじゃないのに、
なんか俺までロリコン的な空気に。
818デフォルトの名無しさん:2008/12/10(水) 20:36:54
俺もロリコンで三日くらい前からVC#2008インストールしてC#の勉強はじめたんだけど、
このエディタってルーラ表示とかないの?
VC++ならオプションの所にルーラ表示の項目あったのに……
819デフォルトの名無しさん:2008/12/10(水) 21:04:06
なんかデジャヴュ
820デフォルトの名無しさん:2008/12/10(水) 21:06:22
縦はツール→オプション→テキストエディタで行番号表示ならが出来ると思うけど
横ってあったっけ?
821デフォルトの名無しさん:2008/12/10(水) 21:13:24
横数字は表示できないみたい。たてすじは表示できるけど。
822デフォルトの名無しさん:2008/12/10(水) 21:17:44
XP sp3でVisual C# 2008を使って開発をしています。
今日は、WPFからFormを開くタイミングを変更する方法を教えてください。
WPFのxaml.csのInitializeComponetn():のあとに、
Form Form1 new Form();
と書くと、Form1を開けるのですが、これだと、そのFormを閉じないとxamlのウィンドウが開きません。
順番としては、xamlのウィンドウが開き、描画が終わってからFormを開きたいのです。
教えていただけないでしょうか。
823デフォルトの名無しさん:2008/12/10(水) 22:02:28
>>818
ワープロじゃあるまいしそんなものいらんと普通思うんだけど、
一体どうしてそんなものが欲しいと思うわけ?

いまどき80桁とかアナクロなこだわり持ってる人がいるとも思えんけど、
仮にそうだとしてもステータスバーのカーソル位置表示で十分じゃん。
824デフォルトの名無しさん:2008/12/10(水) 22:07:19
できるできない言うのは構わんが
おまえさんは人の勝手に口挟むほどお節介焼きなのか?
リアルで嫌われるぞ
825デフォルトの名無しさん:2008/12/10(水) 22:12:21
>>818
ツール→オプション→すべての設定を表示にチェック
テキストエディタ→C#→全般→行番号にチェック

縦はないよ
横ルーラーの話なんてしてないのに回答者たちが勝手に憶測で語り出して
質問者も大変だねぇ
826デフォルトの名無しさん:2008/12/10(水) 22:15:09
別に「〜しろ」なんてお節介を焼いてはいないでしょ。
むしろ俺には不合理に思えるが、何か合理性があるのかと聞いてるんだけど。
827デフォルトの名無しさん:2008/12/10(水) 22:17:23
>>825
あのさあ...
ルーラーっていうのは定規のことなんだけどひょっとして知らんのかな?

用紙って概念がないんだから縦のルーラなんてあるわけないだろうw
ルーラといえば必然的に横ってことになる。
828デフォルトの名無しさん:2008/12/10(水) 22:21:03
誤魔化しで屁理屈しか言えないのか
かっこわる
829デフォルトの名無しさん:2008/12/10(水) 22:21:11
その理屈でどうして縦のルーラはありえなくて横のルーラならありうるのか理解できない
830デフォルトの名無しさん:2008/12/10(水) 22:23:01
恥の上塗り乙と言っておこう!!
他人の指摘で自分のミスを認められない奴は、ただの坊やさ・・・
831デフォルトの名無しさん:2008/12/10(水) 22:24:10
なんでVC++にあってC#に無いんだろうか
832デフォルトの名無しさん:2008/12/10(水) 22:25:53
VC++2008にあったっけ?そんなの
833デフォルトの名無しさん:2008/12/10(水) 22:43:21
>>829
理解できない?
縦は行番号と呼ぶからに決まってるだろ
英単語の意味なんて日本人の直感に反したものばかりなんだから
細かいことでガタガタ騒ぐなよ
834デフォルトの名無しさん:2008/12/10(水) 22:44:24
>>822
App.xaml.csのOnStartupの中でnew Form1().Show()
WPFのウィンドウを自動で開きたくなければ,App.xamlのStartupUri属性を削除して
好きなところでnew Window1().Show()
835834:2008/12/10(水) 22:54:15
↑だとWinFormsのウインドウのほうが先に開いちゃうね
WPFのWindow.LoadイベントのイベントハンドラでForm.Show()すればいいみたい
きっとSystem.Windows.Forms.Application.Run(new Form1())とかやってたんだろ
836834:2008/12/10(水) 22:58:58
×Window.Load
○Window.Loaded
何度も悪いけど
837デフォルトの名無しさん:2008/12/11(木) 00:38:19
>>834
ありがとうございます。
おっしゃるように、
System.Windows.Forms.Application.Run(new Form1())とやってました…。
すごい。

これまたおっしゃるように、Formのほうが先に開いて困ってます。

WPFのWindow.Loadedイベントのイベントハンドラで、
Form.Show()
すればいい、ということなので、
Window1.xaml.csに、イベントハンドラを追加して、

FormのLoadの場合は、
private void Form1_Load(object sender, EventArgs e){//処理}
を参考に、
private void Window1_Loaded(object sender, EventArgs e){//処理}
としてみました。

これで、WPFのウィンドウは開くようになりました。
次に、//処理の部分に
Form1.Show();
と書いたところ、
エラー 1 静的でないフィールド、メソッド、またはプロパティ 'System.Windows.Forms.Control.Show()' で、オブジェクト参照が必要です
となってコンパイルできませんでした。
さらに、
System.Windows.Forms.Application.Run(new Form1())
としてみました。
この場合、エラーは出ませんが、やはりWPFのウィンドウしか開きません。
もうすこしよろしくお願いします。
838デフォルトの名無しさん:2008/12/11(木) 00:42:44
WPFとか以前の問題だな
Form1 form = new Form1();
form.Show();
型とインスタンスの違いくらいは理解してないと何もできないよ
839デフォルトの名無しさん:2008/12/11(木) 00:52:58
>>837
よくあるgdgdな流れになりそうなので答え貼っとく
これくらいわからなかったらいちいち聞くより本でも読んで出直した方が早いと思う
public partial class Window1 : Window {
public Window1() {
 InitializeComponent();
 this.Loaded += Window1_Loaded;
}
private Window1_Loaded(object sender, RoutedEventArgs e) {
 Form1 form = new Form1();
 form1.Show();
}
}
840デフォルトの名無しさん:2008/12/11(木) 01:04:21
ありがとうございました。
841デフォルトの名無しさん:2008/12/11(木) 14:26:43
WPFで開発をしているものです。
WPFでウィンドウ枠をなくす方法を教えてください。
Formの場合には、this.FormBorderStyle = FormBorderStyle.None ;
でフォームの枠をなしにできます。
ところが、WPFの場合には、xamlで
WindowStyle="None"
と設定しても、枠線だけは残ってしまいます。
枠線も表示しないようにするにはどうしたらよいでしょう?
842デフォルトの名無しさん:2008/12/11(木) 14:34:05
C#2.0 Winアプリなんだが

MDIっぽく動作させたいけど、右上にツールボックス出したくないから
メインのフォームにパネル張り付けてそこへフォームを最大化させて枠も消してControls.add
するってのはありなんだろうか?
それによって何か不都合起きないかな?

ウィンドウハンドルもってるものをもってないもののなかへ入れるってのは・・・
843デフォルトの名無しさん:2008/12/11(木) 14:42:23
C#だいたい文法覚えたんだけど、これって何やればおもしろいの?

ネットワークとかスレッドやってみたいけど気が乗らん。面白いのおしえて。

Webかデスクトップアプリかどっちが面白いかも教えてくれ。
844デフォルトの名無しさん:2008/12/11(木) 14:47:10
>>843
どうすれば面白いとかは発想次第だし
何が面白いなんかは個人の差だから何とも言えないだろ

とりあえずWPFでもやってみればどう?
色々アニメーションと化させられるし
845デフォルトの名無しさん:2008/12/11(木) 14:50:33
>>841
ResizeMode
846デフォルトの名無しさん:2008/12/11(木) 15:07:29
p2pとかやってみたい
847デフォルトの名無しさん:2008/12/11(木) 18:31:57
C#でクラスを作成して

クラスファイル名 COM_Char.cs(文字操作用関数を書いたクラス)
クラスの中の関数 gCheckRegEx(正規表現チェック関数)

みたいな書き方をしたら、上司から「名前がちょっとなぁ」と言われました
こういう書き方だと何か問題があるんでしょうか?
848デフォルトの名無しさん:2008/12/11(木) 18:37:46
名前に関するガイドライン
http://msdn.microsoft.com/ja-jp/library/ms229002.aspx
849デフォルトの名無しさん:2008/12/11(木) 20:29:18
>>847

・他の人が君の書いたソースを読む時に,まず君が考えた
その独創的ですばらしい名前付けルールをいちいち理解しないといけない
・.NETの標準的なルールに従った名前と混在するのが気持ち悪い(と感じる人は多い)
特に気を付けるのはクラスライブラリを作る時
その調子でクラスライブラリ作っても間違いなく誰も使いたがらない
その気持ち悪い名前を見た時点で使う気を無くす
850デフォルトの名無しさん:2008/12/11(木) 23:47:36
>>849
そこまで言うなら気持ち悪くない一例を書いてみろよw
初心者スレで何言ってんだ、お前
851デフォルトの名無しさん:2008/12/12(金) 00:13:09
>>849は必要以上に叩いてる感はあるが
例は>>848でFAじゃね?
852デフォルトの名無しさん:2008/12/12(金) 00:16:44
>>850
「そこまで」って、別に849は当たり前のこと言ってるだけで極論めいたことは
言ってないと思うぞ。

初心者スレも糞もないだろう。
「俺様は初心者です」と宣言すればコードが可読的になるのなら話は別だが。
853デフォルトの名無しさん:2008/12/12(金) 00:17:08
>>850
初心者を慰めるスレでもないけどね
どうすべきかは>>848で十分だけれど、質問への回答になってるのは>>849
横槍入れる必要は無いと思うよ
854デフォルトの名無しさん:2008/12/12(金) 00:24:06
設計考え出すと、なおのことC++はありえないよなぁ。
C++ の制約に引きずられて設計狂う。
855デフォルトの名無しさん:2008/12/12(金) 01:13:43
実装の都合で小さいクラス作るのはC#では気軽にできるけど
C++でそれをやるのは億劫でつい避けてしまって複雑なコードになる
856デフォルトの名無しさん:2008/12/12(金) 04:29:27
System.Windows.Formsっておかしくね?
なんでSystem名前空間にあるんだよ
857デフォルトの名無しさん:2008/12/12(金) 04:45:38
じゃぁ何名前空間になるんだ?
858デフォルトの名無しさん:2008/12/12(金) 04:53:05
皆様のお知恵を貸して下さい。

WebDavサーバーに対して、OPTIONSメソッドを送信して利用可能な
コマンドを取得しようとしています。サーバーは認証が必要です。Basic認証です。
で、汚いコードで大変恐縮なのですが、以下のコードで理想の結果が
返ってくる(各要素にコマンドの名前が入ったString配列)のは良いのですが
どうも挙動がおかしいのです。

String[] GetAllowMethodList() {
// リクエストの作成
HttpWebRequest request =
( HttpWebRequest )WebRequest.Create( "http://hogehoge.webdav.com" );
request.Method = ”OPTIONS";
request.Credentials = new NetworkCredential( UserName , Password );

// レスポンスの取得
using ( HttpWebResponse response = ( HttpWebResponse )request.GetResponse() ) {
// ヘッダーの読み込み
return response.GetResponseHeader( "Allow" ).Split( ',' );
}
}
859デフォルトの名無しさん:2008/12/12(金) 04:53:36
( HttpWebResponse )request.GetResponse() でこちらからサーバーに対して
リクエストを送信するのはわかります。しかし、何故かこの場所で2回リクエストを
送っているのです。で、レスポンスは2回目のリクエストに対してのレスポンスが
HttpWebResponse responseに代入されるのです。

Microsoft Network Monitor で確認したから確かです。
その際のパケットは

(1回目のリクエスト)
HTTP:Request, OPTIONS /
(1回目のリクエストに対するレスポンス)
HTTP:Response, HTTP/1.1, Status Code = 401, URL: / , Using Basic Authentication
(2回目のリクエスト)
HTTP:Request, OPTIONS / , Using Basic Authorization
(2回目のリクエストに対するレスポンス)
HTTP:Response, HTTP/1.1, Status Code = 200, URL: /

何故2回送信されるのか理解できません。
もしかしてスレ違いでしょうか?
860デフォルトの名無しさん:2008/12/12(金) 05:56:39
401って、Unauthorizedか。まあ、妥当な結果だろう
詳しく知りたければ、HTTPについて勉強すべし
スレ違いだから、これくらいで
861デフォルトの名無しさん:2008/12/12(金) 06:03:52
>>859
基本認証、って返ってきてるじゃん
862デフォルトの名無しさん:2008/12/12(金) 08:56:23
例外処理って例外が起きないようにプログラムするのがいいのか
例外を捕まえてにゃんにゃんするのがいいのかわからない
863デフォルトの名無しさん:2008/12/12(金) 09:13:28
必要に応じて…

たとえば例外に陥らないように書くと簡潔さが失われるような場合とかに
例外使えばいいんじゃないかな

俺は便利なので多用します
どうせ職業マじゃないからいいのさ
864デフォルトの名無しさん:2008/12/12(金) 09:14:22
>>856
WindowsはOSの名前じゃなくて、「窓たち」という普通名詞と考えるんだ
865デフォルトの名無しさん:2008/12/12(金) 09:41:57
Basic認証て自分で言ってるじゃん
866デフォルトの名無しさん:2008/12/12(金) 10:15:28
>>856
macで動くSilverlightでもSystem.Windows(WPF系)名前空間を使うんだよ
System.Windows.Formsに限って言えば仕様上Microsoft Windowsが必要だから確かにおかしい
867デフォルトの名無しさん:2008/12/12(金) 10:31:58
>System.Windows.Formsに限って言えば仕様上Microsoft Windowsが必要

ソースplz
868デフォルトの名無しさん:2008/12/12(金) 11:31:46
というか Mono の Forms もだいぶ色々動くようになってたような。
MS Windows じゃなくて Win32 っぽいものが必要と書けばよかったのに
869デフォルトの名無しさん:2008/12/12(金) 11:52:51
最近はMonoのFormsも使えるようになったんだ?
前はformが立ち上がりもしなかったがw
870デフォルトの名無しさん:2008/12/12(金) 12:30:58
今日まとまった金が入ったので独習C#を買いにちょっと離れた本屋にいった。
無事に発見した。めちゃくちゃ黄色かった。びっくりするほど黄色かった。
パラパラとめくってみると、なんかもうどうでもいい例え話とかよりもサンプルコードがびっしりで良い感じ。
他にも中途半端に今使っているPHPも同じシリーズのものがあったのでホールド。
今転職考えてるので、この際だからと案件が多いと言われているJAVAも覚えてみることに。
結果独習C#,独習PHP,独習JAVAの三冊を購入。


ウキウキしながら帰宅して、早速黄色くて分厚い三冊を取り出す。
そしてとんでもないことに気づいてしまった。

http://niyaniya.info/pic/img/1776.jpg

おとなしく#include <stdio.h>とでも書いてろって事ですねわかります
871デフォルトの名無しさん:2008/12/12(金) 12:32:19
>>869
Code Status
Support for Windows Forms 2.0 is complete.
At this point, we are largely just fixing bugs and polishing our code.
872デフォルトの名無しさん:2008/12/12(金) 13:03:16
>>870
ねえコピペ?コピペだよね?
コピペだって言ってよ誰か。
873デフォルトの名無しさん:2008/12/12(金) 13:15:58
>>870>>872
ねえ自演?自演だよね?
自演だって言ってよ誰か。
874デフォルトの名無しさん:2008/12/12(金) 13:25:48
悪いけど872は自演じゃない
875デフォルトの名無しさん:2008/12/12(金) 13:49:38
俺は870だが872じゃないぞ。
と言えばいうほど870=872になるんだよな。どうでもいいけど。

つーかこの三冊買ってきた報告とかよく考えたら思いっきりスレ違いだったわ
876デフォルトの名無しさん:2008/12/12(金) 14:05:41
こ れ は ひ ど い
877デフォルトの名無しさん:2008/12/12(金) 14:09:42
#がつくかつかないくらいで、たぶんCもC#も変わらないでしょ。
変わったらアホ臭くて誰もCなんて学習しないでしょ。
そんなわけで独習Cを買ってそれだけでも個人的には大満足です。
878デフォルトの名無しさん:2008/12/12(金) 14:26:03
さすがにCとC#を変わらないと言い切るのはどうかな…
879デフォルトの名無しさん:2008/12/12(金) 15:15:13
本買っただけで満足する人にとってはCもC#もかわらんのだろう
880デフォルトの名無しさん:2008/12/12(金) 15:18:55
>>877は神GTOのコピペ改変だからマジレスするなよ馬鹿
881デフォルトの名無しさん:2008/12/12(金) 15:37:26
Outlook2007にて新規メールの宛先(連絡先)一覧をカスタマイズしたいと思います。

宛先ボタンを押したときに自分で作成したフォームを表示して
アドレスを渡す方法についてヒントもしくは書籍などがあれば紹介して下さい。
882デフォルトの名無しさん:2008/12/12(金) 15:51:54
>>881
どうしてそういう事ができると思ったのか教えて下さい
883デフォルトの名無しさん:2008/12/12(金) 16:01:47
パソコンは何でも出来ると教わりました。
884デフォルトの名無しさん:2008/12/12(金) 16:03:25
>>881
http://msdn.microsoft.com/ja-jp/library/bb157886.aspx
ここらへんを出発点に調べてくださいな。

>>882
881そのものずばりをやったことはないが、そのくらいできそうな気がするよ。
885デフォルトの名無しさん:2008/12/12(金) 16:03:41
ではパソコンを自爆させて死んでください。
886デフォルトの名無しさん:2008/12/12(金) 16:23:19
>>882
http://www.tecinfosys.co.jp/products/office/outlook/index.html
こういうのを見かけたので出来るのかなと思ったのですが、よく見たらカスタムアドインでした。

>>884
C++をすっ飛ばしてC#を始めた私には「メッセージ」という単語に非常に抵抗があるのですが、
がんばって読んでみます。

ありがとうございました。
887デフォルトの名無しさん:2008/12/12(金) 16:44:05
Math.PI の値を変えたいんだけど
やり方教えて下さいorz
888デフォルトの名無しさん:2008/12/12(金) 16:47:10
プロパティをオーバーライドでもすれば
889デフォルトの名無しさん:2008/12/12(金) 16:52:29
PIの値を変えるって数学を根底から作り直すってことだろ
スレ違いだな
890デフォルトの名無しさん:2008/12/12(金) 17:23:45
およそ3と教えたくらいで大げさな
891858:2008/12/12(金) 17:27:30
皆さん返答ありがとうございます。
やはりスレ違いですか。
いや、FirefoxのアドオンRESTTestやWebDavクライアントのCarotDAVでOPTIONSリクエストを同じサーバー(当然Basic認証)に送っても
リクエストは一回だけだから何でかなぁと思ったのがそもそもの始まりでした。

自分の理解力が根本的に足りないようです。
ありがとうございました。
892デフォルトの名無しさん:2008/12/12(金) 20:17:45
事前認証だったかのオプションもあったんでないかい?
893デフォルトの名無しさん:2008/12/12(金) 20:19:22
つうかほんとにリクエスト1回だったの?
何か勘違いしてない?
894891:2008/12/13(土) 03:55:42
ええと、解決しました。

リクエストで

request.Headers.Add( "Authorization: Basic hogehogehogehoge=" );

みたく、Basic認証のヘッダを自前くっつけて、認証方法を指定したら1回だけになりました。

ttp://ja.wikipedia.org/wiki/Basic%E8%AA%8D%E8%A8%BC

Basic認証に関するwikiページの例1,2をすっ飛ばすことができたようです。

だから何だって話ですが、通信量は削減できた方がよいと思ったので・・・

895デフォルトの名無しさん:2008/12/13(土) 08:42:48
ウィンドウ枠線を消そうとしています。
xamlで、WindowStyle="None"では枠線が残るので、それをなんとかしたいと考えています。
>>845
早速ありがとうございます。
System.Windows.Window.ResizeMode();
をどう使えば?
msdnを見たのですが、よくわかりませんでした…。

public Window1() {
InitializeComponent();
System.Windows.Window.ResizeMode();
}

としてみて、
エラー 1 実行不可能なメンバ 'System.Windows.Window.ResizeMode' をメソッドのように使用することはできません。
で止まってます。()内になにか入れるのかと思ったのですが、IDEの候補にはNoResizeはみあたりませんでした。
そもそもResizeModeもなくて、ResizeModeProperty()しか見当たらないです。

xamlのほうかと思って、
<Window
WindowStyle="None">
<object ResizeMode="NoResize" />
としてみましたが、
エラー 1 型 'object' が見つかりませんでした。アセンブリ参照が失われていないか、また、すべてのアセンブリがビルドされているかを確認してください。
896デフォルトの名無しさん:2008/12/13(土) 08:49:40
>>895
MSDNのどこにメソッドだなんて書いてるんだよ

ttp://msdn.microsoft.com/ja-jp/library/system.windows.window.resizemode.aspx
897デフォルトの名無しさん:2008/12/13(土) 08:56:57
休日の朝からカリカリするのは良くないぜ。
898デフォルトの名無しさん:2008/12/13(土) 09:01:51
いいなぁ、休日なんだ・・・
会社にいるおいら涙目・・・
899デフォルトの名無しさん:2008/12/13(土) 09:48:59
>>896
早速ありがとうございます。
プロパティって、どう使うんでしょう?
900デフォルトの名無しさん:2008/12/13(土) 10:22:56
工エエェェ(´д`)ェェエエ工
901デフォルトの名無しさん:2008/12/13(土) 10:41:27
>>894
だから本来はPreAuthenticateを有効にするの。
勝手にBASIC認証のヘッダ飛ばすなんて普通はやるべきじゃない。
902デフォルトの名無しさん:2008/12/13(土) 10:46:09
プロパティですが、
オブジェクト名.プロパティ名 = プロパティに設定する値;
と使うことはわかりました。
Window.ResizeModeProperty = None;
としてみましたが、
エラー 1 名前 'None' は現在のコンテキスト内に存在しません。
となってます。
903デフォルトの名無しさん:2008/12/13(土) 10:48:50
初心者向けの本とか読んだ方が早いと思うよ。
904デフォルトの名無しさん:2008/12/13(土) 11:05:48
なんでNoneなんだ・・・
905デフォルトの名無しさん:2008/12/13(土) 11:14:01
>>903
WPFの本見ても、ウィンドウスタイルでNone/ToolWindow/SingleBorderWindow/TheeDBorderWindowくらいしかのってないです。

BorderThickness="0"
というのを試してみたが、まだ枠がある…。
906デフォルトの名無しさん:2008/12/13(土) 11:17:04
>>905
むりぽ
907デフォルトの名無しさん:2008/12/13(土) 13:19:29
どこのNoneさんか明示してないから困っているんです
908デフォルトの名無しさん:2008/12/13(土) 13:30:13
CryptoStream()で暗号化しても0は0なの?
書き込んだファイルをバイナリエディタで開いてみたけどそういう風に見えた
909908:2008/12/13(土) 14:00:15
勘違いだった
910デフォルトの名無しさん:2008/12/13(土) 14:04:00
Process.Start(@"c:\1.txt") ;

この状態で1.txtが無かったらエラーになるのはわかるのですが
このエラーを回避するにはこの文の後に
どのように処理すれば良いのでしょうか??
911デフォルトの名無しさん:2008/12/13(土) 14:06:31
エラーってなんだよ。
912デフォルトの名無しさん:2008/12/13(土) 14:15:59
ファイルが無いなら呼びださなければいいじゃない。
913デフォルトの名無しさん:2008/12/13(土) 14:17:14
C# try catchでググれ
914910:2008/12/13(土) 14:17:43
エラー内容ですが
アプリケーションのコンポーネントでハンドルしていない例外が発生しました。
ファイル名が指定されていない為、プロセスが開始できません。

起動する前に、ファイルがあるか?
それともエラーの前ににメッセージを出すか?
と言う判断の方法でしょうか?
イマイチわからないのですが・・・・
915910:2008/12/13(土) 14:24:19
>>913

ありがとうございます。
ググってみます。
916デフォルトの名無しさん:2008/12/13(土) 15:00:46
オブジェクト?を変数に入れたいんですが、
たとえば↓の○のようにしたいです。

textbox1.Text = "1";
○ = textbox1;
MessageBox.Show( ○.Text );

できるなら○の変数はどのように宣言したらいいですか?
初歩的な質問かもしれませんがよろしくお願いします。
917デフォルトの名無しさん:2008/12/13(土) 15:14:59
textbox1の型はなんなの?
918デフォルトの名無しさん:2008/12/13(土) 15:20:24
textbox1.Text = "1";
TextBox t = textbox1;
MessageBox.Show(t.Text);
919デフォルトの名無しさん:2008/12/13(土) 15:21:25
っていうか、そのレベルの話はおとなしく本読んで習得しようよ。
本買う金がなくてもc#ならウェブ上の情報にも事欠かないぞ。
920デフォルトの名無しさん:2008/12/13(土) 15:34:08
>>918
ありがとうございます!
これで400行から200行にできます○┐

>>919
精進します
921デフォルトの名無しさん:2008/12/13(土) 16:13:01
初心者向けだからこんなもんだろ
入門サイトくらい一通り読んでおいても良いだろうとは思うが
922デフォルトの名無しさん:2008/12/13(土) 16:20:47
うん。いいと思う。
だけど

>これで400行から200行にできます

これはww
923デフォルトの名無しさん:2008/12/13(土) 18:41:49
作りたいものを作りながら覚えるのはいいけど,本当に最低限の知識は先に入れといた方がいい
どう考えても時間の無駄すぎる
924デフォルトの名無しさん:2008/12/13(土) 21:53:28
集合演算に特化しかクラスってありますか?
union、intersection、difference、symmetric differenceなどが
高速で計算されると助かるのですが
925デフォルトの名無しさん:2008/12/13(土) 21:57:10
HashSet
926デフォルトの名無しさん:2008/12/13(土) 21:58:16
高速じゃないけど一応LINQも
927デフォルトの名無しさん:2008/12/13(土) 22:14:40
>>923

その最低限の知識を身につける為に作るのでは?
928デフォルトの名無しさん:2008/12/13(土) 22:17:05
形式的な演算のみが必要で途中結果が不要で最終結果さえ得られればいいなら
LINQ to Objectsの方が速いかもしれんね
929デフォルトの名無しさん:2008/12/13(土) 22:17:50
.NET3.5だとHashSetというのが追加されたんですね
これは便利そうですが、直積は作れないみたいですね

LINQでも集合を扱えるんですか?
930デフォルトの名無しさん:2008/12/13(土) 22:49:16
LINQならEnumerableクラスにいろいろある(Union, Intersect, Except, ...)
直積はこうかな
var c = from x in a
 from y in b
 select new { X = x, Y = y };
これはHashSetでもLINQでも同じはず
931デフォルトの名無しさん:2008/12/14(日) 00:08:56
ライブラリに関する知識は兎も角、言語仕様は勉強しろとは思うな

俺は実践で英会話を学ぶぜとか意気込んでも、語彙0じゃあどうしようもない
932デフォルトの名無しさん:2008/12/14(日) 03:51:48
tabcontrolのtabpageのタブの部分を右クリックしてイベントを発生させたいのですが、
mouseclickイベントではタブの部分をクリックしてもイベントが発生しないみたい
どうすればいいのおしえておしえて
933デフォルトの名無しさん:2008/12/14(日) 07:27:48
実行時に例外ダイアログが表示されても[続行]ボタンがあるから強制終了にならないけど、これはSDKのサポート?
開発環境無しの人でも同じ?
934デフォルトの名無しさん:2008/12/14(日) 11:33:19
>>930
ありがとう
こういう集合演算もどきも書けるんだね
935デフォルトの名無しさん:2008/12/14(日) 16:59:31
>>933
同じ。そのダイアログを変更したいなら「C# 未対処例外」でぐぐれ
936デフォルトの名無しさん:2008/12/14(日) 22:39:16
Formの内法サイズを知るにはどうしたらよいのでしょうか?
外寸から知ろうと思っても、画面のデザイン
(Windowsクラシックスタイルと、Windows XPスタイル)
によってタイトルバーの大きさが変わってしまいます..
937デフォルトの名無しさん:2008/12/14(日) 22:43:59
>>936
解決しました。
ClientSizeプロパティを見ればいいんですね。
938デフォルトの名無しさん:2008/12/14(日) 22:44:11
ClientSizeとは違うのか?
939デフォルトの名無しさん:2008/12/14(日) 22:45:12
>>936
「クライアント領域」とは何か調べる。
っていうか、だからそのレベルの話は素直に本でも読んで覚えなって。
940デフォルトの名無しさん:2008/12/15(月) 01:43:29
TabControlに、新しいTabPageを挿入したいんだけど、
Addはできるのに、Insertはできない。
どうして?!

// これを挿入したい
TabPage tp = new TabPage("test");

// 挿入されない。何も変化しない。
tabControl1.TabPages.Insert( 0, tp );

// これはちゃんと追加される
tabControl1.TabPages.Add( tp );

941デフォルトの名無しさん:2008/12/15(月) 03:55:26
Controls.Add()を呼んでないから
942デフォルトの名無しさん:2008/12/15(月) 09:17:12
insert の前に CreateControl だっけ。
とりあえずハンドルがある状態で呼んでみるとどうなるよ
943デフォルトの名無しさん:2008/12/15(月) 10:39:19
適当な回答するなよ
Insertしてもちゃんと内部でControls.Add()してるぞ

SuspendLayoutしっぱなしとかじゃね?
944デフォルトの名無しさん:2008/12/15(月) 11:35:04
ResumeLayoutしても変わりません。
CreateControlというのは分かりません。何というクラスのメソッドですか?
TabPageのインスタンスを先に作っておいてInsertしてもダメです。

新規プロジェクトでTabControlを1つおき、
コンストラクタのInitializeComponent()の直後でInsertまたはAddする。
これだけなのに、
Add()では追加され、
Insert()では何も起きません。
ヘルプを見ても、Add()とInsert()の使い方にに
決定的な違いがあるようには読めません。

どうしたら良いのでしょう…
945デフォルトの名無しさん:2008/12/15(月) 11:39:44
コンストラクタとは、Form1のコンストラクタです。

コンストラクタ以外のところ、
たとえば何かのイベントのメソッドに書いても同じです。
946デフォルトの名無しさん:2008/12/15(月) 11:44:03
tabControl1.TabPages.Insert( 1, tp );

1にしてみる
947デフォルトの名無しさん:2008/12/15(月) 12:12:24
1にしてもダメでした
948デフォルトの名無しさん:2008/12/15(月) 12:15:43
VC#の右側にあるソリューションエクスプローラのバーをVC++のように左に持ってきたいのですがこれってどうやるのでしょうか?
949デフォルトの名無しさん:2008/12/15(月) 12:20:37
上の青いところをドラッグアンドドロップか、ソリューションエクスプローラだけ移動したい場合(タブで他のウィンドウと一緒の場合)
ソリューションエクスプローラのタブのところをドラッグアンドドロップ
950デフォルトの名無しさん:2008/12/15(月) 12:33:16
>>949
できました、ありがとう
951デフォルトの名無しさん:2008/12/15(月) 12:47:08
>>943
これ、確かマイナーなバグなんだよ。まだ直ってなかったのか。
ControlCollectionがInsertをサポートしてないのにタブコントロールが
TCM_INSERTITEM をサポートしてるからそれを使おうとしてハンドルの遅延生成の場合で
問題が起こる感じだった気がする前調べたら。
952デフォルトの名無しさん:2008/12/15(月) 13:02:19
なんだ、バグなんw
953デフォルトの名無しさん:2008/12/15(月) 14:07:14
ググってもそれらしい回答が見つからなかったので質問です。

axwebbrowserを使ったアプリケーションを作ったのですが、

・AxInterop.SHDocVw.dll
・Interop.SHDocVw.dll

この2つのdllが再頒布可能かどうか分かりません。

再頒布しても大丈夫なのでしょうか?
駄目なら、お手数ですがダウンロードサイトを出してもらえないでしょうか?

よろしくお願いします。
954デフォルトの名無しさん:2008/12/15(月) 18:21:49
正式なビルドで無くても起動するか試した?
955デフォルトの名無しさん:2008/12/15(月) 18:24:21
ラッパーは配布しても大丈夫。
.NET 2.0 から WebBrowser は Windows.Forms に含まれてるけどね
956デフォルトの名無しさん:2008/12/15(月) 19:07:07
>>951
なんと、バグでしたか。
やっとすっきりしました。
ありがとう!

Insert()はあきらめて、Add()で
済ます方法を考えます
957デフォルトの名無しさん:2008/12/15(月) 19:47:37
AddしてからInsertできないのか?
958デフォルトの名無しさん:2008/12/15(月) 19:53:31
Addした時点で、末尾に追加されます。
その次にInsertしても何も起きません。
結果として、末尾に1つTabPageが追加されるだけです。
(つまり、単にAddだけするのと同じ結果になります)
959デフォルトの名無しさん:2008/12/15(月) 20:30:03
IntPtr hwnd = tabPage.Handle;
ってやってからInsertしたらどうなる?
960951:2008/12/15(月) 20:40:44
>>956
あーすまん。
だから TabControl.CreateControl を Insert の前に呼んでみてという話に続くんだ。
961デフォルトの名無しさん:2008/12/15(月) 20:54:11
>>960
先にtabControl1.CreateControl()を呼んでもダメでした。

全てのインスタンス生成が終わったあと、
MouseClick等のコールバック関数の中で
Insert()しても、ダメでしたので、
インスタンス生成順序とか、
そういった問題ではないと思います。

Add()とInsert()を交互に呼んでも、
Addは全て動作し、Insertは全て無視されます。

どんなシチュエーションでも、
Add()では追加されるのに、Insertでは挿入されない。
これはもう、TabControl.TabPages.Insert()の実装にバグがあるとしか...
962デフォルトの名無しさん:2008/12/15(月) 22:41:12
>>961
分かった。
いろんなところでInsertしてみると、確かにInsertされないことがある。
特にプログラム開始直後。
で、Debug.Assert(tabControl1.TabPages.Count != 0);
してみると、InsertできないところではAssertに失敗するので、
・Countが0だとその前の位置にはInsertできない
・TabControlにTabPagesの追加が完了するのは遅い
ってことだと思う。

バグではなくたぶん仕様なんだとは思うが、例外上げてくれてもいいのにね。

963デフォルトの名無しさん:2008/12/15(月) 23:07:53
>>962は忘れて。これで動いた。謎。

InitializeComponent();
//おまじない?
IntPtr h = tabControl1.Handle;
TabPage tp = new TabPage("test");
tabControl1.TabPages.Add(tp);
tabControl1.TabPages.Insert(0, tp);
964デフォルトの名無しさん:2008/12/16(火) 00:13:54
>>959
>>963
これで、たしかにうまくいきますね。
素晴らしい!
ありがとうございます!
965デフォルトの名無しさん:2008/12/16(火) 00:48:03
これで普通に動いたけど?

tabControl.CreateControl();
tabControl.TabPages.Add(new TabPage("tab1"));
tabControl.TabPages.Insert(1, new TabPage("tab2"));

ソース見れば分かるが、
ハンドル未作成のときの処理がAddにはあるが、Insertにはない

因みに、フレームワークのバージョンは2.0 SP2
966デフォルトの名無しさん:2008/12/16(火) 04:29:20
X,Yというプロパティを持っているクラスaを引数とて渡し、
X*X、Y*Yの値を求める2つの関数があります。

XnoJijhou(a); //X*Xを求める
YnoJijhou(a); //Y*Yを求める

この2関数は、中身は似たようなものなので1つにまとめて
Jijhou(a,0);
とすればX*Xを求め
Jijhou(a,1);
とすれY*Yを求めるような関数を作ることは可能ですか?

Jijhou( amime a, int index)
{
if(index == 0)
{
return a.X * a.X;
}

return a.Y*a.Y;
}
とかすれば一応OKなのですが、この方法だと
プロパティの数が増えるとメンドクサイことになりそうなので、
もっと良い方法があれば教えて欲しいです。
967デフォルトの名無しさん:2008/12/16(火) 05:09:49
そんな馬鹿な考えは今すぐ捨てろ

2乗したいだけなら a.X*a.X か Math.Pow(a.X, 2) でいいし、有り得ない例えだが、
50個のプロパティの2乗和を求めるような場合でもリフレクションかLINQを使えばいい

2乗値を提供することに意味があるクラスなら個別にプロパティを作る
XSquared, YSquared, etc.
968デフォルトの名無しさん:2008/12/16(火) 05:19:35
上でTabPages.Insertはマイナーなバグって事になったけど
メジャーなバグってなんかある?
969953:2008/12/16(火) 10:17:40
>>954,955
可能でしたか、安心しました。
ありがとうございました。
970デフォルトの名無しさん:2008/12/16(火) 14:53:16
IE6で使われているようなツールバーのコントロールを
自作アプリに使うにはどうしたらいいのでしょうか?
VS2008のToolStripは見た目が好きじゃないので…
971デフォルトの名無しさん:2008/12/16(火) 15:22:33
ToolStripManager.RenderMode = ToolStripManagerRenderMode.System;
でそれっぽい見た目になるよ
972デフォルトの名無しさん:2008/12/16(火) 16:27:10
switch文などでフォールスルーしたいときはどうするのが一般的でしょうか?
973デフォルトの名無しさん:2008/12/16(火) 16:40:01
goto case
974デフォルトの名無しさん:2008/12/16(火) 16:57:23
>>971
できました、ありがとうございました!
975デフォルトの名無しさん:2008/12/16(火) 17:32:37
Vistaでもモッコリツールバーなの?
976デフォルトの名無しさん:2008/12/16(火) 21:37:21
>>972
条件分岐 (C# によるプログラミング入門)
http://ufcpp.net/study/csharp/st_branch.html
977デフォルトの名無しさん:2008/12/16(火) 23:41:36
switchの方が効率的なコード吐くんだよな
昔中間言語を見たり、実際に速度測ったりしたけど
978デフォルトの名無しさん:2008/12/17(水) 00:00:42
MSIL自体がswitch相当の命令持ってて、
それのJIT結果は、case数が少なかったらif-else相当のコード、
多かったらジャンプ先アドレスのテーブル参照になったんじゃなかったかな、確か。
979デフォルトの名無しさん:2008/12/17(水) 00:06:37
JITじゃなくてcscが吐くMSILがそうなってた気がする,確か。
980デフォルトの名無しさん:2008/12/17(水) 00:44:08
ねえ

MSDNのC#プログラミングガイド、コレクションクラスの下のノードって
?常和?常?理って文字化けしてるんだけど通常例外処理でいいの?
子ノードは例外処理だけど
981デフォルトの名無しさん:2008/12/17(水) 01:04:26
元は Exception and Exception handling だから
例外と例外処理だろう
982デフォルトの名無しさん:2008/12/17(水) 03:03:42
>>978
if-elseだと逆にいくらケース数が多くても
switch相当のコードにはならねいんだよな
983デフォルトの名無しさん:2008/12/17(水) 10:59:31
入門書買って来たんですがポインタってなくなったんですか?
984デフォルトの名無しさん:2008/12/17(水) 11:03:02
よい子は使っちゃダメだぞって感じで残ってるよ。
unsafeで拘束解除ってのりだ。
985デフォルトの名無しさん:2008/12/17(水) 11:35:52
datagridviewでコンボボックスで一覧表示で選択できるようなものを
作ったのですが、ファンクションキーに処理を割り当てているため
F4でリストをドロップ表示させようと思うと割り当てた動作も
動きつつドロップされます
そこでフォーカスが当たっているカラムのタイプを判定したいのですが
どうやれば良いのかが分らないので教えてください。
986デフォルトの名無しさん:2008/12/17(水) 11:42:39
selectedcells
987デフォルトの名無しさん:2008/12/17(水) 12:22:34
>>986
ありがとうございます
988デフォルトの名無しさん:2008/12/17(水) 18:07:13
コンストラクタにパラメータ付けてもいいの?
989デフォルトの名無しさん:2008/12/17(水) 18:09:47
ご自由にどうぞ
可能なら引数なしのオーバーロードも用意すればリフレクションとの相性が良くなって何かと便利
990デフォルトの名無しさん:2008/12/17(水) 21:05:06
C#でWindowsプログラミングをやってみたいのですが、
Windowsプログラミング(.net?)について何か良い本はないでしょうか?
文法が載ったコンソール画面で処理をする入門本は持っています。
991デフォルトの名無しさん:2008/12/17(水) 21:20:52
C#で簡単なデーターベースを扱いたい場合は何を使うのが一般的ですか?

用途は、ファイルにタグ付けみたいなことをしたいのです。
あらかじめファイルのリストを登録しておいて(1000アイテムぐらい)、
〜タグが付いているファイルを列挙するのが主な目的です。
# えっちな画像をタグ管理するソフトだと思っていただいても構いません

ちなみにデーターベースの経験全く持ってゼロです
(遙か昔、DelphiからBDE経由でParadoxDBのデータベースをちょっと触ったことぐらいしかありません)

規模としてはテーブル一つあたり1000〜4000項目 位を登録する予定です。
また、画像用、音楽用とテーブルを用意するつもりですが、
一つのテーブルにまとめて 画像タグ、音楽タグ などをつけた方が良いでしょうか?
(そうすると 3万近くの項目を扱わなければなりません)

データーベースサーバを必要としないシステムが良いです。
また、友人にソフトウェアを渡す場合もあり得るので、出来るだけ単体で配布できるものが良いです。

この用途で一番お手軽な方法は何でしょう?
SQLite(一応追加で入れてみた)? SQL Server Compact ?
992デフォルトの名無しさん:2008/12/17(水) 21:50:12
下記のサイトに掲載されています site-lisp 系のプログラムをC#に移植しようと思っています。

http://xyzzy.s53.xrea.com/wiki/index.php?cmd=read&page=trash%2F%A4%CF%A4%AC%A4%AD%BA%EE%B2%C8%20Version%204.10%A4%CE%BD%BB%BD%EA%CF%BF%A4%F2CSV%A4%CB%CA%D1%B4%B9&word=hwa-to-csv

上記のlispプログラムの核心部分は

(replace-regexp-whole "\n" "\X0e")
(replace-regexp-whole "\X0\X0\X2\X0\X0\X0\X0\X0\X1\X0\X0\X0" "\n")
(replace-regexp-whole ".*?\X2\X0\X1\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0.\X0?\X0" "\n")
(replace-regexp-whole "\Xd6fe\Xd7ff.\Xd7ff" ",")
(replace-regexp-whole "\n," "\n")
(replace-regexp-whole "[\X017f\X1329\X164f]" ",")
(replace-regexp-whole "[\Xd6ff\Xd7ff\Xd6fe\Xd7fe]" "")
(replace-regexp-whole "[\X00-\X09\X0b-\X1f]" "")

という文字列置換に尽きるわけですがこれを下記の通りC#に移植してみました

buffer.Replace("\n", @"\X0e");
buffer.Replace(@"\X0\X0\X2\X0\X0\X0\X0\X0\X1\X0\X0\X0", "\n");
buffer.Replace(@".*?\X2\X0\X1\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0\X0.\X0?\X0", "\n");
buffer.Replace(@"\Xd6fe\Xd7ff.\Xd7ff", ",");
buffer.Replace("\n,", "\n");
buffer.Replace(@"[\X017f\X1329\X164f]", ",");
buffer.Replace(@"[\Xd6ff\Xd7ff\Xd6fe\Xd7fe]", "");
buffer.Replace(@"[\X00-\X09\X0b-\X1f]", "");
※bufferとは文字列を格納しているstring型オブジェクト

しかし出力された文字列を見ると文字列が崩れて読めません(本来ならば綺麗なテキストになるはずです)
C#での文字列の置換部分にミスがあったのでしょうか?
993デフォルトの名無しさん:2008/12/17(水) 22:01:23
簡易的なダウンローダーを作成しているのですが

HttpRequest req;
HttpResponse res;
Stream stm;
FileStream fs;

Try
{
〜ダウンロード処理〜
}
Catch
{
〜例外処理〜
}
Finally
{
stm.Close();
fs.Close();
}

今はこんな感じでダウンロードは1回のみで終了しています。
これをダウンロードの完了または例外のスローが指定回数になるまで
ダウンロードを試行したいのですがどうやればよいか思いつきません。
GoToを使ってもCatchステートメントからTryステートメントのラベルへ
戻すことはできないみたいですしどうすればよいでしょうか?
994デフォルトの名無しさん:2008/12/17(水) 22:06:18
>>992
なんだか分かりませんが
元コードのほうは正規表現つかってんじゃない?
C#のほうは単純にstringを置換してるだけっしょ?
Regexクラス使わないと駄目じゃん
995デフォルトの名無しさん:2008/12/17(水) 22:11:37
>>993
forやwhileで囲め
gotoはブロックの中へは飛べない
仮にgotoでできたとしても絶対ダメ
gotoで上に戻るのは禁じ手
996デフォルトの名無しさん:2008/12/17(水) 22:12:10
>>993
すぐ再試行してもダメなものはダメじゃね?
997993:2008/12/17(水) 22:15:47
ちょっと次スレ立てます
998デフォルトの名無しさん:2008/12/17(水) 22:16:33
その意気やよし
999993:2008/12/17(水) 22:20:50
ふらっとC#,C♯,C#(初心者用) Part35
http://pc11.2ch.net/test/read.cgi/tech/1229519838/
1000デフォルトの名無しさん:2008/12/17(水) 22:21:21
>>992
>>994の話もそうだけど

buffer.Replace("\n", @"\X0e");

は何もしてないよ。戻り値捨ててるやん
stringクラスは不変だからね
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。