ふらっとVisual C#,C♯,C#(初心者用)
このスレッドは
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
関連スレ
ふらっとC#,C♯,C#(初心者用) Part91
http://toro.2ch.net/test/read.cgi/tech/1335089085/
C#, C♯, C#相談室 Part71
http://toro.2ch.net/test/read.cgi/tech/1332575004/
こんな感じでソフトウェア板に立てたらどうかな
ふらっとC#,C♯,C#(初心者用) Part92
■ このスレッドは過去ログ倉庫に格納されています
2012/04/26(木) 21:32:32.95ID:RzRn9VkL0
252249
2012/05/27(日) 00:38:22.87ID:fLxELx8b0 自己解決しました。
↓のようにしたら表示されました。
http://ideone.com/7p4hu
BeginInitの後に
bi.CacheOption = BitmapCacheOption.OnLoad;
を入れることで表示されました。
↓のようにしたら表示されました。
http://ideone.com/7p4hu
BeginInitの後に
bi.CacheOption = BitmapCacheOption.OnLoad;
を入れることで表示されました。
2012/05/27(日) 09:54:33.99ID:HSQgQMmy0
formとメトロってワンクリックで切替できますかね?
2012/05/27(日) 10:00:40.57ID:clOyRCuk0
2012/05/27(日) 10:03:45.45ID:clOyRCuk0
256名無しさん@お腹いっぱい。
2012/05/27(日) 10:08:42.69ID:clOyRCuk0 その前に最初の計算式二つは結果が等価じゃねーだろw
257名無しさん@お腹いっぱい。
2012/05/27(日) 10:45:25.60ID:clOyRCuk0 ちょこっとコード書いてて気になったんだが最後のパターンがなんか納得いかない結果になる
http://ideone.com/t4Tro
http://ideone.com/t4Tro
258名無しさん@お腹いっぱい。
2012/05/27(日) 10:48:20.87ID:clOyRCuk0 あ、すまんこれで納得いく結果になった
http://ideone.com/FW5ED
http://ideone.com/FW5ED
2012/05/27(日) 11:12:54.46ID:clOyRCuk0
260250
2012/05/27(日) 14:31:19.39ID:j8A7jdt/0 みなさんレスありがとうございます
ケースバイケースなんですね
/や%を2回程度余分に使うより、if&++;の方が早いとのだと思っておきます
盲目的にifはできる限り減らした方がいいと思い込んでました・・・
シフト演算を使うという発想はありませんでした
というより、普段使ってないので、コードの意味がわかってないので、コードを参考に勉強してきます
ケースバイケースなんですね
/や%を2回程度余分に使うより、if&++;の方が早いとのだと思っておきます
盲目的にifはできる限り減らした方がいいと思い込んでました・・・
シフト演算を使うという発想はありませんでした
というより、普段使ってないので、コードの意味がわかってないので、コードを参考に勉強してきます
2012/05/27(日) 16:43:36.10ID:GiQAzp3Q0
switch(r % 4) にすると?
262名無しさん@お腹いっぱい。
2012/05/29(火) 14:07:21.53ID:/PVv+z9w0 WPFアプリとKinectアプリ間で文字列の送受信を行いたいのですがどうすればよいのでしょうか?
Process.Start("Kinectアプリ名.exe");でKinectアプリをWPFアプリ側から起動した後、文字列の通信を行いたいと思っています。
IPCを用いたプロセス間通信を行えばよいのでしょうか?
知っている方がおられましたらご教授をお願いいたします。
Process.Start("Kinectアプリ名.exe");でKinectアプリをWPFアプリ側から起動した後、文字列の通信を行いたいと思っています。
IPCを用いたプロセス間通信を行えばよいのでしょうか?
知っている方がおられましたらご教授をお願いいたします。
2012/05/29(火) 16:37:54.74ID:2RvCxbWa0
このスレで質問することではないかもしれないのですが
どこで聞いていいのかわからないので質問します><
DirectShow.Netでフィルターの設定をしたいのですがどのように
して設定してあげればよいのかわかりませんorz
解説サイトも動画・静止画のキャプチャの仕方位までしか掲載
されていません。ざっくり、このメソッドを使えば程度でかまいませんので
よろしくお願いします。
どこで聞いていいのかわからないので質問します><
DirectShow.Netでフィルターの設定をしたいのですがどのように
して設定してあげればよいのかわかりませんorz
解説サイトも動画・静止画のキャプチャの仕方位までしか掲載
されていません。ざっくり、このメソッドを使えば程度でかまいませんので
よろしくお願いします。
264名無しさん@お腹いっぱい。
2012/05/30(水) 05:04:06.91ID:AggJDhf102012/05/30(水) 21:18:00.04ID:M2GA61XI0
c#でトランプの数当てゲームを作りたいのですが、ホームアプリケーションでいいなでしょうか?
2012/05/30(水) 21:52:42.67ID:QkV5fjWR0
いいな いいな にんげんて いいな
2012/05/30(水) 21:55:54.36ID:to+QgKiM0
初心者ならコンソールアプリケーションでゲームの中身だけ作ってGUI(Form)つけるのおすすめ
2012/05/30(水) 22:15:53.58ID:5ZOuXXtf0
Formでいいんじゃね
ゲーム作りたいならUnityとかゲームエンジンとか使った方がいいと思うが、自力で数当てゲームくらい作れた方がいいかもね
ゲーム作りたいならUnityとかゲームエンジンとか使った方がいいと思うが、自力で数当てゲームくらい作れた方がいいかもね
2012/05/30(水) 22:49:56.75ID:zW0msQ/R0
270名無しさん@お腹いっぱい。
2012/05/31(木) 02:21:11.40ID:rXSZyiw00 >>264
レスどうもありがとうございます、とりあえずもう少し試行錯誤してみますね!
レスどうもありがとうございます、とりあえずもう少し試行錯誤してみますね!
2012/05/31(木) 09:25:01.60ID:WULY2UZX0
てst
2012/05/31(木) 15:01:27.70ID:VYK3XZ290
なんで難しい質問ばっかなのこっちは
2012/05/31(木) 15:17:39.08ID:jGAKMQam0
本スレだからな
274名無しさん@お腹いっぱい。
2012/05/31(木) 15:52:12.18ID:unpCDp6t0 難しいというか、シチュエーションが限定的な質問が来るね。
まああっちで聞いても、本筋と関係ないところで喧嘩おっぱじまるからだろう。
まああっちで聞いても、本筋と関係ないところで喧嘩おっぱじまるからだろう。
2012/06/01(金) 00:01:35.63ID:p1bYUXat0
IDは偉大、変な自演がないだけでも捗るな
2012/06/01(金) 18:51:36.27ID:tSECQl9H0
シチュエーションが限定的なのはしょうがないんじゃないかな
普遍的な問題は大抵ググればなんとかなるだろうし
>>216の質問をしたのは俺だけど
ググっても同じ問題にはまっている人が見つからないのは本当に困る・・・
普遍的な問題は大抵ググればなんとかなるだろうし
>>216の質問をしたのは俺だけど
ググっても同じ問題にはまっている人が見つからないのは本当に困る・・・
2012/06/02(土) 08:13:25.59ID:8F3osLeN0
てst
278名無しさん@お腹いっぱい。
2012/06/03(日) 23:02:26.26ID:9cE78MGH0 C#でDirectxを使おうとしたら、遅延通知が出たのですがどうすればいいですか?
2012/06/04(月) 01:15:23.77ID:dVdSCbBH0
遅延通知って何?
2012/06/04(月) 06:00:16.63ID:MKF8PCbd0
この言語のリファレンスマニュアルって糞見づらいMSDNしかないの?
2012/06/04(月) 08:46:10.03ID:SO+LzFoe0
さらに見づらい上に古いPDFであればありますよ
あなたがC#のリファレンスと.NETのリファレンスを混同していないことが前提ですが…
あなたがC#のリファレンスと.NETのリファレンスを混同していないことが前提ですが…
2012/06/04(月) 11:06:38.28ID:tdHet/L00
てst
2012/06/04(月) 15:07:32.53ID:eBbL6cVl0
MSDNから必要な情報を見つけ出して、珍妙な自動翻訳に動じず英語版見に行くようになったら一人前。
2012/06/04(月) 20:30:54.41ID:amclDH490
.netの翻訳は人間がやってるらしいぞ
2012/06/05(火) 23:42:14.54ID:0HX/yiCx0
デリゲートがよく分からないのでJavaScriptで例えて説明してください
2012/06/06(水) 00:07:44.80ID:E/iZIMwt0
関数オブジェクトのようなもの
2012/06/06(水) 02:20:14.29ID:8bMay9C00
2012/06/06(水) 02:26:05.25ID:E/iZIMwt0
2012/06/06(水) 06:44:05.39ID:Wke9K+FZ0
2012/06/06(水) 11:43:22.64ID:T2vSLGVJ0
てst
2012/06/08(金) 00:17:06.02ID:SjP/JzaM0
てnd
2012/06/08(金) 21:26:45.75ID:H4JMKmsI0
カスタムコントロールの中のComboBox(Bとする)の.Itemsに他のクラスからアクセスしたいと思っています
当該Itemsに別データの配列を突っ込みたいので、カスタムコントロールのプロパティにしようかと思ったら、setの記載で読み取り専用だからできねーよカスと怒られます
なにかよい方法はないでしょうか?
public ComboBox.ObjectCollection B_.Items
{
set
{
B..Items = value;
}
get
{
return B..Items;
}
}
当該Itemsに別データの配列を突っ込みたいので、カスタムコントロールのプロパティにしようかと思ったら、setの記載で読み取り専用だからできねーよカスと怒られます
なにかよい方法はないでしょうか?
public ComboBox.ObjectCollection B_.Items
{
set
{
B..Items = value;
}
get
{
return B..Items;
}
}
2012/06/08(金) 21:33:08.47ID:KTgDzfcK0
>>292
ComboBox.DataSourceプロパティ
ComboBox.DataSourceプロパティ
2012/06/08(金) 22:43:38.32ID:H4JMKmsI0
下記で期待する動きになりました
ありがとうございました
getもDataSourceにせんでいいのかな?と迷いましたが、デザイナー上の入力を考えるとこっちの方がベターぽいのでこれで行きます
public object B_.Items
{
set
{
B.DataSource = value;
}
get
{
return B.Items;
}
}
ありがとうございました
getもDataSourceにせんでいいのかな?と迷いましたが、デザイナー上の入力を考えるとこっちの方がベターぽいのでこれで行きます
public object B_.Items
{
set
{
B.DataSource = value;
}
get
{
return B.Items;
}
}
2012/06/08(金) 23:36:24.17ID:1FPwfIgl0
てst
2012/06/09(土) 22:24:13.82ID:/l9t5PUy0
Visual Studio Express 2012 for Windows Desktop
http://blogs.msdn.com/b/visualstudio/archive/2012/06/08/visual-studio-express-2012-for-windows-desktop.aspx
http://blogs.msdn.com/b/visualstudio/archive/2012/06/08/visual-studio-express-2012-for-windows-desktop.aspx
2012/06/09(土) 22:39:56.78ID:km1yHHW40
そりゃまあ、普通に考えたら出ないとおかしいよね
2012/06/09(土) 22:41:49.99ID:/l9t5PUy0
だってVC++あるしなあ
2012/06/09(土) 23:50:34.37ID:8fI3WDv10
Formは入ってるの?
2012/06/10(日) 13:44:32.26ID:JcRdqHi90
C#どころかプログラミング始めたての初心者で申し訳ないのですが質問させてください。
if (A != B)
{
return;
}
do();
と
if (A == B)
{
do();
}
では同じ処理になると思うのですが、どちらを用いるのが一般的なんでしょうか
if (A != B)
{
return;
}
do();
と
if (A == B)
{
do();
}
では同じ処理になると思うのですが、どちらを用いるのが一般的なんでしょうか
2012/06/10(日) 13:56:41.08ID:+ns6eJGu0
前者はガード句と呼ばれる書き方で、主にifのネストが深くなった時に使う
ifが1段しかないのなら後者
ifが1段しかないのなら後者
2012/06/10(日) 13:58:07.44ID:t7lhSWC+0
しっくり来る方でいいでしょ
2012/06/10(日) 14:04:31.24ID:+ns6eJGu0
しっくりこないんですぅ
2012/06/10(日) 14:36:26.02ID:JcRdqHi90
2012/06/10(日) 14:41:36.15ID:JcRdqHi90
重ねて質問すみません
txtBox1.Clear();
txtBox2.Clear();
txtBox3.Clear();
これを繰り返し構造でスマートに書きたいのですが、変数等を用いれば可能でしょうか
txtBox1.Clear();
txtBox2.Clear();
txtBox3.Clear();
これを繰り返し構造でスマートに書きたいのですが、変数等を用いれば可能でしょうか
2012/06/10(日) 14:43:50.00ID:t7lhSWC+0
var array = new[]{ tb1, tb2, tb3 };
foreach(var tb in array){ tb.Clear(); }
とかかな
foreach(var tb in array){ tb.Clear(); }
とかかな
2012/06/10(日) 14:45:11.20ID:+ns6eJGu0
FormコンストラクタのInitializeComponent()の後ろで配列にでも入れておけ
foreachで繰り返せる
foreachで繰り返せる
2012/06/10(日) 14:59:08.22ID:JcRdqHi90
なるほど!同じ型の配列に入れておけば良かったんですね
ありがとうございます
ありがとうございます
2012/06/10(日) 21:05:08.87ID:RMEDkwv20
製品版のVisualStudioってメンバー変数のプリフィックスに_とかつけられます?
2012/06/10(日) 21:45:47.86ID:+ns6eJGu0
むしろなぜ付けられないと思うの?
2012/06/10(日) 22:10:12.18ID:RMEDkwv20
Expressでできないからですね
Formのコントロール変数に自動で_をつけてくれたら便利だと思いまして
Formのコントロール変数に自動で_をつけてくれたら便利だと思いまして
2012/06/10(日) 22:15:58.50ID:+ns6eJGu0
全然意味合いが違うじゃねえか
質問を略すな
Pro版でもできません
質問を略すな
Pro版でもできません
2012/06/10(日) 22:19:28.22ID:MHePrPj+0
自動でってところがミソか
2012/06/10(日) 23:40:57.57ID:RMEDkwv20
ありがとうございます。やっぱり無理でしたか・・・
315名無しさん@お腹いっぱい。
2012/06/14(木) 07:03:26.20ID:98NsRCek0 Formを継承したクラスがいくつかIDisposableなオブジェクトを持っていて、それらをDisposeしなければいけない場合
どこに書いたらいいんでしょうか。
Form1.Designer.csの方にFormのオーバーライドされたDisposeメソッドがありますが、
そこに追加しちゃってもいいのでしょうか。(デザイナの方に影響与えたりしません?)
それともDisposedイベントでやるべきなんでしょうか。
どこに書いたらいいんでしょうか。
Form1.Designer.csの方にFormのオーバーライドされたDisposeメソッドがありますが、
そこに追加しちゃってもいいのでしょうか。(デザイナの方に影響与えたりしません?)
それともDisposedイベントでやるべきなんでしょうか。
316名無しさん@お腹いっぱい。
2012/06/14(木) 07:36:22.23ID:A0uxVl2o0 1. そもそもインスタンススコープで扱うべきか考える
実はメソッド単位で扱えるものなんじゃないの?という回帰。
2. コンポーネント化することもちと考える。
Formと同じ寿命のDisposableなオブジェクトがあるってことは、
Formにロジックを詰め込みすぎてないか?
ロジックを然るべきレイヤに分けて、コンポーネント化しちゃえばいんじゃね?という発想。
3. Disposeしたいというのなら
.Designer.csのオーバーライドされたDisposeメソッドに書いちゃって大丈夫。
実はメソッド単位で扱えるものなんじゃないの?という回帰。
2. コンポーネント化することもちと考える。
Formと同じ寿命のDisposableなオブジェクトがあるってことは、
Formにロジックを詰め込みすぎてないか?
ロジックを然るべきレイヤに分けて、コンポーネント化しちゃえばいんじゃね?という発想。
3. Disposeしたいというのなら
.Designer.csのオーバーライドされたDisposeメソッドに書いちゃって大丈夫。
2012/06/14(木) 08:37:45.34ID:SlYrQktU0
前から思ってたけどcomponentsフィールドっていつ使われるんだろ
あれに追加されたらFormが破棄されるとき一緒にDisposeしてくれるよね
あれに追加されたらFormが破棄されるとき一緒にDisposeしてくれるよね
2012/06/14(木) 09:19:19.33ID:98NsRCek0
>>316
ども
3でいかさせて頂きます
たとえばフォントオブジェクトをフォーム上のボタン等に個別に適用した場合
明示的にDisposeさせるよい方法がないので困っていました
フォーム閉じて参照が切れればいつかGCされるさ、とか
アプリケーションが終了した時点で解放されるからいいやん、とか
それだけでなんともならないシナリオもあるのに、と……
ども
3でいかさせて頂きます
たとえばフォントオブジェクトをフォーム上のボタン等に個別に適用した場合
明示的にDisposeさせるよい方法がないので困っていました
フォーム閉じて参照が切れればいつかGCされるさ、とか
アプリケーションが終了した時点で解放されるからいいやん、とか
それだけでなんともならないシナリオもあるのに、と……
2012/06/14(木) 10:01:27.49ID:oUOmZZHy0
初心者なのでこちらで質問させてもらいます。
Aというクラスを継承してBというクラスを作成したのですが、Aの中の一部のフィールドやメソッドを継承したくない場合、Bの中でどうのような記述をすれば簡単に実現できるでしょうか?
目的は単にBのインテリセンスにそのメソッドなりを表示させたくないだけなのですが。
よろしくお願いします。
Aというクラスを継承してBというクラスを作成したのですが、Aの中の一部のフィールドやメソッドを継承したくない場合、Bの中でどうのような記述をすれば簡単に実現できるでしょうか?
目的は単にBのインテリセンスにそのメソッドなりを表示させたくないだけなのですが。
よろしくお願いします。
2012/06/14(木) 10:07:06.46ID:SlYrQktU0
2012/06/14(木) 10:10:46.97ID:WOJH/6WO0
private new ベースクラスのメソッド名(引数も合わせる ...){}
これで一応できるけどキャストしたらベースクラスのは呼び出せるわね
これで一応できるけどキャストしたらベースクラスのは呼び出せるわね
2012/06/14(木) 10:48:44.80ID:SlYrQktU0
newの使い道がよくわからないんだけど、virtual指定されてないメソッドをオーラーライドしたいときでいいの?
2012/06/14(木) 11:08:28.11ID:WOJH/6WO0
オーバーライドするとベースクラスにキャストした時もオーバーライドしたメソッドが呼び出せる
つまりベースクラスのメソッドを上書きできる
newの場合はベースクラスにキャストするとベースクラスのメソッドが呼び出される
上書きしたわけじゃなくて同じ名前のメソッドが定義されたので
前のが呼びだせなくなったという感じ
つまりベースクラスのメソッドを上書きできる
newの場合はベースクラスにキャストするとベースクラスのメソッドが呼び出される
上書きしたわけじゃなくて同じ名前のメソッドが定義されたので
前のが呼びだせなくなったという感じ
2012/06/14(木) 12:25:35.45ID:+pekMVIj0
abstract オーバーライドしろ
virtual オーバーライドしてもいいよ
未指定 できなくは無いがnew付けろよ。
virtual オーバーライドしてもいいよ
未指定 できなくは無いがnew付けろよ。
2012/06/14(木) 13:20:39.57ID:SlYrQktU0
2012/06/20(水) 23:24:01.56ID:W/4WFKKT0
>>325
一番は、後から基底クラスに派生クラスのメンバと被るメンバが追加されたときに
意図せずオーバーライドしてしまうのを防ぐため
その意味では別にnewは無くてoverrideだけでいいんだが、overrideの付け忘れなのか
わざとやってるのか区別するためなんだろう
一番は、後から基底クラスに派生クラスのメンバと被るメンバが追加されたときに
意図せずオーバーライドしてしまうのを防ぐため
その意味では別にnewは無くてoverrideだけでいいんだが、overrideの付け忘れなのか
わざとやってるのか区別するためなんだろう
2012/06/21(木) 12:27:26.65ID:K9S0VvT90
visual c#で、ボタンを押すとテキストボックスに入力した英文(長文)をもう一つのテキストボックスに文を並べ替えた状態で出力するアプリを作ろうとしています。
文を並べかえるというのは、単語の並べ替えではなく、複数の文の1文1文を1つと見て、それらの文を並べ替えるという意味です。
考えているアルゴリズムとしては、入力文を初めから一文字ずつ読み取っていき、ピリオドが出た瞬間に初めからその部分の文字列を 文字列1 に代入。
続いてその次の位置からまた一文字ずつ読み取っていき、ピリオドが出た瞬間に、その部分を 文字列2 に代入・・・と繰り返し、最終的にn個の文字列をランダムに並べ替えたものを出力する、というふうに考えています。
C#で作る場合このような流れで作るのがよろしいでしょうか?その場合どのような文字列操作関数を使用していけばいいのでしょうか。
また、他により効率的な方法があればご教示お願いします。
文を並べかえるというのは、単語の並べ替えではなく、複数の文の1文1文を1つと見て、それらの文を並べ替えるという意味です。
考えているアルゴリズムとしては、入力文を初めから一文字ずつ読み取っていき、ピリオドが出た瞬間に初めからその部分の文字列を 文字列1 に代入。
続いてその次の位置からまた一文字ずつ読み取っていき、ピリオドが出た瞬間に、その部分を 文字列2 に代入・・・と繰り返し、最終的にn個の文字列をランダムに並べ替えたものを出力する、というふうに考えています。
C#で作る場合このような流れで作るのがよろしいでしょうか?その場合どのような文字列操作関数を使用していけばいいのでしょうか。
また、他により効率的な方法があればご教示お願いします。
2012/06/21(木) 12:36:01.13ID:tG9UJEis0
ピリオドでスプリットすれば一発
2012/06/21(木) 12:45:20.29ID:K9S0VvT90
>>328
なるほど、splitメソッドというのを使えばいいのですね。
この場合、Mr.などの単語が1つだけの文が生成されないようにするには
具体的にどう条件を追加すればよろしいでしょうか?
(Mr. Tanaka is Japanese. を1つとしたい場合等)
なるほど、splitメソッドというのを使えばいいのですね。
この場合、Mr.などの単語が1つだけの文が生成されないようにするには
具体的にどう条件を追加すればよろしいでしょうか?
(Mr. Tanaka is Japanese. を1つとしたい場合等)
2012/06/21(木) 12:50:03.71ID:tG9UJEis0
Mr.の場合はjoinすればいい
2012/06/21(木) 13:30:59.90ID:XTsjM3La0
var sentences = text.Split(".");
var list = new List<StringBuilder>();
list.Add(new StringBuilder());
foreach(var sentence in sentences)
{
list.Last().Append(sentence + ".");
if(IsOneWord(sentence) == false){ list.Add(new StringBuilder()); }
}
return Sort(list);
こんなかんじ?
var list = new List<StringBuilder>();
list.Add(new StringBuilder());
foreach(var sentence in sentences)
{
list.Last().Append(sentence + ".");
if(IsOneWord(sentence) == false){ list.Add(new StringBuilder()); }
}
return Sort(list);
こんなかんじ?
2012/06/21(木) 13:39:41.01ID:K9S0VvT90
2012/06/21(木) 13:46:05.56ID:mk4m3Qvr0
WPFでListboxを2つ配置して、ItemsSourceを同一のコレクションに設定した時の挙動についてなんですが
コードでこのようにしたとき
public partial class MainWindow : Window
{
ObservableCollection<Object> obj
= new ObservableCollection<Object>();
public MainWindow()
{ InitializeComponent();
for (int i = 0; i < 50; i++)
{ obj.Add(CreateRectangle());
obj.Add(i.ToString()+"s String");
}
listBox1.ItemsSource = obj;
listBox2.ItemsSource = obj;
}
Rectangle CreateRectangle()
{ Rectangle r = new Rectangle();
r.Width = 20;r.Height = 20;r.Stroke = Brushes.Black;
return r;
}
}
片方のListboxに表示されているRectangleはもう片方のListboxの表示からは取り除かれてしまいます
stringについては両方同時に表示されますし、片方のDisplaymenberPathをNameなりHeightなりに設定した場合も同時に表示されます
このWPFの図形の表示の仕組みについて解説お願いします
コードでこのようにしたとき
public partial class MainWindow : Window
{
ObservableCollection<Object> obj
= new ObservableCollection<Object>();
public MainWindow()
{ InitializeComponent();
for (int i = 0; i < 50; i++)
{ obj.Add(CreateRectangle());
obj.Add(i.ToString()+"s String");
}
listBox1.ItemsSource = obj;
listBox2.ItemsSource = obj;
}
Rectangle CreateRectangle()
{ Rectangle r = new Rectangle();
r.Width = 20;r.Height = 20;r.Stroke = Brushes.Black;
return r;
}
}
片方のListboxに表示されているRectangleはもう片方のListboxの表示からは取り除かれてしまいます
stringについては両方同時に表示されますし、片方のDisplaymenberPathをNameなりHeightなりに設定した場合も同時に表示されます
このWPFの図形の表示の仕組みについて解説お願いします
2012/06/21(木) 13:53:56.22ID:/1f0rY470
UIElementがデータソースになった場合、
それは直接ItemsControlの子孫要素になる
UIElementは一つの親にしか属せない
普通はRectangleはDataTemplateにして
ItemsSourceにバインドするのはその構成要素だけ持つクラスにする
それは直接ItemsControlの子孫要素になる
UIElementは一つの親にしか属せない
普通はRectangleはDataTemplateにして
ItemsSourceにバインドするのはその構成要素だけ持つクラスにする
2012/06/21(木) 19:56:05.31ID:C/I3uX5s0
XmlSerializerを使ってデータを一時的に保存したいと思っています.
今作っているクラスはUserとEventListとEventの三つになり,こんな感じに他にデータも含みます.
User
-string name
-EventList
--Event
---int x,yなど
保存したいのはUserクラスで,List<Event>を含んでいたので,
http://handcraft.blogsite.org/ComponentGeek/ShowArticle/60.aspx
を参考に,IXmlSerializableを実装してリストを保存するだけのクラスEventListを作りました.
そしてEventやEventList単体のシリアライズ化には成功しました.
ですがUserクラスのシリアライズが上手く行きません…
Userクラスはこうなっています
public class User {
public EventList event_list;
public string name;
public User() { }
}
今作っているクラスはUserとEventListとEventの三つになり,こんな感じに他にデータも含みます.
User
-string name
-EventList
--Event
---int x,yなど
保存したいのはUserクラスで,List<Event>を含んでいたので,
http://handcraft.blogsite.org/ComponentGeek/ShowArticle/60.aspx
を参考に,IXmlSerializableを実装してリストを保存するだけのクラスEventListを作りました.
そしてEventやEventList単体のシリアライズ化には成功しました.
ですがUserクラスのシリアライズが上手く行きません…
Userクラスはこうなっています
public class User {
public EventList event_list;
public string name;
public User() { }
}
336335
2012/06/21(木) 19:57:19.59ID:C/I3uX5s0シリアライズのコードはこうなっています.
XmlSerializer serializer = new XmlSerializer(typeof(User));
using (FileStream fs = new FileStream(@"C:\test.xml", FileMode.Create)) {
serializer.Serialize(fs, user);}
実行すると
$exception {"There was an error reflecting type 'mtest.User'."} System.Exception {System.InvalidOperationException}
というエラーがXmlSerializer作成時に出ます.
event_listをコメントアウトすると上手く行くのですが,クラスの中に自作クラスを持つ場合は別の処理方法があるのでしょうか?
よろしければ解決方法などを教えて頂けると幸いです.
2012/06/21(木) 22:40:14.42ID:XTsjM3La0
>>336
別に普通にやればいいだけなはずだけどなあ
Listも変なことしなくてもそのままSerialize出来ると思うけど
publicなゲッターセッターと引数なしのコンストラクタを持っていること
コレクションの場合はAdd(T item)を持っていること といった感じだったと思う
別に普通にやればいいだけなはずだけどなあ
Listも変なことしなくてもそのままSerialize出来ると思うけど
publicなゲッターセッターと引数なしのコンストラクタを持っていること
コレクションの場合はAdd(T item)を持っていること といった感じだったと思う
2012/06/22(金) 00:18:49.52ID:D9lptrmf0
駄目なのはList<T>[]であってList<T>じゃないよ?
339335
2012/06/22(金) 22:10:59.58ID:bY8JRY9Z0 >>337 >>338
おうふ…勘違いしてました,Listのシリアライズは問題無いのですね.
いまやったところ単体で普通にできました.
またUserごとシリアライズしようとしたときのエラーですが,そちらも解決しました.
行数が多すぎて怒られた&そんなに関係ないだろうと思って消していたのですが実際はXmlAttributeをつけていて
Userクラスはこうなっています
public class User {
[XmlAttribute("user_event_list")]
public List<Event> event_list;
[XmlAttribute("name")]
public string name;
public User() { }
}
これでエラーが出たのでEventListクラスを作ったのですが,どうやら問題はXmlAttributeにあったらしく,
event_listの直前のものを消したら問題無く動きました.
皆さんどうもありがとうございます,とても助かりました.
おうふ…勘違いしてました,Listのシリアライズは問題無いのですね.
いまやったところ単体で普通にできました.
またUserごとシリアライズしようとしたときのエラーですが,そちらも解決しました.
行数が多すぎて怒られた&そんなに関係ないだろうと思って消していたのですが実際はXmlAttributeをつけていて
Userクラスはこうなっています
public class User {
[XmlAttribute("user_event_list")]
public List<Event> event_list;
[XmlAttribute("name")]
public string name;
public User() { }
}
これでエラーが出たのでEventListクラスを作ったのですが,どうやら問題はXmlAttributeにあったらしく,
event_listの直前のものを消したら問題無く動きました.
皆さんどうもありがとうございます,とても助かりました.
340333
2012/06/22(金) 22:51:30.84ID:VRm8BDOa0 >>334
解説ありがとうございます
表示されない理由はばっちり腑に落ちました
> 普通はRectangleはDataTemplateにして
> ItemsSourceにバインドするのはその構成要素だけ持つクラスにする
よければ、ここについてもう少し教えてください
いま、Rectangle型のmyShape をメンバにもつクラス c1 を設定し、これのコレクションをListboxのソースとしたとき
<DataTemplate x:Key="myTemplate">
<StackPanel>
<Rectangle Height="{Binding Path=myShape.Height}" Width="{Binding Path=myShape.Width}" Stroke="{Binding Path=myShape.Stroke}"/>
</StackPanel>
</DataTemplate>
とし、Listboxのテンプレートとして適用すれば、全ての項で長方形は同時に表示することができました
ここでmyShapeの型をRectangleと限定せず、flameworkElementなどにして、
c1のインスタンスにはEllipceやその他のShapeを自由に入れられるようにし、それらを表示することは可能でしょうか
解説ありがとうございます
表示されない理由はばっちり腑に落ちました
> 普通はRectangleはDataTemplateにして
> ItemsSourceにバインドするのはその構成要素だけ持つクラスにする
よければ、ここについてもう少し教えてください
いま、Rectangle型のmyShape をメンバにもつクラス c1 を設定し、これのコレクションをListboxのソースとしたとき
<DataTemplate x:Key="myTemplate">
<StackPanel>
<Rectangle Height="{Binding Path=myShape.Height}" Width="{Binding Path=myShape.Width}" Stroke="{Binding Path=myShape.Stroke}"/>
</StackPanel>
</DataTemplate>
とし、Listboxのテンプレートとして適用すれば、全ての項で長方形は同時に表示することができました
ここでmyShapeの型をRectangleと限定せず、flameworkElementなどにして、
c1のインスタンスにはEllipceやその他のShapeを自由に入れられるようにし、それらを表示することは可能でしょうか
2012/06/23(土) 16:57:23.81ID:4W1+go0K0
int型配列a(要素数100)から等確率でランダムに10個の要素を選んで選んだ順に
配列b(要素数10)に代入するというプログラムを作りたいのですが、
自分が考えたのはひたすら100個のなかから1個ずつランダムで選んでいき、
前選んだ要素とかぶった場合はやり直し(棄却) という感じで作ったのですが、
選んでいくにつれて棄却する回数が多くなってしまい、時間がかかってしまいます。
この場合どのようなアルゴリズムで作るのが効率がいいのでしょうか?
配列b(要素数10)に代入するというプログラムを作りたいのですが、
自分が考えたのはひたすら100個のなかから1個ずつランダムで選んでいき、
前選んだ要素とかぶった場合はやり直し(棄却) という感じで作ったのですが、
選んでいくにつれて棄却する回数が多くなってしまい、時間がかかってしまいます。
この場合どのようなアルゴリズムで作るのが効率がいいのでしょうか?
2012/06/23(土) 16:59:23.81ID:VvicIvbe0
配列からランダムに一個選ぶ
選んだのを末尾のと交換する
個数を一個減らしてランダムに選ぶ・・・
選んだのを末尾のと交換する
個数を一個減らしてランダムに選ぶ・・・
2012/06/23(土) 16:59:57.81ID:F1v3/Dpc0
配列じゃなくて動的配列(List)を使えば、使用した要素を捨てられる
どうしても配列でやりたいなら被ったら上か下を選ぶって処理を入れる
どうしても配列でやりたいなら被ったら上か下を選ぶって処理を入れる
2012/06/23(土) 17:37:18.45ID:8zHjbdI20
いわゆる重複しない乱数と同じ考え方だからググれば腐るほどでてくる
2012/06/24(日) 15:54:12.67ID:5cM7Ezza0
配列内の要素をシャッフルして先頭から10要素取り出せば?
2012/06/25(月) 01:06:49.19ID:2vZfjApk0
>>345
それだとM個からN個を取り出すときO(M)になるから非効率
それだとM個からN個を取り出すときO(M)になるから非効率
2012/06/25(月) 01:49:47.37ID:QcDMISKM0
2012/06/26(火) 09:46:52.99ID:/TbFwKc10
>>340
データソース側にUIElementは使うもんじゃないってば
DataTemplateのTargetTypeでデータソースの型によって適用するDataTemplate切り替えたりする
<ListBox ItemsSource="{Binding ...}">
<ListBox.Resources>
<DataTemplate DataType="{x:Type my:RectanglePattern}">
<Rectangle Width="{Binding ...}" Height="{Binding ...}" Stroke="{Binding ...}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type my:EllipsePattern}">
<Ellipse Width="{Binding ...}" Height="{Binding ...}" Stroke="{Binding ...}"/>
</DataTemplate>
</ListBox.Resources>
</ListBox>
あるいはデータソースをGeometry(を持ったクラス)にしちゃって
DataTemplateはImage/DrawingImage/GeometryDrawingでやるとか
データソース側にUIElementは使うもんじゃないってば
DataTemplateのTargetTypeでデータソースの型によって適用するDataTemplate切り替えたりする
<ListBox ItemsSource="{Binding ...}">
<ListBox.Resources>
<DataTemplate DataType="{x:Type my:RectanglePattern}">
<Rectangle Width="{Binding ...}" Height="{Binding ...}" Stroke="{Binding ...}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type my:EllipsePattern}">
<Ellipse Width="{Binding ...}" Height="{Binding ...}" Stroke="{Binding ...}"/>
</DataTemplate>
</ListBox.Resources>
</ListBox>
あるいはデータソースをGeometry(を持ったクラス)にしちゃって
DataTemplateはImage/DrawingImage/GeometryDrawingでやるとか
2012/06/26(火) 16:08:21.13ID:yCJdNuh10
XAMLグロいなー
誰が考えたんだコレ
誰が考えたんだコレ
2012/06/26(火) 18:21:10.14ID:q2NBJkUf0
XML自体人が読み書きすることは重視してないからねー
構造的であることは人間にも利点があるが
人間にとってはせいぜい段組がしてあれば十分だ
こんなガチガチな仕様にしたのはコンピューターに合わせたからで
そのフォーマットの拡張系なんだから、よりコンピューターしか理解できないようになっていくのは当然だな
俺の好きなフレームワークにも
…and one more thing: Making humans edit XML is sadistic!
と書いてある
構造的であることは人間にも利点があるが
人間にとってはせいぜい段組がしてあれば十分だ
こんなガチガチな仕様にしたのはコンピューターに合わせたからで
そのフォーマットの拡張系なんだから、よりコンピューターしか理解できないようになっていくのは当然だな
俺の好きなフレームワークにも
…and one more thing: Making humans edit XML is sadistic!
と書いてある
2012/06/26(火) 19:17:05.04ID:00qqaFC30
デリゲートって、クロージャみたいに親のメソッドで扱われる変数を保持できるけど、
public void Hoge(object obj)
{
var act = new Action<obj>((o) => Fuga(o));
this.actionList.Add(act);
}
これみたいに、Actionをフィールドのリストに入れてずっと保持する場合だと、
objの参照元はずっとGCされないまま(メモリリーク)になるの?
これなら実行タイミングを好きにずらせるから便利だなーと思ったけど、
objの参照をずっと掴んでるなら微妙だな。
public void Hoge(object obj)
{
var act = new Action<obj>((o) => Fuga(o));
this.actionList.Add(act);
}
これみたいに、Actionをフィールドのリストに入れてずっと保持する場合だと、
objの参照元はずっとGCされないまま(メモリリーク)になるの?
これなら実行タイミングを好きにずらせるから便利だなーと思ったけど、
objの参照をずっと掴んでるなら微妙だな。
■ このスレッドは過去ログ倉庫に格納されています
