ふらっとC#,C♯,C#(初心者用) Part57
1 :
デフォルトの名無しさん :
2010/03/20(土) 02:15:38
2 :
デフォルトの名無しさん :2010/03/20(土) 02:20:14
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
http://codepad.org/ コードを貼り付けてRun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます。
OrderedDictionary
メンバ変数の値が変更されたらイベント処理をするようなのをしてみたい TextChangedイベントみたいな感じ
.....というチラ裏?
してみたいのでさせてください
どうぞ
デリゲート、マルチスレッド、イベント ごちゃごちゃになってどれ使えばできるのかよくわかりません 教えて
いいよ
イベントとデリゲートの関係は、イベントを宣言するときに簡略記法使わずに addアクセサとremoveアクセサを自分で実装してみるとよく理解できる
>>11 イベントは呼び出し側は追加と削除しかできない
そういう違いはだいたいわかったんだけど
いざ応用しようとするとまったくわからない
ある変数の値をフォームに表示するために
値が変更されると値を表示するメソッドを毎回書いていたんですけど
もしかしたら、TextChangedのようにデリゲートを使えば
わざわざ表示メソッドを毎回書かなくてもいいんじゃないかと気づいて
調べていたんですが、むじゅかしくて・・・
そういうのはINotifyPropertyChangedを実装してバインドしてしまえば更新処理不要
レベルが高すぎて理解できません
あきらめろよ。
>>16 そういえばプロパティで出来そうですね
でもプロパティをそういうふうに使ってもいいんですか?
それとクラス内部で使うだけの変数なので
プロパティをするというのも違うような
やはりイベントだと思うんですよ
イベントを使うにしても結局プロパティで地道にチェックしてイベント発生させるんだよ
イベントでそれっぽいの実現してるソースみたけど 結局別のクラスのプロパティでメソッド呼び出して メインクラスのイベントハンドラ呼び出しているだけですね ってことはプロパティにそのまま書けばいいだけか・・・
しかし、
>>9 のレスにマルチスレッドが出ているのは不思議だと思った。
他の二つはわかるけど
イベントとデリゲートってどんな関係があるの?
デリゲート経由でイベント呼び出しなんじゃね?
24 :
デフォルトの名無しさん :2010/03/20(土) 19:52:04
windowsのイベントってOSが呼び出しする物なので非同期 クリックされたとかイベントが起きたときに特定の関数を呼んでもらった方が効率がいい 呼んでもらいたい関数を教える際に使うのがデリゲート Cだとコールバックとか言ってた
イベントは ・イベントハンドラを登録するメソッド ・イベントハンドラを削除するメソッド をひとまとめにしたもの。プロパティみたいなもん。 addとremoveを省略してevent EventHandler Hoge; の形式で宣言する場合は 自動実装プロパティと同じでデリゲートやメソッドが自動生成される。
まあ別にしらなくてもぷろぐらむは作れるからいいか
デリゲートの説明で一番わかりやすかったのが デリゲートはメソッドをオブジェクトのように使うもの そう考えるとすごくわかりやすかった でも、クラス使えばできることをなぜわざわざするのかというと やっぱり、マルチスレッドかイベントぐらいしか使い道ないような感じ
>>27 はじめは>マルチスレッドかイベントぐらいしか使い道ない と想定されてたから
マルチキャストとか変なところがあるけど最近はラムダ式などで積極的に活用されてる
ひょっとしてサブスレッドからメインスレッドに処理の終了を 知らせることができるのか!!
>はじめは>マルチスレッドかイベントぐらいしか使い道ない と想定されてたから だから、前にも書いたがそれはない。 寝ぼけたことをどや顔で繰り返さないように。
>>29 とりあえずバックグラウンドワーカーコントロールでも使ってこい
俺も初心者だけど、このスレのレベルにワロタ
>>31 使ってみた!すげーーー!
いつの間にこんなコントロールが!
と思ったらわざとだろお前wwしらじらしいww
わざとじゃねーよw スレッド作ってメインスレッドからタイマーで見てたよw
>>35 スレッドからスレッド名前空間のタイマ?
それって二重になってるんじゃ・・・・
37 :
デフォルトの名無しさん :2010/03/20(土) 20:29:38
で、結局、変数の値が変更されたら 自動でform.Textの値を変更してくれるのは どう書けばいいの?
今まで出た感じで好きなように
40 :
デフォルトの名無しさん :2010/03/20(土) 20:59:27
textboxだっけ? あれって中身が変更された〜とかそんなイベントなかったっけ? それで監視するしかないよね
なんでもバインドしたけりゃWPFだな
>>40 メンバ変数つってんだろ
textbox関係ないだろ
そろそろ死ねよ。
>>43 お前は寂しい人間だな
昨日から用もないのにこのスレに来ては煽るだけ
お前の人生が不幸だからって他人に八つ当たりするな
やばい。できた public partial class Form1 : Form { int hoge = 0; int i = 0; public Form1() { InitializeComponent(); } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { textBox1.Text = hoge.ToString(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { backgroundWorker1.ReportProgress(i++); System.Threading.Thread.Sleep(2000); hoge = 2; backgroundWorker1.ReportProgress(i++); } private void button1_Click(object sender, EventArgs e) { backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { } private void Form1_Load(object sender, EventArgs e) { backgroundWorker1.WorkerReportsProgress = true; } }
昨日は来てねーよ。 頭おかしいんじゃね?
何がしたいんだよ。このコード。
初めての非同期で感動するコードだろ
素直にプロパティでチェックしてイベント発行するべき わざわざスレッド使うとか初心者スレで間違ったやり方出すなよ
初めてのマルチスレッドか。 今度は何か意味のあるコードで頼む。
あれ? この場合、Invokeしないでいいの?
54 :
デフォルトの名無しさん :2010/03/20(土) 21:31:04
>>53 そういうの意識しなくていいから初心者にもやさしい
素直なつくりにできないのって大概は仕様や設計が悪いんじゃないの?
うん
へー。使ったことなかったけど、BackgroundWorkerって便利なんだな。
hogeを他で使うならlock大丈夫か
テンプレにはいらんだろ。
>>62 変数の値が変わるのはサブスレッド側でわかるんだから
>>45 でできるやん。
俺って天才かも。
BackgroundWorkerなんか便利なものか。 スレッドがよく分かってない奴でもなんとなく使える、という以上のメリット(本当にメリットか?) は何もないだろう
超メリットだよ ただ馬鹿に仕事取られるということでもあるけどなw
>>65 時代遅れになっていくやつの典型的な反応だな
アセンブラ厨と言ってることが変わらないよね BackgroundWorkerをC#に、Threadをアセンブラに変えても成立してしまうw
>>67 むしろ、言いたくないが君のようなのがいわゆる「VB厨」の典型的反応でしょ。
BackgroundWorkerって典型的な「VB厨」向けツールだよ。
彼らは言うんだよ。「便利なものは便利に使わせていただく」ってw
お前便利だから使ってるわけじゃなくて、それしか使えないんじゃねえの、って。
>>69 はいはいパンチカードに穴あける作業に戻ってねオジーチャン
C++やJavaでもマルチスレッドプログラミングしてたけど BackgroundWorkerは便利だよ
年寄りはおとなしくタイプライター叩いててくれ。
普通に明示的にスレッド起動した方がよほど分かりやすい、 と標準的なプログラマなら感じると思うけどね俺は。
結局お前が思ってるだけじゃん。 何が標準的(キリッだってのw
この怒涛のレスの雨は久しぶりに見たぞwww
76 :
デフォルトの名無しさん :2010/03/20(土) 22:20:20
伸びてると思ったら・・・・
phpをdisってる人と同じ匂いがする
>>69 VBが出た時、beginner's toyと言われていたけど、今や、どれもこれも真似してるよな
そういうハッカー気どってVB馬鹿にするのは、COMコンポーネントをCでストレスなく作れるようになってから言ってくれ
わざわざ遠回りな方法をとるアテクシカコイイみたいな。 スレッド使いこなしてデキるプログラマ目指そう! モテカワマルチスレッドの嗜み方教えちゃいます特集号 みたいな。
>>78 VBを馬鹿にしてないって。
「VB厨」を馬鹿にしてるの。だからわざわざカギ括弧付けてるんじゃないの。
おっさん調子乗ってんなよ^^
BackgroundWorkerがいやならC#も嫌なはず
>>64 お前はイベントとマルチスレッドの違いもわからないカス
まあ御託はいいから、そんなにBackgroundWorkerが便利だと思うのなら 普通にスレッド起動した場合と比較したメリットをちゃんと言ってみろって。 言えやしないだろうそんなもの。 無い者を言えるわけがない。 さすがにいくら面の皮が厚い馬鹿でも「理屈が分かってない馬鹿なボキュにも使えることがメリット」とは 言いづらいもんねw
まあまあ喧嘩しないしない 使いたいの使いなさい それより仕事をしなさい
>>86 早く
>>68 を否定してみろよ
否定できないならC#使うのやめて機械語に帰れ
>>86 単にフレームとして一連の処理の流れが実装してあることがメリットだろう。
IListそのものがListより便利だとは言わないでしょ。
実装が無いんだから。
>>86 理屈がわからなければを繰り返していくと、最後は量子力学か神学までいくから理屈がわかってないバカ議論は不毛
もう化石だな
>>86 簡単に使える、ってのは大きなメリットだろ。
>>86 馬鹿でも使えるのは超メリットだと初めに言ったはずだが
そこから否定されても困るね
何言ってんのお前
>>88 意味不明な命題を否定も肯定もしようもないと思うけど。
なぜBackgroundWorkerがC#に、スレッド起動の方法がアセンブリ言語に対応するのか
サッパリ理解できん。
馬鹿の議論はいつもこれだが、馬鹿のお前さんの思いつきを俺が共有してるわけないじゃん。
これがセカイ系か。
簡単だから嫌いってもうね。 自分は特別な人間だと思ってるやつの典型だね。
ワロタ
初心者向けスレで、顔真っ赤にすんなよ。
お前ら落ち着け
こいつと同じ臭いがする。
勘違い職業マ。
678 名前:以下、名無しにかわりましてVIPがお送りします[] 投稿日:2010/02/08(月) 13:05:38.59 ID:V+MiXXPeP
>>674 その手段を自分で想像出来ないヤツが結果を出せる訳無いよな
>>675 いきなり素人が5つ星のフランス料理作れるとしたら、誰か経験のある人が代わりに作ってあげたキットを再利用するか、
あるいはボタンを押せば出てくる装置を使うしかない。 もともとプログラミングって、技術職の仕事だ。
みんな欲しいのは技術じゃないのかと。 結果が欲しいだけなら巷に転がってる完成品使えばいいだけ
昔も今も見よう見まねから始まるのは変わらないだろうけどな。 でもコピペは見真似にすらならね
今日はアンチMSのスレが伸びてないと思ったが、こっちで喧嘩してたのかw
へー
VIPで死ね
反論したかったら、BackgroundWorkerの致命的な欠点を言わないとな 簡単なことにThreadを生で使った方が問題引き起こすと思うけどな
その「簡単な方法」では搭載しきれない仕様が降ってきたときに ちょっと苦労するか、沢山苦労するか、逃げ出すか、の違いだしょ? いいじゃん、選ぶのは自分なのだし。
俺
>>86 じゃないけど
Suspendできないのがちょっと面倒だったカモ
カモネ
かーもね
灰
>>65 使えるものは使う てひとはそれでいいじゃん
まぁ同じくらいのもの実装しても大してめんどくさいものではないけどね
勢いが板でトップになってるから何事かと思ったら
2番目に勢いのある 【超高速】C/C++に代わる低級言語を開発したい の倍いってるじゃねぇかwwwww
お前ら落ち着いて落ち着いて死ねなの〜
すべてRuby厨の仕業
まんまと釣られたということだよ。 言わせんな恥ずかしい。
118 :
デフォルトの名無しさん :2010/03/20(土) 23:01:05
ID欲しいよね・・・
ID出たら真っ赤になってそうだなぁ
書いてんの2人くらいだろ
>>120 の会話ですら赤字になってる人の発言かもしれないと疑ってしまう自分
Dr林にご相談ください
>>115 の発言が最近やったエロゲキャラのしゃべり方と似ててちょっと燃えた
いや萌えた
124 :
デフォルトの名無しさん :2010/03/21(日) 00:02:57
あ
(´・ω・`)ショボーン
スレッドプールで十分なら極力そちらを使うべきではあるが、
専用スレッドを用意するメリットがあるなら使えばいいだけの話だろ
因みに、ThreadPool、Delegate.BeginInvoke、BackgroundWorker、
Forms以外のTimer、多くのコンポーネントの非同期操作(〜Async)などの
スレッドプールを使っているものなら多用しても問題はない
逆に、なんでもかんでもThreadを使うのは論外
>>106 中断のための機構は自前で用意すべきもの
Threadならイベントオブジェクト使って適当な間隔でチェックするだけだし、
ThreadPoolなら処理を細切れにしてキューに入れるタイミングを制御する
Thread明示的に使ったってどうせ同じようなことを自分で実装するんだから、 あるもの使う方が手っ取り早いだろう。 それにいちいちスレッド作るよりThreadPool使う方が一般に望ましい(常にとは言わない)のは常識。
知識0の状態からFF11のツール作るためにC#の勉強をしたいのですが 参考になるサイトやこれは買っとけ的な本は何ですか?
129 :
デフォルトの名無しさん :2010/03/21(日) 03:58:53
言語はどうにでもなるだろ 周辺ツール作る場合はゲーム側の独自仕様をどれだけ集められるかだと思うよ
FF14にしましょう
windows formのスレがないのでここで聞いても良いでしょうか。 formでGUIを作っています。 アプリケーション全体からメッセージを表示させるtextboxを追加したいです。 コンソールのプログラムでいう標準出力です。 どうやConcoleクラスがそれに値するようなのですが、これをどうtextboxに表示するのかわからないです。 textBox1.Text = System.Console.Out.ToString(); としても、textboxには「System.IO.TextWriter+SyncTextWriter」と表示されるので違うようです。 何かヒントをください
やーだお
Console使うなら、 TextWriterから派生させたクラスを作って、 WriteメソッドとかをオーバーライドしてTextBoxに出力するようにして、 Console.SetOutで設定すればいいけど。
なんでBackroundWorkerをそんなに毛嫌いするのかわからん。 素人専用とでも思いこんでるのか? 素人に使いやすい設計になってるのは事実だが、 別にやりたいことにあってれば普通に使えばいいじゃん。 普通に使えるのにわざわざ自分で同じような処理を実装して、 でそれがThread明示的に作ってとか、マイナスにしかなってない。
用途に合ってなければ自分で制御するだけ、 誰も常にBackroundWorkerがいいなんて言ってないのにな。 まあそれでもThreadを自分で作ることはあまりないが。
まあそれでもThreadを自分で作ることはあまりないが。
今時代はスレッドプールですよ
スレッド温泉でゆっくりしたいなあ
スレッドプールって何?
次はParallel.Forですね 簡単といってもBackgroundWorkerとは違ってこちらはアカデミックな感じだが
ThreadPool
>>134 できました。
継承してオーバーライドって便利ですね。
勉強になりました。
まだ4.0の勉強してないんだけどParallel.Forとかって別CPUで処理させるんだよね? いくつかParallel.Forで処理を同時にやってすべてが終わったかどうかのチェックはフラグかなんか持って 自分で管理しないとだめなのかな?
parallel.forとかすげーな もうC++の時代は終わってるな
単純に適材適所でしょ windowsなんかC/C++がなきゃ動かないわけだし
まぁGUIクライアントを書く言語としてはC#の方が向いてるね
>>147 並列ライブラリは直接使うとよほど単純なパターンを除くと非常にややこしいので、
Parallel Linqから使ったほうが簡単。
並列処理の結果を待つかどうかオプションで指定できる。
>>151 なるほど
しかし、すげぇな・・・
4.0いろいろ贅沢な機能付きすぎだろ
並列ライブラリのforを本気で使おうと思ったらやたらと引数が多くなる。 1〜10までを足すだけ。 int sum = 0; Parallel.For(1, 10+1, option, () => 0, (i, parallelLoopState, s) => s + i, s => Interlocked.Add(ref sum, s) ); Console.WriteLine("sum = {0}", sum);
そんなの使わずマルチスレッドつかえよ Parallel.Forなんて大して使えん ループ内がそれそれ独立していなければ無理
((;゚Д゚)) 決めつけ無理……………!!!
結構使いにくそうだ… でも・・・実装したからには何か目的が・・・・メリットがあるんだよな?
Parallelライブラリはコア数に合わせて並列数を調整してくれるところにある。 自分でスレッド作って調整するのは大変だぞ?
そうだね。
うん
>>155 そんな並列の意味が一切無い例出してどうすんのさ
もうちょっとMPIの様に透過的にだな・・
>>147 ちゃんと Join する。
スレッドいっぱいたつけど、全部のタスクが終わるまで待ってくれる。
>>148 同時に C++ 向けにも並列処理ライブラリが追加されるけどね、VS 2010。
C++ の時代、分野次第だなぁ。
10年は前に終わってるとこもあるし、あと10年は使わなきゃいけないとこあるし。
>>155 そんな処理は Parallel LINQ の方がいいな。
あと、集計部分(+= するとこ)は並列化してもおいしくない。
>>164 pragma だらけってのは、標準化がどうこう言われてしまう C++ の苦肉の策だろ。
>>167 ほほぅ
キッチリ便利にはやってくれそうだなぁ…
3つの画像を同時に処理して終わったらその結果を判定して処理
とかやってるから単純なマルチスレッドでやるよりイイかもしれねぇ。。。
ちょっと期待したい
for文の前に属性書けたら楽そうだけど [Parallel 4] for(){ } まぁ文法的に無理ぽ
ParallelOptionsのMaxDegreeOfParallelismが必要だね。 1コアの環境でoptionなしで使うとスレッドは使わずにメインスレッドで処理してしまう。 ParallelOptions option = new ParallelOptions() { MaxDegreeOfParallelism = 4 }; Parallel.Invoke(option, () => Worker("aaa"), () => Worker("bbb"), () => Worker("ccc"), () => Worker("ddd"));
並列処理とか…… ここは本当に初心者スレなのか?w
いいんじゃね?
まあ、Parallel.ForはちゃんとJoinしてくれるの?とか、結構初心者らしい質問な気もするが。
並列処理といってもこのていどは初級レベルだろう まあ普通は初心者は並列処理を勉強しないものだけど、 勉強してみれば、このくらいは理解できるレベルだと思う
だね
並列処理の使い方を理解できるというより、 並列処理の必要性を理解する、ことになるのでしょうね。 必要と思えれば頑張れる、そういうもんでしょ、言語習得ってさ。
そして別スレッドからGUIコントロールにアクセスして怒られるんですね
もう・・・ぷんぷんっ
backgroundWorkerは自由度が低いから使いづらい
いつまでそのネタ引っ張るつもりだ
質問します。 DataGridViewで特定のCellから値を参照したいんですけど 方法がわかりません。お願いします。
DatagridView.Rows(0).Cells(カラム名).Value だけじゃね? さすがにそれはヘルプ見てみようぜ それとも何か勘違いしてるかな?
メソッドに戻り値つけないとどういう処理しているかわからなくなるね とくにグローバル変数をどうにかしているときとか
C#スレでグローバル変数とな!? シングルトンのクラスに詰め込むの?
フィールド変数だらう
SlimDX/Direct3Dで描画してるウィンドウの中にWPFでコントロールを描画して使いたいんですが、 いいサンプルはありませんでしょうか。
このスレレベル高すぎて何いってるのか全然わからないですがさらに初心者向けのスレってないんですか? FF11でツールを作ろうと思ってます。
今のFF11ってツールまで作れるんだな…。
そういやFF11ってなんか言語っぽいもんな 0xFF11みたいな
ボットでも作りたいのかね
string型の配列aがnullでも空でもないことを判定するプログラムを考えています。 if ( a != null ) { if ( a.Length > 0 ) { (処理) } } これ以上にスマートな記述方法は存在しますか?
>>193 string.IsNullEmpty()
それ、配列にも使えるのけ?
無理だな ネストが深くなるのが嫌だから&&でつなぐ
197 :
193 :2010/03/22(月) 13:49:55
>>194-195 そうなんです。String.IsNullEmptyOrEmptyは文字列には使えますが文字列の配列には使えませんでして・・
>>196 たしかにネストが深くなるのはイヤなんですが、もし&&でつないでしまうとnullだった場合に
a.Legth のところで例外が発生してしまうんです。
だから泣く泣くネストを深くして対処しました。
ショートサーキットを使うように、|| でつなげばいいだろ。
& じゃなくて && だよ?
&&で繋ぐと、結果が偽になった時点でそれ以降は評価されない
>>200 じゃあ&&でいいじゃないか。変数aがnullなら、他のことをやっても仕方がない。
try { if ( a.Length > 0 ) { (処理) } } catch(ぬるぽ) { } ・・・違うの?
>>202 本気で言ってるの?
ぬるぽをキャッチしようとする奴始めて見た
204 :
193 :2010/03/22(月) 14:10:15
>>200 > &&で繋ぐと、結果が偽になった時点でそれ以降は評価されない
判定式の順番は重要ですか?
たとえば a がnullのとき
if ( a.Length > 0 && a != null )
{
(処理)
}
とやってしまうと最初の a.Length > 0 で例外が発生したりしませんか?
フォルダパスからフォルダ名を取得するのってどうすればいいのでしょうか GetDirectoryNameはファイルパスからフォルダパスを求めるもんですし・・・
それはないわ。
null判定を例外で処理しようとするのは初心者
try { } catch(Exception e) { } なんて書いてるソースはよく見るね
初心者スレだから意見を聞きたいなら間違ってはいないが 回答としては無い
>>211 テストソースとしてならいいんじゃない?
それで納品したら次回はないと思うけど
214 :
デフォルトの名無しさん :2010/03/22(月) 14:31:09
いろいろ作り込んだり、ぐちゃぐちゃになったりして、 新規プロジェクト作成したくなる衝動に駆られるよね この衝動に名前つけようぜ
>>211 まぁそれ自体が間違ってるわけじゃないけど
わかってない臭はするな
別にExceptionで受けてもいいだろ
>>217 どんなException出しても同じ対応するの?
>>193 var notNullEmptyAry = ary.Where(s => !string.IsNullOrEmpty(s));
>>219 配列の各要素にnull/空文字列が含まれているかどうかなんて話、誰もしてないぞ
そもそも
>>193 は、正常な処理をif文のブロック内に書いてる時点で
ソースが汚いと思う
どっちが正常なのかは文脈次第じゃないか
if(a==null && a.Length == 0) return; 処理
|| が正解
>>223 さすがに配列のオブジェクトがnullで正常処理とか・・・
そういうのが正常だと言える例あるの?
>>220 致命的な例外もわざわざCatchするんですね
かっこいい!
初心者からかって遊んでるやつしかいないのかここは
外部からデータ貰って配列に入れるときとか、0件だと配列そのものができてない つまりnullになることあるな。もちろん0件でも正常
try-catch はコストが大きいから
>>193 のような条件判別では普通
>>202 のようにはしない
>>231 他の言語ならそうだがC#なら正解
エラー処理のために条件分岐やるのはVB6.0で止まっている奴
条件分岐は何かの処理をさせたいから使うわけでエラー処理のためにするべきではない
つまりこれだけでいい
try
{
//何かの処理
}
catch{}
>>231 一般的にtry-catch構文はオーバーヘッドが大きいといわれているけど、
C#(clr)でも同じことが言えるの?
なにかこの辺について言及したいい記事はありませんかね。
234 :
193 :2010/03/22(月) 15:41:49
>>207 >>208 どうもです(´・ω・`)ノ
&&で結ばれた判定式が左から順番に判定されて、条件に合致した時点で残りの判定式の判別は
破棄されるとは知りませんでした。
つまり
>>193 は
if ( a != null && a.Length > 0 )
{
(処理)
}
と簡潔に記述できるわけですね。
235 :
193 :2010/03/22(月) 15:42:32
>>222 > そもそも
>>193 は、正常な処理をif文のブロック内に書いてる時点で
> ソースが汚いと思う
:(;゙゚'ω゚'):!
その件に関しましては常々疑問に思っておりました。
メインとなる処理はif文の中で記述するべきか、外で記述するべきかに関してです。
メインとなる処理はif文の外に書くべきでしたら
>>193 は
if ( a == null || a.Length == 0 )
{
return false;
}
(処理)
とするべきなんでしょうか?
catchした時は重くなるけど通常は関係ないんじゃないの
>>230 0件とnullは違う意味で使うだろ、常識的に考えて
>>235 プログラムはケツまで流すものだとか考えてる人なら
正常処理だけif文に入れる
ようは好きにしろ
>>230 そもそもDBの場合
まず件数引っ張ってからデータ取得しない?
条件式のネストを避ける書き方って一般的に何ていうんだっけ?
>>241 件数そのものを先に欲しい場合はそうするかもしれないが、
普通はカーソル機能を使って最初の1行目だけをもらう。
全部引っ張るようなメモリ食うようなことは避ける。
rowsよりcountのほうが軽いだろ
>>235 delegate bool EmptyDelegate(string[] s);
EmptyDelegate emp=IsEmp;
if(emp(s))
{
(処理)
}
private bool IsEmp(int n)
{
if ( a == null || a.Length > 0 )
return false;
}
}
>>245 普通のメソッドでなくデリゲートを使うのはなんで?
全角変換するなら文頭のスペースだけにしろよ
カッコの中の最初と最後を空けるなら全部に適用しろ 算術記号も同様に
250 :
193 :2010/03/22(月) 16:15:01
できないのか・・・
>>241 外部ってWebサービスでSOAPで受け取ったりするやつもある
(´・ω・`)←お亡くなりになられました
>>245 C#1.0のような腐った書き方のうえに腐った命名規則
スレタイ読めよ
というかCS0161。論外
>>192 はいそのとうりでボットを作りたいです。もっと初心者向けのスレないでしょうか。
いきなりボット作ろうとする人向けの初心者スレは無いと思う・・・
ちょっとしたプログラムを作って、そのできばえを達人に判定してもらって 技能向上に向けたアドバイスをいただけるスレは無いでしょうか?
ないんじゃね? あっても罵倒の嵐になりそうだし。
>>261 > あっても罵倒の嵐になりそうだし。
。・゚・(ノ∀`)・゚・。
264 :
デフォルトの名無しさん :2010/03/22(月) 19:44:01
第一 分かりやすいところでBOT開発の情報共有したら 社員にかぎつけられて対策されちゃうだろw
D言語使えばいいじゃん
>>265 【超高速】C/C++に代わる低級言語を開発したい
にカエレ
>>188 WPFの中でDirectX使うのは可能だけど逆は無理
画像に描画するとかすれば無理やりできなくもないけど極めて非効率
273 :
デフォルトの名無しさん :2010/03/22(月) 22:14:07
VisualC#2008のデバッグについて質問があります。 デバッグ中時間がかかる処理をしているところを確認したいのです。デバッグの再生ボタンがグレーの実行状態のときに、どこで実行しているか知る方法はありますか? プログラムは約5000行あり、ブレークポイントを設定する候補の箇所が多すぎる場合、いちいち手動で設定するのではたいへんなのです。 こういう場合、どのようにしたらよいものでしょう?
5000行で10個のブレイクポイントを張って、どの500行に時間がかかってるか確認。 ってのを何回か繰り返せばすぐわかるだろよ。
277 :
デフォルトの名無しさん :2010/03/22(月) 22:25:10
>>276 目安程度かもしれんがブレイクポイント入れるんじゃなく
その場所を通った時間をどこかに出力すればいいかもね
>>273 ブレークポイントを設定するのと同時にコンソール出力のコードを挿入していく。
恒常的に残すときはTrace呼び出しにする。
以降、ログを見るだけでエラーの発生箇所がだいたい分かるようになる。
少しは頭使えばいいのに。
\文字を使いたいのですがどうすればいいのでしょうか? なんかプログラムの一部として認識されちゃいます
\\ または文字列リテラルの中で使うなら @"\"でも可
varってみんな使ってる? 使ってみたけどコードが短くはなるけど わかりにくいような気がする
foreach (string a in listBox2.Items) { try { File.Move(a, textBox1.Text + "\\" + Path.GetFileName(a)); } catch { MessageBox.Show("err"); } } これでArgumentExceptionはハンドルされませんでした とかってエラーが出る 一応ファイルは移動できてるんだけどなんなんでしょう
なんのためのcatchだ
>>284 foreach (var a in listBox2.Items)
{
try
{
File.Move(a.Text, textBox1.Text + "\\" + Path.GetFileName(a.Text));
}
catch
{
MessageBox.Show("err");
}
}
間違った逆だ。
>>286 だと例外が出た視点で作業が継続できない
通常複数ファイル移動する場合に一部のファイルが存在しなかったりしても続けるからな
291 :
284 :2010/03/22(月) 23:33:44
>>287 試したけど、'object' に 'Text' の定義が含まれておらず、型 'object' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
というかそもそも目的のファイルは全部ちゃんと移動できてるのにエラーが発生する意味がわからんのです
292 :
デフォルトの名無しさん :2010/03/22(月) 23:35:22
自分で制御がちゃんとできないならファイルとかフォルダがあるかどうか 確認する機能使えばいいんじゃね? 昔ながらのコードで返してくれるのがあったはず
>>291 型を指定してないからだろ?
listboxの行って確かstring管理だったはず
listviewitemと勘違いしてたわw
ListViewItemsは何のコレクションだよ 賢者タイムか・・・
catch(Exception e) { MessageBox.Show((e.GetTyppe()).FullName+e.Message); }}
>>283 Hogeclass hogeclass = new Hogeclass();なんかは冗長なので、
var hogeclass = new Hogeclass();にする。
あとはLINQ関係かな。
>>291 コレクションのアイテムを入れる変数の型が違うとか
tryステートメント使ってるのにcatchで例外を捕捉しないとか
まず基本を身につけないと例外出る度に自分で対処できないよ
エクスプローラのフォルダツリーを使いたいのですが、 treeViewで作るしかないですか?
300 :
デフォルトの名無しさん :2010/03/23(火) 00:14:12
というより エクスプローラのフォルダツリーを実現するための部品がtreeviewでしょ? サンプルとかありそうな気もしたけどWPFくらいしかないな
>>298 例外捕捉するように書いてみたけど問題なく通るからcatchが捕捉するのも何もないようで
ArgumentExceptionはハンドルされませんでした
使用されたパラメータが有効ではありません。
が
Program.csの
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());←ここで起きてる
}
何が悪いんだ?
ちなみにファイルを移動し終わっても異常は無いけどウィンドウを動かしたり最小化したりするとエラーが出てくる
302 :
デフォルトの名無しさん :2010/03/23(火) 00:18:49
しらねえよw プログラム全部が見えないのにw
>>300 ありがとうございます。
再帰が未熟なのでNodeの追加で悩んでいます・・・。
>>301 映画タイトル決定「この春、Form1で何かが起こる!?」
>>304 ありがとうございます。
見ながらやってみます。
Cでいうところのfscanf (fp, "%s%lf%lf", name,&height, &weight)みたいに構造体でtxtファイルにデータの管理をするには どうすればいいでしょうか? 今思いつくのはstring型を特定の文字で引っ付けたり分解するものを利用すること位です
307 :
デフォルトの名無しさん :2010/03/23(火) 00:35:38
テキストボックスに時刻を表示しようとしています。 Thread thread = null; private void timer_Tick(object sender, EventArgs e){ thread = new Thread(Thread); thread.IsBackground = true; thread.Start(); } private void Thread(){ textBox.Text = DateTime.Now.ToString("HH:mm"); } これでデバッグしようとしたら、 InvalidOperationExceptionはハンドルされませんでした。 有効ではないスレッド菅野捜査、コントロールが作成されたスレッド以外のスレッドからコントロールtextBox.Textがアクセスされました。 とエラーになります。 これはどう対処したらよいですか?
308 :
デフォルトの名無しさん :2010/03/23(火) 00:37:04
>>275 ほんとだ。これでした。ありがとうございます。
310 :
284 :2010/03/23(火) 00:42:32
うんごめんなさい 画像をpictureboxから解放せずにその画像ファイル移動したらそりゃエラーもでるよね ここに書いたプログラムとは全然関係ありませんでした ごめんなさい 自己解決しました
311 :
デフォルトの名無しさん :2010/03/23(火) 00:42:56
>>307 すごい。速い…。
これ、Classはひとつの場合でも使えるんですか?
312 :
デフォルトの名無しさん :2010/03/23(火) 00:45:31
>311 早いっていうかスレッドネタは最近多かったのでネタだろと半分思ってるので アドレスを取っておいた 一つの場合っていうか、スレッドから呼ぶならそれ改造すればクラスじゃなくてもいけるでしょ
313 :
デフォルトの名無しさん :2010/03/23(火) 00:55:58
>>312 ネタではなく、初心者で困っていての質問であります。
で、すみません、コードを拝見していたんですが、改造できませんでした…。
さきほどの307にあてはめると、どのようにしたらよいでしょう?
Invokeもdelegateもworkerもcallbackもshownも初めてで、かなり手に余っています。
あるクラスの中のデリゲートにメソッドを入れたいが、そのメソッドの引数の数が 実行時までわからなくても、問題なく入れられる方法ってありますか? デリゲートのオーバーロードを行って、引数のバリエーション分の デリゲートをあらかじめ用意しておく方法を思いつきましたが、 ほかにいい方法があれば教えてほしいです。
リストにできるものならリスト渡せばいいし できないものならクラス化すればいいんじゃね
318 :
315 :2010/03/23(火) 02:57:48
なんか勘違いしてたかも…もう少し設計練ります。 ありがとうございました。
timer_Tickでスレッド開始するってのが何がしたいのか意味不明。
ブラクラとか
フォームのタイマでは時計は作れないというのは有名な話
>>309 のSetTextをスレッドタイマのコールバックで呼び出す
30行目以降はいらない
ここで言っていたようにif文内に正常処理を書かないようにし 邪悪なものを最初に弾くようにしたらものすごくコードが見やすくなった 他にこういうことしたらコードが見やすくなるよというのありますか?
リファクタリング
それと同じようなものだけど、例外的な状況を弾くような場合じゃなくて 通常の分岐のときは、なるべくelseを書いてifよりもelseの方が長くなるようにする
「もしtrueなら」じゃなくて「もしfalseなら」という書き方のほうがいいということですね
単に長いものは後回しにした方が見やすいからです
ていうか、 { もし false なら 抜ける; trueの時のコード ・ ・ ・ ・ }; とかの方がインデントが浅くて良いとかじゃないのん。
if節が長いかelse節が長いかは判定式に否定演算子を 付けてまわれば逆転するわけで、あまり意味はないわな。
if節を短くしたほうが可読性が上がる
っていうかそんな長いメソッドにはならないから ifでどうのこうのなんてないな
>>323 > ここで言っていたようにif文内に正常処理を書かないようにし
> 邪悪なものを最初に弾くようにしたらものすごくコードが見やすくなった
やっぱそう思う?
俺も前々からそんな気がしていた・・・
こういうtipsがまとめられたサイトとか本とか無いかな。
初級者以上中上級者未満を対象にした情報源ってあまり無いよな('A` )b
Code Complete
CodeComplete高い 近所の紀伊国屋書店さん3日間も立ち読みしてごめんなさい
正直、elseより後が長い方が可読的って感覚は微妙。 完全には否定しないけどね。 俺もCの二重インクルード防止のなんかには、一般的な作法じゃないけど 空っぽの#ifdefを書くようにしてるから気持ちは分かる。 ただ、ifのブロックなんてCのインクルードファイルほど行数あるわけじゃないからねえ。 普通は。
俺はif節がよほど短いならさっさと脱出させてしまうなぁ
ListView.ListViewItemCollection.AddRange(ListView.ListViewItemCollection items) のオーバーロードバージョンてどうやって使うんですか?サンプルないですか? listView1.Items.AddRange(listView2.Items)とかやるとArgumentExceptionになるんですが…
>>338 ありがとうございます。CopyToします。
インデント深くしたくないから、すぐ脱出するコード書くなぁ。
画像処理系のソフト作っているんだけど DirectXSDKを使わないとグラボの性能ほとんど使わないのかな?
いやDirectXと画像処理は関係ない グラボはリアルタイムな処理に使うものであって静的な画像処理にはあまり使われない シェーダ使えばできるけど面倒で制限が多い割には体感的にそんなに速くなるとは思えない
思えないね
動画だとCUDAとかViewerでもグラボを使っているものがあるから そんなに変わるのかなと思ったんだけど使い方によるんですね
ていうか、WPF使ったら勝手に使われる。
WPF使おうが何使おうが明示的にグラボ使わない限りアプリケーションの画像処理には関係ない
>>346 画像処理と言っても色々ある。
単純なファイル形式変換ならグラボ関係ないが、
拡大、縮小、色変換、フィルタリングとかかけるならWPFやSilverlight使った方が圧倒的に便利かと。
そうか? 簡単な拡大縮小などで細かい制御を必要としないならともかく シェーダ書くなら余計に手間かかるよ
>>348 シェーダー書かんでも代わりに色々やってくれるところがWPFのいいところじゃないの。
WPFでフィルタなどのエフェクトを自作しようと思ったら ビットマップのピクセルをCPUで直接処理するのが嫌ならピクセルシェーダを書くしかない
>>323 無駄なtrueを書かない。
× if ( flag == true ) { }
○ if ( flag ) { }
わざわざ28レスも前に指摘することかよ
ワラタ
Windows.Formのタイトルバー?(タイトルと拡大縮小閉じるボタンのところ) にコンポーネントを追加することはできますか? 同じボタンを1つ増やしたいのですが。
>>347 おお、今までWPF使ったことなかったけど使ってみようかな
そんな難しい処理じゃなくて画像Viewer的なのを作りたいだけなので
勉強してみようかな
>>351 > 無駄なtrueを書かない。
> × if ( flag == true ) { }
> ○ if ( flag ) { }
C畑出身の古参か?
時代は可読性を求める時代だぞ。
>>356 それは「無駄な可読性」というものだ。
ただし、C#はC/C++と比べてif節はbool型しか取らないから、
自然、これまでよりも式が厳格になる傾向があるけどな(式が非ゼロかどうかの判定とか)
flagの名前によるな isHoge とかならif(isHoge==true)は冗長だろ
bool評価なのにわざわざ flag == true って可読性高い? 大切なことなので2回言いましたってことか?
>>354 まあ無理
どうしてもと言うならタイトルバーなしにしてそれっぽいのを自分で描画する
>>332 そこで.NET4.0の契約プログラミングですよ。
>>360 ありがとうございます。
小さいウインドウから元のサイズにするだけなので
コンテキストメニューで代用します。
>>359 ある種の思い込みがある人たちにとってはそうなんでしょ。
思い込みっていうか、たぶん「ifが取るのはbool型の値」という風に論理的に考えず、
経験的に「ifの後に来るのは2項演算じゃないと気持ち悪い」と感じるタイプ。
そういう人は自分の感覚を修正すべきだね。
flag==true って書くのはいいけど、 flag!=true とか !(flag==true) とか !(flag==false) とかいろんなパターンで使われたらもうイライラ。
これは言葉に直すと素直だけど if(n>0) これはわかりにくいよね if(n<=0) でもelseの方の文を長くしたいならこうなる if(!(n>0))
WPF負荷高いね ボタン4つ作っただけなのにウィンドウサイズ変えると c2dの使用率50%になっちゃう
ねーよ
負荷は大きい、小さい。高い低いじゃない。
大負荷 の検索結果 約 5,920,000 件中 1 - 100 件目 (0.28 秒) 小負荷 の検索結果 約 3,390,000 件中 1 - 100 件目 (0.32 秒) 高負荷 の検索結果 約 2,480,000 件中 1 - 100 件目 (0.27 秒) 低負荷 の検索結果 約 1,260,000 件中 1 - 100 件目 (0.42 秒)
中負荷 の検索結果 約 7,770,000 件中 1 - 10 件目 (0.21 秒)
結論 負荷は中というのが正しい。
>>322 いつ時計を作ってたの?
時計をタイマーで作るの?
"大負荷" の検索結果 約 10,500 件中 1 - 50 件目 (0.26 秒) "小負荷" の検索結果 約 13,500 件中 1 - 50 件目 (0.28 秒) "高負荷" の検索結果 約 461,000 件中 1 - 50 件目 (0.31 秒) "低負荷" の検索結果 約 123,000 件中 1 - 50 件目 (0.39 秒) "中負荷" の検索結果 約 16,500 件中 1 - 50 件目 (0.33 秒)
"負荷が大きい" の検索結果 約 2,120,000 件 "負荷が小さい" の検索結果 約 1,070,000 件 "負荷が高い" の検索結果 約 69,000 件 "負荷が低い" の検索結果 約 1,600,000 件 "負荷が中い"との一致はありません。 "負荷が中くらい" の検索結果 約 18,600 件
一方その頃、「そんな大きなフカヒレは入らないよう!」 という夢を中国が見ていた。
いつまでやってんだ。スレタイ読め
本当に下らないかもしれませんが・・・ *.exe形式で配布〜ローカルにインストールして使う、 WEB上のXMLを取得して処理したり、 XML-RPCでブログ投稿 などを行うソフトを作りたいのですが、 こういうソフトは、どういう単語で検索すれば情報が集められるのでしょうか 勉強するとっかかりが、全くわかりません。 本1冊と、C#入門、みたいなサイトは一通り勉強してきましたが この辺の情報はなかったです。 「WEBサービス」では、サーバサイドの話のようで・・・
XML Web サービスクライアント、だな。
ちなみに「*.exe形式で配布〜ローカルにインストールして使う、」 というのは実行ファイル形式のインストーラーのことだ。 基本的にはこれは.NETで作らない方がいい。 自己解凍書庫、インストーラー作成ツールなどを使う。
グローバリゼーションの警告うぜぇ…
382 :
デフォルトの名無しさん :2010/03/24(水) 11:41:39
directxはc++とかと構造は同じ?
>>382 その質問は、カレーとスプーンが構造が同じかと問うていることに等しい。
ちなみに、DirectXはCOMでできている。
単なるAPIの塊なのにC++から呼び出す場合とC#から呼び出す場合で違ってたら笑えない
385 :
デフォルトの名無しさん :2010/03/24(水) 13:48:55
レジストリの登録について質問があります。 自作のアプリケーションでjpgファイルを開くために、 registryValue = programpath + " %1"; として登録しました。 これで、アイコンを選んで、右クリックで登録したメニューを実行すると、 「パスに無効な文字が含まれています」とエラーになります。 どうやら、%1を C:\DOCUME~1\USERNA~1\MYDOCU~1\data\20EAE6~1\PIC~2.JPG のように、アプリケーションのショート名(?)に展開しているようです。 これを回避するには、どのようにしたらよいでしょう?
string形式の変数aの指定した行の文字列を取得したいのですがどうすれば取得できますかね
String.Splitで配列に分解してアクセスすれ
>>387 StringReader.ReadLine
>>385 8.3形式のファイル名が問題なんじゃなくて、programpathに半角スペースが入っているせいで実行ファイルが見つかってないんじゃない?
WPFとC#のコードの連携の説明がどこにもない コードからウィンドウサイズ変えることすらできない 使えない
お前の使えなさっぷりをそんなにアピールしなくても大丈夫、世間は意外に優しいよ
WPFのスレで聞けばいいのに みんな始めたばかりだからやさしいぞ
自クラスのprivateフィールド変数もプロパティを 通してでないとアクセスできないようにする方法ありますか?
無理だろ
特にないな 変数名を\uxxxx並べた理解不能なのにしとくとかどう?
自動実装プロパティにするくらい
自クラスくらい自分が責任持って扱えよって思っちゃうけど、 複数人で1つのクラスいじってるような場面だとそうはイカンザキ?
その自動プロパティはgetsetの中身を省略することらしいですが ここに式を記述してもいいのでしょうか? そしたら思っているようなことができそうなんですが public string Name { set{ this.Name=valeu;} } 例えばこんな感じ
できるようになったら個人的にうれしいけど無理
>>395 そんなフィールド(とプロパティ)が存在しうるとして、
プロパティーのセッターやゲッターは自分自身を呼び出してバッキングフィールドに
値を代入したり取得したりするんだろうか。
それって無限に再帰することになるんじゃないか?
少しは頭を使おうよ。
まあ気持ちは理解できなくもないがw
VBはせっかくメソッド内Static変数があるんだから、ゲッターからもセッターからも
アクセスできる位置にメソッド内Static変数が書ける構文さえ用意してくれれば
バッキングフィールドを不要にできるんだけどな。
ことほど左様に、VBチームはやる気がなさ杉気が利かな杉。
開発者までVB厨っぽい。
>>395 それって、ごく普通のプロパティ公開のシチュエーションじゃないの?
privateな範囲くらいテメェで管理しろってことだろーけどね
別ファイルにpartialで分けて、privateフィールドは見ない振りをする
ProrertyChangedイベントを使えば
>>395 のご所望に近いことが出来そうな気が
しないでもないでもない
privateなフィールドに値を代入する時に適切な定義域かどうか確認するのがメンドイとか、そんな理由だろ。 フィールドに属性か何かで定義域指定できるようになったら蝶うれしいぞ。
そしてDbcへ・・・
privateな範囲ならDebug.Assert入れとけばいいじゃん
正直契約プログラミングはかなり興味ある。
興味あるならVS2010試そうぜ
ああ、そういうことか。 自分のクラスのprivateなメンバ変数に対してアクセスせず、 常にプロパティ越しにアクセスしたい、ということか。 すればいいじゃん。 こういうのはコーディングテクニックじゃなくて、ポリシーで解決すべきことがらだ。 どうしてもこねくり回したいなら private変数と抽象プロパティを定義した親クラスを作って継承すればいい。 そんな必要性は感じられないが。 だいたい、VSなら特定の変数がどこで参照されてるか全検索は簡単にかけられるんだから、 一括で修正してしまえば済む話。
すべての変数がプロパティになればいいのに
元の木阿弥
まあ現実的な妥協としてはEditorBrowsable(false)を付けるぐらいかね。
あとは
>>413 の言うようにベースクラスのプロパティをフィールド代わりにするか。
でも一番の方法は、そんな下らないことは考えないこと。
>>414 否、すべての変数はグローバル変数とするべきだ
( ̄ー ̄)ふっ
(^-^)♪
C#のクラスってC言語でいう構造体の延長だろ たくさんのデータを含めるし。
えっ!?
第12回の「4. スレッド プールの何が問題なのだろう?」の話がかなりでたらめな件
でたらめはお前だカス
Indexというプロパティで配列の添え字範囲チェックしてるんだけど Indexを呼び出す側でもやっぱり添え字でチェックして2重になってるんだけど やっぱそういうもんですか? それとこの場合ゲッターの戻り値どうすればいいでしょうか? public int Index{set{if(0<=value)_index=value;}} private void hoge() { }
誤って途中で書き込んでしまった private void hoge() { ++Index; if(0<=idx && list.Count>idx) a(list[idx]); }
>>425 基本的に、添字チェックはCLIのレベルで自動でやってくれるから必ずしもやらなくていい。
(すなわち添字チェックは最悪ひとつも書かなくていい。失敗したら例外が発生する)
で、そのセッターってなんかおかしくね?
てことは、tryで包み込むということかな なんかどこまで例外処理を書けばいいか迷うね 下手したら同じ例外処理をいくつものクラス間で 3重4重やってしまうことになるわけで 続行して問題が出る場合以外は 条件分岐を極力書かずにtryで済ませる方が いいような気がしてきた
例えば、picturebox.loadにしてもファイルが無ければ平気でエラー出して強制終了なるし GetDirectoriesでもアクセスできないディレクトリを検索してエラー吐くし .Netで用意されているクラスですらエラー出すんだから 正常な値であるはずという前提で作っていった方がいいのかな
おいおい・・・
>>428 最初の質問の時に「2度も添字チェックが必要なのかと」問われたので
必ずしもやらなくてもいいと答えただけで、
例外処理と明示的な添字チェックと比較して、
より書きやすい方法で書けばいいんだよ。
で、添字処理を自前でやるsetter/getterって、
C#で今まで必要になったことが一度もないんだが。オレだけ?
標準ライブラリのコンテナ使うだけで、困った事無い。
432 :
デフォルトの名無しさん :2010/03/25(木) 15:12:48
Graphicsで縁取り文字列を書こうとしてて問題が出てきたので誰か良い案があったら教えて下さい ↓のようにAddStringでpathに作ったアウトラインをWidenで太くしてやるやり方が ググッたらシンプルなので使おうとしたのだけど、フォントサイズに対してWidenで太くする サイズ(コード内でいうwidth)がでかくなるにつれ漢字などの細かい部分で意図しないツノが生えてきてしまうんだ (このコードで言えば「刷」の左上など) この現象の回避策や、他のシンプルな縁取り文字作成方法があったら教えて下さい(元からそういうフォントを使えというのは無しで) // gはGraphics, pathはGraphicsPath Font font = new Font("メイリオ", 26.25, FontStyle.Bold); Single sizeInPixels = font.SizeInPoints * g.DpiY / 72F; // ピクセル単位のサイズに変換 Single width = 5.0F; path.AddString("印刷中", font.FontFamily, (Int32)font.Style, sizeInPixels, new PointF(10, 10), null); using (Pen pen = new Pen(Color.Black, width)) { path.Widen(pen); } g.FillPath(Brushes.Black, path);
433 :
デフォルトの名無しさん :2010/03/25(木) 15:50:35
>>432 ですけど自己解決しました。
Widenに使うPen(コードで言うpen)のLineJoinプロパティをLineJoin.Miter(デフォルト)以外にしたら出なくなった。
ついでにLineJoinの値によっては柔らかい感じにもできることが分かって
さらに得した気分。
お邪魔しました〜
添え字のエラーを例外で処理するのはダメだろ 原則「発生したらバグ」の類の例外だ それにIndexOutOfRangeやNullReferenceのような例外は一度出たら 頻繁に出ることが多いので例外で処理すると極端にパフォーマンスが低下することがある
はぁ!?
public/protectedメソッドorプロパティで外部から渡されたのに出すのはいいだろ privateな部分では(渡す前に)Length参照した方がスマートじゃないでしょうか
自前のファイル入出力クラスで指定ディレクトリにある ファイルを取得しstring[]で返すのを作ったとして そのクラスを利用する側もやっぱりファイルがあるのかないのかチェックし さらにそのクラス利用する側もファイルがなかった場合を想定してコードを書かないといけない この同じチェックは永遠に続くの?
>>438 書きたければ書けばいいし、例外処理で済ますなら済ませればいい。
カスタマイズ可能なキーボードショートカットを実装したいです。 まず、 Up, Scroll, 20 Down, Scroll, -20 Right, Next Left, Prev というふうなテキストファイルを読み込んで、キーとメソッドを結び付けたいです。 (この例では、左からキー、メソッド名、パラメータにしてます) 具体的な実装方法として思いつくのが ・キーとメソッド名をもつ連想配列を用いて、switch文で分岐してメソッド呼び出し。 ・switch文ではなく、リフレクションでメソッド呼び出し。 なのですが、上のはコードが冗長になりますし、下のはパフォーマンス面で不利かもしれません。 キーとデリゲートを持つ連想配列を用いて呼び出せればスマートだとは思うのですが、 引数が異なると別のデリゲートと、それを入れる連想配列を用意する必要がある(と思う) ので悩ましいです。スマートにこなす方法なんかがあればアドバイスお願いします。
パフォーマンス気にするところじゃないな
>>440 その1行分を表現する構造体を作って、XMLSerializerでさくっと読み書き。
アプリ上ではDictionaryか何かの表持たせておく。
キーイベントを受け取ったら表を見て登録したメソッドを呼び出す。
メソッドの登録はdelegateかラムダ式を使えばいい。
ラムダ式の登場です。
果たしてふらっとスレの行く末やいかに!?
質問です ListViewのチェックボクスのチェックを付けたり、外したりするのは画面からクリックしたときではないと無理なのですか? ソース内でチェックを書き換えたいのですが、CheckedListBoxのSetItemCheckedメソッドみたいなのが存在しないみたいなので困っています もともとはCheckedListBoxを使用していたのですが、アイコンを表示するためにListViewに変えました チェックの状態が変わらないとItemCheckイベントも起きないですし、何か方法はあるのでしょうか
ListViewItem.Checked
448 :
デフォルトの名無しさん :2010/03/25(木) 21:43:06
DataTable で自動で計算する項目があるんだけど、 DataColumn.Expression では計算できないので、 DataTable.TableNewRow イベントで値を計算して入れようと思ってます。 これを XML で保存するために WriteXml すると自動で計算した項目も出力されると 思うのですが、自動で計算した項目は出力しないようにする方法はあるのでしょうか?
>>447 listView1.SelectedItems[0].Checkedのことですよね?
これってSelectedItemsには今チェックされている項目が格納されてると思うんですが、
このプロパティではチェックされている項目のチェックを外すことは出来てもチェックが付いていない項目にチェックを付けることは不可能ではないですか?
>>448 Copyして列をRemoveしたあとでWriteXmlするとか?
>>450 Itemsからアクセスすりゃよかろう
おおこんな簡単だったんですね ありがとうございました
>>453 ハァ?
無視させたいフィールド、プロパティにXMLIgnore属性をつけておいて、
XmlSerializerに食わせて吐き出させればよい。
やってみろw
webBrowserコントロール上でマウスカーソルが動いた時にイベントを拾いたいんですけど なにか方法がありますか?FormとかButtonだとMouseMoveイベントがあったけど、それと 同等の機能がwebBrowserには見当たりません。
457 :
デフォルトの名無しさん :2010/03/25(木) 23:12:08
>>454 DataTable のカラムに XMLIgnore 属性つけられるなら
やってみせてくれw
IXmlSerializable実装して自分でシリアライズするかどうか決めたら
>>458 それ結局XML吐く処理を全て自前で書くという意味だけどわかってる?
462 :
デフォルトの名無しさん :2010/03/25(木) 23:18:54
>>459 馬鹿だからできねぇってこと知らないの?
o(´・ω・`) ぶつお
エクスプローラだとフォルダのプロパティで フォルダ数、ファイル数が瞬時に出ますが こういう機能はありますか?
瞬時に出ないよ。たくさんフォルダ・ファイルがあるところで見ると、 一生懸命カウントしてるのがわかる。
なるほど あれはGetDirectoriesやGetFilesやるしかないですか? ファイルやフォルダ検索の進行状況を表示させたいので まず数を取得してやろうと思っていたんですが
なるほどなるほど
>>441-444 設定ファイルを読み込んだときに、
delegate void Invoke();
Invoke inv = () => Scroll(20);
てな感じのデリゲートをこしらえて辞書に登録すれば、呼び出し時はスマートに済ませそうですね。
こしらえるときは地道にswitchで分岐するとして。
しかしこれは、戻り値を返すメソッドの場合は呼び出し側に値を返せない欠点があります。
でも、戻り値を返すようなメソッドをキーに割り当てる場面は今のところないのでこれでいってみます。
コマンドのシグネチャを void Execute(object[] parameters); みたいにして、パラメータを配列で渡せばいい
お世話になります。 以下のこと、教えてください。 VisualStudioにてユーザーコントロールやカスタムコントロールを作成し、ビルドすると、 そのコントロールがツールボックスの”(プロジェクト名)コンポーネント”といったタブ内に デフォルトで配置されます。 このデフォルトの配置場所を任意のタブ内(該当タブが無ければ新規作成)にすることは可能でしょうか? 属性でなんとかなりそうな予感がしていたのですが、どうにも見つけきれませんでした。 よろしくお願いします。
>>471 そこは開発側で手をいれるところでなく、運用側で対処すべき問題だと思うんだが、どうよ。
>>472 やはりそこは個人々々でなんとかしてもらうしかないですかね。
ありがとうございました。
>>473 エラーが出たならエラーの内容書けよカス
>>473 URLのソースコードを見てみたが、
とりあえずbutton1を押した後じゃないとcheckBox1は押しちゃいけないように見える。
というか、こんなレベルで詰まってちゃ何もできないぞ。
不具合が出たらデバッガで1行ずつ動かしながら再チェックする習慣をつけよう。
>>478 何も考えずにソースをそのまま入れてみて
ExpandTabsにカーソルを合わせてみ
xxxx.ExpandTabsの形でないってことは同一クラスってことなんだが
>>479 そういう意味じゃなくて・・・
2004年当時と違って場所が変わってるようなので
サンプルソースのusingだけだと
エラー 3 名前 'ExpandTabs' は現在のコンテキスト内に存在しません。
となるんです。
ああ・・・ 失礼しました sjis使わないので・・と思って頭の方全部すっとばしてみてませんでしたorz
しかし意味不明な言葉だ… > サンプルソースのusing
コピペも満足にできないのはつらいな
485 :
デフォルトの名無しさん :2010/03/26(金) 19:38:17
http://msdn.microsoft.com/ja-jp/magazine/dd882520.aspx のカレンダーで遊んでみようと思っています。
このプロジェクトを開くと、
Microsoft.Windows.Controlsと
Microsoft.Windows.Controls.Primitivesの参照が必要なので、
WPFToolkitをダウンロードし、参照を追加しました。
それでもMoonPhaseCalendar/MainWindow.xamlの、
<vsm:VisualStateManager.VisualStateGroups>
の行で、
アタッチ可能なプロパティVisualStateGroupsが、
型VisualStateManagerに見つかりませんでした。
とエラーになります。
これにはどう対処したらよいでしょうか?
WPFのデザイナにはよくあること まず気にせず実行してみる
フォームのデザインを2種類、切り替えられるアプリケーションを作っています。 複数のフォームで値を共有するにはどういった方法が適切ですか? 今は1つのフォーム内(Form1.cs)に切り替えられるよう書いていますが、 デザイナが使えないのは何かとても間違っている気がします。 1つのコンポーネントを2つのフォームから参照できるとスマートだと思うのですが・・・ よろしくお願いします。
>>487 Document-Viewアーキテクチャだね。
Viewから保持するデータ(Document)を分離する。
もたせ方は、コンストラクタで渡そうがプロパティで引き渡そうが好きにすればいい。
それよりも、メインのフォームを切り替えるのがちょっと面倒そうだなー、と心配するかな。
>>488 ありがとうございます。
Document-Viewアーキテクチャを見ると、
「そのためにWPFがあるのです。」という空耳が聞こえます、気のせいですよね。
ご指摘の通り、そこで悩んでいます。
フォームの値をまとめた構造体Dataなどを作って、
Form2 a = new Form2();
a.Data = this.Data;
this.Close();
みたいにしてもいいのでしょうか?
>>489 だよね。
その書き方だと、this.Close()を呼び出した直後にProgram.csのMain関数が終わってしまう。
そこでMain関数内をループ構造にして、
Application.Runを複数回呼び出せるようにするとどうだろう。
そのタイミングでメインフォームを切り替えるとか。
WPFのコードビハインドとXAMLの関係は、物理的にビューとロジックを分けて 分業しましょうっていう考え方でDoc-Viewとは違うよ XAMLはWinFormsのDesigner.cs相当で、コードビハインドとは別にXAMLだけを入れ替えるようなことはしない そういうのはMVVMとかもっと高次の枠組みでやる
>>490 bool run = true;
while(run){
Application.Run(new Form1());
Application.Run(new From2());
}
どう・・・なんでしょう。
Program.csにData(Document)保存した方がいいような気もします。
>>491 ビューと"ロジック"なんですね。 参考になります。
WPFはスケッチブックと色鉛筆渡されたような気持ちになるので触る勇気がまだありません・・・。
ちなみに、Formは大学ノートとシャーペン。
ManageForm.Visible =false
ManageForm.Visible =true
>>494 メモリ×2
でも、それも手段の一つです。
>>489 そもそも「フォームの値」などというものが存在していることそれ自体がおかしい。
WPFとか関係ない。
聞いた感じクラスを使ったプログラミングが理解できてないようだから
まずそれを覚えないことには話にならないよ。
>>493 そこじゃないw
WPFでいうビューとロジックの分離っていうのは、デザインとコードをはっきり分離できていれば
デザインはデザイナが担当してコードはプログラマが書くという形で分業できるという考え方。
だからDoc-ViewやMVCでいうならXAMLもコードビハインドもViewに属する。
>>497 フィールドの受け渡し、と言うべきでしょうか。
言い直しても理解できてなけりゃ同じだろう
俺だったらフォーム分けないな Panelか何かに配置して入れ替える おそらくデザイナ使いたいからその辺を避けようとしてるのだろうけど だったらUserControlでも継承すればいいんだよ
>>492 おかしなことせんとApplicationContext使えば?
クラスライブラリ書くとき内部クラスにするの面倒くさいのでinternal使ってよいですか?
505 :
デフォルトの名無しさん :2010/03/26(金) 23:48:20
例えば 今日の朝生の出演者名簿から 今日の討論の流れをシュミレーションするには どれぐらいの経験がひつようでしょうか?
>>501 その方法で解決できました。
ありがとうございます。
ネットの画像を保存する方法は? タイマーとか使って一定時間ごとに自動的に保存するようなのを作りたいんだけど。
画像がJPEGとかなら、普通にダウンロード。 WebBrowserで取ってきて、キャプチャってのもありだね。
512 :
デフォルトの名無しさん :2010/03/27(土) 15:42:11
C#にてWindowsフォームアプリケーションを作成しています。 DataGridViewを置き、 実際に内容が表示されている(値のある)行をクリックしたときはその行を選択状態にさせ 実際に内容が表示されていない下部の余白をクリックしたときは、選択状態を解除したいと考えているのですが、 余白をクリックしたことを検知するにはどのようなイベントを行えばよいのでしょうか。 よろしくお願いします。
HITTEST系のイベントなかったっけ?
>>512 欄外をクリックしてChange系イベントをもらったときに
選択中のindexを問い合せると-1が返ってきたりしない?
ListBoxではそういう動きをする。
そのものずばりの HitTest() メソッドがあるな。
あっそ
できた private void dataGridView1_MouseDown(object sender, MouseEventArgs e) { if (dataGridView1.HitTest(e.X, e.Y).RowIndex < 0) { MessageBox.Show("hoge"); } }
できたね
おめでとう。
Visual Studio C# Express Editionで、 フォームの入った.csをエディタでいじってフォーム部分を壊してしまったとき なんとか復活させる方法ないでしょうか。 Express Editionのフォームデザイナが異常終了しちゃうんです。 ビルドはできるし、できあがったexeも実行出来るんですけど。 フォームデザイナだけ言う事聞いてくれない。
異常終了って何だよ? 赤いバッテンが出るとかか?
ソースのほうを直すしかない
exeから逆コンパイルすればいいのでは?
何がやねん
せやな
これだから大阪民国人は・・・
せやせや
でんがなまんがな
日本人の97%は朝鮮人か中国人の直系
そういう言い方だと、朝鮮人とか中国人ってのも意味ないんだけどな。
全人類はアフリカの女性からだっけ? 全員はアフリカ人だな
>>521 うん。そう、それ。
Visual C#でエラーが発生したため終了します。
エラー報告を送信する しない
× データが失われる可能性を防ぐため、デザイナの読み込み前には以下のエラーを
解決する必要があります。
× オブジェクト参照がオブジェクトインスタンスに選定されていません。
ちょこちょこ直してくしかないんじゃないかなぁ。
初心者なんでどこがエラー原因なのかさっぱりわかりませんよー
じゃ、あきらめろ。
537 :
デフォルトの名無しさん :2010/03/27(土) 21:45:05
>>517 マウスでクリックしたときのイベントを書くとき、
MouseDown,MouseClick,Click,MouseUp
どれを使うのが適切なの?
イベントの発生順がちがうのは分かるけども、
どれか1つしか書かないときはどれが望ましいのか分からないっす
(-_-;);
クリックでいいじゃん
処理による。イベントによって取れる情報が違うし、タイミングが重要なこともあるからね。
>>533 実はVSのデザイナーはいろんな理由で落ちる不完全な代物なので、
そういうものだと思っておこう。
落ちた位置自体はレポートされてるから、
それを参考に修正する。大抵はコンストラクタ周り。
現在、.net Framework3.5で開発中です。 特定のディレクトリの配下すべてを 1つのファイルにバックアップ・リストアする機能を作成しています。 (イメージ的には、zip圧縮と解凍) 圧縮はSystem.IO.Packageのクラスでどうにかできたのですが、 解凍がうまくいきません。 今やっている考え方は、 packgeのオープン→ファイルパス取得→取得したファイルパスからファイルをコピー の流れで、パス取得とコピーを繰り返している状態です。 なぜかコピーできるファイルとコピーできないファイルが存在していて困っています。 なお、ソースで圧縮したzipファイルは、laplusで解凍、ファイルが適切に存在していることを確認しています。 誰か理由を知っていますか? また、代替案をご存知ですか? #J#のライブラリによる圧縮・解凍や、フリーのライブラリを利用することは現状考えていません。 よろしくお願いします。
オセロの盤面のようなものを描きマウスクリックする事で 左1右3とマス目を取得するプログラムを作りたいのですが 参考になるサイトなどがあったら教えてください
すみません 左1上3でした
>>541 System.IO.Packagingはzipファイル作るためのライブラリじゃないよ
Open Packaging Conventions、つまりxpsとかのためのパッケージ仕様
>>541 そもそも ZIP 用ってわけじゃないので、ダメかも知らんね。
まっとうなライブラリ使った方が早いと思うよ。
>>542 たかだか 64マスなんだから、PictrueBoxとか配置しちゃうってのもひとつの手。
>>542 void form_MouseUp(object sender, MouseEventArgs e) {
int x = e.X / マス目の幅;
int y = e.Y / マス目の高さ;
}
>>544 回答ありがとうございます。
Open Packaging Conventions用のクラスだというのは承知です。
固定のアプリからの圧縮・解凍ができればおkらしいです。
本当ならJ#のライブラリを使ったら簡単というのはわかるのですが、
いかんせん仕様上使わない方向らしいです。
もし完全に無理なら仕様変更を訴えてみます。
その仕様を決めた奴に聞けよ。
>>545 回答ありがとうございます。
やっぱり無理そうですか…。
まっとうなライブラリとはどんなライブラリですか?
GZipStreamでも使って独自フォーマットでまとめて突っ込めばいいじゃん ヘッダにファイル名とサイズさえ書き込んでおけば充分だろ
>>548 仕様を決めた人は、C#を知らないわけでorz。
無理なら無理と言い切りたいのですが、圧縮だけはできてしまったので困った次第です。
7zip
GZipStreamは単一ファイルにしか使えないからないわ。
>>549 フリーのライブラリがいろいろ転がってるだろ?
サポート云々とか言うなら、PkZipのがいいな。
仕様を決めたやつがC#知らないんだったら、「これじゃできません」って言っても 否定はされないだろ。
556 :
541 :2010/03/27(土) 22:51:09
1人1人に返すのが大変なので一括で。 初め、GZipStreamも考えたのですが、 ・必須仕様 →アプリ上で圧縮・解凍が可能。 ・推奨仕様 →アプリ外でも解凍可能。 という感じだったので、却下した次第です。 あと、フリーのライブラリも検索で引っかかってたのですが、 商用利用のために怖いと上の人間に言われて却下状態です。 無理ぽなら、月曜にでも理由を言って、改善案を作ってもらいます。
zlibでもP/Invokeしてきて使えば いくらフリーといってもさすがにzlibを信用できないなら何も使えないでしょ
あの…ここ…初心者用…
>>556 プログラムの安定性は実績で決まるのであって、
商用かオープンソースなのかは全然関係ないんだけどな。
オレはアーカイブ内のファイル構成はSQLiteで外部で管理してるよ。
データファイル側はただ単に暗号化して連結してるだけ。
怖いのは安定性じゃなくてライセンスだと思うよ、多分
561 :
541 :2010/03/27(土) 23:07:51
>>557 了解です。
zlibも検討します。
>>558 知ってるか?
俺はC#はじめてまだ5ヶ月だから初心者なんだぜ。
>>553 ちゃんとzip用のヘッダさえ書いてやれば、
ファイル一つ一つの圧縮はGZipStream使ってもれっきとしたzipファイルが作れるんだぜ
>>560 ああ、ライセンスね。そのライブラリは調べてなかったな……。
って、Ms-PLじゃねえか!
.NETの世界で一番有名なオープンソースライセンスなのに、
怖いとかモグリだろ。
564 :
541 :2010/03/27(土) 23:10:14
>>560 そういうこと。
できたらおkじゃないところが痛い。
まあオープンソース=GPL汚染というのはやはり根強い印象があるよねー
>>555 のようなMS-PLなら全く問題ないだろ
最近のMSのサンプルやMSがオープンソースで公開してるライブラリもほとんどMS-PL
C#すげーな
568 :
541 :2010/03/27(土) 23:16:46
みなさんいろいろありがとう。 とりあえず結論としては、 ・標準ライブラリはやめとけ。 ・dotnetzipができるならいい。 ・ダメならzlibでどうにかする。 ・それでも無理ならあきらめろ。 でおk?
まあ自作しろって言われるのがオチだな
PKとかのライブラリ買え、ってのが抜けてる。
.NET4では大量のMS-PL由来のライブラリが本家.NETに統合されるよ WPFの新しいコントロールとかDLRとかMEFとか新機能の多くがMS-PL
deflateの自作は重すぎ。
>>568 541が使用している標準ライブラリは必ずしも選択は間違ってないけど、使い方がおそらく間違っている。
dotnetzipで問題ないだろうけどこのスレのやつが実際に確かめたわけではないので、自分で調べて考えろ。
574 :
541 :2010/03/27(土) 23:26:56
とりあえず、自作する方向でも、一度上の人と相談します。
>>573 の言うとおり、使い方が間違っている可能性もあるのでそれも含めつつ。
ダメなら即効白旗揚げて、対策考えてもらいます。
ありがとうございました。
あのよ、コスト考えろよ。ZIP圧縮・解凍ライブラリなんて自作してたら、 どんだけ時間かかると思ってんだよ。
当該アプリで圧縮したものは、他のアプリでも伸張できるけど、 当該アプリで伸張できるのは、当該アプリで圧縮したものだけ という仕様でよければ、自分で実装するのも然程困難ではない
そんな実装するくらいなら、BSDライセンスのライブラリでも探すわw
そんなロクにテストもしてない実績もない バグだらけの糞自作ライブラリなんかそれこそ怖くて使いたくないわ
>>540 あれ、レポートされてたっけ。
また今度じっくり向きあってみます。
自分が組み上げたコードじゃなく引き継いだものなので、
どこがどーなってるかさっぱりなんですがねw
誤解されそうなので補足しとくけど
>>578 は拾ってきたライブラリを使うんじゃなくて
自分で実装する場合の話ね
よく「設計した人から言われたんで」みたいなこと言うやついるけど、 きちっと筋道建てて論破できない時点で、そいつも同罪。
>>576 作るのは簡単だが、世間並の圧縮率にするのと、バグがほとんどないと思えるレベルの安定性にするのが大変
Ms-PLのdotnetzipはどう使えばいいの? 黙って実装しても問題にならないの?
オレは業務でZIP書庫作る必要があって、結局は自前でやったなぁ 実データはDeflateStreamで済むしヘッダだけ実装すればいいだけだよ
.NET界隈はわりと自由なライセンスが普及してて良い
まぁ、使っていいって言ってくれてるんだから隠す必要はないな。 ライセンスで認められた範囲で堂々と使うといい。
許諾者は、著作権、特許権、商標、またはその他の形式の出所をコード内に常に示しておく必要があります ここがよくわからないんだけど、結局配布する場合どうすればいいの?
>>587 隠す方法はいろいろある。ネイティブにもできる。
流れを読まずに質問です。 C#で使えるコントロールのライブラリってないでしょうか? ・ゲージやメーター ・Officeっぽい、Vistaっぽいコントロールのスキン表示 ・スキン機能 こんな機能があるライブラリがあれば名前だけでもいいので教えてください。 商用ではいくらでもあるのですがライセンス料が高すぎるのでできればオープンソース のライブラリを教えて頂ければと思います。 日本語・英語は問いませんが、日本語を使用しても問題のない方が望ましいです。 注文だらけですが、もし知っておられる方がいましたらお願いいたします。
WPF
いやWPFはNFW3.5以降ということなので、NFW2.0以降で使用できるライブラリを お願いします。 というか最初に言い忘れてました、ごめんなさい
NFWって略は初めて見たかもしれない
聞いたことないな .NETのオープンソースが盛り上がりだしたのって最近MSがオープンソースに積極的になってからだからな WPF使えば一瞬でできる報われないことをわざわざやる人もいないだろ
いやNFW3.5にするとWin2000を切り捨てざるを得なくなるので、それを避けたいだけなのです。 フリーではライブラリはないか、または聞いたことがないぐらいマイナーということですね。 昔はいくつかあったみたいですが、今はすべて商用に変わっていてがっくりですorz
2000は切り捨ててもいいのよ
UIだけActiveXでHTMLやSilverlightベースにしてしまえ
jQueryがあるじゃないか
ふーん
はーん
10年前のOSだもんなあ。 IE6も10年前でみんな葬り去りたくてウズウズしてるんだから、2000も葬っていいわな。
2000のSP4は、7月にサポート切れだったろ。 そのタイミングで俺的には終了だな。
MSだけじゃなくて開発側も古いWindowsサポートって頭があるからな 切っちゃっていいでしょっていうか切っていこうよ。.netなら尚更
逆にMSがサポートしないものを「サポートします!」とか、 すごい勇気だなぁ、って思いますよw
>>592 RoboFormとか、skinstudioかねぇ?
後者はDirectX用だからやや違うかもしれないけど。
他は皆がレスしてるようにWPF自体がスキン機能そのものの(機能とデザインの分離)だから
それを使うのが一番の王道だな。
MSじゃないどこかの企業がそれを大々的にするって言ってたな。
DevExpress .NET Windows Forms Skinning Library SPREAD for .NET Windows Forms Edition AppStylist for Windows Forms ぐぐったら色々あるみたいね。もちろん、みんな商用プロダクトだが。
スキン突っ立ってオーナードローするだけ出しな そんなに手間じゃないだろ
十分手間だろ 一つやったら全部やらないと空気読めてない感じになる
SPREADは違うだろ。
みなさん、いろいろとありがとうございます。 私が今開発しているのはとあるゲームなのですが、それがWin2000以降に対応していたもので Win2000ユーザーを切り捨てるのもどうかと考えてたのです。 数年前ならコントロールのライブラリも意味があったかもしれませんが、今ではWPFが一番 いいみたいですね。 WPF検討してみます。 しかし、日本語だと書籍はないですね... いろいろとありがとうございました。
WPFならXPの古いマシンは切り捨てることになるよ まあゲームなら問題ないな
616 :
デフォルトの名無しさん :2010/03/28(日) 16:35:08
配列に条件によって値を入れたいと思います。 (1) int[] table = {01, 0, 120, 270}; (2) int[] table = {02, 0, 180, 90}; と2種類の値を入れたいとします。 (1)の場合の条件と、(2)の場合の条件が違う場合、 if(条件) int[] table = {01, 0, 120, 270}; else if (条件) int[] table = {02, 0, 180, 90}; //以下tableを使った処理。 とすると、処理をするところで、 tableがないとエラーになります。 int[] table; if(条件) table = {01, 0, 120, 270}; else if (条件) table = {02, 0, 180, 90}; //以下tableを使った処理。 とすると、この書き方ではだめだと、大量にエラーになります。 配列の書き方という基本的なことなのですが、書けずに悩んでいます。 アドバイスお願いします。
>>615 ちょっとそれ詳しくお願いします。
要求スペックが高いから古いマシンでは駄目
XP SP3以降じゃないと駄目
という意味ですか?
>>616 そりゃあ、その2箇所を通過してしまうような条件が残ってるからだ。
当たり前のことじゃないか。
素直にnew int書くだけでいいと思うの
int[] table; これはifの前に宣言だけして table = new int[]{02, 0, 180, 90}; とかでできない?
>>617 前者
どんな環境でも動くことは動くけどバリバリのDirect3Dで描画されてるから
ハードウェアアクセラレーションが十分に効かない環境では厳しい
>>616 int[] table = null;
にするか
if()
〜〜
else
〜〜
とするか
お好きなのをどうぞ
>>621 回答ありがとうございます。
なるほど、やはりそのような理由ですか。
了解しました。
スレチなのでWPFのことは別スレで聞いてみたいと思います。
みなさん、いろいろとありがとうございました。
625 :
デフォルトの名無しさん :2010/03/28(日) 16:47:21
>>620 new int[]でできました。
ありがとうございました。
これをつけるのとつけないのとでは、どう意味が違うんですか?
>>625 いろいろ短縮したのが
table = new int[]{01, 0, 120, 270};
これね
長くかくと
table = new int[4];
int[0] = 01;
int[1] = 0;
int[2] = 120;
int[3] = 270;
こうなる
>>625 アホか。エラーメッセージに全部書いてあるだろ。
ああああああ 間違えた table = new int[4]; table[0] = 1; table[1] = 0; table[2] = 120; table[3] = 270;
table = new int[]{01, 0, 120, 270}; こうやって書くメリット?は table = new int[4]; table[0] = 1; table[1] = 0; table[2] = 120; table[3] = 270; この配列に table[4] = 100; とか増やしたい場合は table = new int[4]; これを table = new int[5]; としないといけないけど table = new int[]{01, 0, 120, 270,100}; こうするだけで{}で囲った中の要素分だけ勝手に配列を確保してくれる。 数を知りたければ配列の場合.Lengthでわかるはず
>>590 こっちはまだわかりやすいね
訳が適当だとどうにでも解釈できるよな
>>616 普通にこれだけでいける
table=new []{0,1,2,3,4}
配列なんて使わずArrayList使おうよ
intの配列の初期化がまともにできないレベルだからなあ もうちょい先だろ
うひゃあうひゃあ 配列とか扱うのはメモリ効率悪いwww
男なら配列なんか使うな!
いまどき配列を嫌う男の人って…
大した弊害なくて使えるなら何だって良いさ
ですね
volatile の効果が実感できるソースコードの例は無いでしょうか? 簡単なコードでは実感できないような修飾子なのでしょうか。
無理
そもそも初心者には使う必要のない修飾子
VSの設定保存機能って使ってる? ビルドしたらなんとか.exe.configとかいう名前で生成されるやつ。 自分で用意してるから使わないんだけど、生成させないようにするのはどうするの?
App.configを消せばいい。
>>644 おー、サンクス。さっそく除外しとこう。
646 :
デフォルトの名無しさん :2010/03/29(月) 09:13:16
ArrayListって内部的にリスト構造なの? Listとどう違うの? リスト構造だとインデクサ[]は使えるとしてもアクセス効率 が悪いと思うけど
>>646 いや配列
配列の容量あふれると別の容量大きめの配列作ってコピーするから時々追加にO(n)かかる
ArrayListはList<object>だった気がするなぁ〜
使わないから覚えてない…
ListはArrayListのGenericだから比べるところじゃないだろう ListとArrayListの中身は配列 >ArrayList は、null 参照 (Visual Basic では Nothing) を有効な値として受け取り、要素の重複を許可します。 >Count が既に Capacity に等しい場合には、内部配列を自動的に再割り当てすることにより ArrayList の容量が増加し、新しい要素を追加する前に既存の要素は新しい配列にコピーされます。 >Count が Capacity より小さい場合、このメソッドは O(1) 操作になります。新しい要素を格納するために容量を増やす必要がある場合、このメソッドは O(n) 操作になります。ここで、n は Count です。
ArrayListは過去の遺物。要素がobjectの場合でもList<object>を使った方がいい。 Silverlightでは切り捨てられた。
650 :
デフォルトの名無しさん :2010/03/29(月) 10:13:51
ありがとう。Listという言葉が紛らわしいですね。 C#の参考書を見ると、Windows GUIが簡単にできそう。 MFCを整理してより使い易くしているかんじ。 C++のMFCを勉強してきたけど、きっぱりとあきらめて C#で作り直した方が早いと思う。
ArrayListやHashtableって実装をさらけ出した悪い名前だと思う
そこがメリット
Java由来の名前だが、実装を示唆するような名前でないと速度の見積もりができないので、あれはあれでよい。
>>650 MFCを使ってる人がまだいたことに驚いた
listといえばリンクリストを指すのは悪い慣習だな .NETではインデックスでアクセスできるものをlistと呼ぶ LinkedListもListと付いてるけどIListを実装してない
656 :
デフォルトの名無しさん :2010/03/29(月) 12:24:01
WPFのC#のコードビハインドでのウィンドウサイズの指定方法を教えてください。 xamlでは、 <Window Height="400" Width="400"> と指定します。 FormのC#では、 this.ClientSize = new System.Drawing.Size(1173, 861); のようにできます。 WPFのC#の場合がわかりません。 Windowssize = new System.Drawing.Size(1173, 861); としてみたところ、System.Windows.Window.Windowsizeはアクセスできない保護レベルになっています、 と表示されています。 どこで保護レベルを変更すればよいでしょう? よろしくお願いします。
保護レベル変更は無理
this.Width = 1173; this.Height = 861; これだけ それとWPFでSystem.Drawingは使うな
659 :
デフォルトの名無しさん :2010/03/29(月) 12:27:07
>>657 やりたいことはウィンドウサイズの変更なので、
ウィンドウサイズを変更できればよいです。
660 :
デフォルトの名無しさん :2010/03/29(月) 12:29:59
>>658 ありがとうございました。できました。感謝です。
>>660 また俺が回答してやるよ
どーんとこい!
いや俺が回答した
いやいや俺が
あ、じゃあ 俺がやったよ
質問
現在、C言語で書かれたDLLが提供する関数を
C#から呼び出そうとしています。
悩んでるが、「引数に構造体の配列を持つ関数」の処理です。
下記URLにソースコードを張りました
http://codepad.org/SnH7gdwI 上でいう所のC側の「//<- ここで落ちる」というコメントのある所で不正アクセスで落ちてしまいます。
(stSample[0]に値が入ってるのは確認できました)
C#側の構造体の渡し方がおかしいとかなと思ってるのですが、
どこがおかしいのか分からず・・・。
ご存知の方いましたら、教えて下さい。
public struct ST_SAMPLEDLL { public byte cCount; public fixed byte strBuff[256]; } こうじゃね
文字列にしてそれを渡してパースしてぶっこめば楽だな
教えてください。 マルチスレッドを利用したプログラムがあります。 このスレッドのうち1本で、ローカルファイルにデータを出力する処理があり、そのファイル名を ファイル選択ダイアログ(System.Widows.Forms.SaveFileDialog)を利用して求めることにしたいと思います。 実際にプログラムを組んで実行すると、ShowDialog() を実行する箇所でエラー終了します。 メッセージボックスに表示されるエラーの内容は以下の通りです。 >OLE が呼び出される前に、現在のスレッドが Single Thread Apartment (STA) モードに設定されていなければなりません。 main 関数には STAThread の設定もしてあります。(元からついているようですが) 同じプログラムで、main 関数を実行したスレッド(以下、メインスレッドと記述します)でダイアログを表示すると正常に使用できます。 また、メインスレッドで開けばいいのかと、メインスレッドで表示しているフォームに Invoke を掛けて ダイアログを表示すると正常に使用‥‥出来るのですが、このフォームは最小化&非表示にしているため この状態でダイアログを表示しようとしても画面には出てきません。 メインスレッド以外からファイル選択ダイアログを正常に開く方法はないでしょうか。
UIスレッド以外から操作すんなよ。
ダイアログに見せかけたFormじゃだめなの?
メインスレッド側でAPIで呼べばいいんじゃね?
あー、Thread.SetApartmentStateってのがあってだね
一応、Thread.TrySetApartmentState メソッド ってのはあるけどな・・・。
ひどい赤っ恥だ
メインのUIスレッド以外からUIいじるのはお勧めできないけどな。
>>674 何でtaskkillなんだよ
>ダイアログを表示すると正常に使用‥‥出来るのですが、このフォームは最小化&非表示にしているため
>この状態でダイアログを表示しようとしても画面には出てきません。
ダイアログで出ないとかいうからダイアログに見せかけたForm表示しろっていっただけ
オーナーとの関係で表示がされないだけだろ
そのスレッドは自分で作ったスレッド? それともスレッドプールのスレッド? 自分で作ったスレッドなら、差し支えなければ自分でSTAに設定すればいい(Start前しかできないよ) もしスレッドプールとかなら、これはMTAから変更することはできない。 汚いけど、必要な部分で自分でスレッド作って、STAに設定してメッセージボックス表示、 元のスレッドでは新しいスレッドを勝ち合わせとかするしかないと思う。 最初からUIスレッドにIncvokeする方が無駄はないけど。
そもそもSTAとかMTAって何なの
ようやくシンプルだけどまともに動くものが作れるようになってきたけど
未だにマルチスレッドとかよくわからないな
>>679 も何のことやら
Inside OLE2 嫁。
うん。
>STAとかMTA VC++でATL使ってIEコンポーネント触ったときにちょっとかじった程度だな ナビゲーション関連がこの辺を理解してないとメッセージが来ないとかなんとか
うん。
686 :
668 :2010/03/29(月) 22:26:02
みなさん、ありがとうございます。
てか、はやっ。w
>>670 無知ですみません。
ダイアログに見せかけたフォームというのは、Form を継承したファイル選択ダイアログの
ようなフォームクラスを自分で作る、と言うことでしょうか。
だとすると、今回は遠慮できたらいいかな、と。すみません。
>>671 いまの状況からは少し難しく。すみません。
>>678 System.Threading.Thread を利用して自分で作ったスレッドです。
やっとエラーメッセージの意味がわかりました。
あれは必ずしも main 関数でやれってことではなくて、ダイアログを操作するスレッドに
STA を設定しろってことなんですね。
>>672 や
>>673 さんの仰ってる方法で出来ると理解しました。明日、確認します。
>>669 ,676
自分も UI スレッド(この言葉を忘れていました)以外で UI の操作を行うのには抵抗があったのですが。
‥‥気をつけておきます。
偉そうに
689 :
665 :2010/03/29(月) 22:32:50
>>666 レスサンクス。
バッファの取り方がまずいという事ですか。
今手元に環境がないので試せないですが、
明日試してみます。
良いサイトか何かあれば、いいんですが、
なかなか見つからず・・・orz
ちなみに、環境は
XP,VC# 2008Express
(書き忘れました)
バッファの取り方でなくて、C#とCの型の違い。
691 :
665 :2010/03/29(月) 22:42:37
>>690 サンクス
それで、最初の構造体はアクセスできるけど(たまたま出来てるように見えてるだけ?)、
次の構造体にアクセスしようとしたら落ちると・・・。
型の制約があるものより汎用的なテキストでやり取りする方が無難かもねえ 相談かこっちか忘れたけど以前同じようなdllを呼び出すアプリの相談で httpでやり取りする形にしてみたら?ってのがあったな
>>691 よく見たらST_SAMPLE**だったのか
C#側の引数の型をIntPtr[]にしてそれぞれポインタの参照先に
ST_SAMPLEDLL一つ分のメモリを割り当てておかないと
バイト配列が一番わかりやすいよ。
695 :
665 :2010/03/29(月) 22:58:22
>>692 時間がたっぷりあって、許されるなら、DLLをC++か何かで
書き換えたいところですが、そうもいかず・・・。
このインターフェースは我慢するしかないですね。
>>693 です。ダブルポインタです。
そこなのですが
http://codepad.org/SnH7gdwI このサイトに張ったソースの37行目でDLLに渡すメモリの実態自体は用意しているので、
大丈夫かと思ってたのですが、それとは別に確保するという事ですか?
あと、宣言は、こっちの方がいいってことですね。
[System.Runtime.InteropServices.DllImport("MY_Dll.dll", EntryPoint = "test")]
unsafe public static extern int test_call( IntPtr[] pstList);
IntPtrのみでいいはずだけどな。 Cでは、基本的に配列はメモリ上に整列するし。
ダブルポインタだからポインタの配列を渡さないといけない(だからIntPtr[]) しかもC側でポインタの参照先にアクセスしてるから予めそれぞれ実体を割り当てとかないと
配列はポインタで受けれるけど、ってやつか。
>>696 私もそう思ってて、そこではまってます。。
>>697 >しかもC側でポインタの参照先にアクセスしてるから予めそれぞれ実体を割り当てとかないと
そこなのですが、
testPtr1 = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(ST_SAMPLEDLL)) * (int)10);
これで、領域を確保して、
次に
test_call(testPtr1);
渡してるので、少なくとも構造体ST_SAMPLEDLLを10個分はメモリとして
確保してると思ってますが、この処理のほかに必要とうい事でしょうか?
その後、取れたのをMarshal.PtrToStructure()で取り出す処理になってます。
= () => って表記、他に候補なかったのかよ!と書く度に思う。タマゴとコンニャクでオデン喰いたくなるw
C#でいう「参照型の配列」と同じだ。 並んでるのは実体じゃなくてポインタで,それぞれのポインタがどこか別の場所にある実体を参照してる。 IntPtr[] testPtr1 = new IntPtr[10]; for (int i = 0; i < 10; i++) { testPtr1[i] = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(ST_SAMPLEDLL))); } test_call(testPtr1); こうする。 取り出すときはそれぞれの要素に対してMarshal.PtrToStructureを呼べばおk
DLLとC#の間にもう一個DLL挟めばいいんだよ
>>701 なんといいますか・・・。
頭が下がるばかりです。
なるほど、納得しました。
もともと x⇒x*2; みたいな感じではなかったのあれ 1バイト文字に⇒がなかったから代用みたいな よくしらんけど
これで上手くいったと書こうと思ったら
>>701 に先越された。CallingConvention忘れないでね。
using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack=4)]
public struct ST_SAMPLEDLL
{
public byte cCount;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public byte[] strBuff;
}
class Hoge
{
[DllImport("u.dll", EntryPoint = "test", CallingConvention=CallingConvention.Cdecl)]
unsafe public static extern int test_call([MarshalAs(UnmanagedType.LPArray), In, Out] IntPtr[] pstList);
static void Main()
{
IntPtr[] stSample = new IntPtr[10];
for (int i = 0; i < stSample.Length; ++i)
{
stSample[i] = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(ST_SAMPLEDLL)));
}
// DLL呼び出し
test_call(stSample);
ST_SAMPLEDLL[] st = new ST_SAMPLEDLL[10];
for (int i = 0; i < st.Length; ++i)
{
st[i] = (ST_SAMPLEDLL)Marshal.PtrToStructure(stSample[i], typeof(ST_SAMPLEDLL));
Marshal.FreeCoTaskMem(stSample[i]);
}
Console.WriteLine((int)st[0].cCount + " " + (int)st[0].strBuff[0]);
Console.WriteLine((int)st[1].cCount + " " + (int)st[1].strBuff[0]);
}}
なんでCdecl?
>>705 なんていうか・・・俺って頭の回転速いから自然と先越しちゃうんだよ。(笑)
肩を並べる奴は誰も現れないって感じだ。(笑)
騙りばっかだな。トリつけとくわ。
ですね
712 :
665 :2010/03/29(月) 23:55:44
>>705 >>709 具体例、サンクス!
少し話しが出たので、質問なのですが、
DLL側で__stdcallが指定されていた場合、話しは違ってくるのでしょうか?
うん。
文字列でやり取りするのが今時
そんなことない。
WinFormsのP/Invokeを全部標準入出力に替えたらとんでもないことになるな
>>715 ネットワーク越しにwebAPI呼び出してxmlなどのテキストで回答を許容できる時代なんだから
スタンドアロンでやっても問題ないだろ
そうすればGUIだけC#で書いて古いDLLは常駐してhttpをリスナーする小さいプログラム書けば
いいのでVC++の無料でも余裕で開発できる
どんだけ遅いと思ってんだよ。バカジャネーノ
>>713 実は、会社の帰り際に「WINAPIは__stdcallで宣言するのが標準」という記事を見つけたので、
淡い期待を抱きながら、「明日試そう・・・」と思っていたところでした。
スタックの開放タイミングの違いとうい事ですか(う〜ん汗)
直接は関係ない。関数から戻るときの問題だし。
やれやれ
テキストファイルでやりとりすべきだな
723 :
665 :2010/03/30(火) 11:56:25
回答を下さった方々、有難う御座いました。 無事、思うような動作が出来ました! (感謝感謝) 私の後ろの初めてを捧げたいぐらいの感動です。 ここの所、ず〜っとこれで悪戦苦闘してましたので・・・。 有難う御座いました。
724 :
デフォルトの名無しさん :2010/03/30(火) 11:57:01
UserControl 作るとツールボックスに表示されますが、 表示させたくない場合はどうすればいいですか?
>>723 よしではいくぞ
>>724 無理じゃね?
クラスライブラリで分離しておくとかすれば可能かな・・・
727 :
665 :2010/03/30(火) 12:55:41
知ってて言ったのにw マジな返答くるとは思わなかった ばっちこーいのAAでも貼ってくるかと期待したのに
731 :
665 :2010/03/30(火) 13:25:07
っく・・・ 変態ばっかりだったとは・・・。
軽いキャッチボールだよw
おまえらToolboxItemAttributeもしらねえのかよ・・・
734 :
デフォルトの名無しさん :2010/03/30(火) 19:27:29
さぁって、今日はどんな馬鹿が釣れるかな? 枠々
>>724 AutoToolboxPopulate
というのがVSにはあるらしい
でも単独配布のEEにはないんだよな
何かうまく動かないなーと思ったらRectangleのBottomってTop+Heightなんだ 原点0で高さ64なら下の座標は63だとばかり思ってたよ…
>Bottom プロパティの値は、Rectangle に含まれない、Rectangle の下端にある最初の点の y 座標を表します。 確認を怠るのが悪い。
プログラミング自体初心者で、昨日初めてC#を始めて見ました。 visual C# 2008を使ってGUIでグラフを表示させたいんですが、どうすればいいんでしょうか? 参考になりそうなサイトなどあれば教えてください。
>>739 ありがとうございました。
自己解決しました。
C#は.net frameworkと同じ意味?
違う
同じ
.net frameworkは土台 その上で動くプログラムを書けるのがVC#とかVB.netなど
言語仕様上はC#は.NET Frameworkとは無関係ということになってる
違う
Monoはネイティブコード吐けるし…
それラインタイム一緒に事前コンパイルしてるだけで無駄が大きいけどね
一応言語仕様の上ではCLIにも依存してない 言語仕様に最低限必要なライブラリが書いてあるのでそれを一通り実装しさえすれば C#と名乗れる
名乗れるね
違う
もう何がなんだかw
どこが「違う」か指摘できない馬鹿は放っておけ
ですね
>>739 配布するときにも相手にはそれをインスコさせなきゃ駄目?
それとも、自動的に組み込んでくれる?
90
>>755 .netその物と同じで相手側にも入ってないとだめかもね
だめかもね
>>755 ライブラリの dll ファイルは
標準のアセンブリフォルダーの下か、
exe と同じフォルダーにあれば OK なんで
exe と同梱で配布すれば OK。
include <stdio.h> using System int Main(void){ System::Console::WriteLine("にちゃんねらー死ね"); }
>>760 ここはニュー速のプログラミングスレじゃないですよ
なんでC++/CLIなんだよイライラするなあ死ね
C++/CLIならmainだろ include <stdio.h> using System;も必要ない
やたら丼を書いている奴だろ
同じマシン、同じソフトで印刷プレビューするときにプリンタ2台で 1枚でも40秒と3分の差があるんですけど、印刷の実行速度は プリンタドライバも関係してくるんですか? 3分かかるのは9年前発売のプリンタで、40秒かかるのは 最近発売のプリンタですけど。
そりゃまあレンダリングするのはドライバだしな
>印刷プレビューするとき
これはプリンタのほうでプレビューってことだよな?
自分でプレビュー画面作るってわけでもなく
だとしたら
>>766 の通りだけどC#関係なくね?
プレビューの速さの話が途中から印刷の実行速度の話になってるからな
フォームプロジェクトに追加したユーザーコントロールをデザイナで配置したいのですが、ツールボックスに表示されません。 調べてみると Windowsフォームコントロールライブラリ という別プロジェクトでDLLを作成し、 それを介する方法しか発見できませんでした。 DLLを介する以外に方法があれば教えてください。
メニューのツールのオプションのWindowsフォームデザイナの全般で ツールボックスのAutoToolboxPopulateをTrueにしてもダメかな?
772 :
770 :2010/03/31(水) 14:59:20
>>768 >>769 C#で作ったプログラムで印刷プレビュー出すときのことです。
出るまでにそれだけ時間がかかるんですよ・・・
ここらへんでプリンタも買い替えないと・・・
勝手にしろよwww
http://codepad.org/YiT7oXst 上記のコードがあるとします
14行目でリストの0番目のアイテムにGetTypeしてアイテムの型を取得していますが
BindingList<T>のインスタンスが生成された段階でアイテムの型は決まってるので
0番目のアイテムにアクセスしなくても取れるはずです
これの取り方を教えて頂きたいのです
あくまでもテスト用のコードなので「Tから取ればいいだろ」みたいな突っ込みはご容赦下さい
今から仕事なので日付変わった頃にお返事します
>>776 listType.GetGenericArguments()[0]
関数のパラメータについて、教えてください。 デバッグ用にその関数のパラメータの一覧をログなどに出力したいと考えます。 たとえばなのですが、 System.Diagnostics.StackFrame.GetMethod().GetParameters() を利用すると、特定の関数のパラメータの一覧を得ることが出来ます。 ただ GetParameters() ではパラメータの型や変数名などの情報を取得することは出来ても パラメータの値そのものは取得できないようです。当然と言えば当然なのですが。 これと同じような方法で、パラメータの値を取得する方法はないでしょうか。 なにをしたいのかというと、デバッグ用に特定の関数のパラメータの各値をログなどに 出力したいのですが、関数個別に "param1 = {0}", param1 などと書いていくのが手間なので、 関数のパラメータのすべての変数名とその値とを文字列にしてくれる関数を作れないものかと。
>>778 お答え頂きありがとうございます
質問したかった事とコードが違ってる事に出勤してから気付きました
IBindingListの引数にclass BindingList : BindingList<string>{}のインスタンスを渡して
継承元の型パラメータを取得したいのでした
悩んでる最中は思い至らなかったのですが、単にType.BaseType.GetGenericArguments()すればいいだけでした
下らない質問してすみません
>>779 型名でいいなら
public void Trace(params object[] o)
{
foreach(object obj in o)
{
〜(o.GetType().Name);
〜(o.ToString);
}
}
でいけるとおもうよ〜は出力命令ね
フォームアプリケーションを作成している時、フォームのコードが長くなったので、 「コードファイル」を新規に作成し、コードの一部を作成したソースに移しました。 その後、フォームへコントロールを配置すると、移したはずの コントロール名_イベント名() が 元のソースに関数の中身が空の状態で生成されてしまうようになりました。 コントロールのプロパティ内でイベントの欄をダブルクリックした時以外は コードが自動生成されないように設定する方法を教えてください。
そんな設定ないよ。
785 :
783 :2010/03/31(水) 23:55:44
>>784 設定がないということは、フォームのコードを複数ソースに分けることをやらない方がいいということでしょうか?
それとも「コードファイル」を作成する以外の方法で別のソースを作成すべきなのでしょうか?
>>785 > 設定がないということは、フォームのコードを複数ソースに分けることをやらない方がいいということでしょうか?
うん。
787 :
783 :2010/03/31(水) 23:59:21
http;//○○○/〜〜〜 となっているURLの○○○を抽出するにはどうすればいいでしょうか? 正規表現を使ってみたのですが、うまく抽出されません。 例になるコードとかありませんか?
790 :
779 :2010/04/01(木) 00:18:59
>>781 >>782 ありがとうございます。
残念ながら型名などではなくて中の値そのものが欲しいので、今回は諦めます。
"/"のSplitで[2]とか?
URIクラスのHostでもAuthorityでもDnsSafeHostでも
http:// 〜〜/△△&pass=○○
のようなURLの場合に○○を取得したい場合はどうすればいいでしょうか?
さすがにこれはURIクラスでは処理しきれないと思うんですが
EndOf
>>795 System.Web.HttpUtility.ParseQueryString(string query, System.Text.Encoding encoding)
みなさんありがとうございます。 今までは正規表現でどうにかしようとしてましたがいろいろやり方があることが分かりました。 もうちょっと頑張ってみます。
4/1とはいえ他人の善意を潰す嘘は許さん
自己主張したいならコテでもつけてろよ
おまえがつけろクソ野郎
4/1とはいえコテ付けない奴は許さん(キリッ
ここまで全て俺の自演
エイプリルフールはどんな嘘でもいいってわけじゃないんだよね。 人を怒らせるような行為はいただけないな。
だな
>>799 正規表現でも別にそう難しくはない気もしますが、まあ、
一番楽で素直で間違いのなさそうな方法を選ぶのが良いね。
(new List<int>()).GetType().GetGenericTypeDefinition().Equals((new List<bool>()).GetType().GetGenericTypeDefinition())
上の評価はtrueになるんだけどさぁ
それを踏まえてMSDNを見ると
http://msdn.microsoft.com/ja-jp/library/system.type.getgenerictypedefinition%28VS.80%29.aspx >2 つの構築型が同じジェネリック型定義から同じ型引数を使って作成された場合
>GetGenericTypeDefinition メソッドは両方の型に対して同じ Type オブジェクトを返します。
なんかこの説明おかしくね
この場合「違う型引数を指定して作成された場合でも」になるべきじゃね
同じのは同じなんだから当ったり前だろうそんなの
GetGenericTypeDefinition呼ぶまでもない
と思ったけど英語版もsame type argumentsなんだよなあ
なんでだ
なんでだろうね
未完成の汎用的なクラスを作れたのでいろんなプロジェクトで利用しているんだけど 既存の項目で追加とすると、その汎用クラスの変更がそのプロジェクトでしか行われない 汎用クラスの変更がすべての利用しているプロジェクトで反映される方法などありますか? もしくは他に方法はありますでしょうか?
>>811 既存の項目として追加するときに出てくるダイアログで、追加ボタンの隣にある三角ボタンを押してリンクとして追加すればいいじゃない。
おほ〜〜いけた ありがとう
webclientのイベントハンドラをbuttonのイベントハンドラと同じように一覧から選んで記述ということはできないのでしょうか?
わかんね
foreach(var item in listview.items) これだとlistviewitemと認識しないぞM$
という独り言
XMLにシリアル化の挙動がさっぱりわからん なんなのこれは? まったく使い物にならん シネ
無能は車輪の何とかでもやってなさいってこったw
>>820 >.netはいたるところで型が何か分かる
それは
>>816 の問題に関しては間違ってる。
foreach (ListViewItem item in listView1.Items)は
foreach (object _item in listView1.Items) { ListViewItem item = (ListViewItem)_item; と等価。
だからitemの型がListViewItemでなくてもコンパイルエラーにはならない。実行時エラーが出る。
ジェネリックが無かったころの名残の糖衣構文だ。
>>822 それ今も昔もListViewItemCollectionに普通にインデクサが定義されてるだけ。
ListViewItemCollection.GetEnumeratorがIEnumerator(非ジェネリック)を返すので
foreachを使うと要素がobject型扱いになる。だから
>>816 はvarの自然な挙動。
>>822 この場合インデクサは関係ないだろ
関係あんのはEnumeratorの方
JavaScriptでしばしばこういうコード書いているけど、これをC++(QT)で書くとどういう感じになる? function getValue(Form,Target){ var value = document.getElementById(Form).value; // 変数Form名のIDのフォームの値をvalueに代入 value = window.prompt("文字を入力",value); // 入力フォームを表示。valueを入力プロンプトに渡す。(上の行と1本かできるの事は気にしないで) document.getElementById(Target).value = value; // 変数TargetのIDのフォームにvalueを代入 } これをQtで書くとどういう感じになるのかな? FormとTargetの値(参照元のフォーム名と代入先のフォーム名)が変化するんだけど。 あと、 document.getElementById(Form+'_name').value みたいな表現ってできない? C言語は、関数型とかあってわかりにくい・・・。
スレチ
あ!?
どうした? バグか?
richtextboxで指定した行に文字列を追加したいんだけどどうすればいいのでしょう delphi見たいにrichtextbox.line[i].text=・・・なんてもんはないんですかね
あんまRichiTextBox使った事ないけどレスしてみる 改行コードでsplitした配列取得して、指定行の文字列を編集 で、それをStringJoinに改行コード指定してやっちゃうとか
その手って内部は行単位のstring管理じゃなかったっけ? ちと確認してみる
richTextBox1.Lines.Length Lengthってことは配列?
Linesプロパティはあるだろ。
読み取り専用だから。
>>835 それは挙動で想像付くが、読み取り専用って書いてる段階か
実行時にエラーになるよな?
これはそれすらないぞw
ヘルプ嫁よ
コピーして返してるからだろ
デザイナでLabelとか貼り付けたら デフォルトのフォントの大きさが9なんだけど、ちょっと小さいから デフォルトのフォントを大きさを変えたいんだけどどうやったらいい? あとタイマーが一番最初にEnableがfalseになってるのとか変えたい
無理
Labelとかのフォントサイズは、フォームのやつを引き継ぐから、 フォームのフォントサイズを変更しておけばOK。
>>839 諦めろ
つうか、タイマなんぞ切り替えるのは普通Pgからやんないか?
LoadとかShownでTrueにして
ClosingとかでStop→タイマの内部処理終了待ちして
843 :
829 :2010/04/02(金) 12:59:41
うーんなんていうか、 ----- あいう あいうえお あい ----- ていうrichtextboxがあるとする。 これの2行目の文章(あいうえお)を変数に代入するにはどうすればいいのかわからないんです。 delphiならa:=Memo1.Line[1];(たしかこんな感じ)て感じで取得できたのですが・・・
あきらめろよ。
ベタにテキストボックスとかでも使うやり方 別に異常なほど文字が多いわけじゃない時こんな感じでやってた private void button1_Click(object sender, EventArgs e) { richTextBox1.Text = GetInsertedText(richTextBox1.Text, 1, "\r\n" + DateTime.Now.ToString()); } private string GetInsertedText(string baseText, int index, string inserttext) { string[] temp = baseText.Split("\r\n".ToCharArray()); temp[index] += inserttext; return string.Join("\r\n", temp); }
つーか、Linesプロパティって出てんじゃん。
読み取りだけじゃなく行単位で書き換えもありそうなんでできるかどうかを試してたのに 読み取りすら理解してないのかよ・・・
総攻撃ワロスw
>>846 すいません見落としてました
これです!ありがとうございます
しかしこれ内部管理が配列なのが勿体無いな List<>でもやってくれりゃあ部分編集もしやすかったのに
中の文書フォーマットがどうなってるか知らんけど 部分的に書き換えられると整合性で困るとかそんな話の予感 TextBoxならできるんだしね…
管理も何も、Linesのgetterは持ってるTextをCRLF/LF/CRで分割してるだけだぞ setterなんかCRLF挟んで連結したものをTextに設定しているだけだし それにしても、プロパティの型が配列だったり、プロパティでコピーを返したり、 プロパティの中に必要以上の処理を入れていたりと無茶苦茶だなw
コントロールは例外だ デザイナやバインディングなどの都合
var x=0.0としたとき、xの型はfloatですか?doubleですか? 組み込み型には使うなと教えられたんですがこれだけは気になったのでお願いします。
やってみればいいじゃん。
しもうた カーソル消えてるけど x.ToString(); のxの上でカーソル止めてるから
859 :
855 :2010/04/03(土) 14:48:37
>>859 というかc#で小数点をそのまま書くとdouble,
0.0Fという感じでFをつけるとfloat
>>855 860の助言を参考にして、ついでにリテラルとその型の概念も把握しておこう。
便乗で悪いんだけど、質問させてくれ floatの方がdoubleよりも速度が遅くなると聞いたんだけど理由がさっぱりわからん doubleの方が扱う桁数が大きいんだから遅くなるんじゃないのか?
>>862 ならない。最近のCPUじゃ割り算以外の処理はどちらも1クロックで終わってしまい、
速度上の差は見られない事の方が多い。
Microsoft Parallel Extensions to .NET Framework 3.5ってもうDLできませんか? もし直リンなどあれば教えてください
ある程度作ってたプロジェクトの中から部分的に切り離してクラスライブラリを作る場合って スマートにやる方法ないかな?
>>867 名前空間の単位で整理して、
名前空間の単位でクラスモジュール化する。
そういうのじゃなくて、クラスライブラリ用プロジェクト作った際のソースの移動とかね・・
>>869 基本的に自己完結するようにクラスライブラリを書いていれば、
単にプロジェクトを分けて本体側で参照設定するだけで
そのまま動くようになってるんだから、
スマートにやる方法もないだろ。
上手くいかないなら設計が悪いだけ。
変数のインスタンスから、その変数の変数名を取得する方法はある? int a; string b = a.(メソッド); みたいにやると、b に "a" って入るみたいな。 無理だと思うけど、C# だとちょっと期待してしまう。w
>>871 変数の名前というのはプログラミングの都合上便宜的に与えるものに過ぎず、
実行時にはなくなってしまうものだ。
一方、デバッガで止めると表示してくれるが、あれはpdbファイルにその情報が記述されている。
intとかは無理じゃね? クラスになるとNameがあるけどあれもつけなくても内部管理的には問題ないから おそらくハンドルみたいなので管理されてるんだと思うしなあ intだとそのハンドルに相当するものくらいしかないんじゃね?
いや・・・もっとそのプログラム的な話じゃなくて・・・・ プロジェクト作ってフォルダ作って元のソースを移動して 既存の項目としてプロジェクトに入れて・・・という やり方しかないのかなあって話 あとクラスライブラリとして分離した場合デバック用とリリース用 を別途分けてリンクさせるような設定はないんだろうか? C++だと普通にあったんだがC#の場合それっぽい項目が見当たらない
>>874 >プロジェクト作ってフォルダ作って
それのどこに問題が?
むしろ異なるアセンブリのソースコードはフォルダ分けしておかないと不便だぞ。
>あとクラスライブラリ
同じソリューションでクラスライブラリとメインプログラムを管理しておけば、
ビルドモードの切替で勝手にクラスライブラリの切り替えもやってくれる。
>>874 それ以上のどんなバカチョン機能があれば満足するんだろう。
まあ、ファイルの移動はプロジェクトエクスプローラで
ドラッグ&ドロップしてもできるよ。
あと、ソリューション内のプロジェクトの構成(Release/Debug)の連動は
構成マネージャで設定する。
>>875 ああ、すまんEEで開発してたのでソリューションの下で複数プロジェクト作れるとは思ってなかった
>>876 >>877 でも書いたけど俺が想像してたのは
ソリューションA プロジェクトA
とあって
プロジェクトAの一部を
ソリューションB クラスライブラリB
として切り出すしかないと思ってたんだ
すまんすまん
複数プロジェクト入れられないソリューションがこの先生きのこるには
880 :
871 :2010/04/03(土) 20:40:35
thx やっぱり無理なんだね。
>>863 処理が一律1クロックなのは一部の大型機の話
パソコン用のCPUはそこまで単純じゃないし速くもない
キャッシュがヒットしたという前提で
intの足し算、引き算は0.33クロック、掛け算は0.5クロック、割り算は23クロックかかる
IEEE754形式の浮動小数点だと単精度でも倍精度でも時間は変わらなくて
加減算で1クロック、掛け算が2クロック、割り算が32クロック
>>881 結局のところ大容量キャッシュと高クロック化でごまかしてるだけで
x86の本質はそれほど変わってないのか
floatはベクトル演算器を使う場合にはそっちの方が早い。
ちと質問させてください。 VS2003.NETのC#を使用してプログラムしています。 参照の追加でdllを読み込み、プロパティでローカルコピーをTrueにして、コンパイル。 この時に、EXEと同じフォルダにdllがコピーされるのですが、 コピーされる場所を変更できるのでしょうか? EXEと同じフォルダ内に、DLLというフォルダを作成し、 コンパイル時にDLLフォルダにdllがコピーされてほしいのです。 よろしくお願いします。
ビルドイベントで移動するとか
>>886 アプリケーション設定ファイルでアセンブリの読み込みフォルダを指定することができる。
ただし実行プログラムのサブフォルダのみ。
これはユーザーに配布するときの話で、
開発中はそういったことをやると却って話が面倒になるので
exeとdllを開発中にフォルダ分けしてしまうようなことは考え内容がいいと思うよ。
>考え内容がいいと思うよ。 考えないほうがいいと思うよ。 失礼。
>>884 クロックを上げるのは、主にコスト面の問題で限界に来てしまったので
今はパイプラインの段数とコア数の増加とバス幅の拡張でごまかす方向になってきてる。
だから1命令が1/2クロックとか1/3クロックなんていう中途半端な時間で処理できてしまう。
あとは実行環境の64bit化でlong/ulongの計算が一気に速くなったぐらい。
パイプライン段数はここ数年逆に減少したとか言ってたような
いい加減スレ違い。
クラスライブラリで公開するクラスってpublicじゃないとだめなんだっけ?
,,,_ _ァュ,,..__ ィチュ::ミミ:.:三彡:.:: :.:.:ヽ /::彡'':.: :.::/:.:{{.::r‐‐ ::_:.: :.:..、 ,ィ /:.: /:..: ::{{:..川||::! ヾ::;;:、 ,ィ:.: ::.: /:. :: 川:.:ヾ:.:.!{:: ヽ::! ///:.: :.:.:||ll: :.: .::.:.:ヾ::.::.i ':! !:|:.:::ミ:: :.;;;川:.: :.:巛、ヾ::! 、 l ゙::ミミ h::. :;:.::||l|:.:: :.}}::!l {{ ヾ _,,...ィ r'' 、 ゙::ミミ:.: ::.;:.:ミミヾ:.: :.:| ヾ、 '´ , マ ヾ:: .:.:ミミ三 :.:州リリ _,,..rテ' ヽ ヾ::;ィ'´ ̄`''ヾ州! ,. ヽ ゙レ '⌒r ィ ,;;. .. .:' ,rィ ’ ヽ し :.: .. 、 ヽ ,,ハ`ー- ..ィ _,.. ィ ィ:::! \ ヽ. ィ{:::... /:::::! \ ` - ..__ 丿::::::ヽ /:::::::ヘ \ ` ーァ-一'::::.:::.:::.::.!ヽ /:::::.:..:::::::::ヽ \ リ::. :::.:.:.:.:::.:.:.:.::::!:::.::! 轌山相太郎 [そりやまそうだろう] (群馬.明治一九年〜昭和一七年)
ifで済むようなところでも例外を使ったほうがいいんでしょうか?
ifで済むならifで済まして下さい
状況にもよるんじゃね? 継続可能なところのエラー程度ならifで判断してもいいだろうけど 継続しても仕方ないようなところは例外でいくとか
>>896 コールスタックの呼び出し階層から一気に抜け出したい場合は面倒だから
エラーを返さず例外処理で実装してしまう場合もあるよ。
他に、既に例外処理を書いていて、普通にエラーを返すより
エラー自体を例外処理にしてしまった方が楽に実装できる場合か。
そういったことでないなら、通常のエラーを返す実装にしておいた方がいい。
例外やエラーに関してもパターンが必要だと思う今日この頃。 俺はpublicメソッドでもなけりゃ自分で投げることは少ないなあ。 引数なんかは渡す前に確認するし。
ただprivateメソッドの中でエラーチェックしてないってことはないよ。 Assert入れてるから。
そうですかよかったね
しかしこの例外ネタは1スレに2回ぐらいは出るな
明確な回答を返しづらいからじゃねーの ほとんどマイルールだもの
確かにお決まりパターンてないよな ソフトの作りで例外でさくっと処理しちゃう場合もあるし エラーコードとる場合もあるし みなさんどうしてますかっていうよりこういうコードなんですがって 晒せる範囲でコードを見せてくれるといいんだけどな 質問の仕方の問題もあるな
ライブラリとして自分以外に提供するのか 自分で使い切るのかでも変わってくるし
こういう時に自称プロが出てきて語ってくれればいいのに。 要らん事にばっか口出すからなー。
仕事で3日だけC#のアプリを初めて作った自称プロの俺に言わせれば、 そのときの気分、テキトー
そういえば2chのほかに専門系の質問できるような場所ってあります? なんか人減ってるしすぐ規制するしでw
今回のもかなり大規模っぽいねぇ 相談室の方も3日くらい放置状態だわ
ブラクラかと思うような名前だ>stackoverflow.com
>>909 日本語でもいくらかある
自分でぐぐってると、そんな質問はありえないと思うんだけど
まっとうなサイトだし有用な情報もごろごろしてるけど、 如何せん名前のイメージが良くない…というか悪いんだよな
>>910 ありがとう
>>913 いやあるにはあるんだが、なんていうかオンラインゲームの古参がいっぱい居るギルドに
入るようなちょっとやりにくさがあるんだよな・・・
その点2chは気軽っていうか
NumericUpDown を継承したユーザコントロールを作成しています。 Enterイベント・OnEnter・OnGotFocus 内でそれぞれ、 Select(0,Text.Length)・(Controls[1] as TextBox).SelectAll()・OnDoubleClick を 全ての組み合わせで試してみましたが、 フォーカスを得た時にテキストを全選択させることができません。 その他にしていることはTextAlignをRightにすることと、 配置先(元?)で、小数点5桁・変更幅0.001と設定しているのみです。 前述の機能を実装する方法を教えてください。
917 :
デフォルトの名無しさん :2010/04/05(月) 15:05:37
列挙型(大正、昭和、平成、)を後で追加出来るように テキストファイルの"大正、昭和、平成、"を読み込んで宣言するにはどうすればいいですか?
おっと質問忘れるところだった fileIo関連でwindowsの改行 0x0d0x0aを0x0aにするにはどこいじってましたっけ?
>>919 TextWriter.NewLine = "\n";
こんな感じでしたよね?
ありがとうございます。
>>887-889 早速の回答ありがとうございました。
結構な手順を踏む必要があり、大変そうですね。
> exeとdllを開発中にフォルダ分けしてしまうようなことは考え内容がいいと思うよ。
なるほど、分かりました。
一通りの開発が完了し、配布する際に読み込み先を指定する事にします。
ありがとうございました。
DataGridView で、教えてください。 スクロールバーの表示設定を行う ScrollBars だったかがあったと思うのですが、 これで垂直スクロールバーを消すとマウスのスクロールボタン?による スクロールを行えなくなります。 垂直スクロールバーを消していてもスクロールボタンによるスクロールを行えるようにすることは出来ませんか?
ホイール?
924 :
922 :2010/04/05(月) 21:20:12
あ、そう。それです。
便乗質問。 DataGridViewでセルをコピーペーストでデータを移せるようにするにはどうしたらいいの? できれば縦方向に複数のセルを同時に選択した状態で コピペできるようになるといいんだけど。
クリップボードへはDataGridView.ClipboardCopyModeをtるえにすればいい クリップボードからはシコシコ実装するしかありません
927 :
デフォルトの名無しさん :2010/04/06(火) 11:10:24
質問があります。 WPFで、使わないテキストボックスを、テキストがからのときには表示しないようにしようと考えました。 if (textBox.Text == null || textBox.Text == "") textBox.Hide(); としたら、textBoxにはHideはないらしいんですけど、 こういう場合どうしたらよいでしょう?
Visibility
WPFは専門じゃないけどさくっと見た限りでは
>>928 (先を越された
textBox1.Visibility = Visibility.Hidden;
textBox1.Visibility = Visibility.Collapsed;
上二つの違いは要素を表示しない上にレイアウト予約がどうのってあったな
マウスカーソルのせるとざっくりとした説明でたよ
textBox1.Visibility = Visibility.Visible;
930 :
デフォルトの名無しさん :2010/04/06(火) 12:34:44
>>928-929 さすがふらっとC#。
できました。マウスで出ますね。
ありがとうございました。
931 :
デフォルトの名無しさん :2010/04/06(火) 13:47:13
ふたつのFormについて質問です。
Form1にボタンをふたつ、Form2にブラウザを配置します。
public partial class Form1 : Form
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
form2.web("
http://2ch.net ");
}
private void button2_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
form2.web("
http://asahi.com ");
}
public partial class Form2 : Form
public void web(string URL)
{
webBrowser1.Navigate(URL);
}
は動くのですが、
932 :
デフォルトの名無しさん :2010/04/06(火) 13:50:32
public partial class Form1 : Form
Form2 form2 = new Form2();
private void button1_Click(object sender, EventArgs e)
{
form2.Show();
form2.web("
http://2ch.net ");
}
private void button2_Click(object sender, EventArgs e)
{
form2.Show();
form2.web("
http://asahi.com ");
}
とすると、ボタン1を押してForm2を閉じて、ボタン2を押したときに、「ObjectDisposedExceptionはハンドルされませんでした。オブジェクト名Form2です」。
とエラーになります。
これを回避するのには、上のように書くしかないんですか?
まぁそうですね 他の手段としては閉じるのをやめて表示を不可視にするとか考えられますが 閉じるのやめるならFormClosing拾って下さい
どういう動きにしたいのかで対策が変わりますけど
>>931 だとForm2が複数作れますけどそれでいいのかな?
Form2は一つしか必要ないなら
>>932 のようにして
>>933 のいうようにForm2のFormClosingイベントで
イベントをキャンセルしてForm2をVisible(もしくはHide)
にしないとだめかなあ
935 :
916 :2010/04/06(火) 14:05:48
>>935 コードを晒せるなら晒した方が回答は得やすいよ
プログラマはコードで会話するともいえるし
日本語の説明だと厳しい
938 :
916 :2010/04/06(火) 14:36:59
940 :
916 :2010/04/06(火) 15:15:11
>>939 OnEnter と OnMouseUp で Select することで、目的の機能を作成できました。
ありがとうございました。
941 :
デフォルトの名無しさん :2010/04/06(火) 15:40:53
>>933 なるほど。
>>934 なるほど。おっしゃるとおり、Form2をふたつは作りたくないのです。
なるほどFormClosingでキャンセルすればよかったんですね!
Visible or Hideか。
やってみます。
ありがとうございました。
以下のようなことをしたいのですが、 BitConverter.GetBytes() でエラーが出てしまいます。 同様のメソッドを複数用意する以外に方法はありませんか? public void Write<T>( T[] data ) { foreach( T t in data ) { Byte[] dat = BitConverter.GetBytes( t ); // ビッグエンディアン == 反対 if( ENDIAN.BIG == Endian ) Array.Reverse( dat ); (以下略)
まったく試さずにいうけどTの型制限すればいいんじゃねえの
Tの型は? エラーコードはなんてでてるの? 呼び出し元のコードはどんなの?
呼び出すってかコンパイルできないよ BitConverter.GetBytesがどのオーバーロード呼び出せばいいか決定できないから
ビックエンディアンをいじるっていっても 2byte、4byte、8byteくらいか? そんなに悩むことかな
制約付けても無理 ポインタ使うしかないな
Tの種別で判断するしかないんじゃね?
はぁ・・・・・みんな何も考えず自動プロパティ使ってる?
つーかマジで質問したやつはエラーコードとかTがなんなのかとか 複数型を取るとか情報だせ
953 :
942 :2010/04/06(火) 17:21:47
>>943-947 型制約というものを初めて知りました。
調べてはみたのですが、書き方がよくわからず、以下の書式で書いてみたところエラーになってしまいました。
どういう書式で書けばいいのでしょうか?
public void Write<T>( T[] data ) where T : Byte, Boolean, Char, Double, Int16, Int32, Int64, Single, UInt16, UInt32, UInt64
>>948 やはりポインタですか・・・。
>>949 種別で判断とはどういうことをすればいいのでしょうか?
954 :
942 :2010/04/06(火) 17:27:31
>>951 GetType() で switch する感じでしょうか?
>>952 複数型というのは何でしょうか?
エラーコードは以下のものです。
> エラー CS1502: 'System.BitConverter.GetBytes(bool)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。
> エラー CS1503: 引数 '1': 'T' から 'bool' に変換できません。
>>954 Tをこれでみたいんでしょ?
Byte, Boolean, Char, Double, Int16, Int32, Int64, Single, UInt16, UInt32, UInt64
957 :
942 :2010/04/06(火) 17:50:45
>>955 > これでみたい
とはどういう意味なのでしょうか?
それらの型以外の動作は保障しなくても問題ありません。
>>956 以下のコードで思い通りの動作になりました。
ありがとうございました。
Object obj = (Object)t;
Byte[] dat;
switch( obj.GetType().Name )
{
default: throw new Exception( "エラー" );
case "Byte": dat = new Byte[]{ (Byte)obj }; break;
(略)
case "UInt64": dat = BitConverter.GetBytes( (UInt64)obj ); break;
}
それならwhere T : IConvertibleで switch (t.GetTypeCode())が最善だと思う
959 :
942 :2010/04/06(火) 18:09:46
>>958 文字列以外にも方法があったのですね。
ありがとうございました。
        public void Write<T>(T[] data) where T : IConvertible         {             foreach (T t in data)             {                 Byte[] dat;                 switch (t.GetTypeCode().ToString())                 {                     default: throw new Exception("エラー");                     case "Byte": dat = new Byte[] { t.ToByte(null) }; break;                     case "UInt64": dat = BitConverter.GetBytes(t.ToUInt64(null)); break;                 }             }         } こんな感じか
        public void Write<T>(T[] data) where T : IConvertible         {             foreach (T t in data)             {                 Byte[] dat;                 switch (t.GetTypeCode())                 {                     default: throw new Exception("エラー");                     case TypeCode.Byte:                         dat = new Byte[] { t.ToByte(null) }; break;                     case TypeCode.UInt64:                         dat = BitConverter.GetBytes(t.ToUInt64(null)); break;                 }             }         } ああ、こういうのもOKなのか
えっ
だからコードはここに書くなと…
>>953 のケースでジェネリック使うのはおかしくね?
public void Write(byte[] data) {}
public void Write(bool[] data) {}
(略)
public void Write(ulong[] data) {}
みたいに書き出すべきだと思うんだが。
>>964 それが面倒だから・・・ってことでこうなったw
C#でFSMやるときに、プロパティの値を 「自分自身と継承先とステートマシンクラス」だけ読み書き可能で、それ以外には リードオンリってやりたいんだが、どう組んでも恐ろしく複雑になってしまうんだが、 なるべくシンプルに実装する場合どうすればいいんだろう 外からいじられるリスク前提で全部publicにしてしまう他ないのかな
>>966 protected internalは使いたくない状況なんだろうか
あー念のため補足しとくけど、2003以降はプロパティのセッタとゲッタで 別々のアクセス修飾子が付けられるようになってるのは知ってるんだよね?
969 :
デフォルトの名無しさん :2010/04/06(火) 23:30:26
計測アプリ作りたくて、先ずはその中のRS-232C通信設定ダイヤログを作りたいと検討中 設定値をドコに持たせたらいいとか、呼び出すお作法の書いてあるwebはお勧めありますでしょうか? 参考図書だと、コントロールをフォームにぶち込んで、すぐその場でプロパティに直書き。とか ComSerialPort.PortName="COM1" ComSerialPort.BaudRate=9600 とフォーム.loadにベタ書きみたいなものにしか見かけないんです。 脱初心者となりたく、村の書店で立ち読みしてみたけど、多くはフォーム1枚板で完結した内容で なかなか前に進まずに居ます。
MSのサイトにプロパティの値を永続化しましょう、みたいのあるだろ。
圧縮ツール作っているんだけど コマンドラインからの起動なら大丈夫なんだけど エクスプローラからドラッグアンドドロップでファイル渡して圧縮すると そのエクスプローラが作業完了するまでフリーズしちゃうんだけど どうすればいいかな?
DragDropがさっさと制御を返せばいいだけ
ドラッグ&ドロップってのは、アプリが起動してない状態で、 アイコンに対して?
http://ideone.com/Iu4Rn 今話題(?)のジェネリック対応版のBitConveterExを作ってみた。
型パラメータは可能な限り制限しているけど最終的には実行時検証。
作っておいてなんだが、ジェネリッククラス/メソッドから呼び出すのでなければ、
>>964 の言うようにオーバーロードするのが正解。
特にオーバーロードを書くのが面倒なんて阿呆な理由は論外。
975 :
971 :2010/04/07(水) 00:16:49
ファイルの自アプリのフォームにドロップして
それを圧縮するという感じです
>>972 多分そういうことなのかなと思うんですが
制御を返す方法がよくわかりません
DragDropイベントリから圧縮するmethodを呼び出しているので
圧縮が完了してやっとDragDropのイベントが抜ける感じになってます
どうすればうまく書けるんでしょうか?
Thread.Startすれよ
VBの頃はタイマーで、とかやってたけど、 今の時代は普通にワーカースレッドを起こして、メインスレッド(イベント)は 終了、でいいわな。
>>970 初心者にそのひとことで済むなら苦労しないわな。
981 :
971 :2010/04/07(水) 00:37:52
>>976 >>977 マルチスレッドですか、難しそうですががんばってみます
ありがとうございました
ツールはすべて.Net製で揃えたいです みんながんばってください
がんばってるやつにがんばれと言っても既にがんばってるんだから、ほどほどにね。 このスレッドは 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 君はもう充分がんばったさ。もう寝ていいんだぜ、逃げてもいいんだぜ? なんてやさしいおれ。
いつから丸投げのやつらをがんばってると称するようになったのか
985 :
966 :2010/04/07(水) 12:31:53
>>967 同一の名前空間前提なら最悪それでもいいかもしれないが……。
できればPerlのような紳士協定的な制約はかけたくないなぁ、と。
>>968 public int hoge{ get; private set; } みたいなのだよね?
internalは名前空間とは無関係に同じアセンブリ内ならアクセス可 誰が使うか分からないクラスライブラリ作ってるならそれで十分 内部では基本的に契約が通じるはずなので紳士協定で問題ない コンパイル時に解決できない内部のお約束なんか他にもいくらでもあるだろ
987 :
デフォルトの名無しさん :2010/04/07(水) 18:52:05
JPEG画像をWPFで縮小して表示するアプリケーションを作っています。 このWPFのローカルアプリケーションをWebでサービスする場合について教えてください。 大前提として、WPFからWeb用のアプリケーションに書き換える作業があることはなんとなく理解しています。 疑問点は、次のようなものです。 ・サーバーはLinuxでよいのでしょうか? ・クライアントはIEとかのブラウザだけでよいのでしょうか? ・そのWPFのアプリケーションは.NET Framework3.5が必要なのですが、Webサービスの場合、.NET Framework3.5はどこに用意すればいいんでしょうか? サーバー側ですか? ・各種設定がある場合、(たとえばいつも読むフォルダ名を覚えておくとか)、その設定はサーバー側に保存するのですか? それともクライアントに? というかなり大まかな質問で恐縮です。 ざっくりどんな感じなのか、教えていただけると助かります。
webサーバーはwindowsでもできるでしょ windows系のサーバーを提供してるところもあったはず ちょっと高いけど
Linuxじゃ無理。 IIS上でASP.NETを動かす形になる。 当然、サーバー上に.NET Frameworkが必要。 各種設定は、サーバー側に保存。
あれ?monoって.net3.5は未対応だっけか?
MonoのWPFはまだまだ。
992 :
デフォルトの名無しさん :2010/04/07(水) 22:13:46
なるほど。Windowsサーバーにしてサーバー側に.NET Frameworkなんですね。 なんとなく輪郭がつかめました。 ありがとうございました
開発用Webサーバーもあるし、IISもあるんだから、 まずはその辺で雰囲気をつかむといいんじゃね?
994 :
デフォルトの名無しさん :2010/04/07(水) 23:34:12
ASP.NETには、大きく分けてWebフォームとMVCがある。 MVCは最近できたばっかりで、俺は使ったことがない。 ま、どっちでもいいんじゃね? ただ、ASP.NET 1.0/1.1/2.0なとこだったりすると、MVCは使えないので、要注意。
996 :
デフォルトの名無しさん :2010/04/07(水) 23:59:18
>>995 ASP.NETのWebフォームのほうが動作実績ありってことですね。
ちなみに構成としては、LinuxとWindowsXPを使って、
LinuxのWebサーバーでは、
(1)
<form method="post" EncType=multipart/form-data" ACTION="upload.cgi">
<INPUT TYPE="submit" value="upload" class="button">
</form>
みたいな感じで、ユーザーのファイルのアップロードを受ける。
(2)アップロードされたら、WindowsXPにそのファイルをコピーする。
(3)WindowsXPでは、WPFを使って、ファイルを作り、LinuxのWebサーバーにコピーする。
(4)LinuxのWebサーバーは、そのファイルをhtmlに組み込んで表示する。
(5)クライアントはLinuxのWebサーバーの表示を見てファイルをゲット。
って流れでもオーケーなんでしょうか?
もっと初心者スレらしい質問おねがいします
次スレ立ててくる
乙
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。