ふらっとC#,C♯,C#(初心者用) Part92at SOFTWARE
ふらっとC#,C♯,C#(初心者用) Part92 - 暇つぶし2ch1:名無しさん@お腹いっぱい。
12/04/26 21:32:32.95 RzRn9VkL0
ふらっとVisual C#,C♯,C#(初心者用)

このスレッドは
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

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

関連スレ
ふらっとC#,C♯,C#(初心者用) Part91
スレリンク(tech板)
C#, C♯, C#相談室 Part71
スレリンク(tech板)


こんな感じでソフトウェア板に立てたらどうかな

2:名無しさん@お腹いっぱい。
12/04/26 21:41:40.86 O5VqGHkR0
─ここは、プログラム板における同名スレにおいて、
  IDが付与されないがため生じる定期的な荒れ進行を度々経験し、
  疲れてしまった同スレの住人が、透明あぼーんの活用でまったりと
  本来のスレの目的を果たし続けるために設けられた、
  一種の避難所です。

3:名無しさん@お腹いっぱい。
12/04/26 21:48:33.25 k6WQuHfJ0
ム板開いたのかと思ったわ
避難所part1で良かったんじゃね?

4:名無しさん@お腹いっぱい。
12/04/26 21:56:27.84 O5VqGHkR0
>>3
感情的になった出て行け論者が立てたスレなので、
スレタイ名がメチャクチャになってしまったんだ。すまない。

5:名無しさん@お腹いっぱい。
12/04/26 22:02:59.89 4B8P7eLr0
荒れ気味の板がIDなしだと大抵ろくな事にならないのは分かるが、この板でする話なのか

6:名無しさん@お腹いっぱい。
12/04/26 22:08:52.32 O5VqGHkR0
ム板から逃れる先として、ソフトウェア板以外に何かあるかな?

7:名無しさん@お腹いっぱい。
12/04/26 22:45:50.27 ztuW7M4rO
ム板でやれ

8:名無しさん@お腹いっぱい。
12/04/26 22:49:38.04 O5VqGHkR0
>>7
巣に帰れってことだな。言い返す言葉もないよ。
だが、避難所を同じ板に作ってもしょうがないからな。

9:名無しさん@お腹いっぱい。
12/04/26 22:55:41.61 bO5QxnlI0
荒れてる時はこっちに誘導したらいいんじゃないかな

10:名無しさん@お腹いっぱい。
12/04/26 22:57:29.91 O5VqGHkR0
まあ、あっちに来た質問を無理にこっちに誘導する気はあんまり無いんだ。
向こうでも書いたけど、あっちのスレが回答不能なレベルに達してるってわけじゃないし。
むしろ、「IDがあった方が議論しやすい」と感じた人間だけが、こっちで議論すれば良いと思ってる。

11:名無しさん@お腹いっぱい。
12/04/26 23:07:50.71 O5VqGHkR0
こっちを擁護しておいてなんだが、これで本スレのテンプレに
こっちのスレを追加すべき/すべきでない議論とか巻き起こるのは嫌だなあ。
テンプレ周りの変更議論はもめるし。
もめるくらいなら追加したくない。

12:名無しさん@お腹いっぱい。
12/04/26 23:10:39.92 8roaiKjI0
問題は回答者がここにくるかだな

13:名無しさん@お腹いっぱい。
12/04/26 23:11:12.03 bO5QxnlI0
俺が一番回答してるから俺がいれば大概大丈夫だろう

14:名無しさん@お腹いっぱい。
12/04/26 23:17:43.49 O5VqGHkR0
>>12
俺も一応回答者。どんくらい回答したかまでは覚えてないけど。

15:名無しさん@お腹いっぱい。
12/04/26 23:34:02.35 8roaiKjI0
じゃあ、ちょっと質問
インターフェイス使うと改変に強いっていうけどプロパティとどう違うの?
プロパティも内部の構造変えても他のクラスに影響がない
影響が出るとしたら、プロパティの型を変更した場合
インターフェイスも引数の型変更したら結局使いものにならないし
改変に強いって説明の仕方おかしくない?

内部の違うクラスを同じようにアクセスできるのを明示するということならわかるけどね

16:名無しさん@お腹いっぱい。
12/04/26 23:43:32.60 LlORaYbR0
クラスというのは、実体を作れる型。
インターフェースとしいうのは、実体を作れない型。



17:名無しさん@お腹いっぱい。
12/04/26 23:45:23.62 O5VqGHkR0
「改変に強い」のは、インターフェイス自体の改変ではないよ。
改変に強い、って説明自体確かに誤解を招く表現で、
実際は「内部実装を気にしなくて良い」が正解だと思う。

インターフェイスとはちと違うけど、Streamなんかその最たるものじゃない。
Stream自体が何をソースにどうやって実現されているかは気にしなくてよくて、
処理する側はStreamクラスのオブジェクトに対して必要な処理(メッセージ)を要求すればいい。
インターフェイスを定義する、ってのはそれだけのことでしかない。

「Hoge(FileStream stream)」って定義したメソッドより、「Hoge(Stream stream)」って定義されたメソッドの方が、
汎用的に使えるじゃない。

18:名無しさん@お腹いっぱい。
12/04/26 23:54:34.76 bO5QxnlI0
改変に強いっていうのはどうなんだろうな
個人的には別に強くないと思うが

interfaceごしだと実装クラスを入れ替えられるけど
改変前と改変後の2つの似たようなクラスを両方保持して
interface越しにどっちを使ってるか分からなくするなんて考えただけでゾッとする
一つの具体クラスをただ書き換えるほうがずっといい

だから改変に強いと言うよりは
ライブラリを作る側が使う側に処理を実装してもらう時に使うものだと思うよ
IComparableを実装してもらってSortメソッドで使う比較関数に利用したり

まあC#3.0からラムダ式が使えるからそういう用途はもうほとんどお役御免だけどね
interface自体ほとんどお役御免といっていいと思う
ライブラリに残ってれば使うけど自作する意味は殆ど無い

19:名無しさん@お腹いっぱい。
12/04/26 23:57:08.75 65sWvc4W0
ム板って取扱いと人種的に宗教戦争余裕なのに未だにIDないのか

20:名無しさん@お腹いっぱい。
12/04/26 23:57:13.32 LlORaYbR0
インターフェースは、お役御免には、ならないと思うがな。

21:名無しさん@お腹いっぱい。
12/04/27 00:04:32.27 Op9+MQob0
interface I{ int Hoge(); string Hoge2(); }

こんなのを作るより

class C{ public Action Hoge; public Func<string> Hoge2; } こんなのを作って

new C{ Hoge = () =>{ ... }, Hoge2 = () => "hogehoge" }

こうしたほうが早いしわかりやすいし個別に設定できて汎用性も上だから
もうinterfaceを作る意味は無いはず

22:名無しさん@お腹いっぱい。
12/04/27 00:04:33.82 M9E7Y8z10
例えば、UnityやXNAやDxLibなどを同じように扱えるようにするにはどうするべき?
ゲーム本体部分とライブラリとの丁度境界線上にあるクラスはどのように定義すべき?

23:名無しさん@お腹いっぱい。
12/04/27 00:06:06.52 adJRSpDB0
お役ご免ってのは言い過ぎでしょう。後々機能追加が考えられる場合、
その機能追加に耐える様Interfaceを定義するコトなんて、(自分は)ザラにありますよ。
たとえば、画像ファイルに対して順次いろんな処理をするようなソフトを作ったとき、
最初はjpgとbmpしか対応しないでおいて、いずれpngとかtiffもやりたいなあ、と思った場合、

interface ImageProcessor { ... }
class JpegImageProcessor { ... }
class BmpImageProcessor { ... }

なんて。
処理自体が短ければ>>18の言うとおり、ラムダ式で十分なんだけど、
色んな段階を踏む処理の場合、処理自体をクラス化しちゃう方が後々追加し易い。

>2つの似たようなクラスを両方保持して~一つの具体クラスをただ書き換えるほうがずっといい

っていうような懸念がある場合は、interfaceじゃなくて抽象クラスでやればいいし。
共通部分は抽象クラスで処理して、後々追加したい機能毎に変わりうる部分は具象クラスに任せて抽象メソッドを定義だけしておく、とか。

24:名無しさん@お腹いっぱい。
12/04/27 00:10:18.02 M9E7Y8z10
>>23
もっともですねぇ

25:名無しさん@お腹いっぱい。
12/04/27 00:13:36.43 Op9+MQob0
>>23
これだと違いはファイル読み込んでビットマップ作る
ビットマップをファイルに書き出す

ところが違うだけじゃないの

具体的なクラス一個作って

public Image(Pixel[][] bitmap)

こんなコンストラクタにして

new Image(JpegLoader.Load(file))
new Image(BmpLoader.Load(file))

書きだす時は

JpegWriter.Write(image.Pixels);
BmpWriter.Write(image.Pixels);

こんなもんでよくね

26:名無しさん@お腹いっぱい。
12/04/27 00:15:00.08 adJRSpDB0
まあ、オブジェクト指向を完全に理解して常に完璧な形で実現出来てる、
なんて境地には到底達せないと思うので、今の自分の実装が正しいとも言い切れないんですけど。

Rxとか見てると、ラムダ式で全部・・・なんてのも決して非現実的ではないと感じるし、
「一つ一つの処理は短く」という基礎的なことを突き詰めていけば、
そういうこともきっとできるんだろうなあ、とは思う。

ただ、それでもinterface自体が無くなる可能性は低いだろうな。
俺は逆に、Rxが駆逐しようとしているのは開発者がclassを定義する、
という行為じゃないかと感じる。

27:名無しさん@お腹いっぱい。
12/04/27 00:17:24.64 nbH+qoH50
変数名につける英単語がわからなくて悩みまくる

28:名無しさん@お腹いっぱい。
12/04/27 00:17:43.59 adJRSpDB0
>>25
それだと、あっちこっちで処理対象がJpegなのかBmpなのか判定しなきゃいけなくなるでしょう。
処理が読み込みと保存だけでいいなら、2箇所ぽっきりだしそれもありだと思いますけど。

Classとインターフェース作っちゃえば、インターフェースを介して処理してる本体側は大きな変更することなく、
一番アタマで対象の判定だけやって、クラスの実態をnewした後は同じ処理を続けるだけ、で行ける。

29:名無しさん@お腹いっぱい。
12/04/27 00:35:15.50 adJRSpDB0
極端に汎化するなら、こういうインターフェースを作るかな
interface ImageProcessor {
  /// <summary>指定されたファイルがサポートされているかどうかを判定します。</summary>
  bool Supported(string fileName);
  /// <summary>指定されたファイルを読み込んで、オブジェクトを初期化します。</summary>
  void Load(string fileName);
  ~
}
本体側は
AssemblyからImageProcessorを継承してるクラスを全部引っ張ってきておいて、
private static readonl List<T> processors;
private ImageProcessor processor=null;
private Load (string fileName){
 foreach (var p in processors){
  if (p.Supported(fileName)){
   processor=p;
   break;
  }
 }
 if (processor==null) throw new NotSupportedException(string.Format("{0}は未対応のファイル形式です", fileName));
 processor.Load(fileName);
}
みたいな。こうすれば、処理本体側は変更なしで対応形式の追加が出来るだろうし。

30:名無しさん@お腹いっぱい。
12/04/27 00:35:54.03 Op9+MQob0
まあ別にいいんだけどねこれでも

public Image(Func<Pixel[][]> reader, Action<Pixel[][]> writer)

public void Load()
{
 Pixels = reader();
}

public void Save()
{
 writer(Pixels);
}

これでinterfaceと大体同等だけど最初に入れてから入れ替えができなくて無意味に汎用性が下がるし
呼び出し側もメソッドの中で何が起こるのか分からなくなってソースがわかりにくくなるんで
必要がなければ避けるべき形だよね

public void Save(Action<Pixel[][]> writer)
{
 ... 
}

処理の汎用化が必要でも、こんな風にライブラリ側だって必要なときに必要な物だけ渡してくれた方がわかりやすいし使う側も使いやすい
interfaceを使うと呼び出す場所(たとえばSaveを実際に呼び出すところ)とそれが定義されてる場所(Save処理を実装したクラス)が離れちゃうからわかりにくくなる
なにより「interfaceにそのメソッドが必要かどうか」という難しい判断をする必要がなくなるから問題がすごく簡単になる

31:名無しさん@お腹いっぱい。
12/04/27 00:40:53.37 adJRSpDB0
まあ、やりたいことにあった方を選べば良いんじゃないかな。
実際、その二つの方法を提供しているライブラリも多いよ。
俺もそういうやり方することあるし。処理が端的に済む場合なんかは特に。

で、じゃあどっちかしか使わないか、っていうと、時と場合に依った。
どっちでも実現できる場合もあれば、どっちかじゃないとどうにもならん、とか
一方のやり方だとやたら遠回りなやり方になる、とか色々あったさ。

ライブラリを公開する、って観点で言うと、>>30みたいなやり方の方が使いやすいだろうな。多分。
実際、interfaceを定義する、っていう手間はあれで結構大変だし、ホントやりやすい方でやればいいと思うよ。

32:名無しさん@お腹いっぱい。
12/04/27 01:33:59.48 psMmyTva0
ただ、制限がクリアできるならabstractの方が便利だけどね
interfaceで同一視したいクラスって、共通の処理がある程度有るし

33:名無しさん@お腹いっぱい。
12/04/27 01:37:13.24 3wpgqpvv0
( ・ω・)y─┛~~

34:名無しさん@お腹いっぱい。
12/04/27 02:38:49.18 adJRSpDB0
まあ実際、interfaceとabstract classどっちが多いかっつったら、
今まで書いてきたような目的下だと、abstract classの方が多いな。

35:名無しさん@お腹いっぱい。
12/04/27 10:42:30.93 cReG2fZ90
>>22
ゲームで必要な機能だけを、ある程度そのゲームに特化した形で抽象メンバにする
間違っても汎用的なライブラリを作ろうなどと考えてはいけない

36:名無しさん@お腹いっぱい。
12/04/28 18:00:55.53 dHnGlI/10
落ちた?

37:名無しさん@お腹いっぱい。
12/04/28 21:16:46.38 uBDtGHBV0
そんな早くdat落ちするのかこの板

38:名無しさん@お腹いっぱい。
12/04/28 22:23:13.82 qRaW9tis0
しないね。サーセン誤爆だ。

39:名無しさん@お腹いっぱい。
12/04/28 22:24:15.68 uBDtGHBV0
基本プログラミングっていうのは自分でライブラリを書いて自分で使うことの繰り返しだからな
汎用性が高く使いやすいライブラリを書いていくと良いプログラムになる
使いにくく汎用性が低いライブラリを作るとソースがなんだかわからなくなったり仕様変更できなくなったりする

40:名無しさん@お腹いっぱい。
12/04/28 22:33:08.75 qRaW9tis0
最初はそれも上手く行かなくて辛いけどな。試行錯誤を繰り返していく内に、
どうすれば汎用性が上がるかが分かってきて楽しい。

41:名無しさん@お腹いっぱい。
12/04/29 09:55:22.97 LSFzkJi50
さんざ苦労してライブラリ作っても、意外と使わなかったりするな
使わずに温存してるうちに陳腐化したり、もっといいライブラリが登場したり…

42:名無しさん@お腹いっぱい。
12/04/29 13:38:00.37 91lLWKe20
今必要じゃないライブラリ作ってもしょうがないよな
テストもろくに出来ないだろうし

43:名無しさん@お腹いっぱい。
12/04/29 19:13:44.11 hNVwJi4l0
それあるよな。必要な物書いていったらいつのまにかライブラリになってたってのが理想的。

44:名無しさん@お腹いっぱい。
12/04/29 19:16:01.56 15BXN5vX0
もはやライブラリを作るほうが本来の目的になってる時、あるよねw

45:名無しさん@お腹いっぱい。
12/04/29 19:20:20.22 TJFFSLOz0
作りたいツールを思いつく→ツールに必要なパーツを作る

→そこで満足する、または飽きる

46:名無しさん@お腹いっぱい。
12/04/29 19:24:44.61 DeCDbekJ0
そこが楽しさだからなぁ
完成が見えた時点でやる気が無くなる

47:名無しさん@お腹いっぱい。
12/04/29 19:45:24.02 91lLWKe20
デバッグが一番大変だわ
コード書いてる時は楽しいんだけど
バグを出すために色々やってみるとかキツい
自分が使うツールじゃなかったらまず無理

48:名無しさん@お腹いっぱい。
12/04/29 21:39:37.48 5gSo7RFr0
>>44-47
よう、おれ

49:名無しさん@お腹いっぱい。
12/04/29 21:42:49.73 91lLWKe20
前スレ埋まったw
ここに移動すんのか?

50:名無しさん@お腹いっぱい。
12/04/29 21:45:58.44 91lLWKe20
おかしい・・・みんなどこに行ったんだ

51:名無しさん@お腹いっぱい。
12/04/29 21:47:48.20 91lLWKe20
まあム板には相談室があるからふらっとがこっちにあっても
最悪質問者が誰もここまでこれなくて潰れても大して問題はないんだよな

52:名無しさん@お腹いっぱい。
12/04/29 21:47:52.52 5gSo7RFr0
じゃちっと立てれるか試してくるわ

53:名無しさん@お腹いっぱい。
12/04/29 21:51:38.15 5gSo7RFr0
あっ・・・ソフトウェア板様に、って貼られたテンプレをつかっちまった
スレタイ・・・すまない。

54:名無しさん@お腹いっぱい。
12/04/29 21:52:29.22 5gSo7RFr0
ふらっとVisual C#,C♯,C#(初心者用) Part92
スレリンク(tech板)

55:名無しさん@お腹いっぱい。
12/04/29 22:04:03.98 91lLWKe20
なんだかよくわからないことになってきたな・・・
どっちに来ても質問が来たら答えるだけだけど

56:名無しさん@お腹いっぱい。
12/04/29 22:09:46.37 sYMu1fUT0
VC#のデザインでコピーして貼り付けた時、Nameプロパティをコピー元に似せる方法ってないですか?
input_data_Box1ならinput_data_Box2とかinput_data_Box1(1)とかになってほしいです・・・

57:名無しさん@お腹いっぱい。
12/04/29 22:18:35.45 91lLWKe20
継承するかユーザーコントロールにしてInput_data_Boxっていうクラス名にしたらいいんじゃないの

58:名無しさん@お腹いっぱい。
12/04/29 22:27:06.67 sYMu1fUT0
ありがとうございます
特に付加する機能のない継承をやるくらいしかないんですね

59:名無しさん@お腹いっぱい。
12/04/29 22:29:44.31 sYMu1fUT0
多少手間だからユーザーコントロール作るか・・・!

60:名無しさん@お腹いっぱい。
12/04/29 22:32:06.71 91lLWKe20
俺はなにもかもユーザーコントロールにしてる
1クラスに配置するコントロールは4つぐらいまで
超えたらユーザーコントロールにまとめる

61:名無しさん@お腹いっぱい。
12/04/29 22:36:51.13 DeCDbekJ0
ユーザーコントロールって再利用性が全くないよね

62:名無しさん@お腹いっぱい。
12/04/29 22:41:21.18 91lLWKe20
>>61
んなことないでしょ
よく出てくる複数のコントロールの組もあるし(追加、削除ボタンの付いたリストとか)
WinFormは継承しなくても基本全部いじれるようになってるから
単一のコントロールでもDock.Fillしてユーザーコントロールのなかで機能追加したりも出来るし

63:名無しさん@お腹いっぱい。
12/04/29 22:48:34.11 15BXN5vX0
>>62
俺は、コントロールのプロパティをバインドさせたりすることがよくあるから、
INotifyPropertyChangedインターフェースを実装したUserControlの派生クラスを作ってる。
他にも共通機能とかをまとめておけば、いちいち実装し直す必要ないし、便利。


64:名無しさん@お腹いっぱい。
12/04/29 22:53:51.89 5gSo7RFr0
>>61
まあ、変な基準でまとめると全く無くなる。
でもたとえば、ファイルパスを入力するテキストボックスと、参照ボタンのセットとか、
意外とよく使う組み合わせ、ってのは多いからな。

>>60のいう4つくらいまで、っていうのは何だか凄いな、と思うけど。
レイアウト系のパネル配置し出すと、4つなんて容易に越えてしまいそうなもんだが・・・

65:名無しさん@お腹いっぱい。
12/04/29 22:54:42.98 5gSo7RFr0
×パネル
○コンテナ

66:名無しさん@お腹いっぱい。
12/04/30 00:30:14.37 ItxvOLfT0
荒らしの人は相談室に行ったみたいだな

67:名無しさん@お腹いっぱい。
12/04/30 01:20:42.98 MeoH7oJd0
全部作り終わってから、ちまちまとライブラリに落としこんで行ったら動かなくなった。元に戻しても動かない(´・ω・`)

68:名無しさん@お腹いっぱい。
12/04/30 01:32:15.13 EicMUz7P0
>>66
素人考えの眩暈のするような間違った内容だけど、自分の考えを書いてはいるんで別の人かな。
JITの話が出てたんで関連Tips

・JITとインタプリタは違う
・JIT結果はAppDomainをまたいで共有される
・Assemblyにする段階で構文解析終わって中間コードになってるためJITは高速
・コールドスタートアップだとJITコンパイラの読み込みに時間がかかる
・全部NGENしとけばJITコンパイラの読み込み自体がスキップされる
・JITさせたくないならNGENしときましょう

69:名無しさん@お腹いっぱい。
12/04/30 05:39:30.54 oGTSpznu0
>>67
動かなくなるようなライブラリの落とし込み方ってどうやるんだ・・・
クラス単位で名前空間移して別DLLにするだけだろ?
アプリ側で随時using追加すれば動かなくなることなんてないだろ・・・

70:名無しさん@お腹いっぱい。
12/04/30 08:12:58.08 Cl926K6X0
いまさらだがテンプレ抜けていたので


■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
URLリンク(ideone.com)
URLリンク(pastebin.com)
コードを貼り付けてrun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます

71:名無しさん@お腹いっぱい。
12/04/30 16:47:11.06 z/qZQlkF0
複数のテキストボックスを入れたコントロールを用意し、
テキストボックスのTextプロパティ等をコントロールのプロパティで変更できるようソースに追記しました
(デザイナーで初期値を変更すること、プログラム上で参照することが目的)
デザイナーで初期値を変更することはできたのですが、プログラム上で参照することができません

using ディレクティブまたはアセンブリ参照が不足しています。
とエラーが出ます

検索するとNamespaceを追記すると良いと出てくるのですが、コントロールと本体のNamespaceは同じで、
最初から付いているコントロールのTagプロパティは参照できます
Modifierをprivateからpublicに変えたりもしたのですが、駄目でした

ソースは次レスで書きます

72:名無しさん@お腹いっぱい。
12/04/30 16:48:09.55 z/qZQlkF0
//○プロパティの追加(1例)
public string Text_Box_Tag
{
set
{
input_tag_Box.Text = value;
}
get
{
return input_tag_Box.Text;
}
}

//○本体
//Tagの代入
foreach (Control item in Text_input_group.Controls)//コントロールはText_input_group内に配置しています
{
if (item.GetType().Equals(typeof(Control)))
{
int a=(int)item.Tag;//元からコントロールにあるTagプロパティは取得できます 中身は0~です
Tag[a]=item.Text_Box_Tag;//追加したプロパティ エラー
Key1[a]=item.Text_Box_Key1;//追加したプロパティ エラー
Key2[a] = item.Text_Box_Key2;//追加したプロパティ エラー
Data[a] = item.Text_Box_Data;//追加したプロパティ エラー
}
}

処理が足りていないのでしょうか?
へ、ヘルプ・ミー

73:名無しさん@お腹いっぱい。
12/04/30 16:51:06.91 oGTSpznu0
一例、でわかるかよ。
そのプロパティの中に原因があるんだろ。

74:名無しさん@お腹いっぱい。
12/04/30 16:51:59.35 oGTSpznu0
ン?違うな。なんだこのソース。
そもそもコンパイルできねえじゃん。

75:名無しさん@お腹いっぱい。
12/04/30 16:52:49.07 oGTSpznu0
プロパティを追加したとかいうクラスの名前はなんだかしらないが、
そのクラスでキャストしなきゃそのプロパティにアクセスできるわけないだろう。

76:名無しさん@お腹いっぱい。
12/04/30 16:52:54.05 ItxvOLfT0
複数のテキストボックスを入れたコントロールのクラス名をTextBoxesControlとすると

if (item.GetType().Equals(typeof(TextBoxesControl)))
{
//ちゃんとTextBoxesControlにキャストする
TextBoxesControl boxes = (TextBoxesControl)item;

int a=(int)boxes.Tag;//元からコントロールにあるTagプロパティは取得できます 中身は0~です
Tag[a]=boxes.Text_Box_Tag;
Key1[a]=boxes.Text_Box_Key1;
}

みたいなかんじでキャストすると、追加したプロパティにアクセスできるよ
Controlのままでは追加したプロパティにはアクセス出来ない

77:名無しさん@お腹いっぱい。
12/04/30 16:53:49.60 oGTSpznu0
エラー、ってコンパイルエラーのことだったのね。浅はかな回答して済まん。

78:名無しさん@お腹いっぱい。
12/04/30 16:57:55.31 z/qZQlkF0
>>76
なるほど
クラス名でキャストしてあげる必要があるんですね
無事コンパイルが通りました
ありがとうございました

>>77
いえ、私の説明不足ですみません

79:名無しさん@お腹いっぱい。
12/04/30 18:03:22.34 oGTSpznu0
本スレはいよいよ崩壊しているな・・・
回答がままならない

80:名無しさん@お腹いっぱい。
12/04/30 18:05:04.00 Lf0w4ZcY0
初心者の質問に初心者が答える正に初心者用スレッド

81:名無しさん@お腹いっぱい。
12/04/30 18:06:33.19 oGTSpznu0
あの状態で答えられるエスパーは確かにあのスレにはおらんな。
たまにエスパーのいるスレがあるけど、ああいうエスパー達はどういう次元にいるのか理解が及ばない。

82:名無しさん@お腹いっぱい。
12/04/30 18:06:38.03 ItxvOLfT0
あれはIDの必要性を分からせるための自作自演に違いない

83:名無しさん@お腹いっぱい。
12/04/30 18:10:32.67 oGTSpznu0
ふと思えば、そもそも、あのプログラムでxcopyを使う必要はあったんだろうか・・・

84:名無しさん@お腹いっぱい。
12/04/30 18:42:57.19 wDghyqrL0
>>77
コンパイルエラーと言えば、今作っている奴がコンパイル完と共にVSがエラーで落ちるorz
その後再起動すると普通に動くんだが、修正するとコンパイル後に落ちる
どっかのシンボル名が問題起こしているっぽいのだが情報有ったら教えて貰えませんかね?

85:名無しさん@お腹いっぱい。
12/04/30 18:43:59.26 ItxvOLfT0
マイクロソフトのサポートに電話すれば

86:名無しさん@お腹いっぱい。
12/05/01 09:16:04.91 buWGJ5Ju0
TextRenderer.MeasureText のオーバーロードの一つ

public static Size MeasureText(
 IDeviceContext dc,
 string text,
 Font font,
 Size proposedSize,
 TextFormatFlags flags )

proposedSizeの意味がさっぱりわからないんですが
誰かバカな私に噛み砕いて教えて下さいませんか?
ちなみにバストは86cmです

MSDNにはこうありますが……
When measuring text on a single line, if the proposedSize parameter represents a Size with a height dimension greater than Int32.MaxValue , the returned Size will be adjusted to reflect the actual height of the text.
1 行のテキストを計測したときに proposedSize パラメータが Int32.MaxValue より大きい高さを持つ Size を表している場合、返される Size が調整されて、実際のテキストの高さが反映されます。

87:名無しさん@お腹いっぱい。
12/05/01 09:18:00.24 buWGJ5Ju0
>proposedSize パラメータが Int32.MaxValue より大きい高さを持つ Size を表している場合

ここんところが意味不で困ってます
Size.HeightはintですからInt32.MaxValueより大きいってどゆこと?

88:名無しさん@お腹いっぱい。
12/05/01 11:14:15.23 K0wOwpVe0
MaxValueより大きい・・・・ジャスコだな

89:名無しさん@お腹いっぱい。
12/05/01 11:18:40.05 efkrhIsb0
MaxValueって31bit+符号で表現できる最大ってことじゃなかったっけ?
ファイル長なんかだとLongも一緒につかえるよね

90:名無しさん@お腹いっぱい。
12/05/01 11:48:39.69 7uSL+LzA0
見た感じproposedSizeに収まるテキストの最大のサイズを返すんじゃないか
MSDNがバグってるんだろう

91:名無しさん@お腹いっぱい。
12/05/01 13:43:26.40 qndYGAe10
DataGridViewのFillの挙動が気にくわない。
「表示幅が余ったときはFill、それ以外の時はAllCells(ExceptHeader)」みたいな挙動をさせたい場合、
DataGridViewの継承クラスで容易に実装できないもんかな・・・
FillWeightとの絡みとか考えたら大変そうっちゃ大変そうなんだけど、
元々のFillの挙動(表示幅が不足すると、見切れてしまうしサイズの変更も出来ないしで詰む)が頭悪すぎて
どうにもこうにも。

92:名無しさん@お腹いっぱい。
12/05/01 13:47:06.71 qndYGAe10
protected virtual CalculateColumnSizeCode とかそういうメソッドが隠れてねえかなあ、と
探したけど、それっぽいの無いんだよね・・・。

93:名無しさん@お腹いっぱい。
12/05/01 13:47:57.54 qndYGAe10
×Code
○Core

94:名無しさん@お腹いっぱい。
12/05/01 20:46:32.83 7uSL+LzA0
知らんけど一個一個MeasureTextして入るかどうか調べればいいんじゃねえの?

95:名無しさん@お腹いっぱい。
12/05/02 00:13:17.88 8lvEYvBv0
相談室荒れてるな
韓国コピペも相談室言ったか

96:名無しさん@お腹いっぱい。
12/05/02 01:26:06.18 ihqdrBlo0
失礼します。改行コードについての質問です。

改行1つをRead()で読み込むと10進で1310が返ってくるのですが、
これはCR(10進で13)とLF(10進で10)をまとめて1文字として読んでいるという認識でいいのでしょうか。
だとすると、CR+LFと\u051E(16進51Eは10進で1310)とはどう区別して判定するのでしょうか。
(\u051Eなんてめったに使うものではないでしょうが。)

もうひとつ、int型の1310をString.Format(string, Object)で16進変換すると"DA"が返ってます。
1310を分割して13->"D",10->"A"としているのだと思いますが、
これはどういうロジックでこうなるのでしょうか。なぜ"51E"ではないのでしょうか。

よろしくお願いします。

97:名無しさん@お腹いっぱい。
12/05/02 01:39:43.60 8lvEYvBv0
CRが13,LFが10の2文字でしょ
2文字をいっぺんに読んで、何かよくわからない過程を経て1310に到達してるんだろうと思うけど

URLリンク(ideone.com)

1310は16進数だと51Eになるみたいだよ

98:名無しさん@お腹いっぱい。
12/05/02 03:00:20.14 ihqdrBlo0
自己解決しました。一度のつもりの処理を二度行っていただけでした。

こんなことで小一時間悩んでいたなんて・・・

99:名無しさん@お腹いっぱい。
12/05/02 05:46:56.72 lw6+ZIwT0
文字コードの制御コードはすべてアスキーコード互換じゃないかな?
URLリンク(e-words.jp)



100:名無しさん@お腹いっぱい。
12/05/02 05:48:39.32 lw6+ZIwT0
おIDがあるw
ソフトウェア板に移動したのかw


101:名無しさん@お腹いっぱい。
12/05/02 05:50:21.13 lw6+ZIwT0
で、windowsがなんで2文字のアスキーコードが返ってくるかといえば
URLリンク(ja.wikipedia.org)

102:名無しさん@お腹いっぱい。
12/05/02 13:23:51.82 40XiFrCp0
やっぱIDいいよな
ない向こうは相変わらず荒れてるし
必死にIDあり移住に反対してた奴はいなくなったようで平和だ

103:名無しさん@お腹いっぱい。
12/05/02 14:33:24.10 8lvEYvBv0
でも向こうのほうが盛り上がってるし・・・

104:名無しさん@お腹いっぱい。
12/05/02 17:04:16.32 oqXEWlNP0
ここは盛り上がることが目的と違うし。
避難所、って銘打ってるんだからそれでいんじゃないの。

105:名無しさん@お腹いっぱい。
12/05/02 19:22:47.29 a9Xqu3H50
休みで暇なやつが荒らしまくりだな
あっち


106:名無しさん@お腹いっぱい。
12/05/02 19:35:09.34 oqXEWlNP0
まあ程度が知れてる。完全に荒らし目的だろうから、どうでもいい。

107:名無しさん@お腹いっぱい。
12/05/03 01:24:57.53 3UKuwpbd0
C#で作られてるソフトで、無償で、おまけにソースも見られる
そんな勉強するのに便利なフリーソフトってありますか?
他人のコードを見て勉強したいが、日曜グラマにそんな友達は居ない。

108:名無しさん@お腹いっぱい。
12/05/03 02:33:39.68 fBwe4Ony0
>>107
どの程度のレベルかわからないが、msdnにはいくらかサンプルやビデオがあるし
codeplexやSourceForgeはオープンソース
どこも自分にぴったりのものを探すのは難しいけど

具体的にどういったソフトを作りたいか言ってくれたら
もう少し細かくアドバイスできると思うが

109:名無しさん@お腹いっぱい。
12/05/03 11:53:58.79 5G/cYvda0
ニュース系板もなんか暇なやつかネタが無い業者の釣りなのかしらんが
数年前の事件でスレ乱立してるしなあ


110:名無しさん@お腹いっぱい。
12/05/03 21:27:18.14 VAj4gK3M0
>>107
VS2010Express
Expression Blend評価版
逆コンパイルすれば最高峰のC#コードが読み放題

111:名無しさん@お腹いっぱい。
12/05/03 21:29:25.30 XONpxvSO0
Expression Blendなんか使わなくても、ILSpyでも入れればいい。


112:110
12/05/03 21:32:34.99 VAj4gK3M0
いや勉強の例として挙げたんだ
Expression Blendは全部C#だし0から一気に作られてるからとても綺麗

113:名無しさん@お腹いっぱい。
12/05/03 21:44:17.23 fBwe4Ony0
ネットにアクセスするのにイテレータ使うとだめだな
プロパティを読みに行く度にネットに接続する
foreachなんか使うと、F5連打状態
気づいてよかったわ

114:名無しさん@お腹いっぱい。
12/05/03 21:47:46.84 8qH4YrS90
どんな実装だよ

115:名無しさん@お腹いっぱい。
12/05/03 21:53:53.85 XONpxvSO0
なにそのおそろしい実装www

116:名無しさん@お腹いっぱい。
12/05/03 22:34:50.05 7ENHv7f20
イテレータを使うとダメなんじゃなくて、
イテレータの使い方を間違えるとダメなんだと思うが・・・。

まあ、変にイテレータに拘るより、馬鹿正直に書いたソースの方が、
往々にして後々保守性高かったりするけどな。

117:名無しさん@お腹いっぱい。
12/05/03 22:37:32.84 XONpxvSO0
まずメモリーの無駄とか気にしないでList<T>なり作って
とりあえず読み込んで、動くものを作れば良いんだよ。
そうすれば、イメージが具体的になるわけだし、それから最適化を掛ればいい。


118:名無しさん@お腹いっぱい。
12/05/03 22:52:25.64 fBwe4Ony0
まったくもってその通りなんだけど
今回の場合、深い階層で使っていたのを忘れて利用したために起きた
1レス読むごとにアクセスするみたいな感じ

119:名無しさん@お腹いっぱい。
12/05/03 23:00:45.04 VAj4gK3M0
やるなら裏で非同期ダウンロードしながら列挙するのが筋だろうな
でも列挙がダウンロードに追いついてしまったらブロックすることになるから
やっぱり昔ながらのコールバックのほうが現実的だろうな

120:名無しさん@お腹いっぱい。
12/05/04 21:45:32.36 as1Q9Uxm0
画像編集ソフトとか作れる?
取り敢えずビットマップで色塗るだけ出来れば良い

121:名無しさん@お腹いっぱい。
12/05/04 21:48:40.63 Aa102tK60
そんなhelloworldの次あたりに作るようなもん誰だって作れるだろ

122:名無しさん@お腹いっぱい。
12/05/04 22:22:58.15 as1Q9Uxm0
 どうやって?

123:名無しさん@お腹いっぱい。
12/05/04 22:43:01.44 KhG+aQQo0
>>120
作れる。Paint.NETが代表例。

真面目に作ると難しいけど単純なやつなら
System.Drawing.Graphics使って図形描画するとこからやるといい

124:名無しさん@お腹いっぱい。
12/05/04 22:55:47.11 fDh4gRp10
ペイント系も作れるしベクター系も作れる


ところでフリーで地図データが手に入るところないかなあ
ここのsvgデータをxmlで処理した後座標パーサを書いて
bitmapにしてみたけどなんかおかしい
URLリンク(www.kabipan.com)



125:名無しさん@お腹いっぱい。
12/05/04 22:56:25.79 as1Q9Uxm0
メモ帳とかみたいにUndoしてみたいんだけど・・・

126:名無しさん@お腹いっぱい。
12/05/04 23:00:44.57 BmjSpYKS0
すりゃいいだろ

127:名無しさん@お腹いっぱい。
12/05/04 23:05:10.60 as1Q9Uxm0
どうやってするのか聞きに来たんですよ・・・?

128:名無しさん@お腹いっぱい。
12/05/04 23:07:31.51 fDh4gRp10
まあundoできるできないとグラフィック関連を扱えるようになるのは
わけて考えた方がいいな

まずはどうすればグラフィック関連をいじれるか学んだほうがいい

129:名無しさん@お腹いっぱい。
12/05/04 23:10:59.12 Aa102tK60
どうせ課題の答えでも聞きに来たんだろ
聞く態度もなってないし問題丸投げで聞くし
こうこうこういう風にしたけど出来なかったとかいうのもない
まったく考えないでクラスの優等生に聞きに行くようなタイプ

130:名無しさん@お腹いっぱい。
12/05/04 23:14:54.26 as1Q9Uxm0
まだ中学生ですよ・・・

131:名無しさん@お腹いっぱい。
12/05/04 23:18:28.46 fDh4gRp10
でも現実問題としてどうすればいいですかねといわれても
現段階だと、画像系ソフトの骨格を作るくらいのレベルに
なるからちょっと気軽に質問して応えるレベルではないのも事実なんだよね・・・

132:名無しさん@お腹いっぱい。
12/05/04 23:31:06.64 as1Q9Uxm0
pictureBoxがクリックされたらその座標を修得→その座標の色を変更
とか?

133:名無しさん@お腹いっぱい。
12/05/04 23:49:08.53 fDh4gRp10
以前ちょっとやってたのでざっくりとした内部の仕組は
頭にあるけど今は眠いのでまた明日ね

他の人でフォローできるなら相手してもらって・・・

ねる

134:名無しさん@お腹いっぱい。
12/05/05 01:46:40.32 z5l7RscG0
普通にビットマップをいじってDrawImageでフォームに書き出すのの繰り返しでいいんじゃないの?
ビットマップはLockBitsっていうメソッドを使っていじれば実用になる速度で動くはず

135:名無しさん@お腹いっぱい。
12/05/05 07:08:51.74 Cg9BHw6x0
宿題なら宿題で、要件(Undoを実装することとか)を先に出したほうがいいぜ
後出しされるとぶちきれちゃうオッサンとかいるからよぉ

宿題じゃないならもっと聞きようとか口のきき方があるだろボケ、と言いたいね

136:名無しさん@お腹いっぱい。
12/05/05 07:30:19.91 fm75d1sN0
NGID
ID:Cg9BHw6x0

137:名無しさん@お腹いっぱい。
12/05/05 07:49:10.05 W4fkrUcA0
ざっくりした骨格
URLリンク(ideone.com)

undoしたいってことはどういう変更を掛けたか管理してないと駄目

138:名無しさん@お腹いっぱい。
12/05/05 09:16:17.98 k0vlExs70
ざっくりとした質問にはざっくりとした答えで良いのだよ。

139:名無しさん@お腹いっぱい。
12/05/05 10:00:02.60 z5l7RscG0
初心者煽りはNGIDでスッキリ

140:名無しさん@お腹いっぱい。
12/05/05 11:51:16.64 k0vlExs70
素朴な疑問なんだが、IBindingList.Findっていつ使われるんだ?
DataGridViewで表示してても、あんまりありがたみを感じないんだが。

141:名無しさん@お腹いっぱい。
12/05/05 19:26:16.33 m7U0FwS60
Javaを少しやってた者だけど
今まで趣味で適当に使ってたC#を勉強してみようと思ってる
それで下のどちらかを買いたいんだけど、お勧めはある?
Effective C# 4.0
URLリンク(www.amazon.co.jp)
究極のC#プログラミング ~新スタイルによる実践的コーディング
URLリンク(www.amazon.co.jp)
Effective Javaが重宝したから(つまりそれ系の本が欲しい)
一先ずEffectiveシリーズ買っとこうかと思ったけど
レビュー見てるともう一個の方も捨てがたい様に思う
いずれ両方買ってみたいけど金が無いのでどれか一冊

142:名無しさん@お腹いっぱい。
12/05/05 19:29:02.38 z5l7RscG0
別に本読まなきゃ分からないような言語じゃないし
Effective C++とか読んだほうがC#の中身が分かって役に立つだろう

143:名無しさん@お腹いっぱい。
12/05/05 19:30:51.63 /CJN4LW00
>>141
URLリンク(www.google.co.jp)

144:名無しさん@お腹いっぱい。
12/05/05 19:34:06.24 J6S1Frf80
中途半端な解説の本を買うよりは、ネットで十分なような。

URLリンク(matome.naver.jp)

145:名無しさん@お腹いっぱい。
12/05/05 20:09:08.88 m7U0FwS60
皆レスサンクス

>>142
そうじゃなくてEffectiveシリーズ読んだことあるなら分かると思うけど
小手先のテクニックやら作法の様な基本を知りたい
なまじJavaの知識だけで物が作れるもんだから
C#的な部分としての基本を見落としてると思う
読んだこと無いけどEffective C++読めってのは極論過ぎない?

>>144
上で挙げた本って中途半端なの?
別に良書があるなら教えてくれ
ネットは結構目を通してるから紙媒体で何か欲しい

146:名無しさん@お腹いっぱい。
12/05/05 20:45:01.12 42VAAxoJ0
英語でよければKindle本買えば安く読めるよ。

147:名無しさん@お腹いっぱい。
12/05/05 22:24:45.24 m7U0FwS60
電子書籍版あるんだね
でも英語は自信無いや
1冊目は無難にネームバリューのあるEffectiveにするよ
ありがとう

148:1/3
12/05/05 22:39:23.48 iim98xC70
質問です。長くなるので分割投稿します。
SQL Server CE 3.5 を使用しているのですが、
次レスのコードを実行してもテーブルに情報を挿入できません。
そのテーブル名は「test」で、単純に「id」、「hoge」列だけをもつものです。
(続きます)

149:2/4
12/05/05 22:44:46.10 iim98xC70
SqlCeConnection conn = new SqlCeConnection();
conn.ConnectionString = @"Data Source=DB.sdf";
conn.Open();
var transaction = conn.BeginTransaction();

(続きます)

150:3/4
12/05/05 22:47:35.07 iim98xC70
try {
var command = conn.CreateCommand();
command.Transaction = transaction;
command.CommandText = "INSERT INTO test (id, hoge) Values ('123', 'abc')";
int row = command.ExecuteNonQuery();
transaction.Commit();
} catch (Exception ex) {
transaction.Rollback();

(続きます)

151:名無しさん@お腹いっぱい。
12/05/05 22:49:54.32 Nyop5iOH0
>>70使え

152:4/4
12/05/05 22:50:31.20 iim98xC70
上のコードを実行すると、変数 row の値は「1」ですが、
「SELECT * FROM test」すると、何も格納されていません。
しかし、Visual C# 2010 Express を使用して、
直接テーブルにクエリを発行して入力したデータをSELECTすること
(ExecuteReader()の返り値を参照)はできます。
どのようにすれば、C#のコードでINSERTやUPDATEができるのでしょうか?
(以上です)

153:152
12/05/05 22:52:52.88 iim98xC70
>>151
すみません。>>70 の存在に気づかないまま、書き込みしてしまいました。

154:名無しさん@お腹いっぱい。
12/05/05 22:54:23.40 Nyop5iOH0
怒ってはいないよw
テンプレが>>70っていうのも遅すぎだし

ただそういうサイトもあるとは知っておいてね

155:名無しさん@お腹いっぱい。
12/05/05 23:10:18.98 jOpn+oX90
INSERTしたのとSELECTしたのでデータベースファイルが違うんじゃね?

156:152
12/05/05 23:27:51.26 s0fFTjR50
回線が途切れたのでID、変わります。

>>153
お心遣いありがとうございます。次から >>70 を使います。

>>155
レスありがとうございます。
確認しましたが、データベースファイルは同じものでした。
INSERT する時も、SELECT する時も、
同じ SqlCeConnection() のインスタンスの接続を使用しています。

157:名無しさん@お腹いっぱい。
12/05/05 23:32:45.30 jOpn+oX90
URLリンク(social.msdn.microsoft.com)
具体的にはこれなんだけど

158:152
12/05/06 00:04:16.04 M3IW9sbJ0
>>157
重ねてありがとうございます。
プロパティの「出力ディレクトリにコピー」を確認しましたが、
既に「新しい場合はコピーする」になっていました
ちなみに「常にコピーする」に変えてもみましたが、変わりませんでした。

159:名無しさん@お腹いっぱい。
12/05/06 00:06:23.44 oKHRofvw0
書籍も@ITもざっくり説明しているだけだからな
コピペはできても応用が効かない感じになる
ある程度わかった上で復讐がメモ代わりに見るのはいいけど
やっぱりmsdnが出発点には一番いい

160:名無しさん@お腹いっぱい。
12/05/06 00:14:10.21 xh4KhmH40
MSDNは、リファレンスとしては、使うこともあるが、
学習用としては、あまり使わないな。そこらへんは、人それぞれか。
MSDN Blogsの記事(URLリンク(blogs.msdn.com))は、読んでおいて損は、無いと思う。


161:名無しさん@お腹いっぱい。
12/05/06 01:30:26.83 oKHRofvw0
>>160
ここいいな、参考になる

162:名無しさん@お腹いっぱい。
12/05/06 12:14:46.69 Dyi3DW+v0
なんか例外出てんじゃないの? catchするの止めてみたら?

163:名無しさん@お腹いっぱい。
12/05/06 14:01:23.28 Q5pbWLBW0
そこは出力すべきだろう

164:152
12/05/07 00:25:37.29 m037gZdq0
>>162
これは >>152 へのアドバイスいただいているのだと勝手ながら解釈します。
レスありがとうございます。
例外は出ておらず、catch 句に処理は移っていませんでした。

以来、どうしようもなくなったので、すべてまっさらにして、
Visual C# 2010 Express で新たなソリューションを作り直したところ、
正常に動作するようになりました。
原因は終ぞ分からなかったものの、これで自己解決の気分にしたいと思います。


165:名無しさん@お腹いっぱい。
12/05/07 15:25:42.69 8qFi5QC30
正規表現についてなんですが、たとえば
001 001 002 002 003 004 004 005 005
とある時、自分の場合00[0-9]でマッチさせるんですが、最初の001にマッチさせたあと次にいきなり002にマッチさせる方法ってないでしょうか?
やはりNextMatchを2回呼ぶしかないのでしょうか?なにかいい方法を教えてください

166:名無しさん@お腹いっぱい。
12/05/07 15:34:29.42 UBnHdgfn0
Matchesはだめなん?

167:名無しさん@お腹いっぱい。
12/05/07 17:15:01.04 EsKENrdI0
>>165
for(,,){
regex.matches("?(00"+i.ToString()+")*");
}

168:名無しさん@お腹いっぱい。
12/05/07 17:21:17.61 EsKENrdI0
var eroGazou=Enumerable.Range(1,5).Where(i=>{Regex.IsMatch("?(0\d{1}"+i.ToString()+")*");};

169:名無しさん@お腹いっぱい。
12/05/07 17:23:08.80 UBnHdgfn0
>>168
なるほど
画像の連番かw

170:165
12/05/07 18:37:15.95 8qFi5QC30
>>168
LINQ使う手があったんですね。それで試してみます。

>>169
まあそんなところですw

あと1つ質問なんですが、
for(int i = 1;i < 999;i++)
{
 Match m = Regex.Match(src, @"00" + i.ToString());
 
 if(m.Success)
  data[i] = m.Value;
}

こういうコードを書いてみたんですが、これではだめなのでしょうか?


171:名無しさん@お腹いっぱい。
12/05/07 18:57:17.03 EsKENrdI0
>>170
それだと00998になるんじゃない?
3桁にしたいならこれ
(src,"?("+ i.ToString("n3")+")")

172:名無しさん@お腹いっぱい。
12/05/07 22:05:04.46 SmzASuRUi
>>170
あと。変数名は明確にわかりやすくするのが基本だ。

 Match 今夜のおかず = Regex.Match(...


173:名無しさん@お腹いっぱい。
12/05/07 22:05:57.36 /M0Q9y5v0
意味がわかりませんw

174:165
12/05/08 00:16:50.44 mTraP+Vz0
この前置きの?ってどういう意味があるんでしょうか?
代替構成体ってやつですか?

175:名無しさん@お腹いっぱい。
12/05/08 01:41:39.89 7KboTL1k0
ちゃんと読んでないけど
?って0-1文字の何か,だよね
区切りのスペースを吸収してんじゃないのかな

176:名無しさん@お腹いっぱい。
12/05/08 02:46:45.94 gH9z368B0
最初のはてなは何なんだろうな
MSDN見ても書いてなかったわ

177:名無しさん@お腹いっぱい。
12/05/08 03:25:06.62 hKk999Ma0
perl5準拠の正規表現なので専門スレで聞け

178:名無しさん@お腹いっぱい。
12/05/08 12:29:27.96 gH9z368B0
いや答えをくれよ

179:名無しさん@お腹いっぱい。
12/05/08 12:31:14.57 X0Onj/iH0
C#で正規表現は使えるけど正規表現の記述ルールは
perl5準拠だから分けて考えろよw

180:名無しさん@お腹いっぱい。
12/05/08 12:45:19.29 du0kGEvB0
001 002 とかの文字列作ってから比較するなら、正規表現じゃなくてstringのcontainで充分だよな
具体的に>>170を書き換えると

if(src.Contains(i.ToString("000")))
{

181:名無しさん@お腹いっぱい。
12/05/08 12:56:11.63 gH9z368B0
URLリンク(msdn.microsoft.com)
だからMSDNの正規表現に書いてないんだから最初に?つけるなんてのはないんだよ
必要なのは専門スレにいくことじゃなくてここで?つけてた奴が誤りを認めることだろ

182:名無しさん@お腹いっぱい。
12/05/08 12:59:42.62 X0Onj/iH0
MSDNに書いてなくてもperl5準拠で動いてるんだから
正規表現のプロに聞けって
正規表現 Part9
スレリンク(tech板)

183:名無しさん@お腹いっぱい。
12/05/08 13:11:39.99 gH9z368B0
俺はそんな馬鹿みたいな質問をして恥をかくのは嫌だよ
最初に?つけてた奴が出てきてどういう意図で書いたのか言えばいいだけ
間違った解答をしたんだからその責任がある
くだらない言い争いでスレを汚すのはやめてくれ

184:名無しさん@お腹いっぱい。
12/05/08 13:13:42.55 X0Onj/iH0
恥ってw
匿名掲示板なんてかき捨てだろうにw
下手なプライドでごちゃごちゃ騒いでるほうがみっともないわ

専門スレで聞けば教えてもらえるのに

185:名無しさん@お腹いっぱい。
12/05/08 13:15:50.91 gH9z368B0
答えはもうわかってるから

186:名無しさん@お腹いっぱい。
12/05/08 13:23:06.64 du0kGEvB0
170のロジックで、何故正規表現が要るのかさっぱり判らん

187:名無しさん@お腹いっぱい。
12/05/08 13:27:38.59 gx7ZjZDr0
最初に?をつけるのは最短一致だよ
つまり最初にマッチしたものだけが有効
何が不満なんだ?

188:名無しさん@お腹いっぱい。
12/05/08 13:30:41.33 gH9z368B0
var eroGazou=Enumerable.Range(1,5).Where(i=>{Regex.IsMatch("?(0\d{1}"+i.ToString()+")*");};

この正規表現なんかメチャクチャじゃん
なにとマッチさせようとしてるわけ?
なんでiは1から5で決め打ちなのに2つ目は\dなの?
そのあとの+は何?11とか111とかにマッチさせたいの?

それに対してなるほどとか言ってるのは何? 自演?

189:名無しさん@お腹いっぱい。
12/05/08 13:32:31.85 gH9z368B0
最短一致は+とか*の後につけるんだよ
わけの分からんことをいわんでくれ

190:名無しさん@お腹いっぱい。
12/05/08 13:33:40.30 gH9z368B0
ああ+は違ったわ

191:名無しさん@お腹いっぱい。
12/05/08 13:36:09.26 GymhAQMh0
なるほどって言ってるのは、エロ画像の部分に対してじゃないの?頭冷やせよ。

192:名無しさん@お腹いっぱい。
12/05/08 13:43:15.63 gH9z368B0
試したけど最初に?が付いてると正規表現の解析時点で例外が飛ぶ
最後についてる*のおかげで何もない文字列にもマッチする
知ったかぶって初心者に間違った知識をひけらかして開き直ってるんじゃないよ
なにが専門スレで聞けだこんな初歩の初歩の内容で

193:名無しさん@お腹いっぱい。
12/05/08 14:02:59.85 5IWNInEq0
その煽って答えを引き出そうってのは
プログラム板でやれよキチガイ

正解をいまコピペしようと思ったがやめたわ

194:名無しさん@お腹いっぱい。
12/05/08 14:05:07.75 gH9z368B0
IDかえんな鬱陶しい

195:名無しさん@お腹いっぱい。
12/05/08 15:37:55.87 llgrnxWzi
結局IDあったって最終的にはモラルの問題よね

196:名無しさん@お腹いっぱい。
12/05/08 18:25:59.23 gx7ZjZDr0
>>188
1から5ってお前が001から005までしか出してないじゃんw

197:名無しさん@お腹いっぱい。
12/05/08 19:00:12.49 du0kGEvB0
>>196
その言い訳はあり得ないw

198:165
12/05/08 23:08:30.90 mTraP+Vz0
>>175
お礼遅れてすいません。あれから調べてみたんですけどやっぱりよくわかりませんでした


>>186
画像URLを判別する正規表現なんですが、実際はもっと長いURLなので正規表現を使いました


いろいろ答えてくれた方ありがとうございます。
あと、自分の質問で荒れてしまい、すいませんでした。

199:名無しさん@お腹いっぱい。
12/05/09 00:59:16.34 kxP9CGP20
×吸いませんでした。
○素マンコ

200:名無しさん@お腹いっぱい。
12/05/09 04:17:07.53 LNIbcQkU0
こんにちは。
xmlとかの使いかたがわからないので力技でその環境に合わせたexeをビルドする、ってプログラムを組もうとしています。
で、最後の最後で引っかかってしまいました。
csc.exeを叩いてビルドさせようと思ったもののcsc.exeだけでは動作しません。(当たり前なのはわかっています)
.netのフォルダごとまとめて配布しちゃうとかすればビルドの面では問題ない(ファイルサイズとか他にもいろいろマズそう)ですが、それは避けたいところです。
それ以外の方法でC#をビルドする、ってのはどうすればいいんでしょうか。


201:名無しさん@お腹いっぱい。
12/05/09 04:28:12.63 ykLw+OKj0
XmlReaderとかXmlWriterとか・・・

202:名無しさん@お腹いっぱい。
12/05/09 04:28:52.13 KxtYeqV+0
・素直にXMLを使う
・プログラムからビルド
 (URLリンク(www.atmarkit.co.jp)

203:名無しさん@お腹いっぱい。
12/05/09 04:44:56.24 LNIbcQkU0
プログラムからビルド、ってのもできるんですね。個人的にそれはちょっと避けたいのでごめんなさい。
XMLとかは一切勉強してないのでそこからですかね。
build.batとかを作ってuserにcsc.exeのpathをいじらせる、それをプログラムに叩かせる ってのを想定して試しに組んでみたもののいろいろやる必要があるっぽいですね。
batはユーザに叩かせるものにしようと思います。それぐらいやってほしいところですし…。
ありがとうございました。

204:名無しさん@お腹いっぱい。
12/05/09 05:30:58.28 tCunqWXC0
せめてMsbuild

205:名無しさん@お腹いっぱい。
12/05/09 05:33:04.68 LNIbcQkU0
>>204
起きたら調べる
とん

206:名無しさん@お腹いっぱい。
12/05/09 05:47:55.49 KxtYeqV+0
>>203
なぜ勘弁したいのか分かりかねる。
プログラムからビルドして、ビルドしたアセンブリを.exeなり.dllなりで保存すりゃあいいじゃないか。

207:名無しさん@お腹いっぱい。
12/05/09 07:28:32.03 LNIbcQkU0
>>206
なるほど、みるリンクを間違っていたようだね。
>>202の最初の方のリンクに頼りつつ別のexeを作ってそっちに投げる形で努力してみる。みんなサンクス

208:名無しさん@お腹いっぱい。
12/05/11 17:58:11.91 KWXw6kgy0
過疎り果ててるな・・・・

209:名無しさん@お腹いっぱい。
12/05/11 21:29:13.65 f0A2C8JG0
位置づけ的にこっちは避難所みたいなもんだから別にそれはそれで良いんじゃね
この板は確かなかなか落ちなかったはずだし

210:名無しさん@お腹いっぱい。
12/05/12 19:51:10.89 UIeofCgi0
久しぶりにここに来たのだが
前からIDの表示ってあったっけ?

211:名無しさん@お腹いっぱい。
12/05/12 20:09:30.99 6NFukbEw0
よく板の名前を見てみろw

212:名無しさん@お腹いっぱい。
12/05/12 20:21:56.03 Ouq+wRbz0
息をするように自演してるからこっちでやらかしそうで怖い

213:名無しさん@お腹いっぱい。
12/05/12 20:22:28.28 EnOaymSY0
死ねよ

214:名無しさん@お腹いっぱい。
12/05/13 17:40:40.30 /aU9UOq3i
まかせとけ

215:名無しさん@お腹いっぱい。
12/05/13 17:45:37.48 hQ2ica5m0
いや俺が

216:名無しさん@お腹いっぱい。
12/05/13 21:25:25.49 xD8ADFqi0
public Form1()
{
InitializeComponent();

var MonthCtrl = new MonthCalendar();
MonthCtrl.ContextMenuStrip = this.contextMenuStrip1;
var CtrlHost = new ToolStripControlHost(MonthCtrl);
this.testAToolStripMenuItem.DropDownItems.Add(CtrlHost);
}

URLリンク(www1.axfc.net)
メニューを開いたまま右クリックでコンテキストメニューを開くにはどのようにすればいいでしょうか

217:名無しさん@お腹いっぱい。
12/05/13 21:32:34.94 Axjqo1yk0
ToolStripDropDownMenuを継承して
OnClosingをオーバーライドしてコンテキストメニュー表示時はe.Cancel = trueにする

その後閉じる処理をどこかでしないと表示しっぱなしになるからそこんとこうまく処理する

218:名無しさん@お腹いっぱい。
12/05/13 22:45:07.31 xD8ADFqi0
>>217
ToolStripDropDownMenuの使い方に少し悩みましたが何とか目的を達成できました。
本当にありがとうございます

219:名無しさん@お腹いっぱい。
12/05/17 20:47:43.98 /wFJphTP0
Form1.csに色々と機能を詰め込んでツールを作っています
ツールの機能が増えてきたので、classを分けようと考えているのですが、どのように分けるか迷っています
・メインのテキストボックス(仮にtextbox1とする)があり、各機能からtextbox1のプロパティにアクセスする
・機能ごとに使用するボタンやコンボボックスが複数ある

思いつく方法としては
1.textbox1のプロパティをgetsetでForm1.csのプロパティとした上で、機能ごとにカスタムコントロール化する
→各ボタンのclickedが各カスタムコントロールのソースで書ける点がメリットだが、カスタムコントロール内のプロパティをForm1.csのデザイナーでいじることが面倒になる

2.各ボタンはForm1.cs上で設置したままで、各機能ごとにclassを作成し、Form1.cs上のソースでclickedが呼ばれたら各機能のclass内のメソッドを呼ぶようにする
→各ボタンのプロパティをForm1.csのデザイナーで設定できる点がメリットだが、Form1.cs上にclickedが残ることで綺麗に整理できた気がしない

今のところ1でやろうかと思っているのですが、アドバイスやこうするといいぜって方法があれば教えて下さい

220:名無しさん@お腹いっぱい。
12/05/17 20:56:58.37 BRanfvHF0
抽象的なアドバイスで申し訳ないけれど、
コントロールを起点に思考するのではなく、データを起点に思考すると良いかと思う。
A, B, Cというコントロールをこういう風に操作するから・・・ではなく、
α, β, γというデータをこういう風に編集するから・・・で考える。

コントロールは、それぞれの編集において
・編集処理の起点(ボタン操作などのイベント)
・編集結果の表示
である、と捉えておいた方が、良いと思う。

221:名無しさん@お腹いっぱい。
12/05/17 20:58:44.82 UP2D4Go60
MVCでぐぐれ

222:名無しさん@お腹いっぱい。
12/05/17 21:13:50.69 aER5I2nt0
たぶんMVCだがMVVMについては、考え方がいろいろあるので間違ってるかもしれないが…
UIであるフォームやコントロールは、ユーザーとの対話であることが前提だと思う。

具体的な処理とは、データベースに接続したり、データを取得するとか、ネットワークに接続する等。
この具体的な処理をモデル。

Form1.csなりUIを取り扱うコードで必要なのは、ユーザーからの要求・結果の表示に留めておく。
それらのUIに関する処理をビュー。

それらの間に位置するのがビューモデル。
ビューモデルの役割は、モデルのデータを取ってきてビューに表示できる結果を作ったりする。
ListBoxコントロールとかDataGridViewコントロールのDataSourceに関連付ける為のリストなどをビューモデルに持たせておく。

ビューであるフォームやコントロールは、ビューモデルが公開するイベントなどを使って
結果の表示やビューが公開するメソッドを呼んで何かしら操作の要求を行うようにする。

つまり、機能そのものとユーザーとの対話部分は、きっちりと分けて作っておいて
UIが無くても機能自体は、使えるようにする感じに。

※そこまでやるなら、WPF使えよ…という突っ込みは、受け付けていません。

223:名無しさん@お腹いっぱい。
12/05/17 21:37:52.78 t3KcC4L10
>>219
Form1.csとかにロジックを書くのは常に悪手だよ

class Kinou
{
 public Kinou(CustomControl cc)
 {
  cc.Event += (sender, e) => EventAction();
  ...
 }

 void EventAction(){ ... }
}

機能ごとに自作クラスに必要なコントロールを入れて何をするか一個一個書くべき
Formとかはレイアウトの都合でデザイナで自動生成されるだけだから
機能ごとにクラス分けしたりするには不向き
Formのメンバなんか多すぎてインテリセンスが使い物にならなくなるしね
だから2を一歩先に進めて全部自作クラスでやればいい

224:名無しさん@お腹いっぱい。
12/05/17 21:40:42.89 /wFJphTP0
>>220-222
レスありがとうございます
MVCについて調べてきました

「コントロール→モデルのアクセスはあるが、モデル→コントロールやモデル→ヴューのアクセスはない」という考え方は意識していませんでした
すると、機能ごとにカスタムコントロール化するというよりも、各機能のメソッドをモデルとして抜き出して、
textbox1のプロパティは引数として与えて、モデル処理後に返させる or 別にデータを用意してモデルに管理させて結果として返させる という形にした方が良いのかと思いました
モデル→コントロールというアクセスがない方向でクラス分けを考えてみます

225:名無しさん@お腹いっぱい。
12/05/17 21:46:23.75 t3KcC4L10
モデルからコントロールはもちろんいじっちゃだめだよね
でもモデルで処理するだけなら通常のプログラミングの範囲で
GUIの困難はそこを分離しただけじゃ解決しないからね

226:名無しさん@お腹いっぱい。
12/05/17 21:49:27.21 aER5I2nt0
モデル:元請け業者
ビューモデル:仲介業者
ビュー:下請け業者

下請け業者から元請け業者に直接要求することは、できないし、
元請けも下請けに直接、何かすることは、できない。必ず仲介業者を通さないといけない。

227:名無しさん@お腹いっぱい。
12/05/17 21:51:15.23 /wFJphTP0
>>223
レスありがとうございます

全部自作クラスでやれたらいいというのは分かるのですが、
教えていただいた方法は
自作クラス内で各ボタンの処理をカスタムコントロールとして受け取って処理する方法ということでいいでしょうか
自分で書いた>>219の1との違いがよくわかっていないので、よければもう少し教えて下さい

228:名無しさん@お腹いっぱい。
12/05/17 22:08:47.35 t3KcC4L10
>>227
>>219の1はよくわかんないけど
Form1.csのプロパティにしたりするような、Form1.csを肥大化させるようなことはやめて
各機能ごとに自作クラスを作る
ボタンを押したらテキストを改変してテキストボックスに入れる、って言う処理だったら

class Hoge
{
 public Hoge(Button btn, TextBox tb)
 {
  btn.Click += (sender,e) => tb.Text = Model.Hoge(tb.Text);
 }
}

まあこんな感じで、その機能に必要な物があったらこのクラスにどんどん入れていく
機能ごとに必要なコントロールをまとめたクラスを作ってGUIの複雑さを軽減する
ロジックはModelのクラスに分離する

229:名無しさん@お腹いっぱい。
12/05/17 22:21:48.71 /wFJphTP0
なるほど、わかりました
自分が現在記載している処理だとtextbox1のプロパティを直接いじっているので、自作した他クラスからForm1.cs内のtextbox1のプロパティをいじるには、
Form1.csのプロパティにしてしまうのが簡単かなと思ったので、「textbox1のプロパティをgetsetでForm1.csのプロパティとした上で」という書き方になっていました
自作クラスの引数にした方がよいということですね

230:名無しさん@お腹いっぱい。
12/05/17 22:22:25.54 /wFJphTP0
ありがとうございました

231: 忍法帖【Lv=40,xxxPT】
12/05/19 18:01:20.21 6aeuHIE80
test

232:名無しさん@お腹いっぱい。
12/05/20 00:02:48.81 do1RvL6p0
FlowLayoutPanelの様にAddで加えたコントロールを自動に並べるコントロールで、
並べるコントロールの位置を次は下、次は右、次は下といったように選べるコントロールはないでしょうか?


□□□
□□

みたいな感じで並べたいです
コントロールのLocationを直接指定していくしかないでしょうか

233:名無しさん@お腹いっぱい。
12/05/20 00:24:59.24 DcSMnQWK0
そのぐらい自分で計算していれりゃええが

234:名無しさん@お腹いっぱい。
12/05/20 00:26:57.61 do1RvL6p0
今、調べてるとTableLayoutPanelとかもあったのですが、普通に計算した方がよさそう・・・
素直に計算して入れます

235:名無しさん@お腹いっぱい。
12/05/20 04:48:51.35 TJmnCt7r0
>>232
FlowLayoutPanel.SetFlowBreakでいいんじゃない?
乗っかってるコントロールから設定するならFlowBreakね。

236:名無しさん@お腹いっぱい。
12/05/20 18:34:02.07 DcSMnQWK0
var url = "URLリンク(www.hoge.com)";
var elem = new XElement(XmlConvert.EncodeName(url), "a");

これで落ちるんだけどなんでだろう
urlを変換してXNameに使うのは無理なんだろうか

237:名無しさん@お腹いっぱい。
12/05/20 18:40:59.47 DcSMnQWK0
ああ普通に出来たわ
EncodeLocalNameでいいのか

238:名無しさん@お腹いっぱい。
12/05/20 19:07:20.83 vz/Du8h20
>>237
MSDNのその辺のドキュメントは、読んでて混乱するからな・・・
おつかれ。

239:名無しさん@お腹いっぱい。
12/05/20 21:09:09.28 CjyZExuu0
>>235
レスありがとうございます
結局TableLayoutPanelで対応しました

240:名無しさん@お腹いっぱい。
12/05/22 22:15:56.28 Zemo3eRi0
Windowsフォームのデータバインディングについてだが、
例えば、こんな感じにtargetControlのValueプロパティにViewModelのDataプロパティをバインドさせるとして、
targetControl.DataBindings.Add( "Value" , ViewModel , "Data" );

ViewModel 側でINotifyPropertyChangedを実装して、
OnPropertyChanged("Data");のようにして呼び出したときにUIとスレッドが異なっていると、
例外(InvalidOperationException)が発生する。まあ、これは、当然といえば当然なのだが、
ViewModelでは、UIスレッドを意識しないようにしたいし、コントロールのValueプロパティなんかでも
スレッドの違いを意識しないようにしたい。

今のところ思いついた方法が、コントロールが生成された直後にコントロールのSynchronizationContextを
取得してViewModelに関連付けてOnPropertyChangedでSynchronizationContextを通して
PropertyChangedイベントを呼び出すという方法だが、どうにも良い方法とは思えない気がする。

これ以外に何か良い解決方法は、ありますか?

241:名無しさん@お腹いっぱい。
12/05/23 02:42:36.72 qa6OyKBe0
NotifyPropertyChangedみたいなのはうまい解決をしようとして
逆に問題を複雑にしてるだけなような気がする

242:名無しさん@お腹いっぱい。
12/05/25 10:35:25.98 aQ/syKw30
オブジェクトを保存するときXElementに変換してXMLで書き出しているのですが、
XElementに変換する一般的な書き方というのはありますか?
IXmlSerializableのようなものがあれば知りたいです。よろしくお願いします

243:名無しさん@お腹いっぱい。
12/05/25 10:42:07.95 0UAn5u+k0
>>242

URLリンク(smdn.jp)

244:名無しさん@お腹いっぱい。
12/05/25 12:31:54.65 aQ/syKw30
>>243
XmlSerializerは手間の割りに融通が利かないのでちょっと・・・
IXmlSerializable.WriteXml()のように再帰的にXElementを回収してくれるような仕組みがすでにあるかどうか知りたかった感じです

245:名無しさん@お腹いっぱい。
12/05/25 12:53:36.41 Hmr1Uhd40
>>244
IXmlSerializable.WriteXmlを使えばいいのでそんなもん必要ない
XmlWriterの途中にXElementの内容書き込んだり普通にできるからな

246:名無しさん@お腹いっぱい。
12/05/25 14:45:18.12 T48ZmvCh0
ContextMenuStrip に縦方向のスクロールバーを付けたいのですが、なんとかならないでしょうか。

アイテムが多くて画面に収まらないときはメニューの上下端に▲、▼が現れてそれを押すと
スクロールしますが、それではなくスクロールバーを付けたいのです。
ComboBoxのメニューのようなスクロールバーです。
VisualStudioでコードを入力しているときにメソッドがポッと出てくるメニューのようなスクロールバーです。

public partial class UserControl1 : ContextMenuStrip
{
public UserControl1() {
InitializeComponent();
this.VScroll = true;
}
}
こんなこともやってみましたがダメでした。

247:名無しさん@お腹いっぱい。
12/05/25 17:19:46.33 54oiiha70
なんとかならなくもないだろうけど。
プロパティひとつ設定すればというお手軽な方法はないな

ToolStripDropDownから派生して、スクロールバー表示時のアイテムの幅自前計算するとか
もしかしたらToolStripから派生して自前でToolStripItemの管理するはめになりそう

むしろFormから作ったほうが簡単な予感がする
BorderなくしてListBoxでも全体に貼り付けてとか

248:名無しさん@お腹いっぱい。
12/05/26 10:47:45.49 /w9VkIqN0
>>247
やはりお手軽にはできなそうですか。
ListViewを張り付けたFormを試してみようと思います。
フォーカスが外れたら、消える。
ListViewのSelectedIndexChangedで何かがクリックされたとみなして
メニューが選択されたときの動作を行う。
こんな感じでしょうか。

249:名無しさん@お腹いっぱい。
12/05/26 16:44:22.18 Oznxncr00
画像のバイト列をImageに表示したいのですが真っ白なままでどうもうまくいきません。
ローカルファイルをSourceにUriで指定すると表示されるのでXAML側の記述は問題ないと思うのですが・・・

↓こんなコードですがどこに問題があるのでしょうか?

URLリンク(ideone.com)

何かアドヴァイスいただけると助かります。


250:名無しさん@お腹いっぱい。
12/05/26 21:50:26.72 qEPXpQfe0
速度に関する質問です
下記の同じ結果を出す、ちょっと複雑な処理があったとします
(内容はfor文中にrを元にして、下記の通り、int型変数R、G、Bを作成します
  r→R、G、B 0→0,0,0 1→1,0,0 2→0,1,0 3→0,0,1 4→1,1,1 5→2,1,1 ~)

for (int r = 0; r < 100000; r++)
{
int R = r / 4; if (r % 4 == 1) R++;
int G = r / 4; if (r % 4 == 2) G++;
int B = r / 4; if (r % 4 == 3) B++;
}

for (int r = 0; r < 100000; r++)
{
int R = r / 4 + (r + 3) % 4 / 3;
int G = r / 4 + (r + 2) % 4 / 3;
int B = r / 4 + (r + 1) % 4 / 3;
}

この処理を10回処理させたところ、処理速度は10回とも0.0016代と0.0024代になりました

一例
if文タイプ
00:00:00.0016217
複雑計算タイプ
00:00:00.0024181

if文を挟む方が遅いイメージだったのですが、複雑な計算をさせた方が遅いものなのでしょうか?

251:名無しさん@お腹いっぱい。
12/05/26 22:03:04.02 DTKuZabL0
もっと繰り返し回数多くしたほうがいいんじゃないの
差が微妙すぎてよくわからない
あとr+2 r+1 rじゃないの同じ結果にしたいんだったら
あと計算結果とっといてどこかで使わないと最適化で捨てられちゃうんじゃない

複雑な計算させたほうが早かったりif文のほうが早かったりいろいろあると思うけどね
最適化の具合とかで

252:249
12/05/27 00:38:22.87 fLxELx8b0
自己解決しました。
↓のようにしたら表示されました。

URLリンク(ideone.com)

BeginInitの後に
bi.CacheOption = BitmapCacheOption.OnLoad;
を入れることで表示されました。

253:名無しさん@お腹いっぱい。
12/05/27 09:54:33.99 HSQgQMmy0
formとメトロってワンクリックで切替できますかね?

254:名無しさん@お腹いっぱい。
12/05/27 10:00:40.57 clOyRCuk0
>>250
その程度の距離のif文ならL1の中にすっぽり納まるからなあ

むしろ/や%の方が重いはず

255:名無しさん@お腹いっぱい。
12/05/27 10:03:45.45 clOyRCuk0
>>250
これって速度的にはどうなる?
for (int r = 0; r < 100000; r++)
{
int R = r>>2; if ((r & 0x3) == 1) R++;
int G = r>>2; if ((r & 0x3) == 2) G++;
int B = r>>2; if ((r & 0x3) == 3) B++;
}


256:名無しさん@お腹いっぱい。
12/05/27 10:08:42.69 clOyRCuk0
その前に最初の計算式二つは結果が等価じゃねーだろw

257:名無しさん@お腹いっぱい。
12/05/27 10:45:25.60 clOyRCuk0
ちょこっとコード書いてて気になったんだが最後のパターンがなんか納得いかない結果になる
URLリンク(ideone.com)

258:名無しさん@お腹いっぱい。
12/05/27 10:48:20.87 clOyRCuk0
あ、すまんこれで納得いく結果になった
URLリンク(ideone.com)

259:名無しさん@お腹いっぱい。
12/05/27 11:12:54.46 clOyRCuk0
シフト演算使ったほうが早いね
URLリンク(ideone.com)


260:250
12/05/27 14:31:19.39 j8A7jdt/0
みなさんレスありがとうございます
ケースバイケースなんですね
/や%を2回程度余分に使うより、if&++;の方が早いとのだと思っておきます
盲目的にifはできる限り減らした方がいいと思い込んでました・・・

シフト演算を使うという発想はありませんでした
というより、普段使ってないので、コードの意味がわかってないので、コードを参考に勉強してきます

261:名無しさん@お腹いっぱい。
12/05/27 16:43:36.10 GiQAzp3Q0
switch(r % 4) にすると?

262:名無しさん@お腹いっぱい。
12/05/29 14:07:21.53 /PVv+z9w0
WPFアプリとKinectアプリ間で文字列の送受信を行いたいのですがどうすればよいのでしょうか?
Process.Start("Kinectアプリ名.exe");でKinectアプリをWPFアプリ側から起動した後、文字列の通信を行いたいと思っています。
IPCを用いたプロセス間通信を行えばよいのでしょうか?
知っている方がおられましたらご教授をお願いいたします。


263:名無しさん@お腹いっぱい。
12/05/29 16:37:54.74 2RvCxbWa0
このスレで質問することではないかもしれないのですが
どこで聞いていいのかわからないので質問します><
DirectShow.Netでフィルターの設定をしたいのですがどのように
して設定してあげればよいのかわかりませんorz
解説サイトも動画・静止画のキャプチャの仕方位までしか掲載
されていません。ざっくり、このメソッドを使えば程度でかまいませんので
よろしくお願いします。

264:名無しさん@お腹いっぱい。
12/05/30 05:04:06.91 AggJDhf10
>>262
そんなマニアックな状況、やってみなきゃわからんのだから
IPCでまずはやってみなよ。

265:名無しさん@お腹いっぱい。
12/05/30 21:18:00.04 M2GA61XI0
c#でトランプの数当てゲームを作りたいのですが、ホームアプリケーションでいいなでしょうか?

266:名無しさん@お腹いっぱい。
12/05/30 21:52:42.67 QkV5fjWR0
いいな いいな にんげんて いいな

267:名無しさん@お腹いっぱい。
12/05/30 21:55:54.36 to+QgKiM0
初心者ならコンソールアプリケーションでゲームの中身だけ作ってGUI(Form)つけるのおすすめ

268:名無しさん@お腹いっぱい。
12/05/30 22:15:53.58 5ZOuXXtf0
Formでいいんじゃね
ゲーム作りたいならUnityとかゲームエンジンとか使った方がいいと思うが、自力で数当てゲームくらい作れた方がいいかもね

269:名無しさん@お腹いっぱい。
12/05/30 22:49:56.75 zW0msQ/R0
>>265
これを見れば作れる
URLリンク(www.nicovideo.jp)

270:名無しさん@お腹いっぱい。
12/05/31 02:21:11.40 rXSZyiw00
>>264
レスどうもありがとうございます、とりあえずもう少し試行錯誤してみますね!

271:名無しさん@お腹いっぱい。
12/05/31 09:25:01.60 WULY2UZX0
てst

272:名無しさん@お腹いっぱい。
12/05/31 15:01:27.70 VYK3XZ290
なんで難しい質問ばっかなのこっちは

273:名無しさん@お腹いっぱい。
12/05/31 15:17:39.08 jGAKMQam0
本スレだからな

274:名無しさん@お腹いっぱい。
12/05/31 15:52:12.18 unpCDp6t0
難しいというか、シチュエーションが限定的な質問が来るね。
まああっちで聞いても、本筋と関係ないところで喧嘩おっぱじまるからだろう。

275:名無しさん@お腹いっぱい。
12/06/01 00:01:35.63 p1bYUXat0
IDは偉大、変な自演がないだけでも捗るな

276:名無しさん@お腹いっぱい。
12/06/01 18:51:36.27 tSECQl9H0
シチュエーションが限定的なのはしょうがないんじゃないかな
普遍的な問題は大抵ググればなんとかなるだろうし
>>216の質問をしたのは俺だけど
ググっても同じ問題にはまっている人が見つからないのは本当に困る・・・

277:名無しさん@お腹いっぱい。
12/06/02 08:13:25.59 8F3osLeN0
てst

278:名無しさん@お腹いっぱい。
12/06/03 23:02:26.26 9cE78MGH0
C#でDirectxを使おうとしたら、遅延通知が出たのですがどうすればいいですか?

279:名無しさん@お腹いっぱい。
12/06/04 01:15:23.77 dVdSCbBH0
遅延通知って何?

280:名無しさん@お腹いっぱい。
12/06/04 06:00:16.63 MKF8PCbd0
この言語のリファレンスマニュアルって糞見づらいMSDNしかないの?

281:名無しさん@お腹いっぱい。
12/06/04 08:46:10.03 SO+LzFoe0
さらに見づらい上に古いPDFであればありますよ
あなたがC#のリファレンスと.NETのリファレンスを混同していないことが前提ですが…

282:名無しさん@お腹いっぱい。
12/06/04 11:06:38.28 tdHet/L00
てst

283:名無しさん@お腹いっぱい。
12/06/04 15:07:32.53 eBbL6cVl0
MSDNから必要な情報を見つけ出して、珍妙な自動翻訳に動じず英語版見に行くようになったら一人前。

284:名無しさん@お腹いっぱい。
12/06/04 20:30:54.41 amclDH490
.netの翻訳は人間がやってるらしいぞ

285:名無しさん@お腹いっぱい。
12/06/05 23:42:14.54 0HX/yiCx0
デリゲートがよく分からないのでJavaScriptで例えて説明してください

286:名無しさん@お腹いっぱい。
12/06/06 00:07:44.80 E/iZIMwt0
関数オブジェクトのようなもの

287:名無しさん@お腹いっぱい。
12/06/06 02:20:14.29 8bMay9C00
>>285

URLリンク(jaba.johnson.co.jp)

288:名無しさん@お腹いっぱい。
12/06/06 02:26:05.25 E/iZIMwt0
>>287
それはJavaだ。
JavaScriptと一緒にすんなw

289:名無しさん@お腹いっぱい。
12/06/06 06:44:05.39 Wke9K+FZ0
>>287
×Java
○Jaba

JavaScriptは使ってるようだが

290:名無しさん@お腹いっぱい。
12/06/06 11:43:22.64 T2vSLGVJ0
てst

291:名無しさん@お腹いっぱい。
12/06/08 00:17:06.02 SjP/JzaM0
てnd

292:名無しさん@お腹いっぱい。
12/06/08 21:26:45.75 H4JMKmsI0
カスタムコントロールの中のComboBox(Bとする)の.Itemsに他のクラスからアクセスしたいと思っています
当該Itemsに別データの配列を突っ込みたいので、カスタムコントロールのプロパティにしようかと思ったら、setの記載で読み取り専用だからできねーよカスと怒られます
なにかよい方法はないでしょうか?

public ComboBox.ObjectCollection B_.Items
{
set
{
B..Items = value;
}
get
{
return B..Items;
}
}

293:名無しさん@お腹いっぱい。
12/06/08 21:33:08.47 KTgDzfcK0
>>292
ComboBox.DataSourceプロパティ

294:名無しさん@お腹いっぱい。
12/06/08 22:43:38.32 H4JMKmsI0
下記で期待する動きになりました
ありがとうございました
getもDataSourceにせんでいいのかな?と迷いましたが、デザイナー上の入力を考えるとこっちの方がベターぽいのでこれで行きます

public object B_.Items
{
set
{
B.DataSource = value;
}
get
{
return B.Items;
}
}

295:名無しさん@お腹いっぱい。
12/06/08 23:36:24.17 1FPwfIgl0
てst

296:名無しさん@お腹いっぱい。
12/06/09 22:24:13.82 /l9t5PUy0
Visual Studio Express 2012 for Windows Desktop
URLリンク(blogs.msdn.com)

297:名無しさん@お腹いっぱい。
12/06/09 22:39:56.78 km1yHHW40
そりゃまあ、普通に考えたら出ないとおかしいよね

298:名無しさん@お腹いっぱい。
12/06/09 22:41:49.99 /l9t5PUy0
だってVC++あるしなあ

299:名無しさん@お腹いっぱい。
12/06/09 23:50:34.37 8fI3WDv10
Formは入ってるの?

300:名無しさん@お腹いっぱい。
12/06/10 13:44:32.26 JcRdqHi90
C#どころかプログラミング始めたての初心者で申し訳ないのですが質問させてください。

if (A != B)
{
return;
}
do();



if (A == B)
{
do();
}

では同じ処理になると思うのですが、どちらを用いるのが一般的なんでしょうか

301:名無しさん@お腹いっぱい。
12/06/10 13:56:41.08 +ns6eJGu0
前者はガード句と呼ばれる書き方で、主にifのネストが深くなった時に使う
ifが1段しかないのなら後者

302:名無しさん@お腹いっぱい。
12/06/10 13:58:07.44 t7lhSWC+0
しっくり来る方でいいでしょ

303:名無しさん@お腹いっぱい。
12/06/10 14:04:31.24 +ns6eJGu0
しっくりこないんですぅ

304:名無しさん@お腹いっぱい。
12/06/10 14:36:26.02 JcRdqHi90
>>301
>>302

レスありがとうございました。参考にさせてもらいます

305:名無しさん@お腹いっぱい。
12/06/10 14:41:36.15 JcRdqHi90
重ねて質問すみません

txtBox1.Clear();
txtBox2.Clear();
txtBox3.Clear();

これを繰り返し構造でスマートに書きたいのですが、変数等を用いれば可能でしょうか

306:名無しさん@お腹いっぱい。
12/06/10 14:43:50.00 t7lhSWC+0
var array = new[]{ tb1, tb2, tb3 };

foreach(var tb in array){ tb.Clear(); }

とかかな

307:名無しさん@お腹いっぱい。
12/06/10 14:45:11.20 +ns6eJGu0
FormコンストラクタのInitializeComponent()の後ろで配列にでも入れておけ
foreachで繰り返せる

308:名無しさん@お腹いっぱい。
12/06/10 14:59:08.22 JcRdqHi90
なるほど!同じ型の配列に入れておけば良かったんですね
ありがとうございます

309:名無しさん@お腹いっぱい。
12/06/10 21:05:08.87 RMEDkwv20
製品版のVisualStudioってメンバー変数のプリフィックスに_とかつけられます?

310:名無しさん@お腹いっぱい。
12/06/10 21:45:47.86 +ns6eJGu0
むしろなぜ付けられないと思うの?

311:名無しさん@お腹いっぱい。
12/06/10 22:10:12.18 RMEDkwv20
Expressでできないからですね
Formのコントロール変数に自動で_をつけてくれたら便利だと思いまして

312:名無しさん@お腹いっぱい。
12/06/10 22:15:58.50 +ns6eJGu0
全然意味合いが違うじゃねえか
質問を略すな

Pro版でもできません

313:名無しさん@お腹いっぱい。
12/06/10 22:19:28.22 MHePrPj+0
自動でってところがミソか

314:名無しさん@お腹いっぱい。
12/06/10 23:40:57.57 RMEDkwv20
ありがとうございます。やっぱり無理でしたか・・・

315:名無しさん@お腹いっぱい。
12/06/14 07:03:26.20 98NsRCek0
Formを継承したクラスがいくつかIDisposableなオブジェクトを持っていて、それらをDisposeしなければいけない場合
どこに書いたらいいんでしょうか。

Form1.Designer.csの方にFormのオーバーライドされたDisposeメソッドがありますが、
そこに追加しちゃってもいいのでしょうか。(デザイナの方に影響与えたりしません?)

それともDisposedイベントでやるべきなんでしょうか。

316:名無しさん@お腹いっぱい。
12/06/14 07:36:22.23 A0uxVl2o0
1. そもそもインスタンススコープで扱うべきか考える
 実はメソッド単位で扱えるものなんじゃないの?という回帰。

2. コンポーネント化することもちと考える。
 Formと同じ寿命のDisposableなオブジェクトがあるってことは、
 Formにロジックを詰め込みすぎてないか?
 ロジックを然るべきレイヤに分けて、コンポーネント化しちゃえばいんじゃね?という発想。

3. Disposeしたいというのなら
 .Designer.csのオーバーライドされたDisposeメソッドに書いちゃって大丈夫。

317:名無しさん@お腹いっぱい。
12/06/14 08:37:45.34 SlYrQktU0
前から思ってたけどcomponentsフィールドっていつ使われるんだろ
あれに追加されたらFormが破棄されるとき一緒にDisposeしてくれるよね

318:名無しさん@お腹いっぱい。
12/06/14 09:19:19.33 98NsRCek0
>>316
ども
3でいかさせて頂きます

たとえばフォントオブジェクトをフォーム上のボタン等に個別に適用した場合
明示的にDisposeさせるよい方法がないので困っていました

フォーム閉じて参照が切れればいつかGCされるさ、とか
アプリケーションが終了した時点で解放されるからいいやん、とか
それだけでなんともならないシナリオもあるのに、と……

319:名無しさん@お腹いっぱい。
12/06/14 10:01:27.49 oUOmZZHy0
初心者なのでこちらで質問させてもらいます。
Aというクラスを継承してBというクラスを作成したのですが、Aの中の一部のフィールドやメソッドを継承したくない場合、Bの中でどうのような記述をすれば簡単に実現できるでしょうか?
目的は単にBのインテリセンスにそのメソッドなりを表示させたくないだけなのですが。
よろしくお願いします。

320:名無しさん@お腹いっぱい。
12/06/14 10:07:06.46 SlYrQktU0
>>319
Aの該当メンバーをprivate指定する
Bのほうから継承しないという指定はできない
C++ならできるけど煩雑すぎてC#には採用されなかった

321:名無しさん@お腹いっぱい。
12/06/14 10:10:46.97 WOJH/6WO0
private new ベースクラスのメソッド名(引数も合わせる ...){}

これで一応できるけどキャストしたらベースクラスのは呼び出せるわね

322:名無しさん@お腹いっぱい。
12/06/14 10:48:44.80 SlYrQktU0
newの使い道がよくわからないんだけど、virtual指定されてないメソッドをオーラーライドしたいときでいいの?

323:名無しさん@お腹いっぱい。
12/06/14 11:08:28.11 WOJH/6WO0
オーバーライドするとベースクラスにキャストした時もオーバーライドしたメソッドが呼び出せる
つまりベースクラスのメソッドを上書きできる

newの場合はベースクラスにキャストするとベースクラスのメソッドが呼び出される
上書きしたわけじゃなくて同じ名前のメソッドが定義されたので
前のが呼びだせなくなったという感じ

324:名無しさん@お腹いっぱい。
12/06/14 12:25:35.45 +pekMVIj0
abstract オーバーライドしろ
virtual  オーバーライドしてもいいよ
未指定   できなくは無いがnew付けろよ。


325:名無しさん@お腹いっぱい。
12/06/14 13:20:39.57 SlYrQktU0
>>323,324
ありがとう。つまりポリモーフィズムとはまったく関係ない機能なのか
どんな用途で使うんだろ・・・

326:名無しさん@お腹いっぱい。
12/06/20 23:24:01.56 W/4WFKKT0
>>325
一番は、後から基底クラスに派生クラスのメンバと被るメンバが追加されたときに
意図せずオーバーライドしてしまうのを防ぐため
その意味では別にnewは無くてoverrideだけでいいんだが、overrideの付け忘れなのか
わざとやってるのか区別するためなんだろう

327:名無しさん@お腹いっぱい。
12/06/21 12:27:26.65 K9S0VvT90
visual c#で、ボタンを押すとテキストボックスに入力した英文(長文)をもう一つのテキストボックスに文を並べ替えた状態で出力するアプリを作ろうとしています。
文を並べかえるというのは、単語の並べ替えではなく、複数の文の1文1文を1つと見て、それらの文を並べ替えるという意味です。

考えているアルゴリズムとしては、入力文を初めから一文字ずつ読み取っていき、ピリオドが出た瞬間に初めからその部分の文字列を 文字列1 に代入。
続いてその次の位置からまた一文字ずつ読み取っていき、ピリオドが出た瞬間に、その部分を 文字列2 に代入・・・と繰り返し、最終的にn個の文字列をランダムに並べ替えたものを出力する、というふうに考えています。

C#で作る場合このような流れで作るのがよろしいでしょうか?その場合どのような文字列操作関数を使用していけばいいのでしょうか。
また、他により効率的な方法があればご教示お願いします。

328:名無しさん@お腹いっぱい。
12/06/21 12:36:01.13 tG9UJEis0
ピリオドでスプリットすれば一発

329:名無しさん@お腹いっぱい。
12/06/21 12:45:20.29 K9S0VvT90
>>328
なるほど、splitメソッドというのを使えばいいのですね。

この場合、Mr.などの単語が1つだけの文が生成されないようにするには
具体的にどう条件を追加すればよろしいでしょうか?
(Mr. Tanaka is Japanese. を1つとしたい場合等)

330:名無しさん@お腹いっぱい。
12/06/21 12:50:03.71 tG9UJEis0
Mr.の場合はjoinすればいい

331:名無しさん@お腹いっぱい。
12/06/21 13:30:59.90 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);

こんなかんじ?

332:名無しさん@お腹いっぱい。
12/06/21 13:39:41.01 K9S0VvT90
>>330-331
ありがとうございました
参考にして作ってみます!

333:名無しさん@お腹いっぱい。
12/06/21 13:46:05.56 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の図形の表示の仕組みについて解説お願いします

334:名無しさん@お腹いっぱい。
12/06/21 13:53:56.22 /1f0rY470
UIElementがデータソースになった場合、
それは直接ItemsControlの子孫要素になる
UIElementは一つの親にしか属せない
普通はRectangleはDataTemplateにして
ItemsSourceにバインドするのはその構成要素だけ持つクラスにする

335:名無しさん@お腹いっぱい。
12/06/21 19:56:05.31 C/I3uX5s0
XmlSerializerを使ってデータを一時的に保存したいと思っています.
今作っているクラスはUserとEventListとEventの三つになり,こんな感じに他にデータも含みます.
User
-string name
-EventList
--Event
---int x,yなど

保存したいのはUserクラスで,List<Event>を含んでいたので,
URLリンク(handcraft.blogsite.org)
を参考に,IXmlSerializableを実装してリストを保存するだけのクラスEventListを作りました.
そしてEventやEventList単体のシリアライズ化には成功しました.

ですがUserクラスのシリアライズが上手く行きません…

Userクラスはこうなっています
public class User {
public EventList event_list;
public string name;
public User() { }
}


336:335
12/06/21 19:57:19.59 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をコメントアウトすると上手く行くのですが,クラスの中に自作クラスを持つ場合は別の処理方法があるのでしょうか?
よろしければ解決方法などを教えて頂けると幸いです.

337:名無しさん@お腹いっぱい。
12/06/21 22:40:14.42 XTsjM3La0
>>336
別に普通にやればいいだけなはずだけどなあ
Listも変なことしなくてもそのままSerialize出来ると思うけど

publicなゲッターセッターと引数なしのコンストラクタを持っていること
コレクションの場合はAdd(T item)を持っていること といった感じだったと思う

338:名無しさん@お腹いっぱい。
12/06/22 00:18:49.52 D9lptrmf0
駄目なのはList<T>[]であってList<T>じゃないよ?

339:335
12/06/22 22:10:59.58 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の直前のものを消したら問題無く動きました.


皆さんどうもありがとうございます,とても助かりました.

340:333
12/06/22 22:51:30.84 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を自由に入れられるようにし、それらを表示することは可能でしょうか


341:名無しさん@お腹いっぱい。
12/06/23 16:57:23.81 4W1+go0K0
int型配列a(要素数100)から等確率でランダムに10個の要素を選んで選んだ順に
配列b(要素数10)に代入するというプログラムを作りたいのですが、
自分が考えたのはひたすら100個のなかから1個ずつランダムで選んでいき、
前選んだ要素とかぶった場合はやり直し(棄却) という感じで作ったのですが、
選んでいくにつれて棄却する回数が多くなってしまい、時間がかかってしまいます。

この場合どのようなアルゴリズムで作るのが効率がいいのでしょうか?

342:名無しさん@お腹いっぱい。
12/06/23 16:59:23.81 VvicIvbe0
配列からランダムに一個選ぶ
選んだのを末尾のと交換する
個数を一個減らしてランダムに選ぶ・・・

343:名無しさん@お腹いっぱい。
12/06/23 16:59:57.81 F1v3/Dpc0
配列じゃなくて動的配列(List)を使えば、使用した要素を捨てられる
どうしても配列でやりたいなら被ったら上か下を選ぶって処理を入れる

344:名無しさん@お腹いっぱい。
12/06/23 17:37:18.45 8zHjbdI20
いわゆる重複しない乱数と同じ考え方だからググれば腐るほどでてくる

345:名無しさん@お腹いっぱい。
12/06/24 15:54:12.67 5cM7Ezza0
配列内の要素をシャッフルして先頭から10要素取り出せば?

346:名無しさん@お腹いっぱい。
12/06/25 01:06:49.19 2vZfjApk0
>>345
それだとM個からN個を取り出すときO(M)になるから非効率

347:名無しさん@お腹いっぱい。
12/06/25 01:49:47.37 QcDMISKM0
>>346
そうか。
要素数100程度みたいだからそんなんでいいかな、と勝手に思ったんだ。
そこまで考えてなかったよ。

348:名無しさん@お腹いっぱい。
12/06/26 09:46:52.99 /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でやるとか

349:名無しさん@お腹いっぱい。
12/06/26 16:08:21.13 yCJdNuh10
XAMLグロいなー
誰が考えたんだコレ

350:名無しさん@お腹いっぱい。
12/06/26 18:21:10.14 q2NBJkUf0
XML自体人が読み書きすることは重視してないからねー
構造的であることは人間にも利点があるが
人間にとってはせいぜい段組がしてあれば十分だ

こんなガチガチな仕様にしたのはコンピューターに合わせたからで
そのフォーマットの拡張系なんだから、よりコンピューターしか理解できないようになっていくのは当然だな
俺の好きなフレームワークにも

…and one more thing: Making humans edit XML is sadistic!

と書いてある

351:名無しさん@お腹いっぱい。
12/06/26 19:17:05.04 00qqaFC30
デリゲートって、クロージャみたいに親のメソッドで扱われる変数を保持できるけど、

public void Hoge(object obj)
{
 var act = new Action<obj>((o) => Fuga(o));
 this.actionList.Add(act);
}

これみたいに、Actionをフィールドのリストに入れてずっと保持する場合だと、
objの参照元はずっとGCされないまま(メモリリーク)になるの?

これなら実行タイミングを好きにずらせるから便利だなーと思ったけど、
objの参照をずっと掴んでるなら微妙だな。

352:名無しさん@お腹いっぱい。
12/06/26 19:21:22.63 q2NBJkUf0
そう
便利だけどよく分からずに手を出すのはお薦めできない

353:名無しさん@お腹いっぱい。
12/06/26 19:21:49.11 /TbFwKc10
そりゃListに保持するってことはいつか使うって宣言も同然なんだから
いつの間にか黙って消えてたら困るだろ
それをリークというのはおかしい

354:名無しさん@お腹いっぱい。
12/06/26 19:27:48.27 yCJdNuh10
ラムダの中でobj使ってないから参照もされないでしょう
Action<obj>っていうのもコンパイルエラーじゃないの

355:名無しさん@お腹いっぱい。
12/06/27 01:25:25.97 CEBjiC+M0
objを使いたい場合
var act = new Action(() => Fuga(obj));

引数をとりたい場合
var act = new Action<object>(o => Fuga(o));

引数をとりながらも無視してobjを使いたい場合
var act = new Action<object>(o => Fuga(obj));

356:名無しさん@お腹いっぱい。
12/06/27 14:23:59.88 ea0YHqGT0
パワポの左側のスライド一覧や、デスクトップ上でのアイコンの並び替えみたいに、
画像オブジェクトをD&Dによって移動・挿入可能なUIを作りたいと思っています。

ListViewに画像を表示させればかなり近いことが出来るのですが、
動画編集ソフトのタイムラインのように横方向に並べたいと思っています。

わりとよくあるUIだと思うのですが、既にコンポーネントとして利用できるようなものはありませんでしょうか?


357:名無しさん@お腹いっぱい。
12/06/27 19:44:31.88 VN8+g37h0
ListViewのAutoArrange切って自前で配置すれば行けるような気もするけどどうだろ。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch