ふらっとC#,C♯,C#(初心者用) Part34
1 :
デフォルトの名無しさん :
2008/11/24(月) 19:16:25 このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980 を踏んだ人は新スレを建てて下さい。
>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。
2 :
デフォルトの名無しさん :2008/11/24(月) 19:16:56
3 :
デフォルトの名無しさん :2008/11/24(月) 19:17:27
4 :
デフォルトの名無しさん :2008/11/24(月) 19:17:58
いちょつ
前スレ997さん ソートされてれば何か速い方法あるんじゃないかなとは思ってたんですが、 Array.FindIndex滅茶苦茶速いですね・・・助言ありがとうございました
[デザイナの表示]が無い新たなpartical crass Form1のファイルはどうやって作るんですか? これは独自メソッドだけのファイルでデザイナ要らないんです
独自メソッド内でthis.Sizeとかthis.が多いからそのフォームのクラスにしないと駄目なんです
クラスを追加して、パーシャルにすればいいだろよ
12 :
デフォルトの名無しさん :2008/11/25(火) 04:07:24
マルチウィンドウのアプリケーション作るときって 専用クラス作ってインスタンスを纏めて管理した方がやっぱりいいの?
>>12 やりたいことによるだろ。各ウィンドウがどういう関係なのか、だな。
>>13 Form1がメインウィンドウ、Form2以下がツールウィンドウです
とりあえず、わけわからなくなりそうなので今は専用クラスで管理してます
おおざっぱに書くと↓みたいな感じで
class FormsInstance
{
public FormsInstance()
{
}
public Form1 F1{ }
public Form2 F2{ }
public Form3 F3{ }
}
それだとグローバルと変わらないよ 理想は,フォームは隠蔽して public void ShowHoge(Hoge hoge) { hogeViewerForm.Hoge = hoge; } みたいに目的で考える
16 :
デフォルトの名無しさん :2008/11/25(火) 15:09:59
日本医師会総合政策研究機構 「’02公的年金基積立金の運用実態の研究」より 不景気どこ吹く風の儲かり続ける官僚会社とは・・・?? ・存在するはずの年金積立金 143兆9858億円 ・実上’破綻’と評価される特殊法人や地方自 87兆8857億円 治体 などに融資され回収見込みがない積立金 ・残っている年金積立金 56兆1001億円 (年金食い潰しの主な泥棒公益法人) ①住宅金融公庫 23兆4518億円 ②地方自治体 17兆5000億円 ③年金資金運用基金 10兆6150億円 ④特別会計(裏国家予算) 10兆6000億円 ⑤日本政策投資銀行 4兆3490億円 ⑥国際協力銀行 3兆9683億円 ⑦都市基盤整備公団 3兆9017億円 ⑧日本道路公団 3兆5212億円 ⑨国民生活金融公庫 2兆7982億円 ⑩農林漁業金融公庫 1兆 823億円 ⑪福祉医療機構 9800億円 ⑫中小企業金融公庫 8478億円 ⑬首都高速道路公団 6196億円 ⑭阪神高速道路公団 5292億円 ⑮沖縄振興開発金融公庫 4660億円 ⑯鉄道建設。運輸整備機構 3158億円 ⑰本州四国連絡橋公団 3052億円 ⑱日本育英会 2871億円 ⑲ 電源開発 2795億円 ⑳石油公団 1431億円 レポートを行った森宏一郎氏は、「特殊法人だけで約60兆円の積立金を食い潰しています。特 殊法人は営利団体ではないので、これらの’借り入れ’は税金で返済しているだけです。特殊法 人へ流れた年金は役人の高額給与や退職金、公共事業、傘下のグループ企業等に食い潰され ているのが実情です。」とコメント。 また、同氏が慶大客員教授・土居丈朗氏と、年金原資を’借り入れ’している特殊法人と自治体 の財務分析をおこなったところ、なんと24機関がCCランクの格付けで、事実上「経営破たん状態」 であることが判明した。
見た目サンプル用に多数のラジオボタンを置いてしまったのですが、後からグループ化 することは可能でしょうか。
できるよ
19 :
17 :2008/11/25(火) 17:23:59
やり方教えて下さいませ。
ドラッグ&ドロップ
21 :
17 :2008/11/25(火) 19:12:49
あれれ、それでできますか? GroupBoxやPanelをドラッグして、グループ化したいラジオボタンを囲ったのですがだめでした。 何かコツが有りますでしょうか。
それでいいはずだけど
そうなのですか。 念のためですが、普通はGroupBoxを置いてそこにドラッグしますが、今やりたいのはその逆です。 いろいろ試してみます。 何か有りましたらまたよろしく。
>普通はGroupBoxを置いてそこにドラッグし たばあいのhoge.Designer.csを見たらいいんじゃね
>>23 1つ聞くけど、君はファイルを別のフォルダにコピーや移動するときとか、
あるいはアプリでファイルを開こうって時に、フォルダやアプリの方をファイルに
ドラッグ&ドロップするのかい?w
順序なんかどうでもいいよ 目的のものが得られるかそうでないか、それだけ
27 :
16 :2008/11/25(火) 21:46:19
>>15 実際のプロパティはprivateになっているのでグローバルとまでは行かないですが
おっしゃるとおりもう少し検討してみます。
正規表現で、文末を表現するにはどうしたらよいですか? 行頭・行末は、^$でできるのですが。 ^$* とか?
イベントハンドラ内でProcess.Start(string,string)の後に速攻でreturnすると CallWindowProcでAccessViolationException起こして止まる時があるんだけど何でだよ? Closeしても駄目だったが、WaitForInputIdleしたら起こらなくなった
イミフ
>>28 シングルラインモードなら$が文末って言えるんじゃねえか?
>>32 それが、シングルラインじゃないんですよ…。
>>34 テキストファイルを読み込んで、その末尾の文字を知りたいのです。
というか、末尾の文字とマッチングしたいのです。
それってReadToEndでもいいような用途じゃないのか
文字数分だけseekでもなんでもすりゃいいじゃん
>>36 当然、ファイルはReadToEndしてます。
で、最後の文字を知るには?
ってところで困ってるのです。
>>37 もうすこし詳しくお願いします。
string str = reader.ReadToEnd(); char lastChar = str[str.Length-1];
プロパティくらい調べようぜー
ここってさあ、C#初心者のためのスレであって 日本語初心者のスレじゃないはずだよなあ。
ここは初心者用のスレであって、C#の初心者のためのスレとは明言されてませんよ
そういう屁理屈はいらん
>>38 >>32 string str = "ahoうんこ\nbaka\nmanuke\nうんこ";
Regex re = new Regex( "うんこ$", RegexOptions.Singleline );
MessageBox.Show( re.Replace( str, "まんこ" ) );
これやってみれば分かる
ガキかお前
このスレは煽るだけの回答者が一人常駐してるな
煽るだけなのは回答者とは言わないな
>>41 煽るだけに来るなんて何がたのしいんだ
氏ねば?
ぶw
>>28 string str = "abc \n def \n ghi";
Regex re = new Regex(@".\z");
Console.WriteLine(re.Match(str).Value);
>>45 ま た お 前 か
ファイルの存在しないデータをZIP32J.DLLで圧縮する方法などはありますでしょうか?
そういう小器用な機能はなさそうだね DeflateStreamでも使ってみれば
しかしいつ見ても統合アーカイバプロジェクトのAPIって最低だな
見なきゃいい
57 :
53 :2008/11/26(水) 14:48:16
パスワードも掛けたいのですがDeflateStreamでは無理なのでしょうか、 見つけきらないだけ?。 ところでgoogleで検索する時に自動補完される機能が激しく邪魔なのは おらだけ?
CryptoStreamでも噛ませろ
Googleの方は検索クエリの候補を表示しない設定にすればいいだけ
なんでgoogleの検索の自動補完まで面倒みなくちゃいけないんだ つぎはなんだ? おしめの交換か?
うん
googleの自動補完が使いたいがためにスレイプニルの検索バーを使わずに わざわざgoogleのホームページまで行って検索するよ。 わざわざって言ってもマウスジェスチャーですぐだけどな。 googleツールバーがスレイプニルでも使えるようになればいいんだけどな。
スレ違いだ頭かち割って死ね
64bit環境がないんで試せないんですが 64bit環境だと (IntPtr)( -1 ) は new IntPtr( Int32 ) を呼んじゃって 0x00000000FFFFFFFFになっちゃったりします? 0xFFFFFFFFFFFFFFFFが欲しいときは(IntPtr)( -1L ) としなけりゃ駄目ですか?
0xffffffffffffffff になった。
符号拡張してくれるだろそりゃ
ところでビットローテートしたいときってベタに演算組み合わせるしかない?
質問です。 ListviewのColumnsで順番を変えてるんですが OKを押すと編集前に戻ってデザインで反映されません。 実行をしたら反映されてるんですが.. ColumsでOKを押すと一瞬だけ適用されたようになりますが すぐに戻ってしまいます。コレクションエディタでは反映されています。 対処法があれば教えてください。 OSはVistaでVS2008SP1です。 よろしくお願いします。
必要そうなとこだけオーバーロードすれば?
71は68だ
初心者にお勧めな書籍ってどんなのがいいでしょうか? なにから手をつけていいかわからない・・
独習C#がいいのでは なんでも書いてあるから
>>75 ありがとうございます!
明日買いに行ってみます
>>70 ちゃんと、DisplayIndex変えた?
一個一個設定するのが面倒なら、ここか相談室の過去ログに(ry
>>77 おお!できました!
ありがとうございます。
プログラム暦2ヶ月のとても初心者っぽい質問ですがよろしくお願いします。 classAの中に、画面から入力された変数 x と yがあります。 classAからclassBを呼び出し、classBの中にある、メソッドcalcのみでxとyを利用したく、 他のclassBのメソッドには影響を及ばせたくありません。 どんな風に変数をclassAからclassBに渡せばスマートでしょうか?
classBを呼び出すとかそもそも意味不明だが まあ普通にコンストラクタなりプロパティなりで渡してフィールドに持っとけばいいだろ なんで他のメソッドに影響が及ぶんだ?
>classBの中にある、メソッドcalcのみでxとyを利用したく
classAのもつx,yを、classBのメソッドのみにスコープを限定してアクセスしたいなら
メソッドの引数として渡すしかない
classB.calcメソッドがprivateならそもそも不可能
x,yのスコープをclassB限定になら
>>80 のやり方で。
メソッドの戻りの型って絶対固定なの? たとえば public object GetControl(){} みたいなメソッドでTextBoxの1~5までを戻したい時ってなんか良い方法ある? 戻り値をキャストしなくても良い方法であればかまいません。
>>82 ん?
public TextBox GetTextBox(){}
でなんか問題ある?
>>82 TextBoxが5個固定なら、StructやClassの配列でいいし、
可変ならList<TextBox>を返してあげればいいと思う。
将来的にTextBox5個以外にも渡すデータが増えそうなら、
ClassにしてClassのメンバにList<TextBox>を持たせればいいと思う。
C#で日本語も含めたメッセージの数値化とその復元のサンプルはありませんでしょうか?
TextBoxをそのまま扱う必要あるの? 可能ならStringで出し入れした方がいいよ
>>86 どういうメッセージをどういうルールで数値化したいのか
ラッパーって駄目なの?
>>86 メモ帳を開く
→日本語も含めたメッセージを書き込んで保存する
→バイナリエディタで開いてみる
→数値化されてる(゚д゚)ウマー
エェェェェェェェェェェェ
>>87 EnabledするTextBoxの一覧を抽出するメソッドという可能性もあるから、
なんとも言えないけどね
>>90 思いつくのだと、Base64にエンコードして、
その文字列をASCIIコードに変換して、16進数を二桁の数値に変換するとかかな?
何が一番簡単だろう。
>>85 List<>を渡したり返したりするのはガイドライン違反っていう話題が出た気がするけど。
それ以降、いちいちToArray()してやりとりしてる。
代わりにCollection<T>返せって話じゃなかったっけ
IList<T>とか
なんでList<>を返したらいかんの?
>公開するときは System.Collections.Generic.List ではなく、これを使用してください。
>System.Collections.ObjectModel.Collection
>System.Collections.ObjectModel.ReadOnlyCollection
>System.Collections.ObjectModel.KeyedCollection
>>97 継承を前提としていないので、仮想メンバを含んでいないかららしい。
その点、上であげたコレクションは継承を目的としているから利用してもいいらしい。
List<T>はCollection<T>やIList<T>にどうやって変換するんですか?
はじめからListに入れずCollectionに入れろってことでしょ
List<T>が使い易すぎてガイドラインのために使うななんて言われたら…
参考書で家計簿ソフト作りながら勉強中なんですが、 そこではデータセットの中身をテキストに変換してCSVで保存してるのですが、 データセットをそのままの形(と言うか特に変換しないまま)で保存することはできますか?
オブジェクトは抽象化されてるのでそのままの形とか言われても困る DataSet.WriteXml辺りでXMLとして保存するとか というかSQLServer使えば?
>>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で置いといて、プロパティや戻り値、引数で公開しないというガイドライン。
受け取っても返してもだめってことだよね? privateメンバやメソッド内で使ったList<T>の中身を返そうとしたら ToArray()するのが常套手段なのかな? 他に方法ある? 元からList<T>使わないって選択肢はあまりにも雑だと思うんだけど…。
>>105 再現性のないバグの温床とかそういう問題じゃなくて、
単に思想の問題なのか
ToArray()して返したりしたらオーバーヘッドが心配だな
だったららSSCLI見てごらん
110 :
103 :2008/11/28(金) 16:35:54
>>104 、さっそくどうもです。
参考書では項目と金額を1列ごとにテキストに変換してCSV化してるのですが、
外部で使う必要が無ければ、その抽象化されたデータをそのまま外部に保存して、
またそのまま読み込めないのかなと思いました。xlsとかmdbみたいな感じで。
いずれにしても、根本的な理由は分かりませんが、取りあえずそんなことは
できないということですね?
>>106 面倒だから、ArrayListに格納してキャストしてしまえ
それかList<T>をprivateに持つClassを自作して、それぞれのメソッドを自前で実装して、
そのClassをやりとりするとかww
>>107 自分もそう思ってたんだけど、調べた範囲では思想の問題なのかな?
という答えが多く見つかるね・・・
速くソートするために内部で値渡しになっていて、書き換えても本物は書き換わらないとかを
想像してたんだけど・・・
>>110 シリアライズ C# とかでぐぐってみては
オブジェクトをXMLやバイナリで書き出す方法がどっかに出てると思うよ
>もしプログラミング自体初心者で同じように考えたのならちょっと危ない気がする。 kwsk
116 :
110 :2008/11/28(金) 17:20:55
>>114 、どうも。
かなり初心者なんで、かなり危ないかも知れませんが、参考にさせて頂きます。
List<T>の話は定期的に出てきて、毎回ぐだぐだになるよな
駄目な理由は拡張性によるもの(
>>98 )だし、その解も戻り値の型を
1. インターフェイスにする(
>>96 )
2. 専用クラスにする(
>>105 )
と明確なんだが
>>117 1.どうやってList<T>をIList<T>にするの?
2.メソッド内でList<T>を生成して中身を返したいだけなのにいちいちクラスにして返さないといけない?
>>117 だめな理由がわかりにくいのが問題だと思う
拡張性といっても、素朴に使ってるぶんには何の問題もないから
>>117 明確なのは、その流れで見てきたからだろ
流れを知らない人が見にきていて、それは仕方のない事だから、同じ話題が繰り返されるわけで
「くだくだになる~明確なんだが」と、「またそんな話題かよ」みたいな、
非論理的で生産性の無いレスをするなら、どうすれば、そういう無駄な事が繰り返されずに済むのか、
テンプレ化するとか、まとめwikiを作るとか、プログラマらしく論理的に考えろよ。
と喧嘩を売ってみる
>>118 List<T>はIList<T>を実装してるよ?
IList<T>じゃなくあえてCollection<T>を返す場合がわからん ほとんどの場合IList<T>を返してりゃいいのかしら?
ということは戻り値をList<T>じゃなくてIList<T>にすればいいだけ? でも受け取る側はIList<T>を受け取っても、それをList<T>にするにはどうしたら…?
受け取る側はIList<T>として扱うの ひょっとしたらそのIList<T>はList<T>じゃなくてT[]かもしれないんだから 初めはList<T>だったのにいつの間にかT[]に摩り替えられるかもしれない
>>122 IEnumerable<T>、IList<T>、ICollection<T>、Collection<T>のどれかでいいらしいよ。
IListを継承しているから返すことはできるけど、
それでよければ、引数や戻り値はすべてObjectで返したりもらったりすればいよね?
と言うことと同じで、それでは意味がないと思う。
>>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]);
}
IList<T>→List<T>のダウンキャストはいいんですね。
IList<T>ってインタフェースなのにキャストとかあるの? そのへんちゃんと理解してないから良く分からんな
ダウンキャストしたら意味無いだろ 後でIList<T>の実体がList<T>じゃなくて別の実装に変えられて動かなくなっても文句言えんよ
>>128 キャストできなきゃインターフェイスなんてどうやって使うんだよw
>>129 じゃあ
>>126 じゃだめってことね?
だったらIList<T>返されてどうしろというのさ。
IList<T>のままで普通に使えるだろ List<T>にしたかったらList<T>のコンストラクタに渡せ
IList<T>のまま操作、List<T>の便利なメソッドとか使いたいならToList<T>()じゃね?
>>127 いいんだけど、それがまかり通るなら、なんでもいいわけで、
Objectを返り値とするメソッドを作って、そこにList<T>を返してやって、
受け取る側でキャストすればいいだけの話。
あくまで原則的な話なので、コンパイラがエラーをはかなければ
List<T>を返り値や引数にしてもまったく問題ない。
>>128 誤解を恐れずに言えば、多重継承みたいなもんだから、インターフェースにもキャストできるよ。
効能的には、ISyainを持つクラスには、必ずSyainName(int syainID)というメソッドがあるということを
保証しますよ的な使い方。
社員給料Classや、社員日報ClassなどがISyainインターフェースを持っていれば、
必ずSyaunName(int SyainID)メソッドがあることが保証されるので、
社員給料Classも社員日報Classも必要あればISyainにキャストして、SyainIDからSyainNameを取得できますよ
という仕様ですよということを示すもの。
>>134 ああそういうことか
IEnumerableとIEnumeratorの説明と合わせてみて分かった
>>131 自分で定めて、一人でコーディングしてて、
そのメソッドの返り型のIList<T>が、絶対にList<T>だと保証できるなら使用してもok
チームでやってるなら、IList<T>には、IList<T>を継承するすべてのClassが入る余地があるから駄目
FileInfo、DirectoryInfoが返すファイル名のリストって、 辞書順にソートされてることって保証されますか?
>>122 Collection<T>はパブリックな派生クラスを作るためにあるんだぜ
HogeCollection : Collection<Hoge>を返すことはあってもCollection<T>をそのまま返すことはまずない
しろうとなんでよくわからないけど、 IList<>で返したら実体がなんだか分からないから困るんじゃね?
>>141 保証はされないことは前提として……
結果はWindowsの一般的な環境ならファイルシステム依存っぽいね
NTFSだとソートされてるみたいだがFAT32だと駄目みたいな
>>140 だから、だったらインターフェイスって一体何のためにあると思ってるの?w
>>140 Object.GetType()で判別できるから、目的のType以外はExceptionを吐けばいい。
そう俺は鬼
>>136 それを言ったらpublicメンバもおkってことになっちゃうよ
>>142 なるほど、明示的にSort()したほうがよさそうですね
あ、でもその場合NTFSだとクイックソートだと遅くなっちゃうんでしょうか・・・?
IList<T>では足りず、どうしてもList<T>を公開しないといけない局面って、そう多くないだろ。
リフレクション使わないって考えられないわ 初心者スレ的には「リフレクションを使わない普通のやり方もわからないうちは使うな」なんだろうけど
>>138 あ~、なるほど完璧にわかったわ、トンクス
>>149 どんなときにある?
自分だと、ASP.NETでSessionに格納できるのがObjectだから、
そういうのでGetTypeを利用して自作Classを判別するぐらいかな
あとは、Classのオーバーロードで判別できるし
>>150 でも面倒だからList<T>をそのまま返せたら返せたで便利だよね。
自前でIEnurableを実装すればいいのかもしれないけど。
議論しないで実現できる方法書けばいいよ 初心者向けなんだから
>>147 リフレクションとか関係ないし、ダウンキャストも必要ない
一度、インターフェイスについて調べた方が良い
IList<int> list = new List<int> { 100, 200, 300 };
Console.WriteLine(list[0]); // => 100
逆に、インターフェイスにキャストしなきゃ使えない場合ならある
(インターフェイスの明示的な実装)
結局、運用の問題だから、 約束事が守られていればList<T>を返せばいいよw むしろ、これを禁止するとIList<T>で返す奴とか、ArrayListを返す人がいて 型宣言の意味がなくなるだろw
どうしてもIList<T>ではなくてList<T>にしないといけないことってほとんど無いような 渡した先でソートするとかありえないし
List<T> → 毎日見てる顔なじみ IList<T> → ん? 誰おまえ?
>>155 一応論点は分かっているつもりで、しかしあえて反論するけど
確かにより依存性が小さいインターフェイスを返す方が「ベター」までは
ほとんどの人が納得的な話だと思うんだが、でもそれって「すべき」とか「しなければならない」
って程のことでもないと思うんだよな。
俺なんてこれまで無頓着にList<T>とか返すメソッド平気で書いてるけど、
それで困ったことなんて一度もないし。
しかし何回同じ事書くんだよw
158 :
82 :2008/11/28(金) 20:51:28
なんかえらい議論になってるようですみません とりあえずジェネリックメソッドを使う方向でやってます 答えてくれた人ありがとう
というか、こんなに便利なものを返してはいけないとする、 マイクロソフトのクラス設計が間違ってる
すくりぷとげんごみたいに、そういうの気にしないで書けるような設計にしろよな
どうでもいいけど
>>82 にジェネリックメソッドは全く意味がわからないw
すみません、これって初心者スレなんでしょうか。 俺にはもう行き場が無いorz
>>163 初心者用だし、いま人がたくさんいそうだから、相談し放題でお得だぜヽ(´ー`)ノ
次の質問が来ないといつまでもこういう話題がだらだら続く
イベントハンドラのデリゲートを新しく定義するなEventHandler<TEventArgs>使え なんてのもあるのね
結局はこういう事だろ 個人・少人数開発 ・面倒だしList<T>返しときゃいいじゃないか。 ・俺は全部把握している。もし変更が必要になっても、ちょっと書き換えればおk チーム開発・クラスライブラリ ・俺が担当してない所まで責任持てない。勝手に余計な操作するな馬鹿野郎。 操作を制限・監視したり、使う側を気にせず実装を変更できるようにIList<T>などを使う。
IList<int> list = new IList<int>(); ってやったらコンパイルエラーになるんだが
169 :
82 :2008/11/28(金) 21:12:42
>>169 そもそもなんで戻り値がobjectなの?
TextBoxか,複数返すならTextBox[]でいいんじゃないの?
>>168 IListは抽象クラスだから、インスタンス化はできない
172 :
82 :2008/11/28(金) 21:20:52
>>170 それだと受け取った側でTextBoxからTextBox1へキャストしなければなりませんよね?
>>172 TextBox1は型なのか変数名なのかはっきりしろ
コンソールアプリで、キーボードやマウスで全て選択→コピーに相当する処理を実現しようとすると SendKeysを使うしかないでしょうか? System.Consoleには範囲指定して画面バッファを反転するようなメソッドとかないですよね?
そりゃコンソール=コマンドプロンプトとは限らないもん
public T[] GetControl<T>() where T : Control {}
こんなの用意して、GetControl<TextBox>();で呼ばれると
フォームにぶら下がってるTextBoxを全部返してくれるようなやつを作りたいって意味か?
と思ったけど・・
>>172 見ると、型とインスタンスと変数名を理解していないような気がする
>>172 TextBox1は名前だから、キャストしなくていいんじゃないか?
Object.Nameで得られるのが、そのオブジェクトの名前で、
Object.GetType()で得られるのが、そのオブジェクトの型の名前
>>174 MoveBufferAreaとかそれっぽいよ
>>178 それも違うぞ
NameはControlのプロパティ
VSのデザイナがコントロールのフィールド名として利用してるだけ
GetTypeで取れるのはその型を表すTypeオブジェクト
Object.Nameって変数名と違うのか
>>176 インターフェースと抽象クラスの違いって何?
書き方の違いとかじゃなくて本質的な違いを教えてください。
インターフェイスは実装を持てない(フィールド以外のメンバの宣言のみ)が抽象クラスは持てる インターフェイスは複数継承できるが抽象クラスは一つだけ
>>183 インターフェース 抽象クラス
でググればいくらでも出てくるよ
リフレクション大好き人間は不要なとこまでリフレクション使いたがるんだよな。 例えば is とか as で十分っていうよりその方が正しいのになのに Type 使うとか メソッド呼び出しまでみんなリフレクションで平気でやったり。 別にやっちゃダメとはいわないが、あまり使わないですむように考えてほしいもんだ。 大抵の場合はインターフェイスなり何なり利用して、最小限で済ませられるはずだ。
メンバにコレクション持ってる場合はList<T>で返したくないことはある。 List<T>で返すってのは、基本的に呼び出し側でコレクションを操作していいよって意味が含まれる。 キャストしたらどっちにしても出来るとかそういうことではなくて、 型が意味を表すこともある。 もちろん安全性重視でコピーしか返さないこともあるが。 セキュリティに関わる場合とかね。
AsReadOnlyはListで受けるとエラーになるね。 IList<int> hoge = ( new List<int>() { 1, 2 } ).AsReadOnly();
読み取り用にしたいならそれが基本だな
190 :
82 :2008/11/28(金) 22:48:33
TextBox1~5はインスタンスです。 呼び出す側から指定したインスタンスを返したいだけです。
>>187 それが正解だと思う
List<T>を返すと便利なのは、それを操作して後から追加したり削除したい場合があるから。
これは一つのClassで完結するか、同じ開発チーム内で完結するので、
List<T>を返しても問題ない。
Classごとに開発チームが違うような場合、
Objectの一覧を返すような場合には、配列にObjectを格納して渡せばいいだけなので、
わざわざList<T>で渡す必要もないし、追加されるような状況であればむしろまずいわけで。
理想はList<T>を返さないのがいいかもしれないけど、
面倒見切れる範囲であれば、List<T>を返すようなことをしても問題ないのではないかと思う。
要はいろいろと継承ができないということで、多態性がないだけの問題らしいので。
>>190 インスタンス?型は同じならTextBoxの配列かコレクションでいいじゃん。
キャストは不要だよ。
Object.Nameと変数名の関係を教えてくれ Object.Nameはフォームデザイナで出てくるNameとはまた別物?
194 :
191 :2008/11/28(金) 22:53:43
× これは一つのClassで完結するか、同じ開発チーム内で完結するので、 List<T>を返しても問題ない。 ○ これは一つのClass内で完結するか、同じ開発チーム内で完結している場合、 自分で面倒を見られるのでList<T>を返しても問題ない。
>>193 ObjectにNameはないぞ、Control.Nameが正解。
デザイナと名前と同じもの。
名前は付けてもつけなくてもいいが、IDEのフォームエディタは名前必ず付けて、
あわせて同じ名前のメンバ変数を宣言する。
>>190 なんじゃそりゃw
TextBox GetTextBox( int num )
{
switch( num )
{
case 1:
return textBox1;
case 2:
return textBox2;
case 3:
return textBox3;
}
return null;
}
もうこれでいいよ
>>193 「MSにとっての」公開するって意味が重すぎるんだよな結局
ただ、多態性がないだけの問題と言い切ってしまうのは微妙な
気もして、そもそも論としてコレクションライブラリ自体がそういう
風に使うように設計されている感じがする。
要はなんで ObjectModel なんて名前空間に分かれているか、
そしてそこにはなんで論理的なコレクションが集合しているか
って話な。
198 :
197 :2008/11/28(金) 23:00:42
うん MSの意図に従うのであれば, 引数,戻り値はすべてインターフェイスまたは配列 プロパティで公開するコレクションはすべてそれぞれ専用のコレクションを使う (Collection<T>含め,ジェネリックコレクションはそのまま使わない) が正解だろ
200 :
82 :2008/11/28(金) 23:12:41
>>192 配列やコレクションで纏めてではなく、指定したインスタンスを個別に返したいのです。
>>196 そのコードと全く同じものを最初に考えましたが、受け取った側でキャストが必要でした。
(TextBox1) GetTextBox(1)
こんな感じで。これだと困る(というかめんどくさい)ので個別にそのまま返せる方法を
お聞きしたんですが、逆にジェネリックメソッドではダメな理由を聞かせてください。
>>184 間違った。
インターフェースと純粋仮想クラスでした。
>>200 (゚Д゚)ハァ?
もしかしてTextBox継承して、TextBox1,TextBox2,TextBox3,TextBox4,TextBox5と大量のクラス作ってたりするのか・・?
>>200 もう一回確認するよ。TextBox1は型なわけだよね。
インスタンスというのは用法が間違ってる。
>>197 >「MSにとっての」公開するって意味が重すぎるんだよな結局
同意
ひょっとしたら命名規則について論議しているぐらいの話なのかもしれないw
>要はなんで ObjectModel なんて名前空間に分かれているか、
>そしてそこにはなんで論理的なコレクションが集合しているかって話な。
確かにClassの宣言をみると、List<T>よりCollection<T>のほうが、
メソッドをOverrideできていろいろできそうなので、継承して拡張すれば、
返り値の型を変更せずとも済むので、便利といえば便利そう。
ただ、List<T>は速度重視のために設計しました。
拡張性重視でCollection<T>を作りました。それぞれ使って下さいっていっても、
Class内部では速度重視でList<T>を使って、受け渡しにCollection<T>を使ったとき、
それに変換しなくちゃいけないので、その分のオーバーヘッドはどうなるの?と思う
//List<T>からCollectionへの単純なキャストはできなかったよね?
>>200 基本的な用語上の齟齬があるみたいね
TextBox1はクラス名なのか?
>>190 ではインスタンスと言い、
今度はやっぱりキャストしたいと言う。どっちやねん
>>204 Collection<T>っていうのは自分でコレクションを作るときに使うんだよ
Collection<T>型のプロパティや引数なんて使わない
IList<T>ならList<T>そのまま使えるだろ
207 :
82 :2008/11/28(金) 23:23:26
ちょっとわからなくなって来ましたw 複数のコントロールを管理するクラスに 各コントロールのインスタンスを保持するプロパティを作って 指定したコントロールのインスタンスを呼び出すメソッドを作っています 呼び出すのはプロパティなので型なのかな?
C#でFormの真ん中にプルダウンメニューを配置したいのですが 左側にあるメインメニュー意外で配置するとすれば何を利用する 物なのでしょうか? メインメニューだと上に表示されてしまうのですが??
209 :
82 :2008/11/28(金) 23:25:39
最初に型ってちゃんと質問してました・・・ インスタンスというのは間違いです
>>206 >IList<T>ならList<T>そのまま使えるだろ
IList<T>でList<T>を必ず返すという場合には使えるね。
string[] test = new string[4];
IList<string> test1 = test;
test1.Add("123");
でも、こういう代入がある可能性もあるから、そのままでは使えないでしょ
受け取る側では、List<T>が入ってるという保証がないわけだから
211 :
82 :2008/11/28(金) 23:27:55
>>82 がジェネリックメソッドと関係ないのはどういう理由からでしょうか?
ちょっと理由がわからないんですが・・・
>>210 考えるのは簡単だけど,それが実際に問題になることってめったに無いよ
>>211 型ということは,どこかに
class TextBox1 : TextBox { ... }
みたいなのがあるの? 何のために?
ジェネリックメソッドとか持ち出す前に,何かすごく基本的なところがわかってないと思う
>>211 FormにTextBoxのコントロールが5個あって、
そのいずれか一つを選択したいってこと?
であるならば、どうして、その5つあるTextBoxから一つを選択したいのかな?
選択する理由がよくわからない。
215 :
82 :2008/11/28(金) 23:33:47
>>213 >>214 すみません、質問に答えてるとまた混乱するので
とりあえず
>>82 がジェネリックメソッドと関係ない理由を教えてください。
>>213 >考えるのは簡単だけど,それが実際に問題になることってめったに無いよ
だったら、すべての返り値と引数はObjectで問題ないってことになるから、
ここまでの話はすべて意味がなくなるね
そういう判断をせずにプログラムを組めるという「型」を公開する範囲と、
その面倒をどのレベルまで見ることができるかという点を論じてるんだからさ。
>>215 複数のオブジェクトを、一つのメソッドで同時に返す必要があると思ったから、ジェネリックが有効だと思ったという話
一つのオブジェクトを返すだけでよければ、ジェネリックは必要ないということ
>>215 あなたが欲しいと言っているのは
実行するとそのとき欲しかった型の特定のコントロールを返してくれる魔法のメソッドだから
>>215 頭の中を整理しないでとりあえずレスしてみると
望んだ答えを教えてくれる魔法の回答者がいると思ってるから
220 :
82 :2008/11/28(金) 23:38:58
何かC#の分かるお勧め本はないですか?
>>220 >>162 じゃないからわからないけど、TextBoxというオブジェクトのインスタンスを一つだけ
返すメソッドが欲しいのであれば、ジェネリックを使う必要はまったくないよ。
だから、具体的に何をしたいのかを書いたほうが良い。
例えば、TextBoxが5個あって、その5個の中で「1」と記入されたTextBoxを返すにはどうすればいいか?とか
TextBoxは型なのかフィールドなのかいいかげんはっきりさせよう 型であれば,class TextBox1のような宣言がどこかにあるはずだ もし本当に型だとすれば,一体何のためにそんなことをしているのか 君の頭の中を誰一人理解できていないんだ
>>82 >>222 も書いていることだが、質問の仕方がなってない。
自分の疑問を抽象化する能力もないくせに無理に抽象的に語らないこと。
具体的に何をしたいと思っていてどう躓いているのかを最初から書こうよ。
出来てる所までのコードを固めて張れば5分で解決しそうな気がする
やりたいことがよく把握できないが、 ひとつの関数で同時に複数の値を戻したいなら戻り値専用のラッパクラスを準備する。 ひとつの関数で状況に合わせて異なる種類の型を戻したいなら、 ジェネリックよりオーバーロードの方が向いてると思う。 つまり・・・ public TextBox1 GetControl(){ .. } public TextBox2 GetControl(){ .. } public TextBox3 GetControl(){ .. } public TextBox4 GetControl(){ .. } public TextBox5 GetControl(){ .. }
戻り値だけ異なるオーバーロードはできないよ
TextBox1 ITextBox1Getter.GetControl(){ .. } TextBox2 ITextBox2Getter.GetControl(){ .. } TextBox3 ITextBox3Getter.GetControl(){ .. } TextBox4 ITextBox4Getter.GetControl(){ .. } TextBox5 ITextBox5Getter.GetControl(){ .. } こうすれば解決
void GetControl(out TextBox1 x) { } void GetControl(out TextBox2 x) { } : うぽ
1つの関数で複数の型を返す可能性があってなおかつキャストをなくしたいなんて
233 :
82 :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 を質問しました。
>>221 C#の何を知りたいか・・・だと思うけど、入門書という意味では、どれも大差ないと思うな・・。
一つ必要なのは、何か作るものを決めて、そのために悩むことが必要。
例えば、TextBoxを2つとLabelを一つ配置して、TextBoxに記入された数字をかけ算してLabelに表示するとか。
入門書を完遂するより、これを悩んで作るほうがよほど重要。
調べて分からなかったら、ここの人に聞いてみるのもいいし。
で,何のためにいちいち型が必要なの? 意味あるの?それ
>>195 あれってエイリアスみたいなもんなの?
何の目的で存在してるのかよくわからん
>>233 だから推敲ってものを知らないのかよ。
分かってないんだから無理に分かってる風に書こうとするなって。
その文章じゃ誰にも内容が伝わらないと思うわ。
>>233 publicの返り値の型がTextBoxなのに、
CheckBoxやPictureBoxのオブジェクトを返すことはできないよ。
TextBoxの名前から、目的とするTextBoxのオブジェクトを取得したいなら、
こういう方法があるね
private TextBox GetTextBox(string name)
{
TextBox textBox = (TextBox)this.Controls[name];
return textBox;
}
239 :
82 :2008/11/29(土) 00:24:05
>>238 勉強になります。ありがとう。
最初にもらった回答のいくつかで解決できそうなのでもう落ちます。
>>162 の意味とかはできてから考えます。
改めて回答くれた人ありがとう。
private T GetControl<T>(string name) where T : Control { return (T)this.Controls[name]; } こうか
public T GetControl<T>(string name) where T : Control { return this.Controls[name] as T; } TextBox textBox1 = GetControl<TextBox>("TextBox1"); nameのコントロールが見つからなかったり、型が違ってたらnullを返す。
242 :
241 :2008/11/29(土) 00:26:29
変な場所の改行までかぶってんなw
>>240-241 へー、こんなのできるんだ。VS2008以降から?
string nameはユニークだから、帰ってくるオブジェクトとは1:1だから重なることはないんだよな・・
異なるobjectごとに別メソッドを書かなくていいから楽そうだね
>>240-241 みたいなものが欲しいと思う場面が想像できない。
というより、絶対にいらんと断言できるわ。
246 :
82 :2008/11/29(土) 00:33:23
>>240-241 あー、それです。ありがとうございます。
実は
>>83 さんに教えてもらって調べて近いところまで言ってたんですが
>>162 からの流れって何だったんでしょうか・・・。
すごく時間を無駄にしたような気が・・・。
>>245 動的にObjectが生成される場合とかには有効だと思うよ。
他にも、「ア」~「ン」まで記述されたButtonがあって、
SQLから会社の頭文字だけを抽出して、存在する会社の頭文字だけ抽出してEnabled=trueするとか。
>>244 どういうセンスしてるんだよw
どう考えてもコードの複雑性を不要に上げるだけだろこんなの。
>>246 >すごく時間を無駄にしたような気が・・・。
日本語は難しいということだねw
>>246 最初から
>>233 書いておけばすぐ解決してたぞw
次からは、最初に情報をしっかり書いてくれ
>>244 .NET2.0以降(VS2005~)
251 :
82 :2008/11/29(土) 00:39:39
>>250 確かにそうかも知れません。コードまで書いてもらえると思ってませんでした。
>>83 さんすごいですねw
>>248 >>247 でも書いたけど、動的にコントロールが追加されて、
例:TextBox_ID01、Label_ID02
それを、それぞれEnabled=Trueとかしたいときに、名前と型でオブジェクトが拾えるから便利だと思って。
>>247 意味がわからない。
それなら
>>240-241 である必要はない。
Controlを返せば済む。そもそもそのための多態性だ。
それに具体的なコードを書く場面を想像すればわかるはずだと思うけど、
>>240-241 のようなことをすると(いやまともなセンスしてれば絶対にしないが)
呼び出す側にもメソッドの中にも同じ分岐を書くハメになる。
>>253 正しい設計を語りだすと
お前が
>>82 に、1から全部教える(代わりに書く)羽目になるぞ?
>>253 それぞれ、別々のコントロールを探して返すメソッドを作るより、
名前からジェネリックメソッドを通じて取得できるほうが便利じゃん?
>>255 だからどんなセンスしてりゃそういう結論になるのよ。
「名前」と「型」を対応させる同じ作業が呼び出す側にもメソッドの中にも
必要になるのに。
>>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
}
とか?
× Label label = this.GetControl<TextBox>("Label" + i.ToString()); ○ Label label = this.GetControl<Label>("Label" + i.ToString()); か
>>257 だから(まあケアレスミスは突っ込まないとして)そのGetControlを
具体的に実装してみ?
で、無理くり1つにまとめたことで何か「嬉しい」ことがあったかどうか
考えてみれば、どれだけバカバカしいかすぐわかるよ。
初心者スレで議論ふっかける人ってなんなの・・・ 初心者の居場所なくなるじゃん
>>259 すまん
これで不具合がないと思うから、何がばかばかしいかよくわからんな・・・
何かある?
262 :
241 :2008/11/29(土) 01:04:26
何やら議論になってるけど 俺もControlを名前で扱う事なんてないから、こんな物いらんだろ。と思いながら書いたわけで(ry 何で書いたか?って、そりゃ彼が欲しがってたからさ
>>261 不具合というより、単に手間を増やしてるだけに過ぎないから「バカバカしい」んだよ。
書いてみりゃ分かるよ。
本来書く前に分かるべきだけど。
>>263 んんん?なんで馬鹿らしいの?
煽りじゃなくて、マジでわからん。
すまないが教えてくれないか?
266 :
82 :2008/11/29(土) 01:18:26
>>265 微妙すぎて説明できん。サンプルコード書けばいいんだろうけどめんどい。
だから自分で書いてみれば絶対わかるって。
本質的にプログラミング初心者(つーか筋が悪い人)が行数が多いメソッドを
好む病気と同じだから。
>>267 例えば、コントロール決めうちで考えるとばからしいけど、
ASP.NETの各コントロールはSystem.Web.UI.WebControlsを継承してるので、
コントロールの種類如何を問わず、名前でVisibleをfalseしたりするのに有用だと思うんだが。
他にもASP.NETのRepeaterコントロールなんかでも、データベースの行数だけ
動的にコンとロールが動的に生成されるので、そのコントロールを名前から取得するのに
便利だと思うんだけど。
んー、何がばからしいのかがまったくわからないな・・・
>本質的にプログラミング初心者(つーか筋が悪い人)が行数が多いメソッドを好む病気と同じだから。
行数は少なくなると思うんだが・・・
教えて貰えないなら謎のままになって、なんか気持ちが悪いな・・・
270 :
82 :2008/11/29(土) 01:25:57
何もしてないのにゴミって・・・
あとは、ASP.NETで、動的にテーブルを生成する時、 それぞれのHTMLのセルに対してスタイルシートを適用するような場合でも、 メソッドが統一できるからコードが短くで済むんじゃないかな iが行数で、動的に生成された行に配置されたボタンのクリックで、 その行のテーブルのセルのオブジェクトを取得して背景色を変えるとか。 HtmlTableCell tmpTDSyainType = (HtmlTableCell)this.tblSyainSyousai.FindControl("tdSyaunType" + i.ToString());
なぜASP.NETの話に?
>>269 >ASP.NETの各コントロールはSystem.Web.UI.WebControlsを継承してるので、
>コントロールの種類如何を問わず、名前でVisibleをfalseしたりするのに有用だと思うんだが。
自分で俺の言ってることを追認してるじゃん。
そうその場合は「コントロールの種類如何を問」う必要性はどこにもないでしょ?
>行数は少なくなると思うんだが・・・
なるわけないでしょ。
名前を引数にとってコントロールを返すメソッドを、コントロールの型ごとに
分けて書いた場合には必要がない処理を書く必要があるのだから。
筋が悪い人が1つのメソッドにゴチャゴチャ詰め込みたがる病気そのまんまだよ。
>>273 >そうその場合は「コントロールの種類如何を問」う必要性はどこにもないでしょ?
それは、そういう継承元のClassを取得する場合でしょ。
この場合は、継承されていないようなオブジェクトにも利用できるから、
補足であって単純な追認とは違う。
>なるわけないでしょ。
いやなるでしょ。
>return (T)this.Controls[name];
ですべてのオブジェクトを持ってこれるのに、
別々のオブジェクトに対して処理したい場合には、それぞれのメソッドを作らないといけないわけだから。
>>274 Tで返すためにTでキャストすることに何の欺瞞も不安も感じとれないのなら
何も言う言葉がないよ。
それってObjectで返して呼び出し側でTにキャストするのと何が違うの?
>Tで返すためにTでキャストすることに何の欺瞞も不安も感じとれないのなら Tで返すためにTでキャストすることなんて主張してないよ? 例えばよくあるパターンとして、データベースの内容に従って、社員の数だけコントロールが動的に生成される場合。 一人の社員に、名前、年齢、部署名などを記述するTextBoxが配置されると思うんだけど、 それぞれ、別のメソッドを設けなくとも TextBox birthDay Label age CheckBox isMarry; というオブジェクトを、一つのreturn (T)this.Controls[name]; というメソッドで取得ができるといってるわけ。 もしジェネリックメソッドが利用できなかったら、それぞれのコントロールを取得するメソッドを記述する必要がある。 しかも、CheckBoxはIsCheckedを操作したいとしたら、これはTextBoxにもLabelにもないプロパティだから 画一的に操作できないわけで。 >それってObjectで返して呼び出し側でTにキャストするのと何が違うの? 指定した型しか返ってこないから、それが保証される。 「だったらObjectでいいじゃん?」だったら話す意味はないから、そういう問いかけは無意味だと思うんだけど・・・。
277 :
82 :2008/11/29(土) 02:02:38
ROMさせてもらってますが議論の核心がわかりませんでした・・・ おやすみなさい
>>276 >Tで返すためにTでキャストすることなんて主張してないよ?
いやそう主張してるんだよ。
自分で自分の書いていることの意味を理解していないだけだ。
まあこれ以上俺が言っても耳に届かないだろうから他の人のセカンドオピニオンを聞いた方がいいだろうね。
>>278 >いやそう主張してるんだよ。
return (T)this.Controls[name];
これを勘違いしてるだけじゃないか?
returnされるものが、<T>であれば、キャストする必要はないんだから。
ジェネリックメソッドが不必要だというなら、引数で場合わけされるオーバーロードも同じことでしょ。 これもObjectで渡せば必要ないといえば必要ないし、場合によっては行数が増えるかもしれない。 でも受け渡される型をif文で判断しなくて済むようにオーバーロードを利用するパターンとかよくあるでしょ。 ジェネリックメソッドについても、それと同じこと。
private T GetControl<T>(string name) where T : Control { return (T)this.Controls[name]; } これってwhere T : Controlで制約付いてるけど そもそも同じ型でも内部的にキャストしてるのC#って? 同じ型ならそのまま渡すの?
>private T GetControl<T>(string name) where T : Control は宣言であって、実際に返しているのは return (T)this.Controls[name]; this.Controlsが<T>を返すのなら、わざわざキャストしてreturnする必要はない
GetControlなんて作らなくても(T)this.Controls[name];でいいじゃないと思えてくる。
うん
>>282 ControlからTに暗黙的な変換はできないから、明示的にキャストしてやらないとダメじゃね?
結局コードの複雑性を不要に上げてる要素ってなんだったんだろ
既にあるものをまた作ってるところ
>>285 なので、this.Controls[name]でなくて、例えば自前で実装したメソッドで、
this.GetCntls(name)が<T>を返すのなら、わざわざキャストする必要がないってこと。
この場合は、this.Controlsがobjectを返すから<T>を返さないといけないというだけ。
>>287 >既にあるものをまた作ってるところ
それをいったらすべてが無意味だろ。
なら高級言語なんか必要なくて、昔のマシン語レベルでしこしこ書いてればいいわけだから。
既にあるものだけど、使い勝手によっては便利だから、
様々な手法や言語が改良されて世に出てきているわけで。
はい的外れ&極論来ました
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; } } こういうのならどうだべさ?
ROMってた人から言わせてもらうと 具体的なこと何一つわからなかったけど、なんだったんだ?って感じ
拡張メソッドにジェネリック?
>>291 そういうメソッドを作らねばならないなら、俺はこうする。
child = parent.Controls[name] as T;
return child != null;
>>292 1つ言えることは、
>>82 がTextBox1からTextBox5などという「型」を作っていると告白したのが元凶。
思うんだが、今の話題ってスレ違いじゃね? 今あるC#のスレって初心者用と相談室と宿題と あとは複合・単発ネタくらいなんかな。 なんで総合みたいなスレたってないの?
ああ、as使えば短くできたんだな まだまだだなちくしょう
>>295 前は.NET総合みたいなのもあったけど、あれは埋まってから誰も立てなかったな。
総合作っても 過疎・質問・終わりの見えない議論 のどれかになる予感。
終わりの見えない議論したい人は過疎スレに行かない すぐ終わっちゃうからw
結局
>>82 への回答を思いつかなかった人が具体的な例を何も挙げずに
意味が無いとか無駄とか絡んでいただけに見える終わり方だな。
VB6の厨精神は脈々と受け継がれてるな
>>299 とかに
「指定したの型のオブジェクトを返す」のはリフレクション絡みで使われることも多いから, ジェネリックにするとかえって不便になったりするんだよね ジェネリック型にダウンキャストしたり,typeof(T)とかやった時点で実質的な意味は失われるんだし
303 :
302 :2008/11/29(土) 10:10:10
よし、じゃあ初心者が相談しちゃうよ。 SplitterのCollapseってどうやるのが一般的なの?
とりあえず、すぐに煽る人は初心者スレに必要ないことだけは確か
>>234 秀和システムの「Visual C# 2008パーフェクトマスター」と言うのを買ってきました。
全編カラーで見やすいです。
>>306 とりあえず、TextBox2個、Labelを1個配置して、
TextBoxに入力された数字を足し算してLabelに表示するソフトを作りなさい
ある程度は何となく使えるよ そうやって遊んでると必ず限界にぶつかるから,それから本格的に言語の勉強するといいよ 何が嬉しいか,何に使うかが分かってないとなかなか頭に入らないからね
>>307 めんどくさいんでこんなんでいいですか
try { label1.Text = Convert.ToString(Convert.ToInt32(textBox1.Text) + Convert.ToInt32(textBox2.Text)); }
catch { label1.Text = "0"; }
ワロス
入門書買ってまだ2時間半だぞw
汚いtryだなあ
よく入門書に オブジェクトは型です。 金型にプラスティックを流し込むと同じ製品がいくつも作れるられるように、 オブジェクトから製品をいくつも作ることができます。 この製品のことをインスタンスといいます。 みたいなこと書いてあるけど、これのほうがよっぽどわかりにくいよな。
そうか?俺はよくわかったけど もっとも俺が読んだ本はタイヤキの型とタイヤキだったけど 同様にanimalクラスからcatやdogを派生してる例を突っ込む奴とかいるけど 理解できない そんなわかりにくいか?
いや、わかりやすいけど?
おっと ジェネリックメソッドを頑なに拒否していた人が また喧嘩を売りにきましたよ
よほど、昨日、悔しい思いをしたんじゃないか?
煽らなくていいよ。
C#でいう「ポインタ型」は,クラスや構造体や列挙型やデリゲート型と並ぶんじゃなくて 参照型・値型・ポインタ型と考えればいいの?
>>320 だから分かってない人が無理して分かったように語らないこと。
意味不明すぎるよその文章。
クラスのインスタンスも構造体もデリゲートも それを格納する変数にはその存在を指し示すアドレス つまりポインタが入ってるんだよ?
C#は構造体を=で代入したら実体がコピーされます?
324 :
320 :2008/11/29(土) 20:13:01
「ポインタ型」っていうのは型の種類を指す言葉だよね 型の種類には2つの系統があるよね ○クラス・構造体・列挙型・デリゲート型 ○参照型・値型 ポインタ型はどちらなんだろうと思った
325 :
320 :2008/11/29(土) 20:15:11
種類の系統というのも変な言い方だな 型の分類方法といえばいいかな
ポインタってメモリの場所なんじゃない?
クラスのメンバを外部に公開したいんだが、 private List<string> names; public List<string> Names { get { return names; } } これだと外部から変更できてしまう。 変更できないように間に噛ませるクラスなんていうんだっけ?
>>327 ReadOnlyCollection<T>
names.AsReadOnly()で作れる
プロパティで毎回作って返すのはあんまりよろしくないので
コンストラクタあたりで作って別のフィールドに入れとく
>>327 昨晩の再現の予感
public IList<string> Names
{
get { return names.AsReadOnly(); }
}
>>324 解釈の仕方はいろいろあるから、MSDNの記述に従うのが吉。
>>330 これやられると使うときにいちいち結果をキャッシュしないといけなくなるんだよね
中身は連動してるから,一回作ったらフィールドに入れといた方がいい
>>329 毎回作って返していいぐらいの薄いラッパだよ。
元のコレクションが変更されればそれはラッパにも反映される。
public ReadOnlyCollection( IList<T> list )
逆にスナップショットが必要なら使う側でコピーしないといけない。
>>330 ReadOnlyList<T>はどーせ変更できないんだからIList<T>通さずにそのまま返していいよ
その方が変更できないことがはっきりして分かりやすい
337 :
336 :2008/11/29(土) 20:50:02
ReadOnlyCollection<T>の間違い
なんで標準でReadOnlyDictionaryって無いんだろう みんな自分で作ってるんじゃないの
先生方、質問です Formで初期表示前にコントロールに値を設定したり初期化処理するのは よくあるケースだと思うのですが、この場合FormのコンストラクタとOnLoad イベントとどちらに書くのが正しいやり方なのでしょうか? 今いじっている他の方が作成されたソース見てたら public class AboutDialog : System.Windows.Forms.Form { AboutDialog { InitializeComponent(); なんかの初期処理 コントロールへの初期設定 } protected override void OnLoad(System.EventArgs e) { なんかの初期処理 コントロールへの初期設定 } } とこんな感じでどちらにも処理書いてたりしているのですが、作法としては どちらが正しいのでしょうか?
>>338 System.Collections.ObjectMod.KeyedCollection<TKey, TItem>
抽象クラスならあるな。
System.Collections.ObjectModのは裏方のクラスだから、
そのまま使うようなことはしないのがマナーだと思うよ。
>>339 コンストラクタはFormのインスタンスを作成した時しか呼ばれないが
LoadはShowDialogする度に呼ばれる
>>341 あ、そうか...
先生、理解しました!
まさに目から漆が落ちた気分です。
ありがとうございました。
>>339 >Formで初期表示前にコントロールに値を設定したり初期化処理するのはよくあるケースだと思うのですが
プロパティを設定して、それによってFormの初期化をしたい場合には、Loadに記述したほうがいいと思う。
NullpoForm nullpoForm = new NullpoForm();
nullpoForm.Caption = "NULLPO";
nullpoForm.FormType = 1;
nullpoForm.FormSize = 200;
というように、プロパティを設定してOnLoadでそれに従って表示を変えるという感じ。
orz
AboutDialogのインスタンスなんて使い回すかなあ?
人それぞれだし ソフトによってもそれぞれ
俺はデザイナでポトペタするから、結果的に使いまわすことになる
>>345 普通は使い回さないですね(;´Д`)
どちらに書いてもプログラム的には問題ないのであくまで作法上の
話を聞きたかっただけなんです。
結果、
>>341 だったので、あ、そういえばそうだと鱗が落ちたわけです。
>>343 プロパティ設定はInitializeComponent()のこと?
で、表示を変える場合はOnLoadでやるということですか?
なんで"AboutDialog"が出てくるのか意味不明だが、
設定ダイアログみたいなものを弱参照で持ちたいことは場合によってはあるんじゃないの?
いずれにせよ、
>>339 は作法とか何とかそういうVB厨チックな思考はやめたほうがいいよ。
>>348 Formもオブジェクトでインスタンスとして存在するわけだから、
そのインスタンスも当然、プロパティを保持しているわけで。
コンストラクタで全部初期化しようとしたら、
AboutDialog() { }
の引数で、初期設定の情報をすべてやりとりしなきゃいけないわけでしょ?
StringCollectionって文字列のソートはできないんですか? List<string>を使わないとだめでしょうか?
そういえばそんなのあったな 今となってはそういうのは存在価値がなくなったから,ジェネリックコレクションだけを使ってればいいよ
あえて使うならOrderBy まあList<string>の方が良いけどな
ああ、そんなのあったね
その記事古いよ ジェネリックが使えない.NET1.1が対象だと思う
2004ぐらいならともかく2006の記事でこれはひどいな と思ったが2006年中ぐらいはまだ.NET2.0は主流になりえてなかったっけ?
2.0以降はジェネリック推奨
1.1から2.0の時は何らかの不評でなかなか移行しなかった記憶がある 2.0は06/11月リリース
間違えた05/11だた
>>350 だから、どこで初期化するかなんかは状況しだいでしょうが
とりあえずOnLoadが何度も呼ばれる可能性があることを知らなかったわけだし
>>361 質問しといて逆ギレとはいい神経してるな
>>356-360 あれ?
ということは、StringCollectionを使う意味は何もないということですか?
速度が早くなるとかそういうのもないんでしょうか
今はもうないよ
365 :
341 :2008/11/29(土) 23:37:33
366 :
361 :2008/11/29(土) 23:41:22
おまえら沸点低すぎ よくそんなんで社会人やってられんな
IDが見えないと自作自演にしか見えないから困る
自作自演しすぎるのはよくないぞ
俺もそう思う
でもプログラマならこういうカオスな状態は嫌いじゃないよな?
お前もそう思う
カタカタ || ̄ Λ_Λ ||_(Д`; ) 「なに?このお前ばっかりのスレ・・・」 \⊂´ ) ( ┳'
>>367 そう、俺は窒素並みに沸点が低いんだ。
なのに熱い男といわれるんだぜ?
ワケ ワカ ラン ∧_∧ ∧_∧ ∧_∧ ( ・∀・) ( ・∀・) ( ・∀・) ⊂ ⊂ ) ( U つ ⊂__へ つ < < < ) ) ) (_)| (_(_) (__)_) 彡(__)
ダイアログのインスタンスをずっと保持しておくのって、フォームデザイナでダイアログを 配置すると自然にそうなるじゃないか。
それはよくわかるけど,AboutDialogだよ?
起動が早いじゃん AboutDialogの
もう、やめてぇぇぇぇぇぇ About dialogのHPは(ry
面白いと思ってやってるのかもしれんが(まあたぶんそうなんだろう) 何も笑えないぞ。 むしろ苛立ちを喚起されるだけ。 20年ぐらいは生きてるんだろうから、いい加減自分の笑いの感性は 標準的な人間とズレているんだってことを学習したらどうだよ。
っていうか、だからお前は人からヲタって言われるんだよ。 趣味が人と違うからじゃない。 その鈍感さを指して蔑まれているとなぜ分からんのかね。
2chまで来てスルーもできずに説教を垂れる男の人って せめて一、二行に抑えてくれ
385 :
361 :2008/11/30(日) 13:58:07
っていうか(笑) ヲタ(笑) 分からんのかね(笑)
最近変なのが居ついててうぜぇ おまえの自分はオタじゃないアピールなんてどうでもいいんだよ
387 :
339 :2008/11/30(日) 14:47:42
つうかよ、例としてAbout dialog書いただけなのになんでこれだけ
いろいろと書き込むかね?
>>341 の回答で全て終わってるだろ。
しかも
>>381 はスルーされるだろと思って書いたらわざわざ
噛みついてきて。
>>382 、
>>383 は絶対おっさんだろ?
消えろよな、話合わねぇんだからよ。
>>382 、
>>383 のバカ以外の回答してくれたみなさん、ありがとうございました。
>>387 お前キモイ、自分の性格が悪いことに気づくべきだよ。
頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。
精神レベルも低い。
389 :
デフォルトの名無しさん :2008/11/30(日) 15:30:57
↓387は私ではありませんというレス
390 :
デフォルトの名無しさん :2008/11/30(日) 15:33:39
お前キモイ、自分の性格が悪いことに気づくべきだよ。 頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。 精神レベルも低い。 お前キモイ、自分の性格が悪いことに気づくべきだよ。 頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。 精神レベルも低い。 お前キモイ、自分の性格が悪いことに気づくべきだよ。 頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。 精神レベルも低い。 お前キモイ、自分の性格が悪いことに気づくべきだよ。 頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。 精神レベルも低い。 お前キモイ、自分の性格が悪いことに気づくべきだよ。 頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。 精神レベルも低い。 お前キモイ、自分の性格が悪いことに気づくべきだよ。 頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。 精神レベルも低い。 お前キモイ、自分の性格が悪いことに気づくべきだよ。 頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。 精神レベルも低い。 お前キモイ、自分の性格が悪いことに気づくべきだよ。 頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。 精神レベルも低い。 お前キモイ、自分の性格が悪いことに気づくべきだよ。 頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。 精神レベルも低い。 お前キモイ、自分の性格が悪いことに気づくべきだよ。 頭の悪い奴ってのは、自分が低レベルだということに気づいていないから困る。 精神レベルも低い。
?
392 :
デフォルトの名無しさん :2008/11/30(日) 15:47:55
キモキモキモキモキモキモキモキモキモキモキモキモキモキモキ モキモキモキモキモキモキモキモキモキモキモキモキモキモキモ イモイモイモイモイモイモイモイモイモイモイモイモイモイモイ
393 :
デフォルトの名無しさん :2008/11/30(日) 15:49:02
キモイキモイキモイキモイキモイキモイキモイキモイキ モヤキイモヤキイモヤキイモヤキイモヤキイモヤキイモ
394 :
デフォルトの名無しさん :2008/11/30(日) 15:57:36
おいしいやきいもはいかがですか?
>>388 おっさん、必死だな( ´,_ゝ`)プッ
396 :
341 :2008/11/30(日) 16:39:12
お前ら俺みたいにスマートに要点だけ伝えられる人間になろうぜ とりあえずこの件はここで手打ちな 文句がある奴は表に出ろ
表に出たら、とっても寒かったです・・・
罠かッ!?
>>82 への回答が思いつかなくてウダウダ絡んでた奴と同じ奴が荒らしてるのか?
蛇足なので終了。次の質問者が来るまで黙ってね。OK?
へびあし?
ムカデのすばらしい絵が描けたので得意になって足を2本書き加えてみたが たいして変わらなかったという故事から。
蛇足は蛇の絵を書く競争をしていた男が早く書き上がったので 俺は足も書けるぜと調子に乗ったら、足を書いている間に負けてしまった故事から。 余計なこと。
dasoku.cs(4,6): warning CS0162: 到達できないコードが検出されました。
何一つ役に立ってないな
ワロタw 先手:オレ 後手:森内俊之(指導) ▲2六歩 △3四歩 ▲7六歩 △3五歩 ▲2五歩 △3二飛 ▲4八銀 △6二玉 ▲5八金右 △7二玉 ▲6八玉 △3六歩 ▲同 歩 △同 飛 ▲3七歩 △7六飛 ▲2二角成 △同 銀 ▲6五角 △9五角 まで20手で森内の勝ち
なんかのコピペかよ
>>304 で、俺はこれに対するレスを待っていたわけだが・・。
まずは質問を日本語で書こうね。
TCPListenerを使用して通信プログラムを書いているのですが、 通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できます。 というエラーがたまに出るのですが、この例外を補足したらどのように処理すればいいでしょうか? 通信時間、通信バイト数、通信間隔によらず再現性がないので 起きないようにするのは諦めて、起きた場合適切に対処するようにしようと思いました。 よろしくお願い致します。
使用中のポートを使用しようとしてるんじゃね?
あーなるほど、他のアプリがたまたま使ってるっていうことですかね Port1300を使うことにしてるんですけど、なんか使われる可能性あるんでしょうか
可能性とかいわれてもナー h323hostcallsc 1300/tcp H323 Host Call Secure h323hostcallsc 1300/udp H323 Host Call Secure #192.168.0.1 と 192.168.0.2 は、わたしが使っている IP アドレスですので勝手に使わないでください。なおこの件に付いては
>>413 192.168.0.1はいいけど、127.0.0.1は私のアドレスだから使わないでね
リソースの名前に$がつくの?
WndProcを複数のクラスから操作する事はできますか? 可能であればその方法もお願いします。
もうちょっと具体的に説明してくれ
肝心の「複数のクラスから操作する」が意味不明なのねん
420 :
417 :2008/12/01(月) 12:59:15
すいません。普通にそれぞれのクラスでオーバーライドすれば いいだけのような気がしてきました。帰宅後不明な点あれば 再度質問します。
文字列の判定をしています。 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("姫はいます"); } これで、○×○のつもりなのですが、ぜんぶ○になりなぜかふたつめの姫は果物です。でもマッチしてしまいます。 どこがまずいのでしょう? アドバイスお願いします。
最後のうまか棒
おお。わかりました。まさかうまか棒がわたしへの回答とは気づかず、しばらく(かなり長いあいだ、2時間くらい)、悩んでました。できました。感謝。
ああ、一瞬悩んだけど >姫|王|王妃 | ← これかよw
いや323が使ってるというのは冗談だヨ 続けるならネットワークプログラミングのスレがいいかもね
>>425 コマンドプロンプトで「netstat -an」したら使用されている
ポートが確認出来るから、10000以上で空いているポート使えば
いいと思いますよ。
ボタンのOnPaintをオーバライドして独自描画をしようとしています。 ボタンをクリックすると、ボタン表面の描画が右下に2ピクセルほど動きますよね。 (ボタンを押したままボタンの外側にカーソルを動かすと、その状態が元に戻る。) これは、マウスの動きに反応して、ボタン表面の描画の原点がずらされているものと思うのですが この原点の値を取得することはできるでしょうか?
>>428 原点は(クライアント座標で)(x, y) = (0, 0)に決まってるじゃん。
いくら初心者でもそんなところで躓いてるようじゃヤバいんじゃないのマジで。
>>429 クライアント座標は(0. 0)だとしてもボタンがクリックされてるときだけ、
どれかのプロパティが(2, 2)になったりしないのかな?
自分でも探してみたのですが見つからなくて
ないとおもうな…
ButtonRendererで描画しても完全無視だな
>>430 エスパーするに、ボタンがポイントなりホールドされているかどうかを示すプロパティが
ないかどうか、ってことだな。
そりゃ、自分でマウス関係のイベントを拾って状態を管理するんだよ。その上で描画内容を
適当に変えるわけ。押したら位置がずれるコントロールばかりじゃないだろ?
ちなみに、蛇足だが、クリックってのはボタンを放して初めて成り立つものだからな。
ビジュアルスタイルONなら押してないときと押したときで画像が切り替わるだけだったりするし
>>434 ESP能力低すぎないか?w
俺も最初読めなかったが、どうも
>>428 はボタンが印下されたときの、
ボタンのテキストならテキストの描画位置の(通常状態に対する)オフセット量を
知りたいんだろう。
これって
>>435 の言うとおりOS依存らしいので、取得できるとしてもレジストリとかからに
なるんだろうねたぶん。
エスパーじゃない人は黙っててください。ウザいだけです。
>>437 APIスレの作法をこんな所まで持ち込むなw
ZOrderってどこで設定するの
直接は設定しない デザイナならコントロール右クリックから手前にしたりとか
MonthCalendarを使用してセレクトされた日が その月の第何週目となるか求めるには どのようにしたら良いのでしょうか? 週の始まりは日曜日から始まるとして考えてみたのですが イマイチわかりません。
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週である。
んな難しく考えなくても小学生の算数の発想でいいじゃんこんなの。 まず日曜日は月曜日より、月曜日は火曜日より「小さ」くなるように 曜日に番号を振る。 今月の一日の曜日と選択された日の曜日を比べて、「小さい」なら 選択された日xは第(((x - 1) / 7) + 2)~曜日だ。
日本語でおk
445 :
441 :2008/12/01(月) 23:16:26
まず上の例で考えて、1日の曜日はnから求めるのですか? それともDateTime で求められますか?
年月日がわかれば計算できるだろ ググレ
>>445 MonthCalendarによって選択された日付の情報から
その月の一日をあらわすDateTimeを作るぐらいの知恵は持とうよ。
これ初心者とか関係ないレベルの話だと思うよ。
448 :
441 :2008/12/01(月) 23:37:52
お忙しい最中につまらない質問に答えて頂き ありがとうございました。 これで失礼します。
449 :
417 :2008/12/02(火) 00:34:57
自分のやりたいことはNativeWindowを使ってサブクラス化 すれば目的は達成出来そうでした。 ところで、WndProcでWM_DRAWCLIPBOARDを拾っていると エクセル等では2回程メッセージが来てしまうのですが 最初のメッセージしか拾わない方法はないでしょうか。 (APIスレで聞いた方がいい?)
テキストとOLEのオブジェクトを別にコピーしてるからか
>>448 1日の曜日x(0~6)、d日は第n週目とすると
n = 1 + (d + x - 1) / 7
つーか、曜日なんてグリニッジ天文台からの秒数で出せば
先生方に質問です。 起動後できるだけ早いうち(たとえば10分以内とか)のアイドル時間に、 一度だけ処理をしたいときに、 アイドル状態であるかどうかを判定するには、どうすればよいですか? キー入力があるかどうかと、マウスの移動の有無と、 CPUの処理量を調べればいいのかと思いますが、 それぞれなんというメソッドを使うのか、アドバイスをお願いします。
System.Diagnostics.PerformanceCounter
Application.Idle
>>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);
}
とか。
恥ずかしい質問なのですが、どなたか教えて下さい CとVB6.0の経験が少しある程度の若輩者です この度C#でのWindowsアプリケーションを開発することになり、現在スタディ期間です 関数はClassファイルに記述し、フォーム内でクラス宣言すればいいことはわかったのですが グローバル変数やグローバル定数を定義する場所と、対象ファイルがよく理解できません 普通にクラスファイルにグローバル値を設定し、クラス.変数(定数)のように使えばいいのでしょうか? グローバル値を使うことが、C#で普通のことなのかそもそもわからないのですが… それともクラスファイルに定義するのではなく、別のファイルに定義するのが一般的なのでしょうか? 本当におかしな質問で申し訳ありませんが、宜しくお願いします
普通にクラスファイルにグローバル値を設定し、クラス.変数(定数)のように使えばいいのでしょうか? はい
「クラスファイル」という概念はない 変数はクラスのメンバとして宣言する グローバル変数や定数はないと思ったほうがいい スタディ期間がどんだけか知らんが本読むかWebサイトざーっと見れば そんな質問しないだろってレベル
>>459 頭の固いおバカちゃん
質問者の言いたいことをちゃんと理解してあげましょうね
答える気の無い奴は相談スレから出てくるなよ
流石にこれは459の言うことも間違っていないと思うが・・・
>>457 C#では、ファイルに1つのクラスのある状態がVBのクラスモジュールに最も近い。
ただし、フォームはVisual Studioがやや特別扱いしているものの、
C#言語としては標準・クラス・フォームモジュールのような区別はない。
設計次第で好きに使え。
まああんまりstaticに溢れたVBを抜け切れていないようなコードは好まれないがな。
全部一つのフォームクラスに突っ込めばいいよ ファイル分けたかったらpartial class使えばOK
…美しくないなあ…
いくらCだVBだといっても 世間を吹いてるオブジェクト指向言語の風の匂いくらい嗅いだことあんだろ
>風の匂い 新聞社かおのれは
この風、オブジェクト指向じゃな
動けばいいんだろ? バカ丁寧に説明して理解できるレベルじゃないんだから動く方法を適当に答えてやればいいんだよ そのうちほっといても理解できるようなことだ それを重箱の隅をつつくような御託並べて459は本物の天狗だな
>>470 動く方法を適当に答えてくれない人は黙っててください。ウザいだけです。
, ;,勹 ノノ `'ミ / y ,,,,, ,,, ミ / 彡 `゚ ゚' l 〃 彡 "二二つ | 彡 ~~~~ミ ,-‐― |ll 川| ll || ll|ミ―-、 / |ll | ヽ / z W`丶ノW ヽ / \\ / / | / 天 \`i / / 狗 |
初心者スレなんだから、きちんと説明は書いとけばいい 理解するとか別の話だ 建前上の授業だけすればいいような日教組じゃないんだから
学生とかならいいけどさぁ 業務でスタディ期間とか言ってるタコになんかしてやる必要あんの? そのコストは会社が払うべきじゃないのかなぁ
お前がそんな心配する必要は無いんだよ
データセットの使い方を勉強中なのですが、型付きデータセットを作っても、 2台のPCの内、片方にはなぜかツールボックスに型付きデータセットが追加されません。 試しに新しいプロジェクトを作ってすぐにデータセットを追加して、空のデータテーブルを 置いてビルドした時点で、片方はツールボックスに表示されるのに、片方は 追加されません。 何かツールボックスの表示の設定とかが有るのでしょうか?
478 :
477 :2008/12/02(火) 23:20:43
あ、ツールボックスに表示されるのは、最低限、空のフォームを作って、 その画面デザイナを表示した時ですね。 その時にツールボックスに出るはずの型付データセットが表示されません。
英語でもいいよ
480 :
デフォルトの名無しさん :2008/12/03(水) 01:01:09
asp.netでWEBアプリを作成しています。 DBからデータを取得しDataSetに格納しているのですが、そのデータはアプリ起動中の間保持したいと考えております。 1.カプセル化し静的に保持する 2.Session、またはCacheを使い保持する 二通り考えていますが、どちらを使った有効性が高いでしょうか?また別の方法で良い方法はありますか? ちなみに返されるデータの量は、テーブル数5、各20フィールド程です。 またマスターテーブルですので、テーブル内容の変更は基本的にありません。
CacheってViewStatとは違うの?
全然違う!
>>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#風のやり方というのがあるのでしょうか? ご存知の方よろしくお願いします。
それでいい
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の別個のインスタンスが保持されるのでしょうか?
参照してるのはnew A()で作られたインスタンスであってm_aなんてメンバ変数ではない
こういうときこそ鯛焼きで説明ですね。
491 :
デフォルトの名無しさん :2008/12/03(水) 15:39:11
>>489 そうですか。わかりました。ありがとうございます。
すいませんがもう一つ質問です。
LinkedListでもっている構造体を一個ずつ走査して
必要なら中身を書き換えたいです。
foreach(StructHoge hoge in hoges)
{
hoge.age = 10;
}
上みたいに書いたら
foreach 繰り返し変数' であるため、このメンバを変更できません
とエラーが出ました。
クラスだったら上記のようにして内容を書き換えられるとは思うのですが
構造体の場合はどうやって書いたらいいのでしょうか?
構造体を使わない どうしてもってんならノード一つずつ辿ってって ひとつ前に新しい構造体を挿入して現在のノードを削除の繰り返し
>>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使うならこういう小細工が必要
494 :
493 :2008/12/03(水) 16:08:13
間違い foreach(LinkedListNode<StructHoge> hogeNode in GetNodes(hoges)) {
>>492 そうですか・・・わかりました。ありがとうございました。
構造体とクラスって同じなのに文法上で分かれてる意味がわからん
>>493 なんだLinkedListNode<T>.Valueは{get;set;}だったのか……
ヘルプのサマリに
>ノードに格納された値を取得します。
て書かれてたから{get;}かと思った
>>493 foreachならってことですが、
他の書き方ならもっと簡単にかけるんでしょうか?
よかったら参考に教えてください。
>>498 いやGetNodesのwhileの中にforeach内の処理を書くことになるだけ
GetNodesは使い回せるからforeachの方が簡単
>>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; });
こういうのもアリ
501 :
500 :2008/12/03(水) 16:31:07
また間違えた hoges.ModifyValues(hoge => { hoge.age = 10; return hoge; });
おちつけw
>>499-501 なるほど。なにかと構造体だと面倒なんですね。勉強になりました。
ありがとうございました。
FrameWork 2.0 C# のWindowsアプリ環境で質問です。 DataGridViewを使用する際に 綺麗に枠線を出したいと思っているのですが GridColorプロパティでセルの部分の枠線の色は変更できるのですが、 行ヘッダと列ヘッダの枠線を同じ色にできないためちょっと見た目の悪いグリッドになって困っています。 FlexGridのように綺麗にヘッダからグリッドへと繋がる線を標準機能で設定することはできませんか? 出来ないのであれば自前でオーバーライドして線を描画するしかないと思っているのですが・・・ 出来ればFA環境で使いたいのであまり自前で処理して遅くなるのは避けたいなぁ…と この辺りはテクノニックの問題だとは思いますがorz よろしくお願いいたします。
506 :
デフォルトの名無しさん :2008/12/03(水) 21:34:07
テクノニック・・・だと?
うほっ
YMO
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にする際に中身の文字列をちゃんとエスケープしてくれるはずなので、それも違うのかなぁと悩んでいます。 再現もできない状況です。 どなたかわかるかた、教えていただけると助かります。 よろしくお願いします。
例外の名前が見当たらないが。 たぶん例外よく見りゃわかるんじゃね?
StackTraceの中身だけ出力してるようで、何Exceptionが発生したのか という情報は無いのです
場所がわかってるなら拾えないの?
オーバーライドしたいのでやり方おしえてくださいな
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
これ何が流行ってるんだ
>>512 再現しないのです
ので、このエラーなら多分これだよというのがあれば、
それを試して再現させたいのです
ダブルバッファリング(以下、DB)ってtrueの方が描画処理が早いんですか?
524 :
デフォルトの名無しさん :2008/12/04(木) 07:47:01
>>522 一概にそうでもないと
むしろちらつきを抑えるための技術だし
>>520 ふつうにXmlExceptionじゃないかなとは思うが
XmlException を使用した XmlTextReader の例外処理
http://msdn.microsoft.com/ja-jp/library/ch49a7ch (VS.80).aspx
catchしてるなら例外の名前分かるはずだけど。
Deserializeで発生しうる例外:
ThreadAbortException
StackOverflowException
OutOfMemoryException
TargetInvocationException
InvalidOperationException
>>513 class BaseClass
{
public virtual void Method1()
{
...
}
}
class InheritClass : BaseClass
{
public override void Method1()
{
...(継承クラスでの処理)...
// ベースクラスでの処理を継続したいなら
base.Method1();
}
}
【国籍法改正】 5日に成立、「DNA鑑定」は民主党が拒否…数万人に日本国籍取得の道★12
http://mamono.2ch.net/test/read.cgi/newsplus/1228350598/ ''';;';';;'';;;,., ニダ・・・
''';;';'';';''';;'';;;,., ニダ・・・
やっとやっと国籍法ニダ ;;''';;';'';';';;;'';;'';;;
;;'';';';;'';;';'';';';;;'';;'';;; レイープさせろニダ
vymyvwymyvymyvy、
日本に住んでやるニダ MVvvMvyvMVvvMvyvMVvv、 参政権もよこすニダ
Λ_ヘ^-^Λ_ヘ^-^Λ_ヘ^Λ_ヘ
謝罪しろニダ ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
賠償しろニダ __,.ヘ /ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ ウリは武装スリをするニダ
/\___/ヽ /\___ /\___/ヽ _/ヽ /\___/ヽ
/'''''' '''''':::::::\/'''''' '''/'''''' '''''':::::::\ /'''''' '''''':::::::\ ニダニダ
. | \丶, 、/、 ...:| \, .| \, 、/ 、.:|、/ | \, 、/ 、.:|
| ,,ノ(、_, )ヽ、,, .::::| ,,ノ(、_, )| ,,ノ(、_, )ヽ、,, .::::|_, )| ,,ノ(、_, )ヽ、,, .::|
. | `-=ニ=- ' .:::::::| `-=ニ= | `-=ニ=- ' .:::::::|ニ=| `-=ニ=- ' .:::::::|
\ `ニニ´ .:::::/\ `ニニ \ `ニニ´ .:::::/ニ´ \ `ニニ´ .:::::/ ウェーッハッハッハッハ!!
/`ー‐--‐‐―´\ /`ー‐- /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\
民主は「売国党」。
C++趣味グラマからC#趣味グラマへ引越し中です。 C#にはシステムメニューを扱うクラス・方法は無いのでしょうか。 1項目加えたいだけなのですが、調べてみても自前で [DllImport("user32.dll")] でextern GetSystemMenu() や AppendMenu() みたいのしか無いような。 選択した際の処理は、override WndProc() でやっぱりC++みたいに? 何か常識的なやり方があったら教えてください。
529 :
デフォルトの名無しさん :2008/12/04(木) 13:30:05
>>514-518 がんばれ。がんばれ。やればできる。絶対できる。絶対できるよ。
ああ”あ”あーー!!1
>>528 それでいい
まあcodeprojectとか探せばライブラリ化してる人もいるかも知れんけどどうかな
>>530 ありがとうございます。
難しい事をやろうとしてるわけではないので、
SDKのWinUser.h見ながら頑張ります。
>>505 DataGridViewのヘッダ枠線の色をセルに合わせる方法
1.ColumnHeadersBorderStyleプロパティをSingle
2.RowHeadersBorderStyleプロパティをSingle
3.EnableHeadersVisualStylesプロパティをfalse
>>532 おぉぉ!!!!!!!!
出来ました!
それも簡単に
EnableHeadersVisualStyles がポイントのようですね。
ちょっと詳しく調べますが 助かりました。
ありがとうございました。
まじでエラーログにスタックトレースだけ出してるシステムとか Messageとスタックトレースだけ出してるシステムとか見るんだが、 単にToStringの方がシンプルかつほぼ必要な情報をみんな出してくれるのに、何なんだろうね。
ListViewで、項目名を編集中にIMEモードを変更したとき、編集が終わると、 IMEモードが編集前のものに戻ってしまいます。 これを戻さないようにはできないのでしょうか? ImeModeChangedイベントも編集中はイベント発行がされないようでした。 例えば、日本語入力ONの状態で編集に入り、編集中に日本語入力OFFにしても、 AfterLabelEditイベントでの ListView.ImeMode = On になっている状態です。
537 :
デフォルトの名無しさん :2008/12/04(木) 20:21:52
Marshal.StringToHGlobalAnsi で得られたAnsi文字列のサイズ(というか確保された アンマネージドなメモリのサイズ)を調べる方法ってありますか?
>>536 編集中はListViewの内部コントロール(TextBox?)がフォーカス取ってるからじゃないの?
そうなら内部コントロールの参照を何とかして持てば解決できるんじゃない?
540 :
デフォルトの名無しさん :2008/12/04(木) 20:39:08
>>539 str をANSI変換して、マルチバイトが含まれてたらそれだとまずいので質問したのですが。
>>538 ありがとうございます。
内部コントロールへのアクセスは、やはりカスタムコントロールを作るとかしないと無理ですか?
542 :
537 :2008/12/04(木) 20:55:48
とりあえず API の lstrlenA 使って済ます事にしました。 [DllImport("kernel32", EntryPoint = "lstrlenA")] private static extern int lstrlenA(IntPtr str);
GetByteCount + 1 とか?
>>541 カスタムコントロールというか、ListViewを派生していろいろやらないとダメだろうね。
ちょっとやってみたところEN_SETFOCUSでEditBoxのハンドルが取れるんだけど、
なぜかこのハンドルからはControl.FromHandle()で参照を取れないから
直接Win32APIでやるしかなさそうで面倒臭そう。
>>544 どうもです。なんだか難しそうですね…
全然わからんので、色々調べながらやってみます。
大学内にて、ユーザー名とパスワードによる認証が必要な共有フォルダ \\HogeServer\HogeHoge に現在接続しているか否か(net use で表示される状態か) を確認する手段を模索しています そのフォルダに普通にアクセスして例外が返ってきたら 未接続であると見なそうと考えていたのですが、レスポンスが悪いので Directory.Exists を使ってみました この時 Directory.Exists だとダメなケースなどありますでしょうか よろしくお願いします
正規表現について教えてください。○のみを抜き出したいと思っています。 ×(1)前髪をカットする ×(2)カットをする ×(3)ショートにカットする。 ○(4)カットで尋ねる。 ×(5)ヘアカット方法を知る。 [に]*カット[を]*[(方法)]*[(する)]*[。]* でよいかと思ったら、(4)以外もヒットしてしまうようです。 ご助言お願いします。
>>547 正規表現の問題ではないと思いますが。
(4)だけにマッチさせるだけなら、
new Regex("カットで尋ねる。")
ですみますが、そんなことがやりたいわけじゃないでしょう?
>>548 早速ありがとうございます。
そうでした。
プログラムとデータをじっくり見たら、
○(6)カット
としたいのでした。
いやいや、あなたの欲しい条件分かんないからw
何の説明にもなってないだろ 前にどんな言葉があったら駄目なのか後ろにどんな言葉があったら駄目なのか
つまりは正規表現がわかってない
文章でいいから、自分が抜き出したい条件をじっくり箇条書きにでもしてみ。 その条件で本当に抜き出したい物だけを特定できるのか考えて。 そしたらそれをそのまま正規表現にすればいい。
WebBrowserの操作で質問です。
ttp://jp.youtube.com/ YouTubeの検索ボタンを自動でクリックする方法を教えていただけませんか?
InvokeMemberで出来ると思ったんですがCSS作られているのでよくわかりませんOrz
よろしくお願いします。
整理できてきました。 ×を排除したいのでした。それならオーケー? 結果として○のみを抜き出すことになります。 排除したい条件は今後増える可能性があり、比較的条件を明示しやすいので、○のみを抜き出すのではなく、×を排除する、という条件を正規表現で書きたいです。 ×(1)前髪をカットする ×(2)カットをする ×(3)ショートにカットする。 ○(4)カットで尋ねる。 ×(5)ヘアカット方法を知る。 ○(6)カット。 [に]*カット[を]*[(方法)]*[(する)]*[。]*
自分ルールで[]や()の記号を使うなら その記号の意味も書けよ。
正規表現どころか俺DSLにしか見えないんだが
なぜカットをするがだめでカットに尋ねるがOKなのか全く分からないな
「カット」の直後に「を」があるとダメなんだろう、たぶん。
>>555 そもそも何をしたいのかよく分からない。
仮に自由な文字列が入っている可能性があって、さらにマッチさせたい条件そのものも変更するとか言うんだったら
もうそんな設計見直せとしか言えない
自然言語処理の課題かなにかなのかな。 それとも顧客から来たメールの内容を自動判別するようなアプリケーション? 前者ならもう少し自分でがんばれっていいたくなるところだし、 後者なら内容を大まかに表すリストと、フリーフォームのテキストボックスを用意して 入力するようにしてもらえばやりたいことができる気がする。
例文は、自由な文字列から抜き出した実例です。 ○のものを使いたい、×のものは使いたくない。 それ以上どう整理しろっておっしゃるのでしょう? すでに自由な文字列があり、そこから抜き出す条件を書くとしたら、ある程度の条件を書き、条件に合わないときには、条件を適宜追加する以外にないと思うのだけど。 この方針でないとしたら、見直してどうすればいいですか? すべての可能性をあらかじめ予期するのは無理だし。
じゃあ正規表現で扱うのは無理だろ カットで尋ねる。 が駄目でも カットで尋ねる人 やら カリカットで尋ねる。 ならOKになる可能性があるんだろ?
>>563 意味分からん
なぜ〇にしたか、なぜ×にしたかの理由を書けって言ってるんだ
つーかC#と関係ないだろ
じゃ、俺の解釈。 "[にを]" にマッチするものを除外する。
>>563 > 例文は、自由な文字列から抜き出した実例です
そもそもどういう条件の元で抜き出したんだよ
お前はどう判断して例文に○と×をつけたんだ
そこがまさに正規表現のパターンそのものになるんだろうが。
皆さんが書いてるように ○と×の判定基準を示さないと判らないよ。 書いてること理解できますか?
俺予想 !Regex.IsMatch(input, "(ヘアカット|カットを?する)");
570 :
デフォルトの名無しさん :2008/12/05(金) 19:22:11
GUIでなかったアプリをGUI化しないといけないんですが、 今までC/C++で書いてきた関数を使いたい GUI部分の作成が楽といわれるC#を使いたい という2つがあるんですが、 GUIだけC#で作って、C/C++の関数を呼び出すということは可能ですか?
できるけどそれが楽かっつーと微妙
dll化してC#からDllImportで使う コマンドライン操作できるようにしてProcess.Start辺りから使う って所か? っていうかC++CLIにしたら良いんじゃねーかと思うけど
C#から P/Invoke で直接呼び出すか、 C++/CLI でラッパーDLLを作り、それをC#から呼ぶと良い。
いやフォームデザイナが使いたいだけなら、 C++/CLIでラッパーなんか作る必要ないだろ。
C++のクラス使ってるかもよ となるとやはりC++/CLI一本で作成だな たしかフォームデザイナも使えたよね
>>307 TextBox1 + TextBox2ですが、
TextBox1 = 200 TextBox2 = 300として
二つを足し算したら200300と出てきましたょ。
まだまだです。
>>575 C++/CLI使ったことないでしょ
フォームデザイナ,あれはおまけ
578 :
デフォルトの名無しさん :2008/12/05(金) 21:17:46
ここはC#のスレ VC++に貼り付けたらちゃんと改行されたが
間違えました、すみません・・・ VC++に貼り付けても改行されないんです。不思議だ。
>>577 言語自体は触ってるが確かにデザイナを使ったことはないな
そんなにひどいのか
・C++/CLIでクラスライブラリ ・C#でフォームアプリ の2プロジェクト構成にすればいいだけじゃん
C#で IEを起動する。 HPの移動のアドレスを監視し 特定のページに来たとき(ヤフーのログイン画面など) パスをテキストボックスに自動入力するツールを作りたいです。 まずはじめにログイン画面でテキストボックスのnameの値を見て 値をいれるようなクラスはありますか?
>>555 前髪をカットする
カットをする
ショートにカットする。
ヘアカット方法を知る。
の4つを省けばいいだけじゃないの?
無理に条件を絞る必要ないと思うし、本人もそう言ってる気がするんだけど…。
関係ないけど、「カットで尋ねる。」ってどこの日本語?
>>555 は、(1)がなぜ×なのか、(2)がなぜ×なのか、(3)がなぜ・・・
(4)がなぜ○なのか、以下同様
の説明が全然できてない。
毎回「これは○ですか×ですか」ってダイヤログを出す インタフェースを作るのが正解だったりしてw
ファジーだとかの学習機能をつんでおいて
最初は
>>589 みたいに振り分けていけば
いつかは学習してくれて、自動で○×つけてくれる。
ってどうでしょうか?
中の人にあんまり仕事させるなよ
適用するならファジーじゃなくて、同じ時期に流行ったニューラルネットワークの方でしょ。 しかしニューラルネットって最近全く聞かんな。
すみません、キャストについて教えて下さい。 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する事になんとなく危険な感じがするんです。
Masterが常にOriginalMasterPageだとわかっているなら問題ない まあ子が親の特別な型に依存するような設計はあんまり良くないけど それよりもpublicフィールドやめよう
>>555 >>563 >すでに自由な文字列があり、そこから抜き出す条件を書くとしたら、
>ある程度の条件を書き、条件に合わないときには、条件を適宜追加する以外にないと思うのだけど。
>この方針でないとしたら、見直してどうすればいいですか?
>すべての可能性をあらかじめ予期するのは無理だし。
機械的にプログラムでやるのは無理です、って言ってるようなもんじゃん。
>>555 の最下行の暗号を文章で書いてみろよ。
・カットの前が「に」なら×
・カットの後ろが「を」なら×
とかさ。
これが「ある程度の条件」だよ。
コンピュータ君はコレに当てはまるかどうかを判断するしかできないないわけで、
実例出されて「こんなふうに」と言われても煙吐きます。
>>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
コピペ君って馬鹿だな、まで読んだ。
こういうのをもっとコピペ爆撃していけばIDが導入されるかもしれない
「コピペ君って馬鹿だな、まで読んだ。」ってコピペじゃね?
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サービスから名前付きパイプを動かす場合なにか他に対応が必要なのでしょうか??? あまり詳しくないので適切に説明できているか判りませんが宜しくお願いします。
作法として、enumを文字列定数代わりに使うのは、ありですか? enum Medal { Gold, Silver, Bronze }; string prize = ((Medal)(order - 1)).ToString + " Medal";
列挙体としての意味があれば可 enum Strings { Silver, Hello, Apple } こういうのはダメ
>>604 どういう意味で「作法」って言っているのかよくわからないけど、
他にもっと明示的に同じことを実現する方法があるのにわざわざenumを使うのは
合理的な選択とは思えない。
Regex.Match(" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx", "\s+((\w+\.?)+)$") これはすぐ処理が終了するのですが Regex.Match(" Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx,", "\s+((\w+\.?)+)$") こっちは最後にカンマが着いているだけなのに物凄く時間がかかります どうすれば速くなりますか?
608 :
607 :2008/12/06(土) 19:35:23
すみませんやりたいことは "ほげほげ Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx" が "\s+((\w+\.?)+)$" にマッチするなら ((\w+\.?)+)の部分を後で別の処理に使い、マッチしないなら次に行く、というような感じです " Xxxxxxxxx.xxxxxxxxxxxxxx.xxxx," は マッチしないので次に行ってほしいのですが、falseと判定されるまで時間がかかります "\s+((\w+\.?)+)$" にマッチする場合 ((\w+\.?)+)の部分と同じ文字列が取得できるパターンで 上記のパターンより処理の速いものがあれば教えてください
607が「そう」思い込んでいるだけの予感。。。 つーか8bit時代じゃないんだから処理時間なんて体感で語れないよ
610 :
607 :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 で試してます
VC はスレ違い。
612 :
607 :2008/12/06(土) 20:10:20
すみません、VC#2008の間違いです・・・
>>610 たった一つの文字列でその正規表現で応答が返って来ない?
ありえないな
614 :
607 :2008/12/06(土) 20:13:24
すみませんもう一つ訂正です
>>610 で応答がなかなか返ってこないのはカンマありのほうです
>>613 ほんとにどうしてなんでしょう・・・
カンマ有りだとマッチが失敗するのが大きな違い。 正規表現のエンジンによっては なかなか処理が返って来ないってことはありうる。 詳しく知りたければ再現可能なコードにして、 正規表現スレに投げるといいかも。
正規表現って内部的には状態機械だからね。 ワーストケースでは組み合わせ論的な計算量(指数とか階上オーダー)かかる。 1つ目の方は1発マッチしてるから早くて、 2つ目の方は、マッチしないから延々総当たり探索してる状態なんでは。
617 :
607 :2008/12/06(土) 21:02:31
>>615 ,616
そういうものなんですね・・・
正規表現スレに行ってみます
@ MasterType ディレクティブ
619 :
デフォルトの名無しさん :2008/12/07(日) 01:31:18
C#でゲームを作っています。 ゲームのクラスの中に 毎フレーム呼ばれるUpdateっていうメンバ関数があるとして、 この中で一時的に計算に使うだけのために あるクラスをnewしてたりするんですが、 それってGCの原因になるのでしょうか? そういう場合、メンバ変数としてコンストラクタで一回だけnewしておいて、 中身を書き換えて使った方が効率がよかったりするのでしょうか?
それが問題になるまでは気にしなくていい気がする。
621 :
619 :2008/12/07(日) 01:37:31
大きな問題であるのか、たいした問題じゃないのか、 もしくはまったくGCの理解として間違っているのか、 その辺が知りたいです。
実際の環境で動かして問題が無ければおk
PCでは Gen 0 世代のGCで回収されるのが期待できるため、通常気にする必要はない。 まぁ、パフォーマンス気にするなら、ちゃんとプロファイル取らないと論外。
けど毎回newするのも効率悪い気がするなぁ。 newするコストが微々たるものなら気にしなくていいと思うけど。
まずは率直できれいな実装で作ってみて、 よっぽど性能に問題があるようだったら、そのときはじめて高速化を考える。
626 :
デフォルトの名無しさん :2008/12/07(日) 05:20:33
気にする気にしない、考える考えないの問題じゃなくて 物理的・理論的に毎回newするのとしないのでGCに影響があるかどうかを聞いているのに。
GCへの影響は大なり小なりあるだろうけど 具体的にどの程度かは実装してテストしてみるまで分からんでしょ 設計段階で分かるのなんてオーダーぐらいだろ
.NETで自動的にエンコード判別してくれるメソッド無いの?
なんにもnewしなければGCはおそらくおこらないし 毎回newすればGCはすぐに起こる
XP+VisualC#2008でC#の勉強をしています。 イベントハンドラの必要性がいまいちぴんと来ていません。 ボタンにイベントハンドラを割り当ててそのイベントに機能を割り当てるのと、ボタンのクリックのメソッドに機能を割り当てるのの違いはなんでしょう? これまでは、Formでボタンをレイアウトしてダブルクリックして自動的に記述される private void button_Click(object sender, EventArgs e) に書いてきたので、イベントハンドラを使ったこともないのです。 イベントハンドラが必要なことはあるのでしょうか? イベントハンドラを使うと、得なことはあるのでしょうか? ご教示お願いします。
それは間接的にイベントハンドラを利用しているんだよ? フォームデザイナの生成したコードを見ると イベントにデリゲート追加してる箇所があるはずだ
ラムダ式に[Serializable]属性は付けられないのでしょうか?
>>631 試しにそのメソッドを削除してビルドしてみれば、隠れたイベントハンドラの存在がわかるだろう。
>>633 デリゲートはもともとSerializableだよ
>>635 ラムダ式で暗黙に作られる匿名クラスもSerializableですか?
いいから試せばわかる
外の変数を取り込んだらダメみたいだな 当たり前のことだから引数に渡すとか工夫しろ
仮想関数を一個持つabstractクラスを作りましたよ、ええ 嫌々ですけども
>>631 Click += button_Click;
あるだろ。
そのbutton_Click()はいつ動いてると思ってるんだ。
名前で判断してリフレクションで代入することもできるけどね WPFはそうやってたはず
button_Clickという名前だからbutton.Clickに対するイベントハンドラだ というようにWPFが処理してるわけじゃないよ ただリフレクションを使ってると言いたかっただけ。念のため。
今売れに売れてる一押しのデザインパターン教えてください
GOFならStrategy
645 :
631 :2008/12/07(日) 16:05:49
>>みなさま ありがとうございます。
Observer超オヌヌメ
インテリセンス日本語化きてんじゃんか おまえら知ってたならおしえろよな~
C#を使っているなら イベント=Observer foreach=イテレータ
TextBoxのTextデータを更新するたびに、毎回スクロール位置が一番上にいってしまいます。 これを、例えば中間の位置に移動していた状態で、Textデータを更新しても 位置が移動しないようにするにはどのようすればいいでしょうか? 間違っているかもしれませんが、今考えている方法は、 現在のスクロール位置を取得し、Caretをその位置まで移動し、 Textデータ更新後にScrollToCaret()で移動するのかと思っています。 ただ、現在のスクロール位置の取得方法などが解からないので困っています。 他の方法でもかまいません。よければご存知の方教えてください。
インテリセンス日本語化のページの日本語が壊れまくってて入れるのが怖い
>>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);
}
//更新前 int x = textBox1.SelectionStart; // 更新後 textBox1.Select(x, 0);
GetScrollPosらへん?
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のように扱ってもいいのか疑問だったのでお聞きしました。
>>657 enumがintと互換なのは仕様。
個人的にflag++が作法的にいいとは思わないけども。
>>658 そうですかありがとうございました。
ちなみにこういった場合、どんな作法が適切ですか?
SetClipboardするとWM_DRAWCLIPBOARDが4回来るのは何故ですか?
1回に1データフォーマットしか登録できないから 何個も登録するようなコピー動作すると何個も飛んでくる
なるほど。普通に文字列をセットしているだけなのですが データフォーマットを比較するとそれぞれ違う形式で 送られて来ているのでしょうか。 一回しか送らない、もしくは一回しか受け取らない方法はないでしょうか。
その都度フォーマット見て欲しいフォーマットのときだけ処理したらいいんじゃね?
オブジェクトってクラスのことなの?
タイトルバーのところってFormじゃないの? Form_MouseHoverなどが発生しないんですが
その辺りはノンクライアント領域という箇所 WndProcでWM_NCMOUSEHOVERとかNC用の独自メッセージを受け取る
667 :
649 :2008/12/08(月) 15:08:24
お返事遅れて申し訳ないです。
当方C#を始めて数日なので時間かかりました^^;
>>652 実装することが出来ました。ありがとうございます。
>>653 上手く行きませんでした。
私のやり方がおかしいのかもしれません。
現状
>>652 さんのやり方で解決できたのそれでいかせていただきます。
ありがとうございました。
>>654 もう少し勉強して時間があるときに自分でも考えてみようと思います。
現状
>>652 さんの方法で上手く行きました。
ありがとうございます。
>>659 flagの順序を定義するメソッドをつくるとか?
順序が存在している時点で、それはフラグではないのでは?
確かに enum State{ } とかがいいかもね。
671 :
660 :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#の場合はどうなってるんでしょうか? 配列の中身の型によって振る舞いが変わったりするんでしょうか?
配列は参照型 C#の最重要事項だからこれだけでわからなかったら勉強してきて
674 :
デフォルトの名無しさん :2008/12/08(月) 20:48:34
参照型をrefで渡しても速度的な恩恵はなし?
間違いなく遅くなる
>>657 flagっていうより、(ステートマシンとかの)ステートに近い?
遷移って言ってるし。
それならそのenumをひとつだけフィールドに持つクラスを作って
implicitでそのenumと暗黙的に変換できるようにするとかどうかな。
そうすれば++とかは「次の状態に遷移することだな」って推測できるし、
順序をいじるのも循環させることも可能になるし。
クラスにするなら外にenum見せる必要ないだろ state.Next()でいいじゃん
>flagっていうより、(ステートマシンとかの)ステートに近い? を受けての言だろ?その前提ならおかしくはないぞ。
681 :
677 :2008/12/08(月) 22:32:06
やっぱり余計にどれが何を表す型なのか分かり難くしてるだけだね。。
ファイル読み込みで 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(); }
なんでそうなってるのか、ステップ実行して確認してみたら?
685 :
682 :2008/12/08(月) 23:18:31
すみませんでした。 失礼します。
>>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
Form1_FormClosedがあるのにForm1_FormLoadedが無いのはMS側の不備なのでしょうか?
必要性が無いんじゃね
Loadedな時にe.Cancel出来無いじゃん
例外でも投げりゃいいんじゃね
無限ループや無限再帰って何にゃ?
int Hoge(int fuga) { while (true) fuga++; return Hoge(fuga); }
スタックオーバーフローが起きるんですね 僕わかります
私わかります
私もかります
void Hoge() { Hoge(); }
すごく良く解ります じっちゃんの名にかけて真実はたった一つの謎が解けました!!!!
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のポインタの先頭っつけるだけで
高速にできるのかなと思ったのですが、どうもそれっぽいメンバが見当たらないので・・・
701 :
698 :2008/12/09(火) 11:45:14
ちなみにできるだけ高速なものがほしいです。
LinkedListNode<T>はLinkedList<T>への参照を持ってるからそういうわけにもいかない List { get; }だしな foreachでAddLastしていくのがいやなら新しくリンクリストクラス作ったら? 大した手間じゃないし
703 :
698 :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の方がはるかに早かったのですが、妥当でしょうか? 理由はなぜですか?
LinkedListNode<T>の存在
705 :
デフォルトの名無しさん :2008/12/09(火) 16:19:53
>>704 すいませんが素人なもんでもう少し詳しく教えてもらえないでしょうか。
LinkedListはTじゃなくてLinkedListNode<T>を管理する つまりAddLastするごとにLinkedListNode<T>のインスタンスが作られる
>>706 そういうことですか。ありがとうございました。
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(); } こうしてみたらどうなる?
> InvalidOperationException > node は他の LinkedList に属しています。
関数とメソッドの違いがよくわからない
711 :
デフォルトの名無しさん :2008/12/09(火) 17:29:20
なにかやらしたらやりッパがメソッド なにかやらしたら結果を教えてくれるのが関数 とかあいまいな感じでいいんじゃね?w
メソッドが返値を持ったっていいじゃない
メソッド=関数
メソッド=C#における関数
関数はインスタンスメンバの値を参照できない メソッドはできる クラスメソッド=関数
メンバ関数の立場は…
C#にメンバ関数なんてないよw
C#に関数なんて存在するのか?って話に
>>687 FormClosedはClosedがobsoleteというか非推奨にするために
後から追加されたイベントだからね。
取りあえず私見をば メソッドも関数も(プログラミングにおける)機能や意味は同じで、 ・関数 まず、機能ありきで、その機能の中で特定のデータ(オブジェクト等)を 操作するという、非オブジェクト指向的な観点に基づいた用語 ・メソッド まず、オブジェクトありきで、そのオブジェクトに対する操作(命令)を定義することで さまざまな機能を実現するという、オブジェクト指向的な観点に基づいた用語
>>720 そんな深読みするような意味なんてないって。
むしろただのハッタリだと思った方がまだしも真相に近い。
だいいち、オブジェクト指向的な発想で言えば"method"より"function"の方が
よりしっくりくるでしょ。
訳語の「関数」で考えても意味ない。
722 :
デフォルトの名無しさん :2008/12/09(火) 19:44:08
>>703 ListのAddって内部ででかい配列を作ってはコピーしてるのかな。
だとしたら、要らなくなった小さい配列はGCの対象になるの?
とすれば、長期的にはパフォーマンス悪くなったりしない?
内部容量は倍々に増やされるのですぐ打ち止める
MSDN的には関数というとFunc<>オブジェクトのことを指すらしいよ
一応、値を返すのが関数ということになってたはず VBもVBAも
>>725 それはVBの特殊事情。
だから関数ってのは訳語だから。
元ネタはfunction
functionって日本語では関数のほかに機能って意味もあるよね なんで関数じゃなくて機能って訳さないんだろう 特にC言語系では機能って言ったほうがいいと思うんですがどうですかね?
function→ふぁんしゅー→函数(中国読み)→関数
>>727 こーいうー機能をつけるためにこーいうー機能を定義する・・・
とか会話したら発狂するから
>>727 だいたいプログラミング言語ってはじめは数学が好きな人が作って数学が好きな人が使うから
>>729 ならアメリカ人は関数という意味も機能という意味もあるfunction
という言葉を使って会話するから発狂してるのか?
発狂してプログラマ人口激減したからインド人プログラマ大量に
引っ張って来てたりしてな
あ、インド人プログラマもfunctionて言葉使うのか・・・・・
インド人はファンクショラヤーナとかいうんだよきっと
Windowsアプリケーションの内部でperlを実行してその計算結果を使いたいんですが どう書けばいいでしょうか?
普通にプロセス実行して標準入出力でやりとりすればいいんじゃね perlでなくていいならironpythonとかWSHとか使ったほうが遥かに簡単だよ
あいろんふぃそん?
アイアンパイソン pythonの.net上で動く奴
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; ← }
>>739 もうちょっとこっちで再現可能な情報出してくれないか。
環境とかバージョンとか。
とりあえず、VS2008でVista64の環境でエラーでないが。
まあVector3に初期化できてないメンバがあるんだろう
742 :
デフォルトの名無しさん :2008/12/10(水) 12:58:46
743 :
739 :2008/12/10(水) 13:04:43
あれ、XNAっていうのはWin用とXBOX用のゲーム開発ができるんですけど、 Win用のプロジェクトだとエラーがでません。 XBOX用のプロジェクトだけエラーがでてるみたいです。 ソースは両方で共有してるんですが、参照してるライブラリの中身とか Win用とXBOX用で挙動が違うのかな・・・
このスレの住人は役立たずだからXNAスレで質問しる
>>744 XNAスレから来ました。
しかしこれは文法とかC#の一般的問題ではない気がしてきました。
よってしかるべきところで聞いてみます。ありがとうございました。
Vector3って自前のじゃなくてXNAのじゃないかよ・・・
デフォルトコンストラクタがメンバを初期化してるなら二度手間だよなぁ
XNAのVectorって最適化されてるんじゃなかったっけ? とりあえず報告よろ
if (Point >= Point)が出来ないのはMicrosoft側の不徳の致すところですか?
>if (Point >= Point) 意味不明
おまえが理解できない対象は全て意味不明か こりゃおもしろい
Pointって構造体?
Point(1, 100) と Point(30, 20) の大小比較はどうやるんだ?
もちろん距離です
何との? 原点からの距離に決まってるだろ オペレーターオーバーロードなんて直感に反したものばかりなんだから 細かいことでガタガタ騒ぐなよ
おおこわいこわい 難癖のつけ方だけ一流だな
ベクトル的に比較なんてPointなんて名前でやる話じゃない気がする。 それこそ付けたきゃ自分で勝手に付ければいい話じゃないの。
Q:東京と大阪の大小比較はどうやるんだ? A:もちろん距離です
Q:何とのw? A:何との? 地球の中心からの距離に決まってるだろ オペレーターオーバーロードなんて直感に反したものばかりなんだから 細かいことでガタガタ騒ぐなよ
距離の比較は距離を表すクラスでやればいいじゃない。 点は点を表してればいいんだよ。
釣れた釣れたw
ちなみに
>>749 とは別人。ごめんな
>>749 w
おまえらみたいな頭の固い人種とは付き合えないなぁ
嘘を嘘とm
>>763 釣ったの俺だよ。
勝手に騙るなテメェ。
>>764 ベクトルは「点」じゃなくて「量」だから
お馬鹿さん大集合
>>762 その程度のことでクラス持ち出すなよ
これだからゆとり.NET厨は・・・
俺の辞書に位置ベクトルという言葉はない!
位置ベクトルも量が点の位置に等しいだけで量だぞw
ここまで高校数学レベルのアホ数名がお送りしました。 引き続き正常な流れのスレをお楽しみ下さい。
>>770 そりゃそうだが、「方向と量」と「位置」はベクトルの共変性という観点から別に扱われる対象だぞ
・・・釣られたか?
点も量がベクトルの位置に等しいだけで量だぞw
急に伸びてると思ったら何なのw。
複素数も量が2Dベクトルの位置に等しいだけで量だぞw 四元数も量が4Dベクトルの位置に等しいだけで量だぞw バロスwwwwwwwww
点だろw
点かなあ?
量です
いつまで続くのw?
馬鹿が自分の間違いを認めるまで
つまり永遠に
つまり点ベクトル構造体を定義する必要があるわけだな
原点(0,0)からの距離とした場合、Point(100,1)とPonit(1,100)が等価になってしまうのが悩ましいな。
PointFって何?
Point<float>
結局どうすればいいんですか?
if (Rectangle >= Rectangle)
ほらな、お前らが馬鹿なことばっかり言ってるから正解が紛れて見つけられないんだとさ。
790 :
787 :2008/12/10(水) 17:17:13
マジでネタかどうかの区別もつかんのか・・・
大したスキルもないのにいつも質問者に対して上から目線なもんだからボロが出るんだよw
一番詳しいってことはないだろう
WPFについての質問があります。 タイマーを使うにはどうしたらよいでしょう? VisualC#2008では、ツールボックスにTimerがあって、 ドラッグ&ドロップで使えたのですが、 WPFには見当たらないのです。 探し方が悪いんでしょうか?
>探し方が悪いんでしょうか? 意味不明
実行時にデザイナの時より2ptだけFormが横に膨張するんですがどうすればいいですか?
>>794 探し方が悪いというかろくに探してないように見えるが
System.Windows.ThreadingのDispatcherTimerでも使えば
>DispatcherTimer ワラタ >大したスキルもないのにいつも質問者に対して上から目線 まさにこれだw
物置の中でも探してろ
台所を探して見つけました KitchenTimer
System.Home.Living空間にあるQuickleWiperでいけないか?
もっとよく探すのだ
つまんねーよ つーかこういう流れはWin32APIスレだけでたくさんだ
で?
>>805 APIスレもお腹いっぱいだよ。
分からないなら(ryのせいで。
だから何なんだ 荒れるから自重しろクソガキ
粗を探していかに人を馬鹿にするかを考えている人達の集まりなので
ポトペタではサポートされてない。 Windows.Forms.Timer相当のものが欲しければDispatcherTimerで正解。 Timers.TimerとThreading.TimerはWPFでも使っていいが、 UIいじるときはDispatcher経由になる。 あと視覚効果程度ならタイマーでなくStoryboardやTriggerを使うとよい。
ツルペタはサポートされていますか?
ツルペタ欲しいならJSchool使え ライセンス取得に手間と時間はかかるが結構おすすめ
いつまでやってんだよ。幼稚だな。
たしかにツルペタは幼稚だが
そんなつもりで言ったんじゃないのに、 なんか俺までロリコン的な空気に。
俺もロリコンで三日くらい前からVC#2008インストールしてC#の勉強はじめたんだけど、 このエディタってルーラ表示とかないの? VC++ならオプションの所にルーラ表示の項目あったのに……
なんかデジャヴュ
縦はツール→オプション→テキストエディタで行番号表示ならが出来ると思うけど 横ってあったっけ?
横数字は表示できないみたい。たてすじは表示できるけど。
XP sp3でVisual C# 2008を使って開発をしています。 今日は、WPFからFormを開くタイミングを変更する方法を教えてください。 WPFのxaml.csのInitializeComponetn():のあとに、 Form Form1 new Form(); と書くと、Form1を開けるのですが、これだと、そのFormを閉じないとxamlのウィンドウが開きません。 順番としては、xamlのウィンドウが開き、描画が終わってからFormを開きたいのです。 教えていただけないでしょうか。
>>818 ワープロじゃあるまいしそんなものいらんと普通思うんだけど、
一体どうしてそんなものが欲しいと思うわけ?
いまどき80桁とかアナクロなこだわり持ってる人がいるとも思えんけど、
仮にそうだとしてもステータスバーのカーソル位置表示で十分じゃん。
できるできない言うのは構わんが おまえさんは人の勝手に口挟むほどお節介焼きなのか? リアルで嫌われるぞ
>>818 ツール→オプション→すべての設定を表示にチェック
テキストエディタ→C#→全般→行番号にチェック
縦はないよ
横ルーラーの話なんてしてないのに回答者たちが勝手に憶測で語り出して
質問者も大変だねぇ
別に「~しろ」なんてお節介を焼いてはいないでしょ。 むしろ俺には不合理に思えるが、何か合理性があるのかと聞いてるんだけど。
>>825 あのさあ...
ルーラーっていうのは定規のことなんだけどひょっとして知らんのかな?
用紙って概念がないんだから縦のルーラなんてあるわけないだろうw
ルーラといえば必然的に横ってことになる。
誤魔化しで屁理屈しか言えないのか かっこわる
その理屈でどうして縦のルーラはありえなくて横のルーラならありうるのか理解できない
恥の上塗り乙と言っておこう!! 他人の指摘で自分のミスを認められない奴は、ただの坊やさ・・・
なんでVC++にあってC#に無いんだろうか
VC++2008にあったっけ?そんなの
>>829 理解できない?
縦は行番号と呼ぶからに決まってるだろ
英単語の意味なんて日本人の直感に反したものばかりなんだから
細かいことでガタガタ騒ぐなよ
>>822 App.xaml.csのOnStartupの中でnew Form1().Show()
WPFのウィンドウを自動で開きたくなければ,App.xamlのStartupUri属性を削除して
好きなところでnew Window1().Show()
835 :
834 :2008/12/10(水) 22:54:15
↑だとWinFormsのウインドウのほうが先に開いちゃうね WPFのWindow.LoadイベントのイベントハンドラでForm.Show()すればいいみたい きっとSystem.Windows.Forms.Application.Run(new Form1())とかやってたんだろ
836 :
834 :2008/12/10(水) 22:58:58
×Window.Load ○Window.Loaded 何度も悪いけど
>>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のウィンドウしか開きません。
もうすこしよろしくお願いします。
WPFとか以前の問題だな Form1 form = new Form1(); form.Show(); 型とインスタンスの違いくらいは理解してないと何もできないよ
>>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();
}
}
ありがとうございました。
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でもやってみればどう?
色々アニメーションと化させられるし
p2pとかやってみたい
C#でクラスを作成して クラスファイル名 COM_Char.cs(文字操作用関数を書いたクラス) クラスの中の関数 gCheckRegEx(正規表現チェック関数) みたいな書き方をしたら、上司から「名前がちょっとなぁ」と言われました こういう書き方だと何か問題があるんでしょうか?
>>847 ・他の人が君の書いたソースを読む時に,まず君が考えた
その独創的ですばらしい名前付けルールをいちいち理解しないといけない
・.NETの標準的なルールに従った名前と混在するのが気持ち悪い(と感じる人は多い)
特に気を付けるのはクラスライブラリを作る時
その調子でクラスライブラリ作っても間違いなく誰も使いたがらない
その気持ち悪い名前を見た時点で使う気を無くす
>>849 そこまで言うなら気持ち悪くない一例を書いてみろよw
初心者スレで何言ってんだ、お前
>>850 「そこまで」って、別に849は当たり前のこと言ってるだけで極論めいたことは
言ってないと思うぞ。
初心者スレも糞もないだろう。
「俺様は初心者です」と宣言すればコードが可読的になるのなら話は別だが。
>>850 初心者を慰めるスレでもないけどね
どうすべきかは
>>848 で十分だけれど、質問への回答になってるのは
>>849 横槍入れる必要は無いと思うよ
設計考え出すと、なおのことC++はありえないよなぁ。 C++ の制約に引きずられて設計狂う。
実装の都合で小さいクラス作るのはC#では気軽にできるけど C++でそれをやるのは億劫でつい避けてしまって複雑なコードになる
System.Windows.Formsっておかしくね? なんでSystem名前空間にあるんだよ
857 :
デフォルトの名無しさん :2008/12/12(金) 04:45:38
じゃぁ何名前空間になるんだ?
皆様のお知恵を貸して下さい。
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( ',' );
}
}
( 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回送信されるのか理解できません。
もしかしてスレ違いでしょうか?
401って、Unauthorizedか。まあ、妥当な結果だろう 詳しく知りたければ、HTTPについて勉強すべし スレ違いだから、これくらいで
例外処理って例外が起きないようにプログラムするのがいいのか 例外を捕まえてにゃんにゃんするのがいいのかわからない
必要に応じて… たとえば例外に陥らないように書くと簡潔さが失われるような場合とかに 例外使えばいいんじゃないかな 俺は便利なので多用します どうせ職業マじゃないからいいのさ
>>856 WindowsはOSの名前じゃなくて、「窓たち」という普通名詞と考えるんだ
Basic認証て自分で言ってるじゃん
>>856 macで動くSilverlightでもSystem.Windows(WPF系)名前空間を使うんだよ
System.Windows.Formsに限って言えば仕様上Microsoft Windowsが必要だから確かにおかしい
>System.Windows.Formsに限って言えば仕様上Microsoft Windowsが必要 ソースplz
というか Mono の Forms もだいぶ色々動くようになってたような。 MS Windows じゃなくて Win32 っぽいものが必要と書けばよかったのに
最近はMonoのFormsも使えるようになったんだ? 前はformが立ち上がりもしなかったがw
今日まとまった金が入ったので独習C#を買いにちょっと離れた本屋にいった。
無事に発見した。めちゃくちゃ黄色かった。びっくりするほど黄色かった。
パラパラとめくってみると、なんかもうどうでもいい例え話とかよりもサンプルコードがびっしりで良い感じ。
他にも中途半端に今使っているPHPも同じシリーズのものがあったのでホールド。
今転職考えてるので、この際だからと案件が多いと言われているJAVAも覚えてみることに。
結果独習C#,独習PHP,独習JAVAの三冊を購入。
ウキウキしながら帰宅して、早速黄色くて分厚い三冊を取り出す。
そしてとんでもないことに気づいてしまった。
http://niyaniya.info/pic/img/1776.jpg おとなしく#include <stdio.h>とでも書いてろって事ですねわかります
>>869 Code Status
Support for Windows Forms 2.0 is complete.
At this point, we are largely just fixing bugs and polishing our code.
>>870 ねえコピペ?コピペだよね?
コピペだって言ってよ誰か。
悪いけど872は自演じゃない
俺は870だが872じゃないぞ。 と言えばいうほど870=872になるんだよな。どうでもいいけど。 つーかこの三冊買ってきた報告とかよく考えたら思いっきりスレ違いだったわ
こ れ は ひ ど い
#がつくかつかないくらいで、たぶんCもC#も変わらないでしょ。 変わったらアホ臭くて誰もCなんて学習しないでしょ。 そんなわけで独習Cを買ってそれだけでも個人的には大満足です。
さすがにCとC#を変わらないと言い切るのはどうかな…
本買っただけで満足する人にとってはCもC#もかわらんのだろう
>>877 は神GTOのコピペ改変だからマジレスするなよ馬鹿
Outlook2007にて新規メールの宛先(連絡先)一覧をカスタマイズしたいと思います。 宛先ボタンを押したときに自分で作成したフォームを表示して アドレスを渡す方法についてヒントもしくは書籍などがあれば紹介して下さい。
>>881 どうしてそういう事ができると思ったのか教えて下さい
パソコンは何でも出来ると教わりました。
ではパソコンを自爆させて死んでください。
Math.PI の値を変えたいんだけど やり方教えて下さいorz
プロパティをオーバーライドでもすれば
PIの値を変えるって数学を根底から作り直すってことだろ スレ違いだな
およそ3と教えたくらいで大げさな
891 :
858 :2008/12/12(金) 17:27:30
皆さん返答ありがとうございます。 やはりスレ違いですか。 いや、FirefoxのアドオンRESTTestやWebDavクライアントのCarotDAVでOPTIONSリクエストを同じサーバー(当然Basic認証)に送っても リクエストは一回だけだから何でかなぁと思ったのがそもそもの始まりでした。 自分の理解力が根本的に足りないようです。 ありがとうございました。
事前認証だったかのオプションもあったんでないかい?
つうかほんとにリクエスト1回だったの? 何か勘違いしてない?
894 :
891 :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をすっ飛ばすことができたようです。
だから何だって話ですが、通信量は削減できた方がよいと思ったので・・・
ウィンドウ枠線を消そうとしています。
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 早速ありがとうございます。
プロパティって、どう使うんでしょう?
工エエェェ(´д`)ェェエエ工
>>894 だから本来はPreAuthenticateを有効にするの。
勝手にBASIC認証のヘッダ飛ばすなんて普通はやるべきじゃない。
プロパティですが、 オブジェクト名.プロパティ名 = プロパティに設定する値; と使うことはわかりました。 Window.ResizeModeProperty = None; としてみましたが、 エラー 1 名前 'None' は現在のコンテキスト内に存在しません。 となってます。
初心者向けの本とか読んだ方が早いと思うよ。
なんでNoneなんだ・・・
>>903 WPFの本見ても、ウィンドウスタイルでNone/ToolWindow/SingleBorderWindow/TheeDBorderWindowくらいしかのってないです。
BorderThickness="0"
というのを試してみたが、まだ枠がある…。
どこのNoneさんか明示してないから困っているんです
CryptoStream()で暗号化しても0は0なの? 書き込んだファイルをバイナリエディタで開いてみたけどそういう風に見えた
909 :
908 :2008/12/13(土) 14:00:15
勘違いだった
Process.Start(@"c:\1.txt") ; この状態で1.txtが無かったらエラーになるのはわかるのですが このエラーを回避するにはこの文の後に どのように処理すれば良いのでしょうか??
エラーってなんだよ。
ファイルが無いなら呼びださなければいいじゃない。
C# try catchでググれ
914 :
910 :2008/12/13(土) 14:17:43
エラー内容ですが アプリケーションのコンポーネントでハンドルしていない例外が発生しました。 ファイル名が指定されていない為、プロセスが開始できません。 起動する前に、ファイルがあるか? それともエラーの前ににメッセージを出すか? と言う判断の方法でしょうか? イマイチわからないのですが・・・・
915 :
910 :2008/12/13(土) 14:24:19
>>913 ありがとうございます。
ググってみます。
オブジェクト?を変数に入れたいんですが、 たとえば↓の○のようにしたいです。 textbox1.Text = "1"; ○ = textbox1; MessageBox.Show( ○.Text ); できるなら○の変数はどのように宣言したらいいですか? 初歩的な質問かもしれませんがよろしくお願いします。
textbox1の型はなんなの?
textbox1.Text = "1"; TextBox t = textbox1; MessageBox.Show(t.Text);
っていうか、そのレベルの話はおとなしく本読んで習得しようよ。 本買う金がなくてもc#ならウェブ上の情報にも事欠かないぞ。
>>918 ありがとうございます!
これで400行から200行にできます○┐
>>919 精進します
初心者向けだからこんなもんだろ 入門サイトくらい一通り読んでおいても良いだろうとは思うが
うん。いいと思う。 だけど >これで400行から200行にできます これはww
作りたいものを作りながら覚えるのはいいけど,本当に最低限の知識は先に入れといた方がいい どう考えても時間の無駄すぎる
集合演算に特化しかクラスってありますか? union、intersection、difference、symmetric differenceなどが 高速で計算されると助かるのですが
HashSet
高速じゃないけど一応LINQも
>>923 その最低限の知識を身につける為に作るのでは?
形式的な演算のみが必要で途中結果が不要で最終結果さえ得られればいいなら LINQ to Objectsの方が速いかもしれんね
.NET3.5だとHashSetというのが追加されたんですね これは便利そうですが、直積は作れないみたいですね LINQでも集合を扱えるんですか?
LINQならEnumerableクラスにいろいろある(Union, Intersect, Except, ...) 直積はこうかな var c = from x in a from y in b select new { X = x, Y = y }; これはHashSetでもLINQでも同じはず
ライブラリに関する知識は兎も角、言語仕様は勉強しろとは思うな 俺は実践で英会話を学ぶぜとか意気込んでも、語彙0じゃあどうしようもない
tabcontrolのtabpageのタブの部分を右クリックしてイベントを発生させたいのですが、 mouseclickイベントではタブの部分をクリックしてもイベントが発生しないみたい どうすればいいのおしえておしえて
実行時に例外ダイアログが表示されても[続行]ボタンがあるから強制終了にならないけど、これはSDKのサポート? 開発環境無しの人でも同じ?
>>930 ありがとう
こういう集合演算もどきも書けるんだね
>>933 同じ。そのダイアログを変更したいなら「C# 未対処例外」でぐぐれ
Formの内法サイズを知るにはどうしたらよいのでしょうか? 外寸から知ろうと思っても、画面のデザイン (Windowsクラシックスタイルと、Windows XPスタイル) によってタイトルバーの大きさが変わってしまいます..
>>936 解決しました。
ClientSizeプロパティを見ればいいんですね。
ClientSizeとは違うのか?
>>936 「クライアント領域」とは何か調べる。
っていうか、だからそのレベルの話は素直に本でも読んで覚えなって。
TabControlに、新しいTabPageを挿入したいんだけど、 Addはできるのに、Insertはできない。 どうして?! // これを挿入したい TabPage tp = new TabPage("test"); // 挿入されない。何も変化しない。 tabControl1.TabPages.Insert( 0, tp ); // これはちゃんと追加される tabControl1.TabPages.Add( tp );
Controls.Add()を呼んでないから
insert の前に CreateControl だっけ。 とりあえずハンドルがある状態で呼んでみるとどうなるよ
適当な回答するなよ Insertしてもちゃんと内部でControls.Add()してるぞ SuspendLayoutしっぱなしとかじゃね?
ResumeLayoutしても変わりません。 CreateControlというのは分かりません。何というクラスのメソッドですか? TabPageのインスタンスを先に作っておいてInsertしてもダメです。 新規プロジェクトでTabControlを1つおき、 コンストラクタのInitializeComponent()の直後でInsertまたはAddする。 これだけなのに、 Add()では追加され、 Insert()では何も起きません。 ヘルプを見ても、Add()とInsert()の使い方にに 決定的な違いがあるようには読めません。 どうしたら良いのでしょう…
コンストラクタとは、Form1のコンストラクタです。 コンストラクタ以外のところ、 たとえば何かのイベントのメソッドに書いても同じです。
tabControl1.TabPages.Insert( 1, tp ); 1にしてみる
1にしてもダメでした
VC#の右側にあるソリューションエクスプローラのバーをVC++のように左に持ってきたいのですがこれってどうやるのでしょうか?
上の青いところをドラッグアンドドロップか、ソリューションエクスプローラだけ移動したい場合(タブで他のウィンドウと一緒の場合) ソリューションエクスプローラのタブのところをドラッグアンドドロップ
>>943 これ、確かマイナーなバグなんだよ。まだ直ってなかったのか。
ControlCollectionがInsertをサポートしてないのにタブコントロールが
TCM_INSERTITEM をサポートしてるからそれを使おうとしてハンドルの遅延生成の場合で
問題が起こる感じだった気がする前調べたら。
なんだ、バグなんw
ググってもそれらしい回答が見つからなかったので質問です。 axwebbrowserを使ったアプリケーションを作ったのですが、 ・AxInterop.SHDocVw.dll ・Interop.SHDocVw.dll この2つのdllが再頒布可能かどうか分かりません。 再頒布しても大丈夫なのでしょうか? 駄目なら、お手数ですがダウンロードサイトを出してもらえないでしょうか? よろしくお願いします。
正式なビルドで無くても起動するか試した?
ラッパーは配布しても大丈夫。 .NET 2.0 から WebBrowser は Windows.Forms に含まれてるけどね
>>951 なんと、バグでしたか。
やっとすっきりしました。
ありがとう!
Insert()はあきらめて、Add()で
済ます方法を考えます
AddしてからInsertできないのか?
Addした時点で、末尾に追加されます。 その次にInsertしても何も起きません。 結果として、末尾に1つTabPageが追加されるだけです。 (つまり、単にAddだけするのと同じ結果になります)
IntPtr hwnd = tabPage.Handle; ってやってからInsertしたらどうなる?
960 :
951 :2008/12/15(月) 20:40:44
>>956 あーすまん。
だから TabControl.CreateControl を Insert の前に呼んでみてという話に続くんだ。
>>960 先にtabControl1.CreateControl()を呼んでもダメでした。
全てのインスタンス生成が終わったあと、
MouseClick等のコールバック関数の中で
Insert()しても、ダメでしたので、
インスタンス生成順序とか、
そういった問題ではないと思います。
Add()とInsert()を交互に呼んでも、
Addは全て動作し、Insertは全て無視されます。
どんなシチュエーションでも、
Add()では追加されるのに、Insertでは挿入されない。
これはもう、TabControl.TabPages.Insert()の実装にバグがあるとしか...
>>961 分かった。
いろんなところでInsertしてみると、確かにInsertされないことがある。
特にプログラム開始直後。
で、Debug.Assert(tabControl1.TabPages.Count != 0);
してみると、InsertできないところではAssertに失敗するので、
・Countが0だとその前の位置にはInsertできない
・TabControlにTabPagesの追加が完了するのは遅い
ってことだと思う。
バグではなくたぶん仕様なんだとは思うが、例外上げてくれてもいいのにね。
>>962 は忘れて。これで動いた。謎。
InitializeComponent();
//おまじない?
IntPtr h = tabControl1.Handle;
TabPage tp = new TabPage("test");
tabControl1.TabPages.Add(tp);
tabControl1.TabPages.Insert(0, tp);
これで普通に動いたけど? tabControl.CreateControl(); tabControl.TabPages.Add(new TabPage("tab1")); tabControl.TabPages.Insert(1, new TabPage("tab2")); ソース見れば分かるが、 ハンドル未作成のときの処理がAddにはあるが、Insertにはない 因みに、フレームワークのバージョンは2.0 SP2
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なのですが、この方法だと プロパティの数が増えるとメンドクサイことになりそうなので、 もっと良い方法があれば教えて欲しいです。
そんな馬鹿な考えは今すぐ捨てろ 2乗したいだけなら a.X*a.X か Math.Pow(a.X, 2) でいいし、有り得ない例えだが、 50個のプロパティの2乗和を求めるような場合でもリフレクションかLINQを使えばいい 2乗値を提供することに意味があるクラスなら個別にプロパティを作る XSquared, YSquared, etc.
上でTabPages.Insertはマイナーなバグって事になったけど メジャーなバグってなんかある?
969 :
953 :2008/12/16(火) 10:17:40
>>954 ,955
可能でしたか、安心しました。
ありがとうございました。
IE6で使われているようなツールバーのコントロールを 自作アプリに使うにはどうしたらいいのでしょうか? VS2008のToolStripは見た目が好きじゃないので…
ToolStripManager.RenderMode = ToolStripManagerRenderMode.System; でそれっぽい見た目になるよ
switch文などでフォールスルーしたいときはどうするのが一般的でしょうか?
goto case
Vistaでもモッコリツールバーなの?
switchの方が効率的なコード吐くんだよな 昔中間言語を見たり、実際に速度測ったりしたけど
MSIL自体がswitch相当の命令持ってて、 それのJIT結果は、case数が少なかったらif-else相当のコード、 多かったらジャンプ先アドレスのテーブル参照になったんじゃなかったかな、確か。
JITじゃなくてcscが吐くMSILがそうなってた気がする,確か。
980 :
デフォルトの名無しさん :2008/12/17(水) 00:44:08
ねえ MSDNのC#プログラミングガイド、コレクションクラスの下のノードって ?常和?常?理って文字化けしてるんだけど通常例外処理でいいの? 子ノードは例外処理だけど
元は Exception and Exception handling だから 例外と例外処理だろう
>>978 if-elseだと逆にいくらケース数が多くても
switch相当のコードにはならねいんだよな
入門書買って来たんですがポインタってなくなったんですか?
よい子は使っちゃダメだぞって感じで残ってるよ。 unsafeで拘束解除ってのりだ。
985 :
デフォルトの名無しさん :2008/12/17(水) 11:35:52
datagridviewでコンボボックスで一覧表示で選択できるようなものを 作ったのですが、ファンクションキーに処理を割り当てているため F4でリストをドロップ表示させようと思うと割り当てた動作も 動きつつドロップされます そこでフォーカスが当たっているカラムのタイプを判定したいのですが どうやれば良いのかが分らないので教えてください。
selectedcells
987 :
デフォルトの名無しさん :2008/12/17(水) 12:22:34
コンストラクタにパラメータ付けてもいいの?
ご自由にどうぞ 可能なら引数なしのオーバーロードも用意すればリフレクションとの相性が良くなって何かと便利
990 :
デフォルトの名無しさん :2008/12/17(水) 21:05:06
C#でWindowsプログラミングをやってみたいのですが、 Windowsプログラミング(.net?)について何か良い本はないでしょうか? 文法が載ったコンソール画面で処理をする入門本は持っています。
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ステートメントのラベルへ 戻すことはできないみたいですしどうすればよいでしょうか?
>>992 なんだか分かりませんが
元コードのほうは正規表現つかってんじゃない?
C#のほうは単純にstringを置換してるだけっしょ?
Regexクラス使わないと駄目じゃん
>>993 forやwhileで囲め
gotoはブロックの中へは飛べない
仮にgotoでできたとしても絶対ダメ
gotoで上に戻るのは禁じ手
>>993 すぐ再試行してもダメなものはダメじゃね?
997 :
993 :2008/12/17(水) 22:15:47
ちょっと次スレ立てます
その意気やよし
999 :
993 :2008/12/17(水) 22:20:50
>>992 >>994 の話もそうだけど
buffer.Replace("\n", @"\X0e");
は何もしてないよ。戻り値捨ててるやん
stringクラスは不変だからね
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。