ふらっとC#,C♯,C#(初心者用) Part73
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 これテンプレからはずせよ 誰も答えないじゃないか しかも荒らしばっかり もうこのスレ機能してないから 相談室に統合しろ ってことで、質問者は相談室へ ここは荒らしの雑談所となりました
Nullable<T>は暗黙でT型へキャスト可能であるべきと統計的結果と100倍と例外と
>>144 は出禁です
ここで真面目に質問したければコテ付けた方がいいかもね
まともな質問ならちゃんと答えてもらえるだろ
100倍の結果は出たの?
MSILの勉強をしたいのですが、C#のコード或いはexeからMSILのコードを生成する方法はありますか?
ildasm
>>12 最初調べたときに真っ先にそれについて調べたのですが、
ildasm.exeが無いのです。
どこかDLできる場所はありますか?
Windows SDKには入ってるんじゃないの?
>>15 ありました。
ありがとうございます!
>>13 次から移動します。ありがとうございます。
荒らしまわってる当人の犯行声明だから確実だよな。
これ解決できませんおねがいします フォームを常に手前に表示にはできたんですが、フォーム上のコントロールをクリックしたりして操作する時 他のアプリから手前に表示中のフォームにフォーカスが移らないでフォームを操作するにはどうすればいいんですか?
>>18 継承ハンドラでオーバースウェイすればいい
バインディングについて質問です。 あるコンボボックスの値をバインディングしており、その値をキーに View内のコンポーネントのVisibleを変化させたいのですが、キーのプロパティが 変わらないので常に同じ動作になってしまいます。 以下ソース一部です。またMPVモデルをしようしています。 どのように修正すればよいのでしょうか?分かり難い説明ですいません;w; プレゼンター内処理 _view.コンボボックス名.SelectionChangeCommitted += (x, y) =>_model.ChangeConnection(); _view.とあるコンポーネント.DataBindings.Add("Visible", _model, ""); モデル内処理 public bool Compornet{ get; set;}//実際にはPropertyChangedイベントを呼び出しています。 public void ChangeConnection() { switch(Conneciton) { ViweのVisibleプロパティを変える処理 } }
それMVPになってないよ PがVのクラスに直接依存しちゃいかん
インターフェイス通してPがVを操作するのがMVPパターン そのインターフェイスも、コントロールを直接公開するのはダメで たとえばCanEditNameみたいなプロパティを公開するようにする そもそもコントロールとかを分離するのが目的だからそこ崩したらパターンの意味がない バインディングは諦めたほうが
WPFの話になってるの?
DataBindings.Addとかどう見てもWinForms WPFならMVVMにしてVMのプロパティにVのプロパティをバインドしまくればいいだけ
キーのプロパティが変わらなくて困ってるなら パターン無視してキーのプロパティを無理やり変える方法をまず考えろ
26 :
20 :2011/04/11(月) 13:14:47.22
むむぅ。。。 _view.コンボボックス名.SelectionChangeCommitted += (x, y) =>_model.ChangeConnection(); の文がMVPパターンに沿ってないのでしょうか? イベントをバインディングする方法はこれかとおもっていましたが・・・ MVPってM(model=>処理内容など) P(Presenter=>バインディングするクラス) V(View=>ユーザーインターフェイス部)ってことですよね? なのでプレゼンター部がViewのプロパティやイベントをModel部とバインディングする・・・と 思っているのですが
27 :
23 :2011/04/11(月) 13:20:03.66
>>24 そうなのか
WinFormのバインドは使ったことないのでわからんかった
環境変数のpathの設定って大文字小文字区別するの? ちゃんと小文字にして再起動したら警告消えたが、VISTAだけ?
うん
ああ、また警告でた Visual Studio2010 VC#のExpressだけど LIB に C:\Program Files\Microsoft Visual Studio 10.0\VC\lib を設定するので合ってる?
節子、それC++のLIBや
やっぱそうか C#のLIBが見つからなくてまさかこれ・・・なわけなかったか ついでにC#のはどこを設定すればいいの?
設定なんかいらんよ 誰に設定しろって言われたんだ?
基本的にインストール終わったなら、そのままの状態でなんの設定しなくとも動くはず。
問題なく動くんだけど警告が気になって消そうとしても上手く行かない感じです
警告警告うっせえよ 警告の中身を一字一句省略せずに書けカス コールセンターに電話する時エラーが出るんですけどで解決すると思うのかお前は
'LIB 環境変数' で指定された無効な検索パス ' ' です -- '指定されたパスが見つかりません。 '
エスパーしる
ほんとにC#プロジェクト?
2010はC:\Program Files\Microsoft Visual Studio 10.0\SDK\v3.5があるけど、BinだけでLibはないっぽい しかも中身は空 LIB環境変数が存在してるせいで起きてる気がする
42 :
デフォルトの名無しさん :2011/04/11(月) 19:49:05.96
>>41 あーあるねえ
VC++関連を入れたあとアンインストールしたときに
メッセージでまくったな
43 :
デフォルトの名無しさん :2011/04/11(月) 20:37:52.98
FontDialog.Font プロパティのMSDNのサンプルコードですが private void button1_Click(object sender, System.EventArgs e) { fontDialog1.ShowColor = true; fontDialog1.Font = textBox1.Font; fontDialog1.Color = textBox1.ForeColor; if(fontDialog1.ShowDialog() != DialogResult.Cancel ) { textBox1.Font = fontDialog1.Font ; textBox1.ForeColor = fontDialog1.Color; } } == DialogResult.OKじゃなくて != DialogResult.Cancel と紛らわしい!(と感じる)書き方してるのは何故なんでしょうか?
>>43 コード書いた人の好み?
その紛らわしいと感じるのもあなたの主観だよね
DialogResult.AlmostOK とかあるかも知れないと思ったんじゃね
お願いだからコード書いた人に聞いてくれよ 意味は
ここMSDNのヘルプセンターじゃないんだけどね ましてやそこらへんのどこの誰が書いたとも分からんブログの質問掲示板でもねえ
肯定的に書けって言うからDialogResult.OKの方がいいとは思う。
ちょっと質問したら面白そうなサンプルコード探してくる
52 :
デフォルトの名無しさん :2011/04/11(月) 21:15:57.22
DialogResult 列挙体 OK Cancel Abort Retry Ignore つまりだ。"中止" とか"無視"でも 構わん!いてまえ!ってコードだわ。わかったか!
ShowDialogメソッドも同じサンプルだから 元は他のダイアログのサンプルからコピって来た奴なんじゃないかと推測
動けばいいんですよ
DialogResultって返す値が実装依存の微妙な設計だよね どうせ統一して扱えないんだからFormのプロパティじゃなくて各自勝手に実装するようにすればよかったのに WPFはbool?になってるけど
IDOKとかの名残だよな でも上手い方法が思い付かないから妥協しちゃう
InitializeComponentメソッドで発生するイベントをキャンセルするにはどうしたらよいでしょうか 例えばラジオボタンのCheckedChangedイベントなどです
+=があるのなら-=もある。つまりそういうことさ。
適当にフラグでも使ってイベントハンドラの方でチェックすれば
>>57 貴方にそれを編集する権限があるなら、InitializeComponentメソッドをダイレクトに変更できないかな?
>>58 それも考えたのですが、例えばラジオボタンであればそのインスタンスが
生成されるのがInitializeComponentメソッド内なので、ちょっと難しいです
>>60 同じくInitializeComponentメソッド内はちょっといじれないのです・・・
>>59 現在はその方法をとっているのですが、何かいい案があればと思い聞いてみました
ありがとうございました
ていうかInitializeComponentはプロパティ変えた後にイベントハンドラ付けるだろ なんか別の原因がありそう
マウスオーバーしたら、あらぬ方向にマウスポインタをワープさせちゃえばクリック出来なくなるぜ?!
別のプロセスからSendMessageされる
>>61 イベントの紐付けを、デザイナの機能を使わず自分で書けばOK。
タイミングはOnLoadでもOnShownでもInitializeComponent呼び出しの後でも必用に応じて。
フレームワークにzipに関する機能が実装されないのはライセンスかなんかの問題? DotNetZipがあるのはいいけど、そろそろ標準で含めて欲しい・・・
>>66 ネームスペースがMSにならないのであれば、かなり高度な実装が要求されると思うが。
とあるゲームでは自由にunzipできると聞いた
標準に突っ込むんであれば、Zlibあたりに依存した実装って言うのはイレギュラーといわざるをえんだろう。
うちの会社ではどっかの中学生が自作したライブラリを組み込んでるから問題ない
うちも幼女が作ったライブラリ使ってるわ
LINQいいよね〜
どういう状況下でZIPを操作する必要性が出るん
以下のディレクトリの指定の仕方教えて下さい C:\Documents and Settings\(USER)\Application Data\
Environment.SpecialFolderのApplicationDataを同クラスのGetFolderPathに渡す
>>76 >>77 ありがとうございます
自分のPCだったら
現在の非ローミングユーザーって事でOKですか?
つまり、LocalApplicationData の方ですかね?
79 :
デフォルトの名無しさん :2011/04/12(火) 09:53:33.46
こんにちは テキストファイルを読み込み表示したいのですが、 普通にStreamReader.ReadToEndやFile.ReadAllTextを使うと、 ファイルサイズが100MBや1GBの場合重く、読み込みに時間がかかり最悪フリーズしてしまいます。 どうやって開いたらいいのでしょうか? ご教授くださいm(_ _)m
非ローミングなら
>>75 じゃないだろ
ありがとうございますと言っておいて提示された情報に目通さずに聞くって舐めてんの?
>LocalApplicationData
>現在の非ローミングユーザーのApplication Dataフォルダ
>C:\Documents and Settings\UserName\Local Settings\Application Data
自己解決 非ローミングだとこっちでした C:\Documents and Settings\(USER)\Local Settings\Application Data 失礼しました
84 :
79 :2011/04/12(火) 09:58:40.02
怖そうなおじさんがいっぱいいそう 質問したくてもできない
巨大なファイルで時間がかかる場合はファイルマッピング利用するのがセオリーだが…
>>79 一括で読み込んでフリーズするなら、分割して読み込めば良いじゃない
>>84 .netの場合内部管理はUCS-2っていう2バイトコードになるので
テキストデータがS-JISだと読み込みの際に変換もやってるはずなんだよね
速度を言うならテキストデータの文字コードも考えた方がいいかもしれない
VSのセットアッププロジェクトでインストーラ作ったけど デスクトップアイコンにファイルをドロップしても正常に起動しないんだけど なんで? 別のインストーラだと普通に起動できる ワケワケメ?
90 :
79 :2011/04/12(火) 10:06:22.09
>>86 ファイルマッピングについて詳しく教えてください!
こちらもさっそく調べてみます
>>87 非同期で読み込めばいいのでしょうか?
91 :
79 :2011/04/12(火) 10:07:08.58
>>88 テキストファイルはutf-8になってます
>>92 おおおお、mjdsk
ありがとう
VSのセットアッププロジェクトはやめとくわ
自動アプデで圧縮ファイルを解凍→上書きとかじゃね?
>>91 テキスト読み込み部分の内部を覗いたことないので
実験してみることをお勧めだが
テキストデータをUTF-16に変えると多少マシになるかも・・・
>>90 とりあえず簡単にフリーズを回避したいのなら、さらに遅くなるがReadLineやReadBlockで少しずつ読み込む
目的次第だが、一度に1GBのテキストデータを表示する必要は無いと思うから、スレッドやDoEventsでお茶を濁しとけ
テキストファイルを高速に処理したい場合は話は別だが
もうちょっと大きな範囲で何をやろうとしてるのかがわかれば
こうやればいいんじゃね?って案を出せるんだがなあ
テキストデータが自前の物なのか、他人も絡んでる物かで
>>95 みたいな方法も厳しくなるしなあ・・
98 :
デフォルトの名無しさん :2011/04/12(火) 11:00:33.47
99 :
79 :2011/04/12(火) 11:14:28.75
最終的にはテキストエディターのようなものを作りたいと思っています。
一先ず、ファイルを読み込んでそれを表示するところまで目標としており、
必ずutf-8で吐き出される巨大なテキストファイルを対象としています。
>>96 さんのReadLineも試した事はありましたが数分掛かって応答なしになってしまいました
現在ファイルマッピングを調べていて、読み込んだテキストどうやって文字列(?)にして表示するかで詰まっていますが、
頑張ります
ファイルマッピングは手抜きのためで、速度向上にはならん。 シーケンシャルアクセスが分かっているなら、独自で読み書きした方が速い。
可変長エンコーディングだとファイルマッピングでの対処は厳しいんじゃねえかなー知らんけど
>>99 まあメモリ上にバイナリで読み込んでそこからストリームで読み込めばいいんだけどさ・・
あと表示側の仕様がわかればうまい「ごまかし読み」もあるんだろうけどな・・・ 表示はテキストボックスとか使ってるの?
ReadLineで応答無しって、どんな行だよwww なんか他に問題があるような気がする
105 :
79 :2011/04/12(火) 11:23:47.52
108 :
79 :2011/04/12(火) 11:27:20.70
>>104 試しに319MBのファイルを確認したら約49万行ありました
確認で開いてるソフトはxyzzyというソフトです
高速で良いですね・・・これのように開いて表示してみたいです
どのレベルのものを作りたいのかわからんが まず小さいファイルからやれよ 本気で作りたいならオープンソースのエディタのソースとか 参考にすればいいんじゃないか
たかだか49万程度でどうしてそうなる・・・・ ソース晒してみ?
112 :
79 :2011/04/12(火) 12:16:31.68
textBoxがどんなクラスかわからんが すごい勢いで再描画してないかそれ
114 :
79 :2011/04/12(火) 12:34:23.88
textBoxはSystem.Windows.Forms.TextBoxです 一度stringに収め終わってから代入するととまっている様にみえてしまうのでこうしてみました 皆さんはどういう処理を書かれるのですか?
全行読み込んで書き出すとかテキストエディタをなめてるだろ。 それで数ギガ、数テラ扱えたら開発簡単だなあ。
116 :
79 :2011/04/12(火) 12:41:43.56
具体的なソースで教えて頂けませんでしょうか?
ググれ テキストエディタ 巨大 ソース
119 :
79 :2011/04/12(火) 12:51:01.15
>>117 ありがとうございます
聞く前に検索して沢山のサイトを見ましたが、出てくるサイトでは解決しないので困っていました
なのでソースで教えて貰えると凄く助かります
さっそく試してみたいと思います
>>116 += で足しこむより
textBox1.AppendText(sr.ReadLine() + System.Environment.NewLine);
がいいかも
Be.HexEditor (SourceForge プロジェクト ページ)は C# で書かれた軽量なバイナリエディタです。
オープンソースで開発されていて、バイナリエディタ部分を C# や VB.NET 等から利用できます。
基本的なバイナリの編集から、文字列検索、16進数検索を利用できます。
中でも特に気に入っているところは巨大ファイルを瞬時に開くことができる点です。
そのような状況でもスクロールはスムーズで、メモリ使用率は低くいままです(15,424 KB ほど)。
http://d.hatena.ne.jp/wwwcfe/20091231/behexeditor
>>121 バイナリエディタとマルチコードを扱うテキストエディタでは
メモリの扱いが違うと思うよ
UTF-8って1バイト〜3バイトくらいの幅があったような
ブロック単位とかで扱いにくいのがこの文字コードの問題
とりあえずStringBuilderにでも突っ込んでからやってみたらかわると思うんだけど・・・ StringBuilder sb = new StringBuilder(); do { sb.AppendLine( sr.ReadLine()); } while (sr.Peek() != -1); this.textBox.Text = sb.ToString(); こんなんでどれだけ速度違うか測ってみたら?
うる
全部読むなら、ReadAllLinesとかReadAllTextでいいと思う。
127 :
79 :2011/04/12(火) 13:15:13.01
>>120 ありがとうございます
そういう細かい所も大事ですよね
気をつけます
>>121 ありがとうございます
>>123 ありがとうございます
66MBのファイルで試したところ、開くのに2分程掛かりましたがこれは良い結果です!
>>117 さんのやり方に応用してやってみたいと思います
いや
>>117 みたいにマルチスレッドにするなら、readLine()にしたり
それで重いからってStringBuilder()を使おうってほうがよくわからんけど。
129 :
79 :2011/04/12(火) 13:19:44.67
>>128 もうよくわからなくなってきた
今コード書いてて気づきました
俺のアホ!
メモリに読み込むのを速くしても無理。1テラでも読むのか? 1000行目を表示編集するには、nバイト目を読み込めばいいと記録しておけばいい。
巨大ファイルを例えば先頭から順に2メガ程度に分割して 記録して編集があったブロックだけを書き換えて ファイルの保存がえらばれたら、先頭から順に連結すればいい。
continue;
LINQ使えよ
>>134 とろくさいお前らはすっ込んでろ
必要ないから
釣れたw
なぜに複数形?
100倍になるからね 連れるかな><
Javaの質問していいですか?
いいよ
警告の内容は?
なんか安全でないとかそんな感じです
そいつは危険だ。今すぐPCを窓から投げ捨てるんだ。
145 :
144 :2011/04/12(火) 15:18:52.32
ちんこ
100倍になるからね 連れるかな><
>>122 大きなファイルを編集するって観点ではメモリの扱い方は似たようなもんだろ
>>147 マルチバイトコードだと適当にブロックを決めても
きっちり収まらないケースができる
2バイトコードだと区切りがしっかりしてるので扱いやすい
サロゲ…いやなんでもないです
100倍になるからね 連れるかな><
もうすでに2匹
釣れたw
おまけに1匹
釣れたw
ウホッ
LINQは遅いから使えない
それはお前の書き方が
100倍になるからね
ほね」。
質問します。 List<T>にはlistBoxのようなselectedIndexがありませんが、 インデックスを指定して要素を取り出すにはどうするのでしょうか?
ん?インデクサという事ではないの?
165 :
デフォルトの名無しさん :2011/04/12(火) 17:21:06.68
ほね」。
100倍と言うだけなら誰でもできる
またおまえか
またお前と言うだけのなんとか
ブルータスなんとか
せやな
>>163 var unko = List<T>.ToArray()[index];
わんくま同盟なら解決できるんじゃね?
var unko = list.Skip(index).Take(1).Single(); だろ
もうMainにLINQ一行でいいだろ・・・
NyaRuRu
LINQ読めないのか・・・
LINQ一行なんだぜ?
冗長 ゼロ行にしろ
初心者の質問で申し訳ありません。 フォームを作り、1つのパネルにいくつかのコントロールを登録し、そのパネルをフォームにドッキングさせて 画面サイズが変わったらパネル内のコントロール(ラベルやリストやボタンなど)をWindowサイズに自動で変更させたいのですが 単純にTableLayoutPanelにパネルをaddし、フォームにそれをaddしただけではダメなのでしょうか?
うん。それじゃ足りない。 Form以下のコントロール全てにAnchorかDockプロパティの指定が必要。
WinFormsはサイズ可変にしても文字のサイズとかの問題が結局残るけどね
教えてください。 BindingList<T>をdataGridViewのソースにした場合、 dataGridView側で編集したデータはBindingList<T>に反映してるのですか?
デバッグで確認しようとは思いませんか?
まったく思いませんね。
Go on
デバッグで変数見る方法が分からんかもしれんじゃん
195 :
186 :2011/04/13(水) 10:33:11.76
>>187 ありがとうございます
ボタンなどコントロール全てにDock指定したのですが、
一つのボタンだけがパネルサイズになってしまいました。。
複数のコントロールを1つのパネルに置いているのがダメなんでしょうか?
>>194 デバックわからなくてもdataGridViewで変更した後ボタンをクリックすれば
BindingListの中身を表示するようにすればいいだけじゃん
>>195 TableLayoutPanelはどこに逝った?
199 :
186 :2011/04/13(水) 10:50:44.28
>>197 複数のコントロールを置いたパネルを
TableLayoutPanelにaddしてます。
>>198 ありがとうございます、見てみます
使い方が分かってないだけか
TableLayoutPanelにButtonとかLabelとかを追加するのよ Panelはお呼びでない
202 :
186 :2011/04/13(水) 11:32:37.24
検索ボックスのようなコントロールで、右端に虫眼鏡のアイコンが付いていて 文字を入力するとそれが×になってクリア出来るコントロール (Windows7のプログラムとファイルの検索) が便利そうなのですが、そういうコントロールはC#でも利用できますか?
俺今年C#はじめたばっかりの初心者だけど 自作しないといけないんじゃないかな?
>>203 UserControlで自作すればいい。
普通にTextBoxとButton(イメージのみ)を設置して
TextBoxのTextChangedイベントか何かで監視して何か入力されていれば、
Buttonの画像を×に、そうでないなら虫眼鏡の画像にすればいい。
んでButtonがクリックされたらTextBoxをClear()。
ついでに同じような見た目にするならテキストボックスの枠線を消して UserControl側に書いてやるとかすると見た目同じようになるかもね ボタンの替りにPictureBox使う手もあるかな?この辺は人それぞれだと思うけど
207 :
デフォルトの名無しさん :2011/04/13(水) 16:43:01.13
Windows ApiCodePackのサンプルに入っているよ。但しwpfだが
HttpWebRequestの使い方をぐぐると、 みんなHttpWebRequest.GetResponse()で得たHttpWebResponseをCloseで閉じてるのばかりなんですが Close呼ばずにusing(var res = HttpWebRequest.GetResponse())ってするのは何か問題ありなんですか? インテリセンスにDisposeがでないのと関係あるのかな。
209 :
デフォルトの名無しさん :2011/04/13(水) 17:08:19.84
using ステートメントで使用される型は、暗黙的に 'System.IDisposable' への変換が可能でなければなりません。 って出ると思うけどな
>>208 そこでのusgigの意味は、万が一のときに安全にDispose() つまりリソースを解放する。
という意味がある。一方は、HttpWebRequestやファイルのClose()は、切断や閉じるといった働き。
リソースを解放すれば、そのリソースで使用されたファイルやネットワークは、解放されるから
usginで問題ない。但し、Close() も忘れずに。
あくまでusgigは、最悪の場合でもリソースを解放するというもの。
誤字り過ぎwww
WPFの話題すっかりなくなったね
2時間前に出てる
プログラミング全くの初心者だけどわかりやすいC#の入門書ってない?
2001 C# Stdのパケ版についてきた C#をはじめようって冊子が一番わかりやすかった
c#ってポインタ使えんの?
ただたんに、サンプル書いてる人がショボいからってだけだね、usingじゃないのは
>>221 サンプルだからあえてusing使ってないってのもあるのかもよ
でも最小構成という考え方からすると、エラー処理割愛とかと同じレベルで using割愛もあるかも。 そんなトコ割愛しちゃう事がショボいんだけどな。
VB.NETのサンプルコードとか見てると
try-finally使わずにCloseやDisposeを呼んでるのがよくあるけどアレは害悪
これでいいんだと思ってしまう
CloseやDisposeを書きたかったらfinallyの中で書く
using使うならCloseやDisposeは不要で
>>212 は間違い
サンプルくらい好きに書かせてやれよw
MSDNのサンプルだとusingどころかDisposeしてなかったりするのが結構あるな
>>216 今までで一番役に立った本は「作って覚えるC#入門」って奴。
これの延長のような本かサイトが欲しい。とC#歴8ヶ月の俺が言ってみる。
どこか初心者向けに、完パケしたアプリをオープンソースで解説してるようなの無いかな?
「未確認飛行C」のような文法中心だと、実際何が出来るのかイメージ出来るまでに時間かかるし、
「Dobon」のTipsだけじゃ、部分的過ぎてそれらをまとめる方法が分からなかったりするし。
どっちもすごくお世話になってるけど。
>usginで問題ない。但し、Close() も忘れずに。 なんでusing使ってるのにClose()忘れちゃいけないの?
230 :
203 :2011/04/13(水) 21:48:19.85
HttpWebRequestもHttpWebResponseもIDisposable実装してねーっつうの どうやってusingすんだよ
HttpWebResponseはその基底のWebResponseからしてIDisposableだが?
>>231 WebResponse : MarshalByRefObject, ISerializable, IDisposable
まさか明示的実装を知らないとか言わないよな
234 :
208 :2011/04/13(水) 23:01:49.15
ありがとう
usingしてもいいってことねー
インテリセンスに出ない理由も
>>233 さんの明示的実装をググって分かりました
>>225 Disposeは、usingが代わりにやってくれるから不要ってのはわかるけど、
Closeも不要なのか。じゃあ何故、Closeが用意されているんだろう。
Disposeだけで良いような気もする。
またopenする可能性があるからだろ
ああ、なるほど。 残りの疑問は、ググるか・・・。
どうせ void IDisposable.Dispose() { this.Close(); } とかな実装だろ たしかClose()はOpen()との整合性を取るみたいな感じで Disposeと等価にすべき、みたいなMSのガイドラインがあった気がする
>>238 気になるところは、そういうふうにDisposeでCloseが呼ばれる実装なのか、
ただ単にオブジェクトのリソースだけ解放してCloseは、呼ばれないのかってところだなぁ。
ここらへんは、ライブラリによって違っていそうだ。行儀の良いライブラリだと、だいたいCloseしてそうな予感だけど。
接続自体が共有リソースだから、CloseせずにDisposeなんて有り得ない
>>241 Dispose()でリソースの開放。
それにClose()などの別名をつけることもOKってことでしょ?
> Disposeした後にオブジェクトを再利用できるような実装も別に構わない
どこを読んでそう解釈できるんだろう。
>>242 …Disposeしたあとに再利用なんかしたくないな。
だって勿体無いじゃん
だったら開いたままにしたほうがよくね?
>>217 2001 C# Stdってなに?検索しても分からん・・・。
>>228 それわかるなー
どのサイトも実用性がないからな
ゲーム制作本は作っていく工程が
書かれているから参考になるかも
ゲーム特有の部分は飛ばし読めばいいし
でも、プログラミング自体初心者の人には敷居が高いな
人のソースみるのが結局一番参考になるのかも
>>246 一番最初に出たC#STDの単体売りしてたやつ
継承とは何かとかコードの記述の仕方など
できるだけわかりやすく書いていて
これがC#やり続ける助けになったな
MSのアプリケーションサンプルといえばpatterns&practicesシリーズがあるよ 結構大きいサンプルに相当な量の英語の解説ドキュメントが付いてる 新しいのだとPrism4はわかりやすいから見てみたら
便乗質問で、usingとtry〜catchって、速度は同じくらいと思って良いのかな? 自分で作って試せってレベルの質問ですがw
252 :
デフォルトの名無しさん :2011/04/14(木) 11:13:31.08
わかってるならするんじゃねえ コードをさくっと書いて動かしたら終わることじゃないか
253 :
79 :2011/04/14(木) 11:41:15.16
みなさんこんにちは。 再び行き詰ったのでお知恵を拝借させてください。 ファイルを読み込む所まではいけたのですが、 文字をテキストボックスへ表示するのに時間が掛かり困っています。 また、時間を掛けて読み込んでも窓をリサイズすると同じくらいの待ち時間が掛かってしまいます。 どうしたらいいでしょうか?
メモリに読み込むのを速くしても無理。1テラでも読むのか? 表示するために、nバイト目を読み込めばいいと記録しておき、画面表示に時だけ読み込めばいい。 他に巨大ファイルを、例えば先頭から順に2メガ程度に分割して編集されたブロックだけ書き換えて ファイル保存されたとき連結すればいい。
256 :
デフォルトの名無しさん :2011/04/14(木) 12:05:20.85
>>251 usingは、try〜finallyを自動生成しているだけ。
ちなみにcatchは、ない。
VC#2010Expressですが、 ユーザーがコントロールに設定したパラメータを保存・呼び出しできるように List<T>に格納し、そのソースをProperties.Settings.Default.xxxで保存したいのですが、 設定の型とか、どうしたらよいのか分かりません。 List<T>の型は、クラスを作りパラメータの数だけ{get,set}でプロパティを作りました。 XMLで外部ファイルに保存する方法は分かったのですが、内部的に済ませたいのですが、 どうすればいいのでしょうか?
>>259 プロジェクトプロパティ→設定→型で任意の型を設定
List<T>のままでは使えないので何かに継承させる
勘違いしているようだがこのデータはAppData以下のXMLに保存されるんで内部的に完結してはいない
気になったのでStreamクラスの実装を.NET Reflector使って調べてみた。 省略して書くとこんな感じ。結論として、DisposeとCloseは、同じ処理。 public abstract class Stream : MarshalByRefObject, IDisposable{ public void Dispose(){ this.Close(); } protected virtual void Dispose(bool disposing){ if (disposing && (this._asyncActiveEvent != null)) { this._CloseAsyncActiveEvent(Interlocked.Decrement(ref this._asyncActiveCount)); } } public virtual void Close(){ this.Dispose(true); GC.SuppressFinalize(this); } }
そういえばReflectorって無償版なくなったんだよね
>>261 >プロジェクトプロパティ→設定→型で任意の型を設定
「任意」というのが見当たりません。
>List<T>のままでは使えないので何かに継承させる
よく分かりません。
Hit Any Keyと指示されたんですが、 Any Keyというキーが見当たりません。 どこにあるのでしょうか
それが精いっぱい頭をひねったギャグなのか?
すいません。助けてください。 C言語で組み込みのプログラミングしかやったことのない人間が webアプリをC#で作ることになりました。 C言語で作ったDLLを、なんとかブログ等を参考にして C#の.NET Frameworkでバインディングすることができました。 (unmanagedなDLLのネイティブバインディングというんでしょうか) テスト環境に持っていって試したところ、単独でブラウザから アクセスすると正常に動作しますが、複数のパソコンから ほぼ同時にアクセスするとエラーになります。 複数のパソコンでも同時にアクセスしなければ、正常に動作します。 こういう時はどのように対処するのが常套手段なのでしょうか? C言語で作られたDLLの使用は諸事情により必須です。 無能なもので、検索しても解決策を見つけることができませんでした。 よくわかっていないので、トンチンカンな質問かもしれませんが、 よろしくお願いします。
>>267 非同期プログラミングもできないのかこのバカは
>>267 なにが原因でどういうエラーになるか突き止めて、それを回避するように修正する
「エラーになります」ってセリフはC使いのセリフとは思えんな
>>267 複数同時にアクセスされることを想定するのかしないのかがわからない。
ロック用のオブジェクト変数例えば、Object SyncLock = new Object() なんかを作って
lock( SyncLock ){
// ここでCのDLLをごにょごにょ
}
ってやれば良いんじゃないか。
こうすれば、lockブロックの間は、排他制御されるだろうし
C#やwebと関係ないんだろ。 再入可能でないDLLなんだろ。
277 :
デフォルトの名無しさん :2011/04/15(金) 09:46:10.52
C#でWindowsFormアプリケーションを作成しています。 DataGridViewのFontColorの設定がうまくいかないのでご教示ください。 DataGridViewに商品の一覧を表示させ、ある条件の場合に全行のFontColorを朱色にしたいと思っています。 しかし、そのようにコードを記述しても、なぜか1行目のみ朱色にならず、2行目以降が朱色に変わります。 なぜ、1行目のFontColorが変わってくれないのか、ご教示ください。 --- コード --- DataGridViewである "dgv_SHOHIN"に値を格納(コードは省略) for (int i = 0; i < dgv_SHOHIN.Rows.Count; i++) { dgv_SHOHIN.Rows[i].DefaultCellStyle.ForeColor = Color.Red; } ------------ よろしくお願いいたします。
C++のテンプレートとC#のジェネリクスがこんがらがってきた 誰か解説頼む
どっか別の所で色変えてたりしてw ミニマムコードで試してみた?
280 :
デフォルトの名無しさん :2011/04/15(金) 10:28:57.67
>>279 さん、ありがとうございます。
DataGridViewに値を格納するところからコードを記載します。
---------------------
dgv_SHOHIN.Rows.Clear();
for (int i = 0; i < 3; i++)
{
dgv_SHOHIN.Rows.Add();
dgv_SHOHIN.Rows[i].Cells[0].Value = "あ";
dgv_SHOHIN.Rows[i].Cells[1].Value = "い";
dgv_SHOHIN.Rows[i].Cells[2].Value = "う";
}
for (int i = 0; i < dgv_SHOHIN.Rows.Count; i++)
{
dgv_SHOHIN.Rows[i].DefaultCellStyle.ForeColor = Color.Red;
}
---------------------
1行目だけ別途、描画するようなコードは記載していません。
なぜ、1行目だけRedになってくれないのでしょうか…。
俺はLoadイベントに書いてみたがちゃんと3行とも赤くなったぞ ただし、そのコードで朱色になることは絶対にないが
283 :
デフォルトの名無しさん :2011/04/15(金) 11:01:25.59
>>281 さん
ColumnについてはデザイナーのColumnsプロパティの「コレクション」にて予め3つの列を作成しています。
281さんのコードのようにAddメソッドを使用していません。
これが原因でしょうか。
ヘッダーを除く1行目の"あ""い""う"
が黒のままです。
284 :
281 :2011/04/15(金) 11:02:51.33
デザイナで作っても同じだったのでそこが原因ではない
>>278 C++ template: ソースコードジェネレータ
C# generics: 実行時に型を適用
>>283 dataGridView1.Rows[0].Cells[0].Style.ForeColor = Color.BlueViolet;
dataGridView1.Rows[0].Cells[1].Style.ForeColor = Color.BlueViolet;
dataGridView1.Rows[0].Cells[2].Style.ForeColor = Color.BlueViolet;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
dataGridView1.Rows[i].DefaultCellStyle.ForeColor = Color.Red;
}
こんな感じに書けば1行目だけ赤にならずに紫になるけどね
まさかやってないと思うし・・・
oracleから数値項目を取得したいのですが非常にダサいです。 while (odr.Read()) { int total = int.Parse(odr["total"].ToString()); } もう少しスマートな方法はないでしょうか?
ないですぜ
マジっすか すげー
>>288 toString()する前のodr["total"]の型はなんなだろう。
強いて言えばobject型
型を表示してみたところInt64でした。
DBに数値型で入っていたらdecimalとかintで取れそうだけど。
295 :
デフォルトの名無しさん :2011/04/15(金) 12:45:47.39
サンプルコードに従いColumnsをコードで作成するよう記述し実行してみて、原因が分かりました。 デザイナーでColumnsのDefaultCellStyleプロパティを設定する中で、 SelectionBackColorをWhite、SelectionForeColorをBlackに指定していました。 DataGridView表示時に1行目が選択状態にあるのが、自分が仕掛けた設定が原因で気づきませんでした。 DataGridView.ClearSelectionメソッドを入れることで、全行の色が変わっていることが分かりました。 大変愚かな質問をしてしまい申し訳ありません。 ご回答くださった方、ありがとうございました。
>>293 それなら文字列に変換しなくても直で整数型にキャストできるんじゃないの。
>>296 (int)(odr["total"])
だと例外エラーが出てしまいました。
>>297 odr["total"] as int64; とかは?
お! (long)(odr["total"]) ならいけました。 longでいきます。
いいかげん いいかげん いいかげんげんげんげんげん
面白いねー
throw new ArgumentNullExceptionを書くのにも飽きて来たんですが どうしたらいいですか?
値型なら物理的にnullにならないよ
なるほど〜これからは構造体を使うようにしますね
C#では特別な理由がない限り構造体使ってればいい 最近の組み込みOSは構造体で実装されるのが一般的になってるし
またお前か
またお前かと書き込むだけの簡単なお仕事ですね
ブルータス、お前もか
おっさんのネタはつまらんしひつこい
ほね」。
全部構造体とかねーよww コピーのコスト見えるようになってから構造体使って。
質問者がnullチェックしとうない!ってのが趣旨ですので代替案をどうぞ
Refactorにそんなの無かったか
止めろ 止めろ
確かにこれならnullチェックはなくなる・・・
>>315 すごいなこれ、さっそく今やってるプロジェクトに組み込むは
>>313 non-nullable 型とか、null伝搬メンバー呼び出しは頻繁に「言語仕様に入れてくれ」って要望入るらしいんだけどもねぇ。
nullを代入したら例外が発生するようにすればいい
|>で連結しまくってるF#っぽいな
|>|>|>|>|>|>|>|> <|<|<|<|<|<|<|<|
バーションが5になるのっていつ頃?
上のほうで、disposeやcloseのことやってたけど、 disposeが必要なオブジェクトって何か決まりでもあるの? それともクラスやメソッド個別に調べて覚えるの?
とりあえずusingしてみれば分かる できないならコンパイラがエラーで弾く
>>327 using(var x = new X()) は X が IDisposable 実装必須だけども、
using(x) って書き方なら別に IDisposable 不要だったりする。
x as IDisposable が null なら特に何もしない。
329 :
デフォルトの名無しさん :2011/04/16(土) 10:04:21.41
disposeは、元々アンマネージドコードを解放するために用意されていた筈なんだけどね ピュアC#ならGCが勝手に解放するから
デスクトップ画面上の指定したスクリーン座標の色の変化を変化でスタートし元の色に戻るまでの時間を測定したいんだがどうすればいい?
ファイルを閉じるのはアンマネージリソースとか関係ないぞ 単にすぐに閉じたいからDisposeする
332 :
デフォルトの名無しさん :2011/04/16(土) 10:17:24.84
>>331 いや、Disposeって物自体がアンマネージドリソースの解放目的で用意された物だって話
その場合のアンマネージリソースは開放のタイミングをGCに任せることができないリソースという意味な 必ずしもGCの管理外のメモリ領域やハンドルとかを指すわけじゃない
335 :
デフォルトの名無しさん :2011/04/16(土) 13:28:33.44
MySQLのデータをGridViewなどで使用方法などが 書かれてるサイトなどありませんでしょうか?
>>335 ググれば一番上に出るけど、それは試したの?
337 :
デフォルトの名無しさん :2011/04/16(土) 18:04:09.34
339 :
デフォルトの名無しさん :2011/04/16(土) 19:34:28.00
340 :
デフォルトの名無しさん :2011/04/16(土) 19:45:27.57
何が面白いんだ?
ここまで俺の自演、と
これは酷い
IDねーんだよな…… 俺は338だが面白くねーだろ別に。
本気でウケてると思ってたのかw
いずれにせよ、普通の人の感覚とズレてるのは確か。 何度も言うけど、釣っただの釣られただのワロタだのやってる奴って 今時2chくんだりに書き込むことがそんなに非日常的な楽しみなんかね理解不能。
ほね」。 これなに?
しっくりこないんです!!
LINQいいよね〜
スレッドとかループにboolフラグ使って脱出組むとコードがこんがらがってきます なにかいい方法はありませんか?
フラグ変数を使わないように組みなおすかループ内の処理を関数化する。
aspxファイルに<asp:TextBox ID="txt" runat="server"></asp:TextBox> を追加しても designer.csに定義されません。 定義されるためにはどうしたらよいでしょうか?
デリゲートを使う
var b = from p in a where p.X > 2 from q in p.Z select new { p.X, Z = q }; こういう書き方でクエリ式のSelectManyに相当するものないの?
>>358 どういう意味?
a.Where(p => p.X > 2).SelectMany(p => p.Z, (p, q) => new { p.X, Z = q });
ではダメなの?
static void Show<T>(IEnumerable<T> a) { foreach (var x in a) Console.Write("{0} ", x); Console.Write("\n"); } エラー 1 } が必要です。 エラー 2 型、名前空間の定義、またはファイルの終わりが必要です。 どこをどう直せばいいんだ?
foreachさんのループする範囲を指定してあげて
using System; using System.Collections; using System.Linq; using System.Collections.Generic; class Program { static void Main(string[] args) { var a = new[] { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 }; var b = new[] { 0, 2, 4, 6, 8, 10, 12 }; Show(a.Take(5)); Show(a.Skip(5)); Show(a.TakeWhile(x => x != 2)); Show(a.SkipWhile(x => x != 2)); } static void Show<T>(IEnumerable<T> a) { foreach (var x in a) Console.Write("{0} ", x); Console.Write("\n"); } } メインから外に出したらうまく行きましたが、 なんで外に出さなきゃいけないの?
そりゃおまえ性的なものは中に出すと妊娠しちゃうからだよ
static void Show<T>(IEnumerable<T> a) { foreach (var x in a) //ここから Console.Write("{0} ", x); Console.Write("\n"); //ここまで }
>>362 はっきり言うけど、お前プログラミング向いてないわ
VBからコピペするとこうなるだけだと思うよ 最近このスレ低学歴が多いから
>>364 ここからここまでを{}でくくるってこと?
挙動かわっちゃうじゃん。
>>361 foreachって{}省略できなかったっけ。
そもそも「メインから外に出したらうまく行きましたが」ってのが理解不能。 Mainメソッドの中にstaticメソッド書いてたのか???
何をやりたいのか、 どこからお題をもってきてそうなったのかよくわからんけど スコープとか勉強した方がいいぞ
このスレって回答者も初心者なの?
>>365 お前だろいつもこのスレ荒らしてるの
低学歴はお帰りください
学歴コンプレックスでもあるのか?w
VS2008 でエラーになんないけど。
>>360 この時点でのソースコードを全部出してね。部分的に出されても回答できないよ。
ブレースの個数があってないエラーが解決できないってのは単なるメクラだろ Cでマクロ使ってるわけじゃあるまいし
質問者ですが
>>363 で大体解決しましたw
皆さんどうもです
>>372 C/C++は玄人ですがC#は素人です。っていっても信用しないでしょ??
正直どっちも初心者だ。
C++も2chで学んだので自信があります
俺は高脳だから
初心者をむやみに煽るやつもアホだと思うけど、 回答が間違ってたら煽る質問者もだいがいだわな。 「これで解決しない?」とか「こういう方向性で調べたら?」とか ヒントをだしたら「いいかげんwwww」とか煽るようなやつ。 なんで赤の他人がそこまで親身になってきっちり調べてくれるとか 思ってるんだろうな。
ここ騙りも多いからそういうの気にしないほうがいいよ
>なんで赤の他人がそこまで親身になってきっちり調べてくれるとか >思ってるんだろうな。 日本人はとにかく性格が悪いからな そりゃ無理だわ
職場でクソ真面目な分、鬱憤溜まってネットで吐き散らすのが日本人だからな 2chも空想世界の一部という認識なんだろう
ヒント出されて煽ってくる質問者は、コピペしてそのまんま使えるような 回答を期待してんだろな。 ちょっとやり取りして分からないなりに理解しようって姿勢が見えたら 教えてやろうって物好きもいるもんだけどいきなり煽りだすからな。 コミュ力なさすぎでなにやらせてもダメそうな感じ。
そんなまどろっこしいことしないで最初から答えだせばいいだろw 何でここをチャットみたいに使おうとするんだよw
>>387 うろ覚えのこととか、コード書いて確認が必要なこととかそんなきっちり
調べて回答するの面倒だろ。お前の母ちゃんじゃないんだしそんな親身じゃない。
それ以前に、こことかで回答してるヤツはべつに質問者のためにやってるわけじゃない。 自分の協力してあげたいって気持ちに応えてるだけ。 で、プログラマってのは職人だから、ほとんどの人は質問者に自分で気づいて欲しいと思ってる。 コピペが欲しいんだったら、そう言うスレに行くか作るかするか、 たまたまそう言う答えを返してくれる親切な人が現れるまでひたすら粘ればいいだけ。 回答者に文句をつけるのは自分の品位を低い方に証明するだけだろ。
LINQいいよね〜
>>391 それはお前の考え
品行方正に訴えるならスルーしろ
普通のやつ 「これがうまくいきません」 「XXじゃね?」 「それもだめでした」 「それじゃXXかXXかね」 「それです。うまくいきました」 だめなヤツ 「これがうまくいきません」 「XXじゃね?」 「じゃね?って、いいかげんwwww、このスレ素人ばっかしw」 コミュ力が絶望的にないか、ほんとうにコピペで使えるレベルの 答えがこないとだめなんだろうな。ヒントだされて煽ってくるやつ。
ヒント出す
↓
そのヒントがまったくの見当違い、というかそのヒントから導き出せる答えがそもそも間違ってる
↓
別の回答者がそれを指摘
↓
>>395 こんな感じだと思うよ
デリゲートを使う
デザインパターンで解決
LINQ一択
例が悪い 両方ダメな奴じゃねえか
なんかいいラムダありますか?
答え書けと言ってる奴が答え書けばいいじゃないか。
>>402 フヒュリカポゥwwwwwwwwwwwwwwwwwwwwwwwww
404 :
デフォルトの名無しさん :2011/04/18(月) 00:32:16.35
SerialPortのコンストラクターで教えてください SerialPort()と何も指定しないと既定のDataBits 8、Parity None、StopBits 1、ポート名 COM1 SerialPort(String, Int32, Parity, Int32, StopBits)で個別に指定可能。ここまではさすがに解った。 じゃぁSerialPort(IContainer)の書き方はどういうふうに書けばいいの? IContainer インターフェイスのオブジェクトを指定してって日本語が理解できません。
>>404 ContainerがIContainerを実装してるみたいだから
SerialPort(new Container())でいいんじゃないの。
そのコンストラクタはデザイナでフォームにD&Dしたときに使われる奴 フォームが破棄されるときに一緒に破棄してもらうための物 デザイナ使わないなら気にしなくておk
ああ、そういえばそんなVBチックな仕組みがあったんだよな。 System.Timers.Timerとかもそんな風に出来たっけ。 すっかり忘れていたよ。
dataGridViewで質問です。 dataGridView1.Rows[1].Selected = true; としても、dataGridView1.CurrentRow.Index が変化しません。selectとcurrentは別なんですか? CurrentRow.Indexを操作する方法を教えてください。
>>408 DataGridView1.CurrentCell = DataGridView1[DataGridView1.CurrentCell.ColumnIndex, 1];
>>409 はぁ〜。セルで指定すれば動くのか。
SelectionModeをFullRowにして、行でしか選択できないようにしているので、
直接、行インデックスを弄ることしか考えてませんでした。
でも、それで出来ました。ありがとうございました。
using System; using System.Reflection; class Program { static void Main(string[] args) { var lib = Assembly.LoadWithPartialName("lib"); var type = lib.GetType("Calculator"); dynamic calc = Activator.CreateInstance(type); Console.WriteLine(calc.Add(1, 2)); } } ハンドルされていない例外: System.NullReferenceException: オブジェクト参照がオブ ジェクト インスタンスに設定されていません。 場所 Program.Main(String[] args) 場所 C:\Users\aiueo\documents\visual studio 2010\Projects\test\test\Program.cs:行 9 lib.csは同ソリューション内にあるし var calc = new Calculator(); Console.WriteLine(calc.Add(1, 2)); って書きゃうまく行くんだけど、遅延バインドとdynamicを用いて書きたいです どうすりゃいいの?
lib.csはアセンブリじゃないような気がするけどな
コンパイルすればアセンブリになりますよね? 何言ってるんですか?
lib.dllはあるの?
lib.csをコンパイルしてもlib.dllになるとは限らんぜ
おっと
>>413 紛らわしいから煽り方変えてくれ
>>414 ああ、lib.dllが必要っぽいですね
今アセンブリについて調べてます
とりあえずコンソール上で csc /t:library lib.cs csc /t:exe /r:lib.dll Program.cs Program とやったら無事に出来ました でもVC#上だとうまくいかないままなんだけど、どうすりゃいいの?
exeと同じフォルダにdllが存在してないんじゃね
>>419 存在してます
ちなみにlib.dllをソリューションエクスプローラー上にD&Dしてもダメでした
オブジェクトブラウザーには反映されてるっぽいんだけどなあ・・・
llb.dll
プロジェクトに参照を追加ボタンを押してませんでした さーせん
こいつ144だろwwwww
それで解決できたってことは結局
>>419 が原因だよなぁ
ていうか参照に追加しちゃったらわざわざ動的ロードする意味が
参照に追加しちゃうと動的にならないのか?
ならねーよ144君
お前さんがやろうとしている意味での動的にはならないだろうね 消したら動かないから
大方bin\debugじゃなくてプロジェクトのルートディレクトリに配置したんじゃねえの?
俺は
>>144 じゃないが、
Assembly.LoadWithPartialName("lib");
の部分にAssembly.Loadに変えろって警告が出て、↓にそれぞれ変えてみても
var lib = Assembly.Load("lib.dll");
var lib = Assembly.Load("lib");
ハンドルされていない例外: System.IO.FileNotFoundException: ファイルまたはアセン
ブリ 'lib'、またはその依存関係の 1 つが読み込めませんでした。指定されたファ
イルが見つかりません。
って出ます
>>428 C:\Users\aiueo\Documents\Visual Studio 2010\Projects\test\test\bin\Release
に配置したらうまく行きました
C:\Users\aiueo\Documents\Visual Studio 2010\Projects\test\test
じゃ駄目なのね
サンクス
あぁこりゃ144だなw
言葉も出ない
Visual C# でctrl +F5 のときは通常終了 だけど単なる F5 のときは例外投げて終了みたいなのって何が原因として考えられる?
どこで例外
GetHashCodeやEqualsやCompareToみたいなのの実装が間違ってるとそういう風になることがある
テスト
このスレ荒らし多いな
スレッド系の例外ならそういうこともあるけど、 どんな例外が起きてるの?
ListBoxのItemsにアイテムの移動メソッドを追加したいんですけど どうやれば追加できますか? 良くありそうなのにググッても出なかったので。。。 class ListBoxPlus : ListBox { //ItemsをObjectCollectionPlusにしたい } class ObjectCollectionPlus : ListBox.ObjectCollection { public void MoveUpAt(int index) { // アイテムの内容を1つ上に移動させる } }
一度消してから追加するという方法しかありません Removeしてから目的の位置にInsert これ
>>443 ありがとうございます。
やり方自体はそれでやるんですけど
メソッドを追加をしたいんです。
やりたいのは「Itemsにメソッドを追加」です。
スーパークラスにメソッドを追加するというのはできません できると思ったのなら継承の仕組みを根本的に誤解している恐れがあります 拡張メソッドでそのように見せかけることはできます
CreateItemCollectionのオーバーライドおよびItemsの隠蔽でできないでもない 普通はしないけど 拡張メソッドで十分だし
>>445 やっぱやるとしたら拡張メソッドになっちゃうんですね・・・。
Addなどと同等の機能なのでObjectCollectionに埋め込めないかと思ったのですが。。。
継承から学び直してきます^^;
ありがとうございました。
448 :
デフォルトの名無しさん :2011/04/19(火) 11:49:26.64
>>443 無理矢理で良いならカスタムソート使えば・・・
>>442 ListViewItemを継承すりゃいいじゃn
>>449 ListViewItemにもアイテムを移動させるような
メソッドは無いみたいですけど・・・?
451 :
デフォルトの名無しさん :2011/04/19(火) 12:52:43.11
そもそもListBoxにListViewItem突っ込む意味が判らん
WindowsFormの周囲の青い部分(閉じるボタン等が表示される部分)の色は、 何ていうプロパティで設定するのでしょう?
プロパティで設定するもんじゃないな Windowsのテーマとかで設定するもの
ウインドウ枠を変えたいのなら枠なしウインドウを作って自前でやるとかするしかないかも
>>442 同時期に同じようなこと考えてる人がいるもんだw
でも自分でメソッド作ろうとするアンタはおれよりレベル上です。
おれはそういうメソッドが無いものかと質問しようかとオモテた。
そうか、やっぱろRemoveとInsertでやるのが普通なんだ。
うぜえ
>>453-454 ありがとうございます。諦めます。
また質問で申し訳ないのですが、最近のWindowsフォーム開発ではバリデーションはどんなものが良く使われているのでしょうか。
色々とコントロールを眺めてたらMaskedTextBoxと言ったものもあるようですが、PromptCharが邪魔で入力しづらいですね。
やはり、登録ボタンクリック、入力値変更などのイベントハンドラで、正規表現やバリデーション用ライブラリを使用して逐一チェック、と言う感じでしょうか?
横からすいません 自分のクラスの任意のフィールドにアクセスされる度にあるメソッドを実行する、というような挙動を属性として定義することはできますか? リフレクション調べてみましたがいい方法が見つかりません 今のところ各フィールドのgetの中でメソッド呼んでますが冗長に感じます
今のところないですん
そういうAOP的動作はC#方面だと嫌う人多い。 というか、Andersが断固として嫌ってるので入らない。
>>459-460 ありがとうございます。しっかり定義しておけば.NETで管理できそうな気もするんですが、目指すところと方向性が違うのですかね
メタプログラミングってこういうことなのかなあと思っていたのですが
属性でそれやるのは、どこで何が実行されるか本気でわけわからなくなるからやめた方がいい。 メタプログラミングするなら、C#コード生成とかの方がおすすめ。
MSはメタプログラミング大好きだぞ コード生成やらdynamicやらバインディングやら AOPの類はハブられてるけど
MSのメタプログラミングは、 T4使った静的なコード生成か、 プロキシクラスの生成か、 完全にフレームワークの内部に隠す(データバインディング)か、だな。 基本的に、何かが被ってるのが一目でわかるか、 もしくは完全に隠れててユーザーから見えない場所かでやってる。
処理の仕方にもよるとは思うのですが、 大量の画像(30fpsの動画とか)を早く画像処理するには、 WPFとかXNAを使用したほうが良いのでしょうか?
画像処理の内容による CPUがボトルネックならWPFやXNA使っても速くはならん 処理によってはシェーダで代替できる場合はあってその場合は爆速
>処理によってはシェーダで くわしく
それはこっちのセリフだ 何がしたいのか詳しく
>>467 グラボで処理できることはそっちでやれってことだよ
グラボで処理しなきゃだめってことって何があるの?
ピクセル毎のエフェクトなら誇張じゃなく100倍くらい速くなる
うるせーばか
473 :
465 :2011/04/20(水) 00:59:31.93
>>466 単純な二値化や先鋭化みたいな簡単な処理の場合は、シェーダ使わないほうが
速そうですね。
>>469 グラボで出来ることってどんなことがあるのでしょうか?
Taskみたいに処理そのものを渡すことが出来るのでしょうか?
>>473 ピクセルシェーダは各ピクセルをそれぞれ独立に処理できる場合に最適
>単純な二値化や先鋭化みたいな簡単な処理
こういうのはまさにシェーダが最も得意とするタイプの処理で、とんでもなく速くなる
>>473 基本的に、floatの積和演算。
画素単位に並列処理が走りまくる感じ。
シェーダ シェーダ シェーダよ 探って旅を続けよう
ブレークポイントを設定してブレークした時だけ自動変数のウィンドウに表示されたり、変数の上にカーソルを持っていくと変数の中身が見えるんですが、 変数の中身を常に表示しておくように追跡させるようなことはできないんですか?
変数を右クリックしてウォッチ
動的 = リフレクション = むちゃくちゃ遅い って解釈は大体合ってるのか?
ウォッチ!ウォッチ! 今日も君をウォッチ!
>>481 やり方次第ねぇ。
個人的な感覚なんで正確じゃないけど、
型情報取り出すところからやると、静的コードの1000倍くらい
取り出したMethodInfoとかをどこかに保存して使いまわせば100〜500倍くらい
MethodInfoからデリゲートを動的生成して、それをキャッシュしとけば5〜10倍くらい
の遅さ。
dynamicはけっこう速い
>>483 の>MethodInfoからデリゲートを動的生成 に似た方法のキャッシュが行われるので
ほう まあ使わないんだけどね
画像を並べて表示するソフトを作成中なのですが、画像を選択すると回りに色をつけるようにしています。 スクロールバーを下げると画像は表示されるのですが、自分で描画した画像は一度画面から外れると 描画されていません。対応として再描画イベントに着色するコードを入れるとメッチャ遅くなってしまいます。 みなさんは描画系はどのようにされているのでしょうか? ほとんどのサイトは描画はするけど、そのあとの再描画にはあまり触れていないので・・・
クリッピングにも限度があるから最終的に妥協する 仕事で妥協できなかった時は最終的にGDIで書き直した
488 :
デフォルトの名無しさん :2011/04/20(水) 17:42:11.17
>>486 似たようなソフトをListViewのTileModeを使って、アイテムの描画はOwnerDrawで作ったこと有るが
その方法なら気になるほど速度低下しなかったと思う
やっぱりC#て使えないな
>>486 色が黒でいいのならFlowLayoutPanelの中にPictureBoxを並べて
BorderStyleを変えてるけど
そういうのじゃないっていうのならコピーコストかかりそうだけど
元画像を表示用bmpへコピーして表示用bmpに直接任意の色で線を引いて・・・とかやるとか
491 :
465 :2011/04/20(水) 20:00:49.39
>>475-476 ありがとうございます。
C#で使用する場合は、XNAやSlimDX辺りが良いのでしょうか?
とりあえずSlimDXで色々試してみます。
ところで、下記サンプルを参考に動かしてみたのですが、タスクマネージャで見るとCPUの一つにおもいっきり負荷がかかっていました。
もちろんグラフィックボードを積んだマシンで試しました。
GPUを使用するから、CPUに負担がかからないものと思っていたのですが、勘違いでしょうか?
それとも、描画そのものはGPUで行っているけど、それを呼び出す為にCPUに負担がかかっているだけなのでしょうか?
http://www21.atwiki.jp/csharpgamedev/pages/25.html
DirectXを使うのとシェーダーを使うのは直接関係無いと思ってたけど違うのか
例えばC++でDirectX使うにしてもシェーダーはTechniqueで差し込むじゃん 勝手に良きに計らってくれることなんてあるのだろうか
495 :
465 :2011/04/20(水) 20:55:18.44
画像処理は
>>465 にあるように、静止画を連続して加工したいんです。
今はBitmapデータをunsafeで配列に変換して計算したりOpenCVSharpを使用しています。
画像処理そのものは先鋭化や差分等の簡単な物なのですが、動画となるととにかく枚数が多くて時間がかかってしまうので、
他に何か良い方法が無いかと思い、質問してみました。
すばらしい情報だ よくやった
498 :
465 :2011/04/20(水) 22:10:14.27
>>496 WPFプロジェクトを少しいじってみましたが、思った通りに動かなくてちょっと梃子摺りそうですね・・・。
入門書を買ってしっかり勉強してみます。
ありがとうございました。
499 :
465 :2011/04/21(木) 00:22:36.46
WPFスレでスルーだったので、こっちでも・・・ WPFについて、何か良い入門書ってあるのでしょうか? 和書では何を見てもエッセンシャルWPFに辿り着くのですが、入門書とするには少し敷居が高いようなので・・・。 すいませんが、よろしくお願いします。
コントロール、イベントが自動で追加されるwindows1.g.csはどこから開けるんですか?
>>499 MCTS Self-Paced Training Kit (Exam 70-502)
>>499 書籍に手を出すよりサンプルコードを入手してあれこれやるとかしかないかなあ
>>500 WPFの話?
確か隠しファイルになってるのでソリューションエクスプローラー窓の
上のアイコンの中にすべてのファイルを表示ってのがあるのでそれをクリックすると
隠れてたファイル群がでてくる
>>500 InitializeComponentを右クリックして定義へ移動
WinFormsみたいにコントロールを作成するコードは存在しなくて
イベントハンドラの紐付けとフィールドへの代入を行うコードだけだから見ても面白くないけど
506 :
465 :2011/04/21(木) 05:35:35.82
>>501 ありがとうございます。
洋書だとたくさんあるのですが、和書となると一気に減りますねー。
面白そうではあるのですが、変わりすぎててどこから手をつけていい物やらって感じです。
>>502 サンプルコードはちょくちょく見るのですが、それだと部分的にしかわからず、全体が掴めないかなと。
結局はエッセンシャルWPFになってしまいそうですが・・・少し古いのに高いっ。
>>504 サンプルを書いてくださったりツールの紹介、ありがとうございます。
今日はもう遅いので、明日(と、いうか数時間後)に試してみたいと思います。
>>506 お前はいいな
俺の時は誰も教えてくれなかった
流れが速い時はスルーされがちだよね。 今一度初心を思い出そうではないか。 >このスレッドは「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
>>507 その時々でWPF触ってない人しかいないとかあるしな
510 :
デフォルトの名無しさん :2011/04/21(木) 18:32:58.20
どうしても無理ってなにが無理なん?主語が無い
>>510 Win32APIなどに同様の物はあるんだろうけど
そもそも末尾に半角や全角のスペースをつけるって仕様がどうなの?
って感じもするけど
それは自分で決めた仕様なの?それとも他人も絡んで変えられない仕様なの?
まあ他人と絡むにしてもアンダーライン _ にするとかさ・・・
適当に試したけど末尾の空白は全部消されるな Win32APIのCreateFile直で呼んでも消える
>>513 まあ.netってそういうAPIのラッパーみたいな物だから
結果的にそうなるような気がする・・・
FindFirstFileはワイルドカード使えたりする都合上末尾の空白を削除なんてしないんじゃないかなあと希望的観測を言ってみる
文字列から指定した文字の最後の位置を調べたいんですが、どうすればいいんでしょうか static public class stringEX : string { /// <summary> /// 文字列を検索し、最後に見付かった指定文字の位置を返す /// </summary> /// <param name="c">指定文字</param> /// <returns></returns> public int ReverseIndexOf (char c) { int pos = -1; for( int i = 0; i < string?.count; i++ ) { if( string?.IndexOf( c, pos + 1 ) == -1 ) { return pos; } else { pos = string?.IndexOf( c, pos ); } } return pos; } } string test; int LastPos = ((stringEX)test).ReverseIndexOf("\\"); という風にしたいのですが、string?の部分をどう書けばいいのかわかりません
無知は悲惨の実例か?これは、
>>516 自作しなくてもstring.LastIndexOf()でいいんじゃね?
>>518 ありがとうございます。
ちなみにこの場合はどうかけばいいんでしょうか
これはひどい
MSDN調べて試すぐらいは…
IndexOfと同じ方法で呼べるだろ? あんま笑わすなよ
stringクラスで文字列が格納されている変数名を調べるにはどうすればいいんですか? あと、LastIndexOfの本体はどこにあるんでしょうか public int LastIndexOf ( string value ); と書かれてるファイルにしかとべないんです
LastIndexOfの実体ははmscorlib.dllの中 ソースコードとしては見れません 宿題なら宿題スレへ
いやソースコードは見れるでしょ
そもそも static public class stringEX : string こんな書き方ねーよ これC#の話なの?本当に?
>>524 ということはマイクロソフトのクラスをオーバーライドするときはこう書くしかないってことですか?
static public class stringEX : string
{
/// <summary>
/// 文字列を検索し、最後に見付かった指定文字の位置を返す
/// </summary>
/// <param name="c">指定文字</param>
/// <returns></returns>
public int ReverseIndexOf (char c, string s)
{
int pos = -1;
for( int i = 0; i < s.count; i++ )
{
if( s..IndexOf( c, pos + 1 ) == -1 )
{
return pos;
}
else
{
pos = s.IndexOf( c, pos );
}
}
return pos;
}
}
string test;
int LastPos = ((stringEX)test).ReverseIndexOf("\\", test);
>>527 それ以前にStringクラスはsealedなので継承不可能ですよ
何がしたいんだ一体…。
オーバーライドの意味を勘違いしてないか?
>>528 public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>
のsealedを消して保存すれば継承できるようになるんでしょうか?
そういうのは拡張メソッドの出番だろ…
ちょっとこれは病的だな
>>531 貴方の言ってることは実行できないので継承できるようにはなりません
どういう手段を駆使しても不可能です
>>534 ありがとうございます勉強になりました
stringを継承したい場合どうすればいいんでしょうか
人の話をきいてねぇw
>>535 不可能だと申し上げました
もう一度だけ言います
不可能だと申し上げました
声出してワロタ 我慢できんわww
>>527 のコードが限界ということですか?
int LastPos = ((stringEX)test).ReverseIndexOf("\\", test);
で(stringEXにキャストなくてもスマートに
int LastPos = test.ReverseIndexOf("\\");
というふうにできないのはなぜですか?
すいませんやっぱりかなりどうでもいいのでLastIndexOfを使って次に行こうと思います ありがとうございました。
>>540 次に行く前に、最初の最初に戻って入門書から始めてください
気になるよな 俺もプレステのコントローラについてるあの円筒形の部分に何の意味があるのかと調べたものさ
次行ってみようといったらダメだこりゃって言われたでござる
拡張メソッドで
>>539 みたいに書くことはできるが、まだ早いね。
教えてください。 Form1で作成したBindingList<T> mylistを、Form2からdataGridViewのソースとして開きたいのですが、 dataGridView1.DataSource = ((Form1)this.Owner).mylist;と書きましたが、 領域外となります。mylistをpublicにすると、領域はOKなのですが、 デバッグでアクセスに一貫性がないとなりデバッグ通りません。 どのように書けばよいのでしょうか?
T型がinternal以下だとか言わない?
例えばこんなんだと通らないよ internal class Element { } public class Form { public readonly List<Element> Items = new List<Element>(); } エラー アクセシビリティに一貫性がありません。 フィールドの型 'System.Collections.Generic.List<Test.Element>' のアクセシビリティはフィールド 'Test.Form.Items' よりも低く設定されています。
なるほど。T型のクラスをpublicにしたら通りました。ありがとうございます!
>>549 一昔前はツール使ってソースを復元してたけど
MS本体が.net関連のソースコードを公開してるよ
VC# Express 2010使ってるんだけど 音声ファイルをexeに埋め込むのはどうやるの? wavファイルを鳴らすプログラム作ってるんだけど いちいち外部ファイル読み込みたくない
>>554 リソースに突っ込む。
使うときは、プロパティかなんかでストリームが取れるのでそいつを読むとか投げるとかすれば音が出るよ。
556 :
465 :2011/04/22(金) 00:20:33.04
まったく分からんがピクセルシェーダーファイル読み込めてないだけの気がする
$(ProjectDir)/ShaderSource/Embossed.ps 配置とビルドアクションは間違ってないよね?
MatchCollectionって、なぜLinqが使えないんでしょうか。 MatchCollection mc = Regex.Matches("aa bb", @"(\w+)"); mc.Select(…); みたいなことができません。 IEnumerableを継承してるクラスなのでできるんじゃないかと予想したんですが。
IEnumerable<T>じゃないから
Cast<Match>()
教えてください、 List<myT> listAを編集するため、編集用dataGridViewに表示させるのですが、 編集を取り消す時(Undo)のために、前の状態はキープしつつ、 別のlistBにコピーしてBを編集し、リザルトOKならAに上書きしてセーブ ということを考えたのですが、listBを弄るとlistAも変わってしまいます。 AとBが独立したものとしてコピーを作るのはどうすればいいのでしょうか? List<myT> listA = new List<myT>(); List<myT> listB = new List<myT>(); dataGridView1.DataSource = listA; //表示用 foreach (myT item in listA) listB.Add(item); //コピー dataGridView2.DataSource = listB; //編集用
ListAが保持しているのは参照型なので、 >>listB.Add(item); はポインタの付け替えをやっているにすぎない。 で、どうにかしてitemをクローンする方法をさがしてListBに突っ込めば良いよ。
クローンっていっても浅いほうではなくて深いほうね。ディープコピーがひつようだー。
ありがとうございます。 シャローコピーとディープコピーかぁ・・・ 知らずに難しそうなところに首突っ込んでしまった? 勉強してきマース。
あ、ちなみにお伺いしたĩですが、 こういう編集用のダイアログを開いて、リザルトCancelのときのために、 編集用データテーブルを用意するって考え方は普通でしょうか? もっと簡単にキャンセルやUndoができるのでしょうか?
手はいくつかあるが、たとえは編集の手順をスタックしてって最後に全部適応とか。 でも、特に制約が無いみたいだから編集用バッファをとるというのも正道だと思うよ。
拡張メソッドで指定したクラスに対してだけインテリセンスが出てくるようにするにはどうすればいいですか?
すみません、スレ違いかもしれませんが質問お願いします。 現在WinServer2008R2 にてタスクスケジュールを組み、 C#アプリを動かそうとしているのですが、フォームが表示されません。 (タスクマネージャには存在するのですが) なのでLoadイベントもTimerTickも発生しません。 なにかよい手段はありませんでしょうか? ちなみにコンソールアプリにはしたくありません。。 宜しくお願いいたします。
571 :
570 :2011/04/22(金) 19:42:45.50
ちなみにC#アプリは今まで普通につかっていたもので 動作は問題ありません。
>>569 できないので諦めてくださいね
できないので諦めてくださいね
#Regionごとにテキストの背景に色をつけることはできませんか?
>>571 C#でフォーム表示するだけのプログラムをタスクに登録して試したけど普通に表示されるね
タスクのオプションで何かやってるかアプリの初期化動作でなんかやってるんでしょう
パス関係とかで
>>574 win7かServer2008ですか?
Windows7Ultimateです
>>576 えええええええええええええええっ!!!
なんでなんだろ???
??????です
何でってこっちが聞きたいわ
>>578 ははは。でも同様の情報がググっていくつかあるんですよ。
解決策は書いてありませんが(笑
>パス関係とかで あれっ? ファイルを読み込むだけでもだめですか?
581 :
sage :2011/04/22(金) 21:33:10.56
質問です。 visualStudio2005でwindowsMediaPlayerをフォームにはめ込みました。 しかし、再生しても「メディアを読み込んでます」→「準備完了」となり再生が始まりません。 なんででしょうか?? よろしくお願いします。
>581 あ、解決しました・・・。
583 :
デフォルトの名無しさん :2011/04/22(金) 21:43:38.84
>>581 記憶を頼りに答えると、名前は正確じゃないかも知れないがAutoPlayプロバティーをOnにしないと
読み込み完了でファイルは再生されない
再生するには別途Playメソッドを実行する必要があります
あ、記憶だけだからプロバティー名やメソッド名はちゃんと調べてね
584 :
デフォルトの名無しさん :2011/04/22(金) 23:01:33.45
コピペ君って馬鹿だな、まで読んだ。
Proberty
tab controlのページ表題が入る部分の幅って、 入れる文字列で調整するしかないんですかね?スペースとか使って。 幅ポイントで指定して、文字センタリングとかできないんですね?
WPFならテンプレートでどうにでもなるし、WinFormsなら普通にプロパティがあるはずだが?
CSV形式で保存したデータを読み込んで var a = new[] { new { X = 0, Y = 3 }, new { X = 1, Y = 4 }, new { X = 2, Y = 5 }, }; 上記のような形式のデータテーブルを作成したいです 読み込んだデータをジャグ配列に入れ、ジャグ配列の要素をひとつひとつ指定して newするのでは要素数が増えたときに対応できないので困っています
何がしたい そういう扱いするならどうやったって要素数増えたときに対応できねえよ
DataTable使っとけば
LINQの説明で使われていたんですが わざわざデータをこういった形式に変換することは通常ないということですか?
いや要素数が増えないから静的に型付けて X = 0, Y = 3 のように扱ってるんでしょ? 普通にそういう扱いはアリだが、どうせコード変えなきゃいけないんだから要素数が増えることを気にするのは無意味
594 :
593 :2011/04/23(土) 14:56:16.80
X, Yに加えてZが増えるのかと思ったけど、もしかして要素数って列数じゃなくて行数のことなのか? それならループ回して一行読むたびにコレクションに入れればいいだけだが
>>589 配列が面倒ならList<List<T>>で駄目なの?
ごめんなさい、行数のことでした
>>596 http://ufcpp.net/study/csharp/sp3_stdquery.html class Person {
public string Name { get; set; }
public int Age { get; set; }
}
class Program {
static void Main(string[] args) {
List<Person> People = new List<Person>{
new Person{ Name="taro", Age=20},
new Person{ Name="hanako", Age=30}
};
People = new List<Person>{ new Person { Name = "jiro", Age = 40 }};
}
}
同じ名前でnewしているので上書きされちゃうのですがループで追加できるんでしょうか?
なんでAddせんねん
おお・・・できました 後は多分何とかなると思います ありがとうございました
…
ファイルをドロップして他の受付可能なアプリケーションにドロップするにはどうすればいいんですか? たとえばエクスプローラーからデスクトップにファイルを移動させる時は何を移動させて、デスクトップは何を受け付けるようになってるんdねすか?
603 :
465 :2011/04/23(土) 20:27:58.37
簡易的には
>>602 のControl.DragDropにDataFormats.FileDropで作ったDataObject突っ込んでってことになるけど
マジでやるならIShellFolder経由でCOMのIDataObject取得する
その場合でもControl.DragDropは使えるが
こんにちは、誘導してほしいのですが、 自分のコードがスパゲッティ過ぎて泣けてくるんです。 どっかにそういう議論しているスレないですか?
何の議論だよw 信じられないくらい酷いコード書く人はいるが そういうこと気にする人は割とそこまで酷いコード書かない気がする
>>603 配置が間違ってる。
>>558 に書いたように
$(ProjectDir)/Embossed.ps じゃなくて
$(ProjectDir)/ShaderSource/Embossed.ps
ShaderSourceに配置しないといけない理由はEffectLibrary.cs見れば分かる。
609 :
デフォルトの名無しさん :2011/04/23(土) 21:54:05.15
>>605 C#の話でソースコードを晒せるなら
>>2 のサイトを使って
コード見てもらえばいいじゃん
610 :
605 :2011/04/23(土) 21:55:01.19
いや〜、 C#の流儀がまったくわからなくて、一応動作してるみたいなんだけどもう拡張は無理とか思うくらいスパゲッティなの。 まだプロトタイプなのに・・・。
>>610 C#の流儀つーかオブジェクト指向の流儀だろうw
あとはGUI周りにあわせた(縛られた?)書き方になる場合もあるけど
612 :
605 :2011/04/23(土) 21:57:07.06
リロード忘れた。Orz
>>608-609 誘導サンキュー。
そうだなー、コード自体は公開してもかまわないからちょっと準備する〜。
さらにりろー(略
>>611 それ、正解かも。
OOPの真似事はC++でやってたんだけど、new恐怖症だったのでそれが今きいてるのかなー。
ちょっと準備してくる〜。
614 :
605 :2011/04/23(土) 22:10:38.73
タグフィールドを持ってるクラスを作るなとジョシュア・ブロックが言ってた
そんなにおかしくはないと思う。このスレで見た質問者のコードの中では一番常識的な気が。 細かいことだけどDataはクラスの方がいい。きっとvector<T>と混同してるんだろうけど List<T>は参照型だからコピーしたら共有されちゃうよ。
617 :
616 :2011/04/23(土) 22:39:36.75
すまん寝惚けてるわ 後の2行は忘れて
>>615 レイヤーのなまえを保持しないといけない気がしたからTag変数作ったんだけど、
最終的にそれで問い合わせはしないつもりだったけどいつ方針転換するかわからないからそれは覚えておきます。
>>616 ほめられたようでうれしいが・・・。うむー。
やっぱdataはクラスのほうが良いよね。
ディープコピーは別に実装すればいいんだし。
気になるのは無駄にインスタンスメソッドになってるDrawとか
無意味にパブリックなインナークラスにしない 基本的に名前空間を使う
621 :
605 :2011/04/23(土) 22:55:34.77
>>618 も自分です。
>>619 なるほど、こういうのをstaticにするのか。
よく見たら、メンバ変数も使ってないし、なるほどね〜。
り、りろーど・・・。
>>620 実装がツリーになっていいかなー??と思ってたんだけど、そうでもないのかな・・・。
こういう場合って親クラスと同名のネームスペース定義しても大丈夫なのかな?
それともほかの何かかな??
623 :
605 :2011/04/23(土) 23:09:11.87
そういえば、皆さんは再利用って言葉の信憑性ってどんなもんですか? 自分は一応頭の隅にあって、いつも引っかかってるんですよ。 それを無視してちょっと小汚い実装もアリならもうちょっとミニマムになるとおもうんですけども・・・。
結構無理して書いてるから聞き流していいよ 内部クラスは基本的に外部クラスのプライベートメンバにアクセスする必要がある場合に使う それと外部クラスの中でのみ使用するクラス 現段階では特別な名前空間を与える必要はないと思う MakeDataがEVDSystemに定義されているけど、Dataクラスの方に書かれるべき
再利用というならEVDSystemに依存させたらダメだよ
再利用しなきゃいけなくなってからリファクタリングする
これは感想だけどSystemとかDataとか抽象的な名前が嫌だ
再利用なんて出来たらもうけものくらいの感覚。
ただ、再利用しない前提で再利用可能なプログラムを書くってのはやるかも。
構造化とかそういうのを意識して書いてるだけで、整理されてそのぶん早く書けるから。
‥‥で、標準工数の半分くらいで書いて、無駄に複雑すぎるって怒られる。w
教科書通り程度のこともしてないんだけどね。
>>614 のプログラム見たけど、特に気になる点はなかった。
変数関数の名前付けに違和感あったくらい。
強いて言えば関数単位で何やろうとしてるのかのコメントをさらっと書いてて欲しかった程度?
でもこれは本題とは関係ないし。
629 :
605 :2011/04/23(土) 23:30:30.28
>>624 ふむふむ、なるほど。えーっと、まず。structの使い方間違えてました!
で、データクラス(または構造体)は独立してもいいものなのか。ふーむ。
さっきアップしたの明らかに設計ミスなんでちと不味いですな〜。
>>625-626 そもそもそうですね。再利用を履き違えてたか。。。
>>627 それはうーん。すいません。Orz
>>628 やっぱ変数名おかしいですか・・・。考慮します。Orz
でも、確かに何か整理されてるようなきがしないでもないですね。そんな副次効果が!?
あー、そういえばコメント書いてないな最近・・・。気をつけます。
630 :
605 :2011/04/23(土) 23:33:25.17
さてさて、皆様色々ご意見ありがとう。 色々聞いてると、不味いところが出てきたのでスクラップ決定っぽいですね。 色々刺激が得られて面白かったし、滅茶苦茶勉強になりました。 そういう感じで今日は落ちますです。 皆様ありがと〜。
外部から内部の変数を読む時にプロパティにアクセスすると思うんだけれど 今時って、自動実装get;set;だけ用意して内部変数を用意しないのが普通になってきてるのでしょうか? 自分のことは内部変数で、外はプロパティでっていうのがセオリーでしょうか? 過去にVC++6時代の他人が書いたの眺めてるんだけど プロパティ用に用意したgetとsetの関数が大量にあって逆に見通しが悪い 今ならどうなんだろう?て思ってる、経験1ヶ月目のものぐさ新人です。 もうすでに動いてるものは触るな、言われたコトだけやってろいって先輩からは言われてるし まぁ、責任分担からしてそりゃ当然だとは思うんだけれど、新規に起こす部分については .net4の楽できるところはどんどん取り入れて見たいしなぁ。と。
どんどん取り入れる権限なんて与えれてんのけ
>>630 いろいろ書いてたらもう寝るようだが一応書き込んでおく
Dataに描画方法をenumで持たせるのではなく、
abstract class Shape { abstract Draw(Graphics g); }
class Polyline : Shape { ... }
class Polygon : Shape { ... }
みたいにするとOOP的に綺麗に纏まる
あと、細かいところでは
・timerのInvalidate()は無駄。というか、Invalidate()だけするのは無意味
・レイヤーの移動などの処理がイベントハンドラに直接書いてあるのが微妙
→ ちゃんとしたコレクションクラスを作ってMoveUp()とかを用意する
・メニューは分ける意味がないのでメインウィンドウにまとめる
→ データごとのウィンドウにメニューを付けるとかなら別だけど、今回のはそうではないので
・627に近いけど(publicな)クラスなどはもう少し意味のある名前を付ける。省略も駄目
→ 描画方法とかの意味ならMethodじゃなくてDrawingMethodみたいにする
→ FillPoly見たいに省略せずFillPolygonにする
俺は外部から見えなければプロパティにせんわ
まずその会社は退職しとけ。
605さんのパソコンのログイン名がYakiyotiさんだとばれたりしないように 個人情報消してプロジェクトソース公開する方法って無いのかなぁ
誰も触れなかったのに
>>631 get/set 両方使うときは自動実装プロパティ一択。
明示的実装するのは、単なる代入以外のこと(PropertyChanged イベント起こすとか)するときだけ。
もしくは、バックフィールドをreadonlyにして、getのみにしてimmutableにするとかはよくやる。
639 :
デフォルトの名無しさん :2011/04/24(日) 00:09:13.53
>>636 プロジェクトを作るときにd:\hoge\hogehoge
とか別の場所にすれば確か埋もれないはず
というかあの名前は何かしらで漏れることがあるので
適当な名前にしておくのがベスト
デバッグ情報をnoneにしないと埋め込まれるんじゃなかったっけ
adminだから問題無い
642 :
デフォルトの名無しさん :2011/04/24(日) 00:29:29.19
>>638 自動実装使うくらいなら、個人的にはパブリックフィールドで良いと思うんだけどな
setをプライベート等にして、外部から書き込めないようにするとか
オーバーライドするとか理由が有れば別だけど、何となく使っている場合が多い
個人用設定ファイルやデバッグ情報入りバイナリの他に、AssemblyInfo.csなんてのも まあ、605が64bit OSを使っている可能性が高い、なんて情報はどうでもいいが いずれにしても、ユーザー名はownerかuser、作業パスもC:\workなどのありふれた名前にしている俺には関係ないな
>>642 実装が面倒くさかった時期ならともかく、自動実装で簡単に出来る昨今なのだから
パブリックフィールドにするぐらいならプロパティにすべきだね。
実用的な理由としては、リフレクションの都合が大きい。
ライブラリだったりフレームワークがプロパティ経由でしかアクセス出来ない場合があるから。
フィールドは使わない方向性になってる
全部グローバル
648 :
605 :2011/04/24(日) 00:41:27.63
605です〜。
>>633 逆の発想ですな〜。
どうせ書き直し決定なので描画オブジェクトの線も考えて見ます。
で、フォームの更新系はかなり微妙ですね。
メインウインドウをキャンバスにしたのも失策だったと思います。
イベントハンドラに書くのは良くないのか。ふむー。
あと、やっぱ命名方法はみんな引っかかるんだなぁ・・・。Orz
って感じでご意見ありがとうです。参考にしますです。
WPFなんてプロパティにしないとXAMLからアクセス出来ないし。
staticフィールドは行ける気がする>XAML
>>642 public フィールドはダメだろ。
あとから明示的実装足したい時に困る。
publicフィールドから後になってプロパティが生えることは稀によくある
必要になってからプロパティにしたらいいんじゃないの どうせクライアント側から見たときは同じに見えるんだし
構造体の扱い取ってみてもぜんぜん同じじゃねえw
構造体の話なんてしてないが
>>655 お前はフィールドとプロパティの違いを語るには早すぎるな…。
いや同じじゃないから
そういえば何でXAMLはプロパティじゃないと駄目なんかな。
依存関係プロパティはフィールドで代替できないから
INotifyPropertyChangedが感知しないとこで好き勝手に書き換えられるのは困るよね。
661 :
デフォルトの名無しさん :2011/04/24(日) 01:08:18.66
川俣さんは継承とかアクセッサとかデザインパターンとか オブジェクト指向至上主義者の理屈をばっさり切り捨ててくれて気持ちいい
川俣おつ
>>653 単一プロジェクト内ならね<後からプロパティにして問題ない。
利用側で再コンパイルが必要になるから、チームまたいだりするとまずい。
プロのバディ ちょっと言ってみたかった
ぷw
ウェブブラウザのテキストボックスを操作したいと思って ウェブブラウザコントールからinnertextで文字を送り込むことは成功したのですが その文字を取り込むことができません。なぜでしょうか forms[0].InnerText = ”abc”; //文字入力(成功) label1.Text = forms[0].InnerText;//文字取得失敗
プロパティとフィールド、上位互換として実装できないものだったのか、と・・・ 差別化しなきゃならないのって、速度的な問題とか?
絶望した!汎用Swap関数が無いことに絶望した!! 無いとないで意外と不便だな。
値の入れ替えなんて何年に一度必用になるんだ
671 :
605 :2011/04/24(日) 12:16:39.38
お い つ い た!!!!! 寝ようと思って床についても設計のこと考えてると寝れなかった605でございます。 一夜漬けで考えた結果、シングルトンは個人的には大嫌いなのだけど、 使わないといけない状況だと思ったので使ったら、コード量が半分位になりました。 とりあえず拡張は残したままで前バージョンと同じくらいの進度まできました。 いやー、刺激を受けるとできないことができるようになってたのしいな〜。 しかしホント寝ないと死んでしまう。 神様、次見たときこれがスパゲッティに変わってるなんて事はないですよね?ね? と死亡フラグ立てておちまーす。 シングルトンは以下だよ。いろんな型をシングルインスタンスで取り回しというか引きずり回しというかができるよ。 言語仕様的に大丈夫かはしらないけど・・・。 class Singleton<T> where T : new() { private static T Instance = new T(); private Singleton() { } public static T Get() { return Instance; } }
672 :
デフォルトの名無しさん :2011/04/24(日) 12:23:38.31
・new()制約とシングルトンってのが軽く矛盾してる ・ジェネリック型のstaticメンバはFxCopの警告が出たはず ・.NET的にはpublic static T Default { get{ return Instance; } }のほうが一般的
なんかずいぶん前にこんなの作って廃棄した覚えがする
GlobalVariableHolder<T>と名付けようぜ
>>667 以前2ch専ブラを作って遊んでた時にナビゲート済みの
htmlドキュメントにhtmlタグを差し込んだ際にhtmlの
InnerTextを取得した際に追加で差し込んだ分は
入ってなかったことがあったのでそのままで取得できないかも
おちますです。またこんど〜。
>>672 C++のテンプレートを独自C#解釈にしてそのまま持ってきた感じだから、やっぱもっとうえがあるんだねぇ。。。
っていうか、VC#2010なんだけど、警告の類は出てないよ。
>>673 俺は車輪の再発明しないと覚えられない人なので、
このみちーはーいーつかーき(ry
>>674 なんかものっすごく、お、大きいです。っていうかごっつくなった。。。
ま〜確かにグローバル変数なんですよね。シングルトンって。
C#もいろんな子が来るようになったな
678 :
デフォルトの名無しさん :2011/04/24(日) 12:44:48.05
推論できない型引数は使うなというのは知ってたけどstaticがダメなのは知らなかった staticだからダメというより、メンバ呼び出しの際に型引数を明示的に指定させてはいけないってことなのか MEFとかこのルール無視しまくってるけど
>メンバ呼び出しの際に型引数を明示的に指定させてはいけない Enumerable.Castェ・・・ 地震だぁああああああああああああああああああ
おはおー。
>>678 expressのライトユーザーには厳しい話ですな。
しかし、上に書いてあるシングルトンは呼び出すときに型指定するから、Tは一意に求まるのに何でダメなんだろう。
個人的には、インスタンスがコンパイル単位を超えるかどうかが結構ドキドキだったんだけど、大丈夫だったし。
>>667 textBox1.Text = doc.Forms[0].InnerHtml;
として調べてみると、
名前:<INPUT value=abc name=NAME>
と展開されてるからじゃないかなぁ。
INPUTのvalue属性で値をとる必要がある。
>>683 Expressならツール→外部ツール→追加
タイトル
FxCopなど
コマンド
C:\Program Files\Microsoft Fxcop 10.0\FxCopCmd.exe
引数
/c /f:$(TargetPath) /r:"C:\Program Files\Microsoft FxCop 10.0\Rules"
作業ディレクトリ
"C:\Program Files\Microsoft FxCop 10.0"
オプション
出力ウィンドウを使用する
で使えば十分じゃないかな
>>685 およ、使えるのか。余裕あったら試してみる〜。
およって何?
ぐっすんおよよの略
Hit&Blowをマルチスレッド化しようと思ってますが、 Parallel.Forって4.0じゃないと使えないんですか?
CTPは3.5で動いたかな… 意味ないけど
.NETの中にはないけどMatrix Libraryとかで検索すれば出てくるから自作の必要性はないでしょ
したいなら止めないけどね
DirectXの範疇じゃね?
RかOctaveかScilabかMaximaつかったら? .NETならF#でやるのが楽そうな気もする。気になってるけどまだやってないんだけ。。。
行列なんて簡単じゃん
つ ILNumerics.Net
>>695 ライブラリだけ欲しいのに、言語とかUIまで抱き合わせだからねぇ、その辺りのツールは。
>>698 の Sho は結構いいよ。
Matlab 的感覚で IronPython 上で対話的コマンドライン操作もできるし、
ライブラリだけを C# から参照ってのも可能。
>>696 今の高校普通科って行列計算の仕方なんて教わらないまま卒業すんだぜ?
7年前はまだ3Cで教えてたと思うけどな
702 :
デフォルトの名無しさん :2011/04/25(月) 00:13:56.84
Stringからintへの変換で、TryParseを使った場合、 Stringが数値でないと0に変換されてしまいますが、そうではなく そのままintへ変換出来る方法はないでしょうか?
文字コードが欲しいの?
またアホが根拠薄弱なゆとり批判を初めそうだから先手打っとくけど、 高校数学の行列なんてもともと2次の正方行列だけだけどね。 あれを行列計算(馬鹿っぽい表現だ)って言ってよいものか
またお前か。
理系コースなら数Cでやるから心配しなくていい。
>>704 そうですか?当時は、二次正方行列とはいえ、写像における不動点・不動直線の概念や、対角化・固有値、固有ベクトルまでしていたような記憶があります。
ハミルトン=ケイリーの定理にはお世話になったなあ
>>707 それどう考えても大学1年の教養のレベルじゃん
どういう高校だ?
ようやくまともな流れになってたのに 板違いの話振ってくる荒らしに釣られるなよ。
つまりそれが奴だということだね。
713 :
667 :2011/04/25(月) 09:20:50.29
>>675 ,680,684
使い方が間違ってるのかと思ったけれど、そうでもないみたいですね。
ありがとうございました
>>709 >707じゃないけど、俺も対角化、固有値・固有ベクトルは高校でやったよ
別に普通の学校の理系。
どうでもええがな
プログラム初心者です。教えてください。 コマンドラインでファイル名を指定するコンソールアプリなんですが、 ファイル名はMain(string[] args)のargsに入るのですよね? で、これをコマンドラインからではなく、初めからプログラムの中に ファイルを指定するよう変更したいのですが、 args=ファイル名;はだめでした。@"ファイル名"もだめでした。 どう書けばいいのでしょうか?
パスをきちんと指定してる? 何するのかはわからんけどファイル名だけじゃだめなんじゃないか
ごめんちょっとなに言ってるかわかんない
app.configに書けばいい
>>716 よく分からんが、こういうことか?
args = new string[] { "ファイル名"};
args = new string[]{ "ファイル" }; デバッグできねーってんだろ そのくらいのエスパーはしてやれ
ありがとうございます!
これはいいエスパー
PKデバッグ
WMIのWin32_Processクラスを使って、プロセスが終了したかどうかを知るのはどうすればいいですか? 本来ならProcessクラスのHasExited辺りで済ませたいところですが、 アクセスが拒否される(Win32Exception)とのことで一部のプロセスのを取得できません。 WMIを使えばすべてのプロセス情報を得られます。
うわあああああああ!!!!!!!!wwwwwww
>>716 コンソールアプリのコマンドラインて、配列で受けるんだな。
作ったこと無いんで初めて知った。
そういえばDOS時代、いくつかのオプションスイッチを/とかで区切って入れてたな。
そいつを自動で配列の要素に割り振ってくれるのか。
ファイル名渡すだけなら配列にする必要ないもんな。
ブラウザコントロールだってWebBrowserクラスにGetElementsByNameがあるわけじゃないだろ
VC#2010Expressで作ったソフトを公開すると、僕のパソコンのユーザー名がソフトに含まれてバレる可能性ってありますか?
場合によっては
デバッグ情報をnoneにすればおk
734 :
デフォルトの名無しさん :2011/04/26(火) 15:02:43.82
C#ってstaticなデストラクタってないのですか?
無いよ デストラクタなんて呼ばれる保証のない保険だし
デストラクタが保険ってマジで言ってんのかよ ガベージコレクションを実現すんのにデストラクタの仕組みは必要だろ それに呼ばれる保証が無いってのはどういうことだよ いつ呼ばれるかは保証されていないだろうがSuppressFinalizeでもしていなきゃ 基本的にいつか呼び出されるだろ
CriticalFinalizerObjectの派生クラス以外は確実に呼び出される保証は無かった気が
デストラクタって言葉だけ聞くと知そういう錯覚するわな…。
デストラクタでデスマーチ
最後の砦〜♪
実際、ファイナライザが呼び出されないままプロセスが終わるような状況では C++のデストラクタでも呼ばれない可能性が高い
GC走れる状況なのが前提だからね。
finallyとかusingも確実に呼び出されるとは限らないぞ ファイナライザが呼び出される保障と同程度だ ただし、finallyやusingはすぐに呼び出されるから、ファイナライザに比べて 呼び出されないままになる確率はずっと低いけど
usingって何よ IDisposable.Dispose()ちゃうんかい
突然usingとfinallyの話になったな
CriticalFinalizerObjectって サーバーなんかで複数のAppDomainをCLRにロードする場合に 大本のCLRが生きてる限りはAppDomainが死亡するときに ファイナライザが呼び出されないままになることがない保障という認識でいいの?
>>737 ちょっと気になるんだけどMSDNかどっかで紹介されてた?
750 :
465 :2011/04/26(火) 23:10:29.85
一次元配列から条件に合った要素を抽出して別の一次元配列を作るときに、 ・List<T> に追加していって IEnumerable<T> で返す ・yield return で列挙していく ではどっちが早いですか? 要素数は元の要素数が1000個くらい、抽出された結果が800個くらいです。
>>751 つ 実験コード書いてベンチする
こういう実測経験も大事よ
すぐに出来ることを何で試さないの?
1000個なんかどうせ一瞬だからどうでもいい 絶対にそんな処理はボトルネックにならない
すいません、今使ってるPCにVS入ってないもので… ありがとうございます。今度実測してみます。
>>756 リテラルを考慮して文字列を分割する関数を考えてたんでLinq使うと逆にめんどいんです。
>>758 Splitしたいってこと??Regexとか??
"xxxxxxxx,yyyyyy,zzz",qwerty,uiop@[,"aaaa,b,c,d,e,f", "123456", .... ↓ "xxxxxxxx,yyyyyy,zzz" qwerty uiop@[ "aaaa,b,c,d,e,f" ___"123456" のように、文字列を引用符で囲まれた部分の中では分割しないようにして分割したいと考えてました。 文字列の先頭から走査して、引用符外にある分割用の文字が来たらそれまでの文字列を順次取り出そうと思っていたのですが、 List<string>に追加していくのとyield returnするのではパフォーマンスに差があるのかと思ったのでお聞きした次第です(そもそも この方法自体が遅いような気もしますが・・・) お騒がせしました。
気にするところが変だよ 文字の分割とかの方がずっと重いはずなので、弄るんだったらそっちを弄らないと 全く効果はないよ
Regexの範疇のような気がするけど、まぁ、いいか。余計なお節介して申し訳ない。
763 :
762 :2011/04/27(水) 01:06:33.19
文字列を一回分割するたびに分割前の文字列と同じ分だけ新しい文字列が作られるんだから 明らかにそっちがボトルネック 一回測ってみて全く変わらないのを実感すればいいんじゃない
これがいわゆる97%
C#でDirectShowに代わるのって何がある?
メディアプレイヤーコントロールとかどうよ。
comコントロールにチェック入れたんだけどツールボックスに出てこないんだけどなんで? 主導で参照追加したいんだけどwpm.dllt追加したらWPMLIBが追加された あとwmplib.dllはどこにあるの?
realplayerの最新版を利用してrm動画を流したいんですがactivexコンポーネントを利用しても音声しか再生されません 昔は動画も取得できたのですが現在は動画の再生方法がよくわかりません 対策でもされたのでしょうか?
770 :
728 :2011/04/27(水) 12:03:03.18
>>729 ,730確かにちょっと難しいですね。ありがとうございました。
2ヶ月分のカレンダーを表示して、連続していない複数の日付けを選択したいのですが WPFでは、CalenderのSelectionModeをMultipleRageに指定できましたが、 2ヶ月分を表示させる良い方法がわかりません。 2つ並べてイベントで連動させるとかになるのでしょうか。 Formでは、monthCalenderでCalenderDimensionsで複数月を指定できましたが、 MultipleRangeの機能がありません。
カスタムコントロールとユーザーコントロールの違いって何?
>>774 まじかユーザーコントロールにラベル全張りして拡張を作ってしまった
作りなおしたほうがいい?
776 :
デフォルトの名無しさん :2011/04/27(水) 16:59:21.37
>>775 ラベルのカスタムコントロールなら、何もコーディングしなくてもTextやFont等のプロバティーがそのまま使える
全貼りなら作り直した方が後々楽になる事が多い
VC#2010EEのデザイナがほぼ100%の再現性で落ちるようになってしまった。 凝ったことはまったくやってないんだが。まいったなぁー。
参れ
他のクラスに変数を渡す場合なんだけど 元のクラスで変数が変更されたら渡された先の変数も連動するようにするにはどうすればいい?
元のクラスを渡す インターフェースを渡す イベントを介して渡す ゲッターデリゲートを渡す 好きなのでどうぞ
>>元のクラスを渡す すげー頭いいな 使う変数一つずつ全部渡してた
一番頭の悪い方法だけどな
どうでもいいけどグーグルで#で検索すると#が無視されるのはなんなの?
C#は無視されないよ 「C」と「C#」で検索結果違うだろう?
C#の#は第一級の扱いを受けてるからな
C++とかも
googleは実質全てのキーワードを""で括らないと使い物にならないアホ仕様が 昔からずっと気に入らない。 日本語版だけでも分かち書きしない限り""で括ったのと同じ扱いにすりゃいいのに。 あと最近は設定でオフに出来ないプレビューが糞過ぎる。 googleもだんだんMSみたいな体質になってきてるな。
あれ? つい最近までC#でググルとCの記事しか出てこなかったんだだがな。 ""でくくっても結果は同じだったと記憶している。 唐ニか∈とかは今でも無視されるから、 最近になって特定の記号は無視しないようにしたのかな?
少なくとも3年前に検索した時は出てたぞ タイムマシンで過去から来たのか?
つい最近って…… Google trendsによると遅くとも2004年には有効だったのだが
未確認飛行Cの2002年6月の記事に「C# 入門」で検索してきてる人が多いと記述がある 2002年の@ITの会議室にも「Convert C#」でググるよう薦める書き込みがある それ以前は知らん
画面のサイズ変更と位置を同時にやりたい時ってサイズ変更と位置どっちを先にやっても画面がちらつくんだけど どうすればいいと思う?一度hiddenにしてもちらつく 酔ってきた・・・
プライドが邪魔して知らなかったとは言えない
>>789-792 C# と C の検索結果が同じなんて、それこそ2000年にC#が発表された後、ほんの数か月だけだったと思う。
Googleの話はもういいよ
VSの入力補助で、なんでメソッドの()がついてくれないですか
>>797 Method と Method() で意味が違って、前者使いたい場合もあるしね。
window mobileでC#が動く日ってくる?
800 :
デフォルトの名無しさん :2011/04/28(木) 00:09:21.36
>>798 なるほど、ありがとうございます
設定で変えられないもんですかね
また質問なんですが、WindowsFormのDataGridViewに、下のような選択肢を持つコンボボックスカラムを追加しました
1, 佐藤
2, 山田
ValueMemberが数字、DisplayMemberが名前となるよう設定しました
選択してる時はDisplayMemberが表示されるのですが、値が確定して次のセルに移動するとValueMemberが表示されてしまいます。
何が原因かお分かりでしたら教えて頂けると助かります。
Visual C#でProgram.csからForm1やForm2にあるテキストボックスや変数に アクセスするにはどうすればいいんですか?
Run前に参照したらいいんじゃないの Form1 frm = new Form1(); //frmへ何かする Application.Run(frm);
805 :
803 :2011/04/28(木) 01:41:35.25
>>804 すいません大事なことを書き忘れていました
今Form1.csとForm2.csとProgram.csがあるんですが
Form2はForm1からnew Form2で呼び出しているんです
あともう一つ質問なんですが、Visual C#で右にあるcsファイルは最初一つに繋がっているんですか?
それとも完全に別々のファイルになってるんですか?
>>803 >Program.csからForm1やForm2にあるテキストボックスや変数に
いまいち何をやりたいのかわからん
>あともう一つ質問なんですが、Visual C#で右にあるcsファイルは最初一つに繋がっているんですか?
>それとも完全に別々のファイルになってるんですか?
別だよ
807 :
デフォルトの名無しさん :2011/04/28(木) 02:04:16.56
>>805 program.csは、Form1を起動するために使う物で、通常初心者はここにプログラムを書くことはありません
Form1かForm2のクラスに書くか、新たなクラスを書いてプログラムします
808 :
803 :2011/04/28(木) 02:05:30.44
>>806 Form2のTextbox1の内容をProgram.csのT1という変数に代入したいんです
あといまいちForm1.cs、Form2.csとProgram.csの構造がわかんないです・・・
Program.csの中をみれば下記のようなコードがあると思うんだけど Form1 frm = new Form1(); Application.Run(frm); プログラムを実行するとWinFormアプリの場合は Program.csが実行されてその中でForm1のインスタンスを作って Application.RunでForm1を呼び出してる その後Form1のコンストラクタが呼ばれてForm1のIDEがいじる部分を分離した Form1.Designer.cs中のコードが呼ばれてIDE上で貼り付けた部品とかの 初期化が行われると その後はLoadイベントとかを登録しておけば呼び出されて自分の書いたコードなど へと処理が続くと ちなみにForm2ってプロジェクトに追加しただけだとProgram.csは一つしかないよね?
自動生成されたProgram.csの中に「アプリケーションのメイン エントリ ポイントです」って書いてあるよね これの意味を自力で理解するまでProgram.csに触るな
ああ、
>>809 の
Form1 frm = new Form1();
Application.Run(frm);
この部分は訂正
実際はこうだな
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// アプリケーションのメイン エントリ ポイントです。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
WinFormはここから始まる
テキストボックスがprivateで見れないって話じゃないのかな
どのスレッドが終了しないで残ってるのかわからなくなりました どうすれば追跡できますか?
作った時に覚えておけよ
>>813 スレッドを終了させるときにスレッド自身にログを吐き出すようにさせればどう?
>>812 それ以前にForm2のインスタンスへの参照が取れてない気がするが
>>808 Form2のtextBox1の宣言をpublicに変更する
Program.csにForm2型のパブリック変数(たとえばf)を定義する
Form1.csでProgram.f=new Form2();でForm2のインスタンス生成する
これで、Program.cs内で
T1=f.textBox1.Text; とかできるようになる はず
ただ、こういう方法はプログラムの設計としてよろしくない
まあ、動けば良いというレベル
Form2からForm1にアクセスしたいはもはやテンプレレベル
マルチコア、マルチスレッドの場合ってスレッド複数作った時変数の書き込みと読み込みが別ならまだロック不要?
そんなの状況によるだろ
作ったって? new Threadの時? Thread.Startの時? 別って何が? 書き込みスレッドと読み込みスレッドが? ステートメントが?
状況によるだろってのは int i = 0; new Thread(() => { while (true)Console.WriteLine(i); }).Start(); new Thread(() => { while (true)i++; }).Start(); こんなんだったらロックなんて全くいらねーわけよ。 不要かどうかじゃなく必要だからやるんだぞ。
>>823 書き込みが1スレッドだけならロック要らない。
++ は実際には load, add, store の3命令だけど、
この間の中途半端な状態を WriteLine されても特に困らないと思うし。
int (というか、4バイト以下のデータ)の場合、
add が中途半端な状態(下位バイトだけ書き換わってるとか)になることはないのは保証されてる。
時代はシングルスレッド
>>822 必要かどうかって意図したデータの読み書きが必要な時ロック使うってこと?
たとえば複数コアでほんとに同時に同じ変数に書き込みがあってデッドロックになるとかいう話じゃないの?
変数に書き込む時に1ビットずつ書き込んでてその途中のビットまで書き込んでるコアの処理中に他のコアで読みこんだらでたらめな数値になるとかいうのはないの?
( ゚д゚)、ペッ
WindowsForm上に配置した既存のコントロールを、カスタムコントロールに置き換える簡単な方法はありますか? designer.csで宣言してるクラス名を変えれば動くと思いますが、このファイルを編集するのはちょっと抵抗があるので
バックアップ取ってからやってみればいいじゃない
高度な話のなかすまないが 文字列ないにダブルクォーテーションが含まれる場合どうやればいいんですか text = "あい"うえ"さ"; あいまでが認識されてエラーになってしまうんです
エスケープシーケンス \"
836 :
832 :2011/04/28(木) 15:44:14.34
なるほど。ファイルパスを指定するときに@をつけないとエラーがでるのはそのためなんですね ありがとうございました
コードを張るより説明したほうが早いと思うんだけど スレッド2つあってどちらも延々とループ 片方はひたすらマウス座標書き込み 片方はひたすら他方のマウス座標格納変数読み込み どっちが先かとかはどうでもいいんだけど読み込んだ時に必ず座標として認識する値になってるのかどうかしりたい
ググレ
例えばPoint.XとPointYの2つの変数にMouseGetPositionは入れてるからXだけ書き込んで そこで読み込むとXはXは新しい座標、Yは古い座標だと困る Point変数に対してはX,Yともに古い座標か新しい座標である保証はある?
Pointの実装次第だがまあ普通は保証されない むしろ何故保証されてると思うのか
>>838 二つのスレッドにする意味がわからんが
片方のスレッドでマウスの座標を「書き込む」というトリガーがあるんだし
そのとき別スレッドに通知すればいいだけちゃうの?
それかデリゲートを使って渡してやるとか
>>830-831 やってみます
VisualStudioで、データソース欄からDataGridViewをフォームに配置した際に、自動で定義されるカラムをカスタマイズしたいのですが、
データソース欄のテーブルを展開>カラム名のコンボボックスからカスタマイズを選択>関連付けられたコントロールに自作のカスタムコントロールを追加して、
このカスタムコントロールを適用しましたが、うまく反映されません
カスタムコントロールはテキストボックスで、テストとしてBackColorを赤、TextChangeイベントでForeColorをWhiteに変更するように記述しましたが、
DataGridView上では普通のテキストボックスになってしまいました
データソースからDataGridViewではなく、詳細を選択してフォームに配置した場合は、きちんとカスタムテキストボックスが配置されました
DataGridViewに反映されるにはどうしたらいいでしょうか
DataGridViewTextBoxColumnを継承したクラスのオブジェクトが自動で生成されるような設定方法があるのでしょうか
そうだったのか壮大に勘違いしてた
>>824 それってaddが内部でロックしてあるからってこと?
自分で使う変数の書き換えはintであっても書き換え中に読み込むとおかしくなるってこと?
例えば
11111111
00000000
この2つを繰り返し入れてる場合この2つの数値のどっちかでなければいけないのに読み込むタイミングによっては
11110000
という数値を取得する場合はある?
もしそうならマルチコアの時は全部ロック使わなきゃいけない気がしてきたんだけど
プログラミングの適性を計るテストとかある?
>>844 >>844 > そうだったのか壮大に勘違いしてた
>
>
>>824 > それってaddが内部でロックしてあるからってこと?
ロックかどうかなんて関係無い
そういう仕様だと理解しろ
> 自分で使う変数の書き換えはintであっても書き換え中に読み込むとおかしくなるってこと?
int型以下の大きさなら書き換え中の値が読まれたりしないと言ったばかりだろ
話聞いてんのか
> 例えば
> 11111111
> 00000000
> この2つを繰り返し入れてる場合この2つの数値のどっちかでなければいけないのに読み込むタイミングによっては
> 11110000
> という数値を取得する場合はある?
ねえっつてんだろボケ
> もしそうならマルチコアの時は全部ロック使わなきゃいけない気がしてきたんだけど
もう死ね
全部心行くまでロックしまくれ
動かないDVD-RWWWwww
まじかdoubleからはクラス内変数でなくても数値がおかしくなるのか スレッド作りまくってしまったもうだめだ
始めから「いかなる状況でもロックしろ」と言えば良かったのよ。 それが一番安心(≠安全)でしょ?
そもそも話聞いてるとスレッド使うような場面じゃないのよね。 その程度の認識で手を出すなって。
確かに全部DoEventでなんとかなってたけどもう癖だね まずスレッド作るみたいな
◆QZaw55cn4c
>>844 .NET FrameworkのILの「仕様です」としか言えず。
4バイト以下の演算、ロード、ストアはアトミックってことになってる。
例えば、x86系CPUだと、ILのAddはマシン語の加算命令1命令にコンパイルされる。
1命令だからさすがに中途半端な状態でコンテキストスイッチ起きたりはしない。
(ロードもストアも同様)
もしたとえば、加算命令がアトミックじゃないCPUに.NETを移植するなら、
加算命令がアトミックになるようなロックなりなんなりの実装を足さなきゃいけないんじゃないかな。
この仕様があるんで、16ビットCPU上で.NET動かすのは現実的じゃないかも。
>>848 あっ、たぶん、8バイトデータもだ。
CPU依存でいいなら断言できるんだけど。
現CLRの実装はdoubleの読み書き/加減乗除アトミック。
32ビットCPUでも、doubleがアトミックに操作されるようにできるんだけど、
そうなるようにJIT実装しろってのは仕様になってたかも。
C#の仕様って言えるんだろうか C#の仕様は別に中間言語吐けって言ってないよね CLRの仕様と言ったほうが正しい?
>>855 そう、CLRの仕様。
仕様の部分はCLRじゃなてCLItって名前だけど(CLRはそれのMS固有実装)。
CLItなんて聞いたことがない
4バイトまでのプリミティブ型の読み書きがアトミックなのはC#の言語仕様だぞ
その話もう終わってんだけど
ツールボックスのコンポーネントからフォームにSerialPortを投げ込むと private System.IO.Ports.SerialPort serialPort1; とdesigner.csに自動で追加されてる状況で質問です。 form1に string[] ports = serialPort1.GetPortNames(); と書いても通りません。何故でしょうか? インスタンス参照でメンバー 'System.IO.Ports.SerialPort.GetPortNames()' にアクセスできません。 代わりに型名を使用してください。 どなたか日本語で教えてください。
インスタンス参照だから 実体に対して呼んでるから 静的関数は型に対して呼ぶ ちなみにVBはインスタンスに対して静的関数を呼べる
862 :
デフォルトの名無しさん :2011/04/28(木) 22:45:24.12
具体的には ×string[] ports = serialPort1.GetPortNames(); ○string[] ports =SerialPort.GetPortNames(); ですね
F1 押して CS0176 の解説見ればちゃんと例示されてるんだけどなぁ
「日本語で」だから、コードの例示はむしろダメだろ
クリックに拒絶反応起こす90年代のおっさんの様だ
866 :
デフォルトの名無しさん :2011/04/28(木) 23:40:36.86
>代わりに型名を使用してください。 型名というのは極めて正確な表現ではあるが、不正確であっても「クラス名」とした方が通じやすいよな まあエラーメッセージの宿命ではあるが
コントロールクラスを作って自分で使うときにプロパティの値が変更されたらその値を使って再描画するようにするにはどうすればいいですか? この変数の値が変わったら報告するように監視する仕組みは用意されてないんでしょうか
INotifyPropertyChanged
>>867 頼むから読めば分かる日本語を書いてくれよ。
意味不明すぎる。
>>867 データバインディングのことを言ってる?
ESPのくせになさけねえな
TextBox.BorderStyleのFixedSingleみたいな枠線をComboBoxやDateTimePickerに設定できますか?
VC#のデザイナが死にまくって困っていたが、思い立ってWEBインストーラ起動して再DL(160mb位)したら直ったようだ。 なんだったんだ・・・。
ComboBoxはウィンドウハンドルを取得すればテキスト部分のスタイルを弄れた気がするなあ DateTimePickerは知らん
875 :
デフォルトの名無しさん :2011/04/29(金) 02:21:34.59
>>873 原因不明のオチは俺も経験してる
過去にスレに書き込んだらお前が変なプロジェクト作ってるからだと一喝されたw
>>875 あらま。。。 ま、今回は直ってよかったさ。
言ったの俺かもしれん
878 :
デフォルトの名無しさん :2011/04/29(金) 16:25:24.19
親フォーム側 private void OptionsBtn_Click(object sender, EventArgs e) { using (OptionsForm optionsForm = new OptionsForm()) { Hide(); optionsForm.ShowDialog(); Show(); } } 子フォーム側 private void btnOK_Click(object sender, EventArgs e) { Properties.Settings.Default.PlayerName = playerNameTextBox.Text; Properties.Settings.Default.Save(); this.Close(); } 親側で戻り値DialogResult.OKが来るのを見てから処理するやり方ばっかりしかしたこと無かったんですけど こんなふうに、親は投げっぱなし、子供のコトは子供が閉めるってやり方が、今後はいいのかな?
879 :
デフォルトの名無しさん :2011/04/29(金) 16:28:29.89
Window1でthis.Activate()をしてもアクティブにならないので while(true){ DoEvents(); this.Activate(); } としたらアクティブになりました どうしてですか? しかし今度はアクティブから抜け出せなくなりました なぜかというとアクティブになったのかどうかがActivetedで判断できないので抜けられないんです。
WPFは詳しくないのだけどWindow.IsActiveってありませんでしたっけ
SetForgroundWindowの仕様を見るに、MSはフォーカス奪う行為がさぞかし嫌いらしい。
Labelを継承したクラスを作成し、コンストラクタでAutoSizeをfalseに設定しているのですが、 この自作Labelをフォームに配置するとAutoSizeがtrueになっています。 同様に、DateTimePickerを継承したクラスでfont sizeを10に設定しているのですが、 フォームに配置すると9.75になってしまいます。 どうすれば設定した値になりますでしょうか。
>>883 WPFでDoEventsもマルチスレッドも使わないでどうやってアプリ作るの?
あれはDefaultValue属性で指定してた気がする… うろ覚え
ありがとうございますアクティブになりました int me = System.Threading.Thread.CurrentThread.ManagedThreadId ではアクティブにならなかったので int me = AppDomain.GetCurrentThreadId() を使ったんですが、使ってはいけないと言われますなぜですか? ヘルプを見るとManagedThreadIdを使えと書いてあるんですが使うとアクティブになりませんどうすればいんでしょうか
>>886 DoEventsがマルチスレッドだという認識を改めた方がいい
DoEventsはメッセージポンプを処理するだけだ
別のスレッドを起動してるわけじゃない
そもそもの問題として、なぜthis.Activateが動かないかを考える必要がある
this.Activateは内部でウィンドウメッセージを送っているが、
this.Activateを呼び出したイベントが処理を完了するまで次のイベントは処理できない
これは平行動作しているわけではないのだから当たり前だ
DoEventsなんて一度も使ったことないや。 時間がかかるならスレッドプールに投げておしまい。
>>886 ロックであれこれ考えずにスレッドを使えるBackgroundWorkerオススメ
マジオススメ
どうしてもわからない アクティブにならない int i = 0; while( i == 10000 ) { DispatcherHelper.DoEvents(); this.Activate(); i++; } アクティブになる while( true ) { DispatcherHelper.DoEvents(); this.Activate(); } この違いはなに?
>>892 whileの中がboolに限定されてもこういうのは防げないな…
int i = 0; while( i == 10000 ) ( ゚д゚)
間違えた ごく稀にアクティブになる int i = 0; while( i < 10 ) { DispatcherHelper.DoEvents(); this.Activate(); i++; } たまにアクティブにならない int i = 0; while( i < 20 ) { DispatcherHelper.DoEvents(); this.Activate(); i++; } 実験上では100%アクティブになる int i = 0; while( i < 100 ) { DispatcherHelper.DoEvents(); this.Activate(); i++; } どういうこと?
896 :
デフォルトの名無しさん :2011/04/29(金) 18:21:43.78
>>892 上は最適化の中で出力されるアセンブラはif文とかいろいろありそうだけど
下は最適化されると無条件に上向きでジャンプしておしまいだからな・・・
>>889 の
>this.Activateを呼び出したイベントが処理を完了するまで次のイベントは処理できない
とその展開される命令の関係があるのかもね
897 :
デフォルトの名無しさん :2011/04/29(金) 18:22:36.37
>>895 それはループ数が少なすぎて参考にならないんじゃね?
何このループw
int me = AppDomain.GetCurrentThreadId() の使ってはいけない警告を無視して強引にアクティブにするか int i = 0; while( i < 1000 ) { DispatcherHelper.DoEvents(); this.Activate(); i++; } でなにかすごく不安定な感じでアクティブにするか この2択に迫られてるんだけどどっちがいいと思う?
900 :
デフォルトの名無しさん :2011/04/29(金) 18:27:42.97
>>899 >でなにかすごく不安定な感じでアクティブにするか
>この2択に迫られてるんだけどどっちがいいと思う?
いやもっと違う選択肢はあると思うw
どういう処理をした後アクティブにしてるかコードを見てみないことにはw
901 :
デフォルトの名無しさん :2011/04/29(金) 18:28:56.91
>>885 コードをよく見てみないとわからないが
どこかでミスってAutoSizeをtrueにするコードが入ってたりしない?
>>900 class window1 : window
{
private void Window_MouseEnter ( object sender, MouseEventArgs e )
{
アクティブ処理();
}
}
これだけです
this.Activateした瞬間メッセージキューに要求が入るわけじゃないから回数に依存するループはダメだと思うなー
AppDomain.GetCurrentThreadId()〜ってのはAttachThreadInputで使うスレッドIDの話だと思うけど これはネイティブのAPIだからManagedThreadIdじゃ駄目だわな AppDomainの警告が見たくなければAPIのGetCurrentThreadId使うとか?
906 :
デフォルトの名無しさん :2011/04/29(金) 18:36:59.07
フォーカス移動じゃだめか?
>>903 回数にしないで
while( this.activeted == false )
{
DispatcherHelper.DoEvents();
this.Activate();
}
これだとアクティブにならないんです
なぜかというと
フラグ上はアクティブにはなっているのにアクティブになってないんです
フォーカスは最初やってたんですがだめでした一度もアクティブにできませんでした
909 :
デフォルトの名無しさん :2011/04/29(金) 18:48:17.40
こっちでもやってみたがウインドウは別のウインドウの後ろにいるのに アクティブになったのかタスクバーのボタンが点滅するだけだな
GetCurrentThreadIdをもうちょっと調べてみます あと、 BackgroundWorker と スレッドプール と this.Activateした瞬間メッセージキューに要求が入るわけじゃない を調べてみます ありがとうございました
MSDN読んで理解した
>>909 AttachThreadInputしてないのならそれが正しい動作
C#とJavaでプロセス間通信するなら何がいいですか? とりあえずソケット通信を考えてます。
JavaならRMIだろ C#スレであるまじき事だがC#では同じ事をどうやるのか知らない
>>912 そうなのか
this.Activate(true);
とかでその辺までやってくれるオプション欲しいね
ってC#とJavaか
>>915 昔はそういう動作だったんだけど削られたんだ…
今さら元の動作には戻らないだろうね
918 :
デフォルトの名無しさん :2011/04/29(金) 19:04:07.61
C#を主に弄るんなら手を抜いてWCF自己ホストで
アクティブであるウィンドウは操作しているユーザーが決めるものであって アプリケーションが決めるものじゃねえってのがMSの見解らしい
920 :
デフォルトの名無しさん :2011/04/29(金) 19:10:22.73
>>917 え、そうなの?
じゃあアクティブにしてもウインドウが表に出ない状態ってのは
たとえば動画のエンコードを裏でシコシコやるソフトが
状態を知るだけのフラグのような扱いなの?
SetForegroundWindowとSetActiveWindowがまともに動いたのは95だけ 98からは今と同じ動作
ネームスペースとはなんですか? 毎回WindowsFormsApplication1になるのでプロジェクト名かえれば変更されるかと思ったら全く関係ないみたいだし
クラスが所属する住所です
AllowSetForegroundWindow( GetCurrentProcessId() );
うわもうだめだ IntPtr hWnd = GetNextWindow( GetForegroundWindow(), 2 ); StringBuilder Caption = new StringBuilder( 1024 ); GetWindowText( hWnd, Caption, 1024 ); System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName( Caption.ToString() ); while( ps.Length == 0 ) { hWnd = GetNextWindow( hWnd, 2 ); GetWindowText( hWnd, Caption, 1024 ); } foreach( System.Diagnostics.Process p in ps ) { p.CloseMainWindow(); //Interaction.AppActivate( aProcess.Id ); } 自アプリより手前はIMEのプロセスネームを取得できるんだけど 奥(ひとつ前)のハンドルがどうしても0になって取得できない 助けて
>>878 その書き方で問題なし。
>>43 のように書くのはカビの生えた古代種だから、見かけてもそっとしておけ。
近寄ると、祟られるぞ〜
また訳のわかんないことを....
毎日簡単な宿題みたいなのを出してくれるサイトとかあればなぁ
DataSet周りの自動生成されるコードが予期しない動きばかりで折れそうだお・・・
変数、関数、クラス名全部日本語で詳しい説明の短文にしたら何か問題ありますか?
保守性が低下すると思う。そういうコード書く人少ないから。
>>931 その日本語力ではいろいろ問題が出そうだな真面目な話。
中国人がカタカナ使うな!保守性が低下するアル!全部漢字で書けって言うだろうから、問題アル。
コード書いてるときにIMEオンオフを切り替えるのは面倒だ。
931は要するに日本語の名前を使いたいってことかw 何言ってるのかマジで分からんかったよ。 インテリセンスを使うためにハンガリアンの時代に逆戻りしたような意味不明なプリフィクス付きの 名前で溢れかえることが目に見えてるな
Thread メインループのスレッド = new Thread(メインループスレッドの処理); bool メインループスレッド終了分岐のフラグ = true; メインループスレッド.Start(); void メインループスレッドの処理() { int メインウィンドウに渡した回数 = 0; while(メインループスレッド終了分岐のフラグ) { マウスの状態を調べて加工した後、メインウィンドウに渡す処理(); メインウィンドウに渡した回数++; } } こんな感じで書けば///とか//が必要なくなって一目でわかると思うんです
なんか某@ITの川俣氏の記事の悪趣味なコードを思い出したw 少なくとも俺には「メインウィンドウに渡す」とか言われても何のことだか分からない。 問題は英語か日本語かじゃなくて、命名センスなのでは?
使えるということは、使ってもいいということだ 好きにすればいい
meまで打ったらメイン〜を候補に入れてくれれば解決するかもねw 先頭をひらがな片仮名のみにすればできなくもないかも C#6でたのむ
作る気は起きないけどIDEの拡張書いたらいけるんじゃね?
翻訳サイト使えよ…
>>937 自分ひとりの趣味プログラムならなにやってもOK
ただ、他人に見られたら失笑の対象になるし、染まるべきでない悪習ではある
漢字の識別子は要所要所で使うといいよ。 使いすぎるとさすがに読みにくくなるけど。 業務固有の言葉とか、よっぽど英語力がないと直訳とか恥ずかしい訳になるし、 ローマ字使うくらいなら割り切って漢字で書いたほうが読みやすくなる。
937だと日本語禁止すると余計ひどい名前つけそうだが
先輩「おい後輩、この変数名のclass1って何?」 後輩「種別を入れる変数なんですけど、種別を辞書で引いたらclassだったので」 先輩「」 ってこともあるから何でも辞書引けってのはおすすめできない
種別は普通にclassだぜ
950 :
デフォルトの名無しさん :2011/04/30(土) 11:34:28.21
そこはLivingにして突っ込み待ちするんだよ
メニューストリップなんか日本語で作るときは、そのイベントハンドラはもう日本語のままだ。 大体、VS自体が新規プロジェクト立ち上げるときのウイザードの名前入力が、 自動的にIME起動しちゃうんだから、日本語でもいいじゃん。
>>937 カッコいい、コードとコメントが一体化して合理的な感じがする
時代の最先端を言ってる感じのコードだな
おれもいつか日本語名を使えるようになりたいな
今はまだ脳が拒絶反応を起こすので使えない・・・
全部日本語だとIntelliSenseの呼び出しにも入力切り替えが必要になるのがなぁ 接頭辞を使えばある程度は絞れるが うーん・・・
そういうときはclazzとかklassとかつければいいけど 自分以外の人が触れるコードではやめた方がいいな
釣り針が大きすぎる
956 :
デフォルトの名無しさん :2011/04/30(土) 15:26:54.41
色々悩んだ挙げ句「syubetsu」なんて名前が付いたりするんだよな・・・それなら漢字で書け、と
釣り針が大きすぎる
ATOKの英語変換機能はすごく役に立ってる。 他人には理解しにくい変数名になってるかもだけど。
釣り針が大きすぎる
960 :
デフォルトの名無しさん :2011/04/30(土) 16:40:13.16
縄文時代の釣り針は、ほね」。
釣り針が大きい=大物を狙ってる ザコはすっこんでろ
釣り針が大きすぎる
クジラとコウモリは哺乳類なんだぜ
おっとカモノハシを忘れちゃいけねぇ
釣り針が大きすぎる
↑撒き餌が多すぎる
釣り針が大きすぎる
粘着質な性格は嫌われるよ
釣り針が大きすぎる
テキストボックスをコードから入力可能な状態にするにはどうすればいいですか?
>>970 hogeTextBox.Text = "ほげほげ";
TextBox.EnableとかReadOnlyを切り替える話かと思った
hogeTextBox.Enable = true;
Enabled=true かな??
975 :
974 :2011/04/30(土) 19:52:59.04
うおー被りまくった。大事なこと過ぎる。
できませんでした public partial class LabelControl : UserControl { private void UserControl_MouseDoubleClick ( object sender, MouseButtonEventArgs e ) { Label.Visibility = Visibility.Hidden; textBox1.Visibility = Visibility.Visible; textBox1.IsEnabled = true; } } ダブルクリックした時にtextBox1は出てくるんですが、もう一度クリックしないと入力待機点滅カーソルがでてきません
試してないけど、フォーカス当てればいけそうだが。 TextBox1.Focus()
IsEnabled・・・?
980 :
デフォルトの名無しさん :2011/04/30(土) 22:10:16.72
ループをアプリ起動時からスタートさせるにはどうすればいいんでしょうか InitializeComponent();の後に書いても Loadedの中に書いてもアプリが起動しません
static void Main() { var form = new Form1(); while (form.Created) { /*ここがループ*/ Application.DoEvents(); } } 確かこんな感じ
>>981 意味不明。
煽るつもりはないけど、もっと言葉を尽くして人に伝わるような文章を書かないと
話にならんよ。
回答者に甘えるなよ。(エスパー能力を期待するな)
984 :
982 :2011/04/30(土) 22:31:12.84
訂正 var form = new Form1();の後に form.Show();追加
985 :
デフォルトの名無しさん :2011/04/30(土) 22:37:37.75
>>981 ゲームループが欲しいの?
ちなみにWinForm?
マウスカーソルの位置をポーリングするループがどうたらって奴だろ いい加減死ねばいいのにな
メインフォームの正しい表示法はShowじゃなくてApplication.Run これやらないとイベント発生しないし、終了するのはCreatedになる前に最初のwhileが評価されてんじゃないかな あと普通はUIスレッドで無限ループなんてする必要はない
やるとしたらInitializeComponentの後ろでThread.Startだろう
359 名前:デフォルトの名無しさん[sage] 投稿日:2011/04/29(金) 23:16:21.40 ユーザーコントロールに新規スレッドを追加するとXAML編集のデザイナー画面でエラーが出てますどうしてですか? メインウィンドウに配置してあるユーザーコントロールの中のスレッド.Start();の行をコメントアウトすると表示できるようになるんです あとたまにユーザーコントロールが動いてすこしずつ幅が小さくなるんですこんなのプログラムしてないのにどういうことですか? こんなんだからやっぱUIスレッドでやるかって事になったんじゃね まるで成長してないな
>>987 たしかMSのManaged DirectXのサンプルが
>>982 みたいな感じだった
ゲームループ作るなら定番のやり方らしい
991 :
990 :2011/04/30(土) 22:57:31.71
あと、普通にApplication.RunしてApplication.Idleイベントを使う方法もある ループではないけどゲームならこっちのほうが正当かな
ありがとうございます! スレッドはバグりすぎるのでもうやめることにします
ゲームプログラミングの世界って物凄い先進的なイメージがあるけど、 意外と時代遅れの部分もあるのかね。 組み込みマイコンでもあるまいし今時ポーリングループとかありえんと思うんだが.... 何十年前のプログラミングモデルだよ
ksk
一言だけ、君に言いたい。これからはXNAだ。
ゲームプログラマはシステムプログラムが大の苦手ってイメージがあるな。 GUI何それおいしいの??ってかんじ??
997 :
デフォルトの名無しさん :2011/04/30(土) 23:55:35.66
>>993 時代遅れもなにも凝ったエフェクトとかやろうとすると
fpsの縛りから逃れられないよ
先進的なゲームループとは
>>993-995 ちなみにXNAはApplication.Idleイベント使ってるよ
ハンドラの中でWinAPIのPeekMessageを呼んでる
ゲームで必要なことって、入力が受け付けられて頻繁にコールバックがもらえて描画ができればそれでいいんだから
わざわざスレッド別にしても無駄に複雑になったり同期でパフォーマンスが落ちたりするだけ
>>993 理論は先進的、実装は(パフォーマンスを限界まで求めるなどの都合もあるけど)超絶泥臭い。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。