2012年09月ソフトウェア27: ふらっとC#,C♯,C#(初心者用) Part92 (545) TOP カテ一覧 スレ一覧 2ch元 削除依頼
Chromium派生ブラウザ 「SRWare Iron」 Part10 (326)
アウトラインプロセッサ 「NanaTerry」 (632)
アイドルマスター4XNA 解析スレッド (267)
Opera総合スレッド Part189 (658)
見開き画像ビューア Leeyes -リーズ- Part11 (390)
圧縮解凍ツールExplzh Part14 (705)

ふらっとC#,C♯,C#(初心者用) Part92


1 :2012/04/26 〜 最終レス :2012/11/02
ふらっと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/

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

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

3 :
ム板開いたのかと思ったわ
避難所part1で良かったんじゃね?

4 :
>>3
感情的になった出て行け論者が立てたスレなので、
スレタイ名がメチャクチャになってしまったんだ。すまない。

5 :
荒れ気味の板がIDなしだと大抵ろくな事にならないのは分かるが、この板でする話なのか

6 :
ム板から逃れる先として、ソフトウェア板以外に何かあるかな?

7 :
ム板でやれ

8 :
>>7
巣に帰れってことだな。言い返す言葉もないよ。
だが、避難所を同じ板に作ってもしょうがないからな。

9 :
荒れてる時はこっちに誘導したらいいんじゃないかな

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

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

12 :
問題は回答者がここにくるかだな

13 :
俺が一番回答してるから俺がいれば大概大丈夫だろう

14 :
>>12
俺も一応回答者。どんくらい回答したかまでは覚えてないけど。

15 :
じゃあ、ちょっと質問
インターフェイス使うと改変に強いっていうけどプロパティとどう違うの?
プロパティも内部の構造変えても他のクラスに影響がない
影響が出るとしたら、プロパティの型を変更した場合
インターフェイスも引数の型変更したら結局使いものにならないし
改変に強いって説明の仕方おかしくない?
内部の違うクラスを同じようにアクセスできるのを明示するということならわかるけどね

16 :
クラスというのは、実体を作れる型。
インターフェースとしいうのは、実体を作れない型。


17 :
「改変に強い」のは、インターフェイス自体の改変ではないよ。
改変に強い、って説明自体確かに誤解を招く表現で、
実際は「内部実装を気にしなくて良い」が正解だと思う。
インターフェイスとはちと違うけど、Streamなんかその最たるものじゃない。
Stream自体が何をソースにどうやって実現されているかは気にしなくてよくて、
処理する側はStreamクラスのオブジェクトに対して必要な処理(メッセージ)を要求すればいい。
インターフェイスを定義する、ってのはそれだけのことでしかない。
「Hoge(FileStream stream)」って定義したメソッドより、「Hoge(Stream stream)」って定義されたメソッドの方が、
汎用的に使えるじゃない。

18 :
改変に強いっていうのはどうなんだろうな
個人的には別に強くないと思うが
interfaceごしだと実装クラスを入れ替えられるけど
改変前と改変後の2つの似たようなクラスを両方保持して
interface越しにどっちを使ってるか分からなくするなんて考えただけでゾッとする
一つの具体クラスをただ書き換えるほうがずっといい
だから改変に強いと言うよりは
ライブラリを作る側が使う側に処理を実装してもらう時に使うものだと思うよ
IComparableを実装してもらってSortメソッドで使う比較関数に利用したり
まあC#3.0からラムダ式が使えるからそういう用途はもうほとんどお役御免だけどね
interface自体ほとんどお役御免といっていいと思う
ライブラリに残ってれば使うけど自作する意味は殆ど無い

19 :
ム板って取扱いと人種的に宗教戦争余裕なのに未だにIDないのか

20 :
インターフェースは、お役御免には、ならないと思うがな。

21 :
interface I{ int Hoge(); string Hoge2(); }
こんなのを作るより
class C{ public Action Hoge; public Func<string> Hoge2; } こんなのを作って
new C{ Hoge = () =>{ ... }, Hoge2 = () => "hogehoge" }
こうしたほうが早いしわかりやすいし個別に設定できて汎用性も上だから
もうinterfaceを作る意味は無いはず

22 :
例えば、UnityやXNAやDxLibなどを同じように扱えるようにするにはどうするべき?
ゲーム本体部分とライブラリとの丁度境界線上にあるクラスはどのように定義すべき?

23 :
お役ご免ってのは言い過ぎでしょう。後々機能追加が考えられる場合、
その機能追加に耐える様Interfaceを定義するコトなんて、(自分は)ザラにありますよ。
たとえば、画像ファイルに対して順次いろんな処理をするようなソフトを作ったとき、
最初はjpgとbmpしか対応しないでおいて、いずれpngとかtiffもやりたいなあ、と思った場合、
interface ImageProcessor { ... }
class JpegImageProcessor { ... }
class BmpImageProcessor { ... }
なんて。
処理自体が短ければ>>18の言うとおり、ラムダ式で十分なんだけど、
色んな段階を踏む処理の場合、処理自体をクラス化しちゃう方が後々追加し易い。
>2つの似たようなクラスを両方保持して〜一つの具体クラスをただ書き換えるほうがずっといい
っていうような懸念がある場合は、interfaceじゃなくて抽象クラスでやればいいし。
共通部分は抽象クラスで処理して、後々追加したい機能毎に変わりうる部分は具象クラスに任せて抽象メソッドを定義だけしておく、とか。

24 :
>>23
もっともですねぇ

25 :
>>23
これだと違いはファイル読み込んでビットマップ作る
ビットマップをファイルに書き出す
ところが違うだけじゃないの
具体的なクラス一個作って
public Image(Pixel[][] bitmap)
こんなコンストラクタにして
new Image(JpegLoader.Load(file))
new Image(BmpLoader.Load(file))
書きだす時は
JpegWriter.Write(image.Pixels);
BmpWriter.Write(image.Pixels);
こんなもんでよくね

26 :
まあ、オブジェクト指向を完全に理解して常に完璧な形で実現出来てる、
なんて境地には到底達せないと思うので、今の自分の実装が正しいとも言い切れないんですけど。
Rxとか見てると、ラムダ式で全部・・・なんてのも決して非現実的ではないと感じるし、
「一つ一つの処理は短く」という基礎的なことを突き詰めていけば、
そういうこともきっとできるんだろうなあ、とは思う。
ただ、それでもinterface自体が無くなる可能性は低いだろうな。
俺は逆に、Rxが駆逐しようとしているのは開発者がclassを定義する、
という行為じゃないかと感じる。

27 :
変数名につける英単語がわからなくて悩みまくる

28 :
>>25
それだと、あっちこっちで処理対象がJpegなのかBmpなのか判定しなきゃいけなくなるでしょう。
処理が読み込みと保存だけでいいなら、2箇所ぽっきりだしそれもありだと思いますけど。
Classとインターフェース作っちゃえば、インターフェースを介して処理してる本体側は大きな変更することなく、
一番アタマで対象の判定だけやって、クラスの実態をnewした後は同じ処理を続けるだけ、で行ける。

29 :
極端に汎化するなら、こういうインターフェースを作るかな
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 :
まあ別にいいんだけどねこれでも
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 :
まあ、やりたいことにあった方を選べば良いんじゃないかな。
実際、その二つの方法を提供しているライブラリも多いよ。
俺もそういうやり方することあるし。処理が端的に済む場合なんかは特に。
で、じゃあどっちかしか使わないか、っていうと、時と場合に依った。
どっちでも実現できる場合もあれば、どっちかじゃないとどうにもならん、とか
一方のやり方だとやたら遠回りなやり方になる、とか色々あったさ。
ライブラリを公開する、って観点で言うと、>>30みたいなやり方の方が使いやすいだろうな。多分。
実際、interfaceを定義する、っていう手間はあれで結構大変だし、ホントやりやすい方でやればいいと思うよ。

32 :
ただ、制限がクリアできるならabstractの方が便利だけどね
interfaceで同一視したいクラスって、共通の処理がある程度有るし

33 :
( ・ω・)y─┛〜〜

34 :
まあ実際、interfaceとabstract classどっちが多いかっつったら、
今まで書いてきたような目的下だと、abstract classの方が多いな。

35 :
>>22
ゲームで必要な機能だけを、ある程度そのゲームに特化した形で抽象メンバにする
間違っても汎用的なライブラリを作ろうなどと考えてはいけない

36 :
落ちた?

37 :
そんな早くdat落ちするのかこの板

38 :
しないね。サーセン誤爆だ。

39 :
基本プログラミングっていうのは自分でライブラリを書いて自分で使うことの繰り返しだからな
汎用性が高く使いやすいライブラリを書いていくと良いプログラムになる
使いにくく汎用性が低いライブラリを作るとソースがなんだかわからなくなったり仕様変更できなくなったりする

40 :
最初はそれも上手く行かなくて辛いけどな。試行錯誤を繰り返していく内に、
どうすれば汎用性が上がるかが分かってきて楽しい。

41 :
さんざ苦労してライブラリ作っても、意外と使わなかったりするな
使わずに温存してるうちに陳腐化したり、もっといいライブラリが登場したり…

42 :
今必要じゃないライブラリ作ってもしょうがないよな
テストもろくに出来ないだろうし

43 :
それあるよな。必要な物書いていったらいつのまにかライブラリになってたってのが理想的。

44 :
もはやライブラリを作るほうが本来の目的になってる時、あるよねw

45 :
作りたいツールを思いつく→ツールに必要なパーツを作る
→そこで満足する、または飽きる

46 :
そこが楽しさだからなぁ
完成が見えた時点でやる気が無くなる

47 :
デバッグが一番大変だわ
コード書いてる時は楽しいんだけど
バグを出すために色々やってみるとかキツい
自分が使うツールじゃなかったらまず無理

48 :
>>44-47
よう、おれ

49 :
前スレ埋まったw
ここに移動すんのか?

50 :
おかしい・・・みんなどこに行ったんだ

51 :
まあム板には相談室があるからふらっとがこっちにあっても
最悪質問者が誰もここまでこれなくて潰れても大して問題はないんだよな

52 :
じゃちっと立てれるか試してくるわ

53 :
あっ・・・ソフトウェア板様に、って貼られたテンプレをつかっちまった
スレタイ・・・すまない。

54 :
ふらっとVisual C#,C♯,C#(初心者用) Part92
http://toro.2ch.net/test/read.cgi/tech/1335703825/

55 :
なんだかよくわからないことになってきたな・・・
どっちに来ても質問が来たら答えるだけだけど

56 :
VC#のデザインでコピーして貼り付けた時、Nameプロパティをコピー元に似せる方法ってないですか?
input_data_Box1ならinput_data_Box2とかinput_data_Box1(1)とかになってほしいです・・・

57 :
継承するかユーザーコントロールにしてInput_data_Boxっていうクラス名にしたらいいんじゃないの

58 :
ありがとうございます
特に付加する機能のない継承をやるくらいしかないんですね

59 :
多少手間だからユーザーコントロール作るか・・・!

60 :
俺はなにもかもユーザーコントロールにしてる
1クラスに配置するコントロールは4つぐらいまで
超えたらユーザーコントロールにまとめる

61 :
ユーザーコントロールって再利用性が全くないよね

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

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

64 :
>>61
まあ、変な基準でまとめると全く無くなる。
でもたとえば、ファイルパスを入力するテキストボックスと、参照ボタンのセットとか、
意外とよく使う組み合わせ、ってのは多いからな。
>>60のいう4つくらいまで、っていうのは何だか凄いな、と思うけど。
レイアウト系のパネル配置し出すと、4つなんて容易に越えてしまいそうなもんだが・・・

65 :
×パネル
○コンテナ

66 :
荒らしの人は相談室に行ったみたいだな

67 :
全部作り終わってから、ちまちまとライブラリに落としこんで行ったら動かなくなった。元に戻しても動かない(´・ω・`)

68 :
>>66
素人考えの眩暈のするような間違った内容だけど、自分の考えを書いてはいるんで別の人かな。
JITの話が出てたんで関連Tips
・JITとインタプリタは違う
・JIT結果はAppDomainをまたいで共有される
・Assemblyにする段階で構文解析終わって中間コードになってるためJITは高速
・コールドスタートアップだとJITコンパイラの読み込みに時間がかかる
・全部NGENしとけばJITコンパイラの読み込み自体がスキップされる
・JITさせたくないならNGENしときましょう

69 :
>>67
動かなくなるようなライブラリの落とし込み方ってどうやるんだ・・・
クラス単位で名前空間移して別DLLにするだけだろ?
アプリ側で随時using追加すれば動かなくなることなんてないだろ・・・

70 :
いまさらだがテンプレ抜けていたので

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

71 :
複数のテキストボックスを入れたコントロールを用意し、
テキストボックスのTextプロパティ等をコントロールのプロパティで変更できるようソースに追記しました
(デザイナーで初期値を変更すること、プログラム上で参照することが目的)
デザイナーで初期値を変更することはできたのですが、プログラム上で参照することができません
using ディレクティブまたはアセンブリ参照が不足しています。
とエラーが出ます
検索するとNamespaceを追記すると良いと出てくるのですが、コントロールと本体のNamespaceは同じで、
最初から付いているコントロールのTagプロパティは参照できます
Modifierをprivateからpublicに変えたりもしたのですが、駄目でした
ソースは次レスで書きます

72 :
//○プロパティの追加(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 :
一例、でわかるかよ。
そのプロパティの中に原因があるんだろ。

74 :
ン?違うな。なんだこのソース。
そもそもコンパイルできねえじゃん。

75 :
プロパティを追加したとかいうクラスの名前はなんだかしらないが、
そのクラスでキャストしなきゃそのプロパティにアクセスできるわけないだろう。

76 :
複数のテキストボックスを入れたコントロールのクラス名を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 :
エラー、ってコンパイルエラーのことだったのね。浅はかな回答して済まん。

78 :
>>76
なるほど
クラス名でキャストしてあげる必要があるんですね
無事コンパイルが通りました
ありがとうございました
>>77
いえ、私の説明不足ですみません

79 :
本スレはいよいよ崩壊しているな・・・
回答がままならない

80 :
初心者の質問に初心者が答える正に初心者用スレッド

81 :
あの状態で答えられるエスパーは確かにあのスレにはおらんな。
たまにエスパーのいるスレがあるけど、ああいうエスパー達はどういう次元にいるのか理解が及ばない。

82 :
あれはIDの必要性を分からせるための自作自演に違いない

83 :
ふと思えば、そもそも、あのプログラムでxcopyを使う必要はあったんだろうか・・・

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

85 :
マイクロソフトのサポートに電話すれば

86 :
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 :
>proposedSize パラメータが Int32.MaxValue より大きい高さを持つ Size を表している場合
ここんところが意味不で困ってます
Size.HeightはintですからInt32.MaxValueより大きいってどゆこと?

88 :
MaxValueより大きい・・・・ジャスコだな

89 :
MaxValueって31bit+符号で表現できる最大ってことじゃなかったっけ?
ファイル長なんかだとLongも一緒につかえるよね

90 :
見た感じproposedSizeに収まるテキストの最大のサイズを返すんじゃないか
MSDNがバグってるんだろう

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

92 :
protected virtual CalculateColumnSizeCode とかそういうメソッドが隠れてねえかなあ、と
探したけど、それっぽいの無いんだよね・・・。

93 :
×Code
○Core

94 :
知らんけど一個一個MeasureTextして入るかどうか調べればいいんじゃねえの?

95 :
相談室荒れてるな
韓国コピペも相談室言ったか

96 :
失礼します。改行コードについての質問です。
改行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 :
CRが13,LFが10の2文字でしょ
2文字をいっぺんに読んで、何かよくわからない過程を経て1310に到達してるんだろうと思うけど
http://ideone.com/FlooQ
1310は16進数だと51Eになるみたいだよ

98 :
自己解決しました。一度のつもりの処理を二度行っていただけでした。
こんなことで小一時間悩んでいたなんて・・・

99 :
文字コードの制御コードはすべてアスキーコード互換じゃないかな?
http://e-words.jp/p/r-ascii.html


100 :
おIDがあるw
ソフトウェア板に移動したのかw

101 :
で、windowsがなんで2文字のアスキーコードが返ってくるかといえば
http://ja.wikipedia.org/wiki/%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89

102 :
やっぱIDいいよな
ない向こうは相変わらず荒れてるし
必死にIDあり移住に反対してた奴はいなくなったようで平和だ

103 :
でも向こうのほうが盛り上がってるし・・・

104 :
ここは盛り上がることが目的と違うし。
避難所、って銘打ってるんだからそれでいんじゃないの。

105 :
休みで暇なやつが荒らしまくりだな
あっち

106 :
まあ程度が知れてる。完全に荒らし目的だろうから、どうでもいい。

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

108 :
>>107
どの程度のレベルかわからないが、msdnにはいくらかサンプルやビデオがあるし
codeplexやSourceForgeはオープンソース
どこも自分にぴったりのものを探すのは難しいけど
具体的にどういったソフトを作りたいか言ってくれたら
もう少し細かくアドバイスできると思うが

109 :
ニュース系板もなんか暇なやつかネタが無い業者の釣りなのかしらんが
数年前の事件でスレ乱立してるしなあ

110 :
>>107
VS2010Express
Expression Blend評価版
逆コンパイルすれば最高峰のC#コードが読み放題

111 :
Expression Blendなんか使わなくても、ILSpyでも入れればいい。

112 :
いや勉強の例として挙げたんだ
Expression Blendは全部C#だし0から一気に作られてるからとても綺麗

113 :
ネットにアクセスするのにイテレータ使うとだめだな
プロパティを読みに行く度にネットに接続する
foreachなんか使うと、F5連打状態
気づいてよかったわ

114 :
どんな実装だよ

115 :
なにそのおそろしい実装www

116 :
イテレータを使うとダメなんじゃなくて、
イテレータの使い方を間違えるとダメなんだと思うが・・・。
まあ、変にイテレータに拘るより、馬鹿正直に書いたソースの方が、
往々にして後々保守性高かったりするけどな。

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

118 :
まったくもってその通りなんだけど
今回の場合、深い階層で使っていたのを忘れて利用したために起きた
1レス読むごとにアクセスするみたいな感じ

119 :
やるなら裏で非同期ダウンロードしながら列挙するのが筋だろうな
でも列挙がダウンロードに追いついてしまったらブロックすることになるから
やっぱり昔ながらのコールバックのほうが現実的だろうな

120 :
画像編集ソフトとか作れる?
取り敢えずビットマップで色塗るだけ出来れば良い

121 :
そんなhelloworldの次あたりに作るようなもん誰だって作れるだろ

122 :
 どうやって?

123 :
>>120
作れる。Paint.NETが代表例。
真面目に作ると難しいけど単純なやつなら
System.Drawing.Graphics使って図形描画するとこからやるといい

124 :
ペイント系も作れるしベクター系も作れる

ところでフリーで地図データが手に入るところないかなあ
ここのsvgデータをxmlで処理した後座標パーサを書いて
bitmapにしてみたけどなんかおかしい
http://www.kabipan.com/geography/whitemap/index.html


125 :
メモ帳とかみたいにUndoしてみたいんだけど・・・

126 :
すりゃいいだろ

127 :
どうやってするのか聞きに来たんですよ・・・?

128 :
まあundoできるできないとグラフィック関連を扱えるようになるのは
わけて考えた方がいいな
まずはどうすればグラフィック関連をいじれるか学んだほうがいい

129 :
どうせ課題の答えでも聞きに来たんだろ
聞く態度もなってないし問題丸投げで聞くし
こうこうこういう風にしたけど出来なかったとかいうのもない
まったく考えないでクラスの優等生に聞きに行くようなタイプ

130 :
まだ中学生ですよ・・・

131 :
でも現実問題としてどうすればいいですかねといわれても
現段階だと、画像系ソフトの骨格を作るくらいのレベルに
なるからちょっと気軽に質問して応えるレベルではないのも事実なんだよね・・・

132 :
pictureBoxがクリックされたらその座標を修得→その座標の色を変更
とか?

133 :
以前ちょっとやってたのでざっくりとした内部の仕組は
頭にあるけど今は眠いのでまた明日ね
他の人でフォローできるなら相手してもらって・・・
ねる

134 :
普通にビットマップをいじってDrawImageでフォームに書き出すのの繰り返しでいいんじゃないの?
ビットマップはLockBitsっていうメソッドを使っていじれば実用になる速度で動くはず

135 :
宿題なら宿題で、要件(Undoを実装することとか)を先に出したほうがいいぜ
後出しされるとぶちきれちゃうオッサンとかいるからよぉ
宿題じゃないならもっと聞きようとか口のきき方があるだろボケ、と言いたいね

136 :
NGID
ID:Cg9BHw6x0

137 :
ざっくりした骨格
http://ideone.com/TUgUt
undoしたいってことはどういう変更を掛けたか管理してないと駄目

138 :
ざっくりとした質問にはざっくりとした答えで良いのだよ。

139 :
初心者煽りはNGIDでスッキリ

140 :
素朴な疑問なんだが、IBindingList.Findっていつ使われるんだ?
DataGridViewで表示してても、あんまりありがたみを感じないんだが。

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

142 :
別に本読まなきゃ分からないような言語じゃないし
Effective C++とか読んだほうがC#の中身が分かって役に立つだろう

143 :
>>141
http://www.google.co.jp/search?tbm=bks&tbo=1&hl=ja&q=C%23&btnG=

144 :
中途半端な解説の本を買うよりは、ネットで十分なような。
http://matome.naver.jp/odai/2133594693176239701

145 :
皆レスサンクス
>>142
そうじゃなくてEffectiveシリーズ読んだことあるなら分かると思うけど
小手先のテクニックやら作法の様な基本を知りたい
なまじJavaの知識だけで物が作れるもんだから
C#的な部分としての基本を見落としてると思う
読んだこと無いけどEffective C++読めってのは極論過ぎない?
>>144
上で挙げた本って中途半端なの?
別に良書があるなら教えてくれ
ネットは結構目を通してるから紙媒体で何か欲しい

146 :
英語でよければKindle本買えば安く読めるよ。

147 :
電子書籍版あるんだね
でも英語は自信無いや
1冊目は無難にネームバリューのあるEffectiveにするよ
ありがとう

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

149 :
SqlCeConnection conn = new SqlCeConnection();
conn.ConnectionString = @"Data Source=DB.sdf";
conn.Open();
var transaction = conn.BeginTransaction();
(続きます)

150 :
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 :
>>70使え

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

153 :
>>151
すみません。>>70 の存在に気づかないまま、書き込みしてしまいました。

154 :
怒ってはいないよw
テンプレが>>70っていうのも遅すぎだし
ただそういうサイトもあるとは知っておいてね

155 :
INSERTしたのとSELECTしたのでデータベースファイルが違うんじゃね?

156 :
回線が途切れたのでID、変わります。
>>153
お心遣いありがとうございます。次から >>70 を使います。
>>155
レスありがとうございます。
確認しましたが、データベースファイルは同じものでした。
INSERT する時も、SELECT する時も、
同じ SqlCeConnection() のインスタンスの接続を使用しています。

157 :
ttp://social.msdn.microsoft.com/Forums/ja-JP/vbgeneralja/thread/934bdbe3-2217-4cd7-bfc9-ae2ef5b731ac
具体的にはこれなんだけど

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

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

160 :
MSDNは、リファレンスとしては、使うこともあるが、
学習用としては、あまり使わないな。そこらへんは、人それぞれか。
MSDN Blogsの記事(http://blogs.msdn.com/b/nakama/)は、読んでおいて損は、無いと思う。

161 :
>>160
ここいいな、参考になる

162 :
なんか例外出てんじゃないの? catchするの止めてみたら?

163 :
そこは出力すべきだろう

164 :
>>162
これは >>152 へのアドバイスいただいているのだと勝手ながら解釈します。
レスありがとうございます。
例外は出ておらず、catch 句に処理は移っていませんでした。
以来、どうしようもなくなったので、すべてまっさらにして、
Visual C# 2010 Express で新たなソリューションを作り直したところ、
正常に動作するようになりました。
原因は終ぞ分からなかったものの、これで自己解決の気分にしたいと思います。

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

166 :
Matchesはだめなん?

167 :
>>165
for(,,){
regex.matches("?(00"+i.ToString()+")*");
}

168 :
var eroGazou=Enumerable.Range(1,5).Where(i=>{Regex.IsMatch("?(0\d{1}"+i.ToString()+")*");};

169 :
>>168
なるほど
画像の連番かw

170 :
>>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 :
>>170
それだと00998になるんじゃない?
3桁にしたいならこれ
(src,"?("+ i.ToString("n3")+")")

172 :
>>170
あと。変数名は明確にわかりやすくするのが基本だ。
 Match 今夜のおかず = Regex.Match(...

173 :
意味がわかりませんw

174 :
この前置きの?ってどういう意味があるんでしょうか?
代替構成体ってやつですか?

175 :
ちゃんと読んでないけど
?って0-1文字の何か,だよね
区切りのスペースを吸収してんじゃないのかな

176 :
最初のはてなは何なんだろうな
MSDN見ても書いてなかったわ

177 :
perl5準拠の正規表現なので専門スレで聞け

178 :
いや答えをくれよ

179 :
C#で正規表現は使えるけど正規表現の記述ルールは
perl5準拠だから分けて考えろよw

180 :
001 002 とかの文字列作ってから比較するなら、正規表現じゃなくてstringのcontainで充分だよな
具体的に>>170を書き換えると
if(src.Contains(i.ToString("000")))
{

181 :
http://msdn.microsoft.com/ja-jp/library/az24scfc.aspx
だからMSDNの正規表現に書いてないんだから最初に?つけるなんてのはないんだよ
必要なのは専門スレにいくことじゃなくてここで?つけてた奴が誤りを認めることだろ

182 :
MSDNに書いてなくてもperl5準拠で動いてるんだから
正規表現のプロに聞けって
正規表現 Part9
http://toro.2ch.net/test/read.cgi/tech/1323566370/

183 :
俺はそんな馬鹿みたいな質問をして恥をかくのは嫌だよ
最初に?つけてた奴が出てきてどういう意図で書いたのか言えばいいだけ
間違った解答をしたんだからその責任がある
くだらない言い争いでスレを汚すのはやめてくれ

184 :
恥ってw
匿名掲示板なんてかき捨てだろうにw
下手なプライドでごちゃごちゃ騒いでるほうがみっともないわ
専門スレで聞けば教えてもらえるのに

185 :
答えはもうわかってるから

186 :
170のロジックで、何故正規表現が要るのかさっぱり判らん

187 :
最初に?をつけるのは最短一致だよ
つまり最初にマッチしたものだけが有効
何が不満なんだ?

188 :
var eroGazou=Enumerable.Range(1,5).Where(i=>{Regex.IsMatch("?(0\d{1}"+i.ToString()+")*");};
この正規表現なんかメチャクチャじゃん
なにとマッチさせようとしてるわけ?
なんでiは1から5で決め打ちなのに2つ目は\dなの?
そのあとの+は何?11とか111とかにマッチさせたいの?
それに対してなるほどとか言ってるのは何? 自演?

189 :
最短一致は+とか*の後につけるんだよ
わけの分からんことをいわんでくれ

190 :
ああ+は違ったわ

191 :
なるほどって言ってるのは、エロ画像の部分に対してじゃないの?頭冷やせよ。

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

193 :
その煽って答えを引き出そうってのは
プログラム板でやれよキチガイ
正解をいまコピペしようと思ったがやめたわ

194 :
IDかえんな鬱陶しい

195 :
結局IDあったって最終的にはモラルの問題よね

196 :
>>188
1から5ってお前が001から005までしか出してないじゃんw

197 :
>>196
その言い訳はあり得ないw

198 :
>>175
お礼遅れてすいません。あれから調べてみたんですけどやっぱりよくわかりませんでした

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

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

199 :
×吸いませんでした。
○素R

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

201 :
XmlReaderとかXmlWriterとか・・・

202 :
・素直にXMLを使う
・プログラムからビルド
 (http://www.atmarkit.co.jp/fdotnet/dotnettips/101compileinvoke/compileinvoke.html

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

204 :
せめてMsbuild

205 :
>>204
起きたら調べる
とん

206 :
>>203
なぜ勘弁したいのか分かりかねる。
プログラムからビルドして、ビルドしたアセンブリを.exeなり.dllなりで保存すりゃあいいじゃないか。

207 :
>>206
なるほど、みるリンクを間違っていたようだね。
>>202の最初の方のリンクに頼りつつ別のexeを作ってそっちに投げる形で努力してみる。みんなサンクス

208 :
過疎り果ててるな・・・・

209 :
位置づけ的にこっちは避難所みたいなもんだから別にそれはそれで良いんじゃね
この板は確かなかなか落ちなかったはずだし

210 :
久しぶりにここに来たのだが
前からIDの表示ってあったっけ?

211 :
よく板の名前を見てみろw

212 :
息をするように自演してるからこっちでやらかしそうで怖い

213 :
Rよ

214 :
まかせとけ

215 :
いや俺が

216 :
public Form1()
{
InitializeComponent();
var MonthCtrl = new MonthCalendar();
MonthCtrl.ContextMenuStrip = this.contextMenuStrip1;
var CtrlHost = new ToolStripControlHost(MonthCtrl);
this.testAToolStripMenuItem.DropDownItems.Add(CtrlHost);
}
http://www1.axfc.net/uploader/Img/so/142186.jpg
メニューを開いたまま右クリックでコンテキストメニューを開くにはどのようにすればいいでしょうか

217 :
ToolStripDropDownMenuを継承して
OnClosingをオーバーライドしてコンテキストメニュー表示時はe.Cancel = trueにする
その後閉じる処理をどこかでしないと表示しっぱなしになるからそこんとこうまく処理する

218 :
>>217
ToolStripDropDownMenuの使い方に少し悩みましたが何とか目的を達成できました。
本当にありがとうございます

219 :
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 :
抽象的なアドバイスで申し訳ないけれど、
コントロールを起点に思考するのではなく、データを起点に思考すると良いかと思う。
A, B, Cというコントロールをこういう風に操作するから・・・ではなく、
α, β, γというデータをこういう風に編集するから・・・で考える。
コントロールは、それぞれの編集において
・編集処理の起点(ボタン操作などのイベント)
・編集結果の表示
である、と捉えておいた方が、良いと思う。

221 :
MVCでぐぐれ

222 :
たぶんMVCだがMVVMについては、考え方がいろいろあるので間違ってるかもしれないが…
UIであるフォームやコントロールは、ユーザーとの対話であることが前提だと思う。
具体的な処理とは、データベースに接続したり、データを取得するとか、ネットワークに接続する等。
この具体的な処理をモデル。
Form1.csなりUIを取り扱うコードで必要なのは、ユーザーからの要求・結果の表示に留めておく。
それらのUIに関する処理をビュー。
それらの間に位置するのがビューモデル。
ビューモデルの役割は、モデルのデータを取ってきてビューに表示できる結果を作ったりする。
ListBoxコントロールとかDataGridViewコントロールのDataSourceに関連付ける為のリストなどをビューモデルに持たせておく。
ビューであるフォームやコントロールは、ビューモデルが公開するイベントなどを使って
結果の表示やビューが公開するメソッドを呼んで何かしら操作の要求を行うようにする。
つまり、機能そのものとユーザーとの対話部分は、きっちりと分けて作っておいて
UIが無くても機能自体は、使えるようにする感じに。
※そこまでやるなら、WPF使えよ…という突っ込みは、受け付けていません。

223 :
>>219
Form1.csとかにロジックを書くのは常に悪手だよ
class Kinou
{
 public Kinou(CustomControl cc)
 {
  cc.Event += (sender, e) => EventAction();
  ...
 }
 void EventAction(){ ... }
}
機能ごとに自作クラスに必要なコントロールを入れて何をするか一個一個書くべき
Formとかはレイアウトの都合でデザイナで自動生成されるだけだから
機能ごとにクラス分けしたりするには不向き
Formのメンバなんか多すぎてインテリセンスが使い物にならなくなるしね
だから2を一歩先に進めて全部自作クラスでやればいい

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

225 :
モデルからコントロールはもちろんいじっちゃだめだよね
でもモデルで処理するだけなら通常のプログラミングの範囲で
GUIの困難はそこを分離しただけじゃ解決しないからね

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

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

228 :
>>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 :
なるほど、わかりました
自分が現在記載している処理だとtextbox1のプロパティを直接いじっているので、自作した他クラスからForm1.cs内のtextbox1のプロパティをいじるには、
Form1.csのプロパティにしてしまうのが簡単かなと思ったので、「textbox1のプロパティをgetsetでForm1.csのプロパティとした上で」という書き方になっていました
自作クラスの引数にした方がよいということですね

230 :
ありがとうございました

231 :
test

232 :
FlowLayoutPanelの様にAddで加えたコントロールを自動に並べるコントロールで、
並べるコントロールの位置を次は下、次は右、次は下といったように選べるコントロールはないでしょうか?

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

233 :
そのぐらい自分で計算していれりゃええが

234 :
今、調べてるとTableLayoutPanelとかもあったのですが、普通に計算した方がよさそう・・・
素直に計算して入れます

235 :
>>232
FlowLayoutPanel.SetFlowBreakでいいんじゃない?
乗っかってるコントロールから設定するならFlowBreakね。

236 :
var url = "http://www.hoge.com/";
var elem = new XElement(XmlConvert.EncodeName(url), "a");
これで落ちるんだけどなんでだろう
urlを変換してXNameに使うのは無理なんだろうか

237 :
ああ普通に出来たわ
EncodeLocalNameでいいのか

238 :
>>237
MSDNのその辺のドキュメントは、読んでて混乱するからな・・・
おつかれ。

239 :
>>235
レスありがとうございます
結局TableLayoutPanelで対応しました

240 :
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 :
NotifyPropertyChangedみたいなのはうまい解決をしようとして
逆に問題を複雑にしてるだけなような気がする

242 :
オブジェクトを保存するときXElementに変換してXMLで書き出しているのですが、
XElementに変換する一般的な書き方というのはありますか?
IXmlSerializableのようなものがあれば知りたいです。よろしくお願いします

243 :
>>242
http://smdn.jp/programming/netfx/serialization/2_xmlserializer/

244 :
>>243
XmlSerializerは手間の割りに融通が利かないのでちょっと・・・
IXmlSerializable.WriteXml()のように再帰的にXElementを回収してくれるような仕組みがすでにあるかどうか知りたかった感じです

245 :
>>244
IXmlSerializable.WriteXmlを使えばいいのでそんなもん必要ない
XmlWriterの途中にXElementの内容書き込んだり普通にできるからな

246 :
ContextMenuStrip に縦方向のスクロールバーを付けたいのですが、なんとかならないでしょうか。
アイテムが多くて画面に収まらないときはメニューの上下端に▲、▼が現れてそれを押すと
スクロールしますが、それではなくスクロールバーを付けたいのです。
ComboBoxのメニューのようなスクロールバーです。
VisualStudioでコードを入力しているときにメソッドがポッと出てくるメニューのようなスクロールバーです。
public partial class UserControl1 : ContextMenuStrip
{
public UserControl1() {
InitializeComponent();
this.VScroll = true;
}
}
こんなこともやってみましたがダメでした。

247 :
なんとかならなくもないだろうけど。
プロパティひとつ設定すればというお手軽な方法はないな
ToolStripDropDownから派生して、スクロールバー表示時のアイテムの幅自前計算するとか
もしかしたらToolStripから派生して自前でToolStripItemの管理するはめになりそう
むしろFormから作ったほうが簡単な予感がする
BorderなくしてListBoxでも全体に貼り付けてとか

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

249 :
画像のバイト列をImageに表示したいのですが真っ白なままでどうもうまくいきません。
ローカルファイルをSourceにUriで指定すると表示されるのでXAML側の記述は問題ないと思うのですが・・・
↓こんなコードですがどこに問題があるのでしょうか?
http://ideone.com/7puAt
何かアドヴァイスいただけると助かります。

250 :
速度に関する質問です
下記の同じ結果を出す、ちょっと複雑な処理があったとします
(内容は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 :
もっと繰り返し回数多くしたほうがいいんじゃないの
差が微妙すぎてよくわからない
あとr+2 r+1 rじゃないの同じ結果にしたいんだったら
あと計算結果とっといてどこかで使わないと最適化で捨てられちゃうんじゃない
複雑な計算させたほうが早かったりif文のほうが早かったりいろいろあると思うけどね
最適化の具合とかで

252 :
自己解決しました。
↓のようにしたら表示されました。
http://ideone.com/7p4hu
BeginInitの後に
bi.CacheOption = BitmapCacheOption.OnLoad;
を入れることで表示されました。

253 :
formとメトロってワンクリックで切替できますかね?

254 :
>>250
その程度の距離のif文ならL1の中にすっぽり納まるからなあ
むしろ/や%の方が重いはず

255 :
>>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 :
その前に最初の計算式二つは結果が等価じゃねーだろw

257 :
ちょこっとコード書いてて気になったんだが最後のパターンがなんか納得いかない結果になる
http://ideone.com/t4Tro

258 :
あ、すRれで納得いく結果になった
http://ideone.com/FW5ED

259 :
シフト演算使ったほうが早いね
http://ideone.com/o1mSO

260 :
みなさんレスありがとうございます
ケースバイケースなんですね
/や%を2回程度余分に使うより、if&++;の方が早いとのだと思っておきます
盲目的にifはできる限り減らした方がいいと思い込んでました・・・
シフト演算を使うという発想はありませんでした
というより、普段使ってないので、コードの意味がわかってないので、コードを参考に勉強してきます

261 :
switch(r % 4) にすると?

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

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

264 :
>>262
そんなマニアックな状況、やってみなきゃわからんのだから
IPCでまずはやってみなよ。

265 :
c#でトランプの数当てゲームを作りたいのですが、ホームアプリケーションでいいなでしょうか?

266 :
いいな いいな にんげんて いいな

267 :
初心者ならコンソールアプリケーションでゲームの中身だけ作ってGUI(Form)つけるのおすすめ

268 :
Formでいいんじゃね
ゲーム作りたいならUnityとかゲームエンジンとか使った方がいいと思うが、自力で数当てゲームくらい作れた方がいいかもね

269 :
>>265
これを見れば作れる
http://www.nicovideo.jp/watch/sm13022762

270 :
>>264
レスどうもありがとうございます、とりあえずもう少し試行錯誤してみますね!

271 :
てst

272 :
なんで難しい質問ばっかなのこっちは

273 :
本スレだからな

274 :
難しいというか、シチュエーションが限定的な質問が来るね。
まああっちで聞いても、本筋と関係ないところで喧嘩おっぱじまるからだろう。

275 :
IDは偉大、変な自演がないだけでも捗るな

276 :
シチュエーションが限定的なのはしょうがないんじゃないかな
普遍的な問題は大抵ググればなんとかなるだろうし
>>216の質問をしたのは俺だけど
ググっても同じ問題にはまっている人が見つからないのは本当に困る・・・

277 :
てst

278 :
C#でDirectxを使おうとしたら、遅延通知が出たのですがどうすればいいですか?

279 :
遅延通知って何?

280 :
この言語のリファレンスマニュアルって糞見づらいMSDNしかないの?

281 :
さらに見づらい上に古いPDFであればありますよ
あなたがC#のリファレンスと.NETのリファレンスを混同していないことが前提ですが…

282 :
てst

283 :
MSDNから必要な情報を見つけ出して、珍妙な自動翻訳に動じず英語版見に行くようになったら一人前。

284 :
.netの翻訳は人間がやってるらしいぞ

285 :
デリゲートがよく分からないのでJavaScriptで例えて説明してください

286 :
関数オブジェクトのようなもの

287 :
>>285
http://jaba.johnson.co.jp/

288 :
>>287
それはJavaだ。
JavaScriptと一緒にすんなw

289 :
>>287
×Java
○Jaba
JavaScriptは使ってるようだが

290 :
てst

291 :
てnd

292 :
カスタムコントロールの中のComboBox(Bとする)の.Itemsに他のクラスからアクセスしたいと思っています
当該Itemsに別データの配列を突っ込みたいので、カスタムコントロールのプロパティにしようかと思ったら、setの記載で読み取り専用だからできねーよカスと怒られます
なにかよい方法はないでしょうか?
public ComboBox.ObjectCollection B_.Items
{
set
{
B..Items = value;
}
get
{
return B..Items;
}
}

293 :
>>292
ComboBox.DataSourceプロパティ

294 :
下記で期待する動きになりました
ありがとうございました
getもDataSourceにせんでいいのかな?と迷いましたが、デザイナー上の入力を考えるとこっちの方がベターぽいのでこれで行きます
public object B_.Items
{
set
{
B.DataSource = value;
}
get
{
return B.Items;
}
}

295 :
てst

296 :
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

297 :
そりゃまあ、普通に考えたら出ないとおかしいよね

298 :
だってVC++あるしなあ

299 :
Formは入ってるの?

300 :
C#どころかプログラミング始めたての初心者で申し訳ないのですが質問させてください。
if (A != B)
{
return;
}
do();

if (A == B)
{
do();
}
では同じ処理になると思うのですが、どちらを用いるのが一般的なんでしょうか

301 :
前者はガード句と呼ばれる書き方で、主にifのネストが深くなった時に使う
ifが1段しかないのなら後者

302 :
しっくり来る方でいいでしょ

303 :
しっくりこないんですぅ

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

305 :
重ねて質問すみません
txtBox1.Clear();
txtBox2.Clear();
txtBox3.Clear();
これを繰り返し構造でスマートに書きたいのですが、変数等を用いれば可能でしょうか

306 :
var array = new[]{ tb1, tb2, tb3 };
foreach(var tb in array){ tb.Clear(); }
とかかな

307 :
FormコンストラクタのInitializeComponent()の後ろで配列にでも入れておけ
foreachで繰り返せる

308 :
なるほど!同じ型の配列に入れておけば良かったんですね
ありがとうございます

309 :
製品版のVisualStudioってメンバー変数のプリフィックスに_とかつけられます?

310 :
むしろなぜ付けられないと思うの?

311 :
Expressでできないからですね
Formのコントロール変数に自動で_をつけてくれたら便利だと思いまして

312 :
全然意味合いが違うじゃねえか
質問を略すな
Pro版でもできません

313 :
自動でってところがミソか

314 :
ありがとうございます。やっぱり無理でしたか・・・

315 :
Formを継承したクラスがいくつかIDisposableなオブジェクトを持っていて、それらをDisposeしなければいけない場合
どこに書いたらいいんでしょうか。
Form1.Designer.csの方にFormのオーバーライドされたDisposeメソッドがありますが、
そこに追加しちゃってもいいのでしょうか。(デザイナの方に影響与えたりしません?)
それともDisposedイベントでやるべきなんでしょうか。

316 :
1. そもそもインスタンススコープで扱うべきか考える
 実はメソッド単位で扱えるものなんじゃないの?という回帰。
2. コンポーネント化することもちと考える。
 Formと同じ寿命のDisposableなオブジェクトがあるってことは、
 Formにロジックを詰め込みすぎてないか?
 ロジックを然るべきレイヤに分けて、コンポーネント化しちゃえばいんじゃね?という発想。
3. Disposeしたいというのなら
 .Designer.csのオーバーライドされたDisposeメソッドに書いちゃって大丈夫。

317 :
前から思ってたけどcomponentsフィールドっていつ使われるんだろ
あれに追加されたらFormが破棄されるとき一緒にDisposeしてくれるよね

318 :
>>316
ども
3でいかさせて頂きます
たとえばフォントオブジェクトをフォーム上のボタン等に個別に適用した場合
明示的にDisposeさせるよい方法がないので困っていました
フォーム閉じて参照が切れればいつかGCされるさ、とか
アプリケーションが終了した時点で解放されるからいいやん、とか
それだけでなんともならないシナリオもあるのに、と……

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

320 :
>>319
Aの該当メンバーをprivate指定する
Bのほうから継承しないという指定はできない
C++ならできるけど煩雑すぎてC#には採用されなかった

321 :
private new ベースクラスのメソッド名(引数も合わせる ...){}
これで一応できるけどキャストしたらベースクラスのは呼び出せるわね

322 :
newの使い道がよくわからないんだけど、virtual指定されてないメソッドをオーラーライドしたいときでいいの?

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

324 :
abstract オーバーライドしろ
virtual  オーバーライドしてもいいよ
未指定   できなくは無いがnew付けろよ。

325 :
>>323,324
ありがとう。つまりポリモーフィズムとはまったく関係ない機能なのか
どんな用途で使うんだろ・・・

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

327 :
visual c#で、ボタンを押すとテキストボックスに入力した英文(長文)をもう一つのテキストボックスに文を並べ替えた状態で出力するアプリを作ろうとしています。
文を並べかえるというのは、単語の並べ替えではなく、複数の文の1文1文を1つと見て、それらの文を並べ替えるという意味です。
考えているアルゴリズムとしては、入力文を初めから一文字ずつ読み取っていき、ピリオドが出た瞬間に初めからその部分の文字列を 文字列1 に代入。
続いてその次の位置からまた一文字ずつ読み取っていき、ピリオドが出た瞬間に、その部分を 文字列2 に代入・・・と繰り返し、最終的にn個の文字列をランダムに並べ替えたものを出力する、というふうに考えています。
C#で作る場合このような流れで作るのがよろしいでしょうか?その場合どのような文字列操作関数を使用していけばいいのでしょうか。
また、他により効率的な方法があればご教示お願いします。

328 :
ピリオドでスプリットすれば一発

329 :
>>328
なるほど、splitメソッドというのを使えばいいのですね。
この場合、Mr.などの単語が1つだけの文が生成されないようにするには
具体的にどう条件を追加すればよろしいでしょうか?
(Mr. Tanaka is Japanese. を1つとしたい場合等)

330 :
Mr.の場合はjoinすればいい

331 :
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 :
>>330-331
ありがとうございました
参考にして作ってみます!

333 :
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 :
UIElementがデータソースになった場合、
それは直接ItemsControlの子孫要素になる
UIElementは一つの親にしか属せない
普通はRectangleはDataTemplateにして
ItemsSourceにバインドするのはその構成要素だけ持つクラスにする

335 :
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() { }
}

336 :

シリアライズのコードはこうなっています.
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 :
>>336
別に普通にやればいいだけなはずだけどなあ
Listも変なことしなくてもそのままSerialize出来ると思うけど
publicなゲッターセッターと引数なしのコンストラクタを持っていること
コレクションの場合はAdd(T item)を持っていること といった感じだったと思う

338 :
駄目なのはList<T>[]であってList<T>じゃないよ?

339 :
>>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 :
>>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 :
int型配列a(要素数100)から等確率でランダムに10個の要素を選んで選んだ順に
配列b(要素数10)に代入するというプログラムを作りたいのですが、
自分が考えたのはひたすら100個のなかから1個ずつランダムで選んでいき、
前選んだ要素とかぶった場合はやり直し(棄却) という感じで作ったのですが、
選んでいくにつれて棄却する回数が多くなってしまい、時間がかかってしまいます。
この場合どのようなアルゴリズムで作るのが効率がいいのでしょうか?

342 :
配列からランダムに一個選ぶ
選んだのを末尾のと交換する
個数を一個減らしてランダムに選ぶ・・・

343 :
配列じゃなくて動的配列(List)を使えば、使用した要素を捨てられる
どうしても配列でやりたいなら被ったら上か下を選ぶって処理を入れる

344 :
いわゆる重複しない乱数と同じ考え方だからググれば腐るほどでてくる

345 :
配列内の要素をシャッフルして先頭から10要素取り出せば?

346 :
>>345
それだとM個からN個を取り出すときO(M)になるから非効率

347 :
>>346
そうか。
要素数100程度みたいだからそんなんでいいかな、と勝手に思ったんだ。
そこまで考えてなかったよ。

348 :
>>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 :
XAMLグロいなー
誰が考えたんだコレ

350 :
XML自体人が読み書きすることは重視してないからねー
構造的であることは人間にも利点があるが
人間にとってはせいぜい段組がしてあれば十分だ
こんなガチガチな仕様にしたのはコンピューターに合わせたからで
そのフォーマットの拡張系なんだから、よりコンピューターしか理解できないようになっていくのは当然だな
俺の好きなフレームワークにも
…and one more thing: Making humans edit XML is sadistic!
と書いてある

351 :
デリゲートって、クロージャみたいに親のメソッドで扱われる変数を保持できるけど、
public void Hoge(object obj)
{
 var act = new Action<obj>((o) => Fuga(o));
 this.actionList.Add(act);
}
これみたいに、Actionをフィールドのリストに入れてずっと保持する場合だと、
objの参照元はずっとGCされないまま(メモリリーク)になるの?
これなら実行タイミングを好きにずらせるから便利だなーと思ったけど、
objの参照をずっと掴んでるなら微妙だな。

352 :
そう
便利だけどよく分からずに手を出すのはお薦めできない

353 :
そりゃListに保持するってことはいつか使うって宣言も同然なんだから
いつの間にか黙って消えてたら困るだろ
それをリークというのはおかしい

354 :
ラムダの中でobj使ってないから参照もされないでしょう
Action<obj>っていうのもコンパイルエラーじゃないの

355 :
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 :
パワポの左側のスライド一覧や、デスクトップ上でのアイコンの並び替えみたいに、
画像オブジェクトをD&Dによって移動・挿入可能なUIを作りたいと思っています。
ListViewに画像を表示させればかなり近いことが出来るのですが、
動画編集ソフトのタイムラインのように横方向に並べたいと思っています。
わりとよくあるUIだと思うのですが、既にコンポーネントとして利用できるようなものはありませんでしょうか?

357 :
ListViewのAutoArrange切って自前で配置すれば行けるような気もするけどどうだろ。

358 :
WPFなら既存のコンポーネントを使うまでもなく一瞬でできる

359 :
どうやんのそれ

360 :
>>359
http://ideone.com/zKXvF
カレントディレクトリの画像の水平リスト表示

361 :
>>360
ほう
随分シンプルになるね

362 :
ttp://msdn.microsoft.com/ja-jp/library/ms734785(v=vs.90)
上のページで説明されている、
「If ステートメントの true 分岐部で、結果の TextBox コントロールから Invoke メソッドを呼び出します。その際、WorkflowCompletedEventArgs 型の新しいジェネリック EventHandler、workflowRuntime.WorkflowCompleted を渡します。
イベント ハンドラへのパラメータとして、sender および e ローカル変数を渡します。」
という部分では実際にどのようなコードを書けば良いのかわかりません。
どなたか教えて頂けないでしょうか。よろしくお願いします。

363 :
WFってAsyncがあれば不要じゃね

364 :
>>363
会社で上からやれって言われまして。。
今までJavaだったもので、チュートリアルですら何言ってるのかわからない有様です。

365 :
それでなんでいきなりWFなんだw
Javaが使えるならC#の文法は使いながら慣れればいいから、本屋でVisual C#の入門書を買ってこい

366 :
>>365
シェアポイントとWF使って業務系のアプリ作るんだそうです。
C#やってる人に聞いてみたのですが、>>362の内容分からないって言うんですよね。。

367 :
どういうことか知らんが英語版に切り替えたらその部分のコードが表示されたぞ

368 :
>>367
ありがとうございます!!英語版に切り替えるというTipsを頂きました。

369 :
Control..::..ControlCollection Controls

..::..
ってどういう意味ですかね?

370 :
内部クラスだとMSDNではなぜかそうなってるがC#でそう書けるわけではない
内部クラスを区別したいときは Control+ControlCollection のように
ドットの代わりにプラスで区切る方が普通だと思う

371 :
>>357 >>360
返事が遅れてすみません.
後者のListBoxを使ったやり方で結構いい感じに出来ました!
後はD&Dを実装してみることにします.
どうもありがとうございました!

372 :
昨日、MOBについて確認をしていて、以下の通りだと考えました
もし間違っている点があったら指摘していただけませんか?
@StreamWriter(Name, false, Encoding.xxx)、AEncoding.xxx.GetBytes()、BEncoding.xxx.GetString()
と共通の「Encoding.xxx」があったとして、UTF8などBOMが付く可能性があるEncodingの扱いは
A.「Encoding.xxx」が「UTF8Encoding」の場合、@BOMあり、ABOMなし、BBOMなし
B.「Encoding.xxx」が「UTF8Encoding(true)」の場合、@BOMあり、ABOMなし、BBOMなし
C.「Encoding.xxx」が「UTF8Encoding(false)」の場合、@BOMなし、ABOMなし、BBOMなし
となり、@はBOMの有無を選択できるが、A、Bは常にBOMが付与されない
てっきりEncoding.xxx.GetString()は選択できるものかと思っていたら、違ってました

373 :
× 昨日、MOBについて確認をしていて、以下の通りだと考えました
○ 昨日、BOMについて確認をしていて、以下の通りだと考えました

374 :
確認したなら合ってるんじゃないの

375 :
BOM自体UTF16用のコンテナフォーマットで、プレーンテキストだとは思えない。
だからファイル保存に用いるWriterだけがそれを意識するで違和感は無いけどね。
>てっきりEncoding.xxx.GetString()は〜〜
GetStringで返却されるものは文字列オブジェクトだよ。
しかもその内部形式はUTF16LEを元にしているはず。
ちなみにUTF8だと基本BOM不要。

376 :
WPFでListBoxを作るときに,ItemsPanelTemplateにStackPanelを指定することで横方向に要素を並べることはできました.
ですが今やっている方法だとXAMLで指定した数しか使えないため,例えばボタンを押すとListBoxが増えていくといったことができません.
この場合どのようにやれば良いのでしょうか?
ListBoxと横方向のStackPanelを作ることはできたのですが,コード上でどのようにこの2つを関連づければいいのかがどうしてもわからなくて…

377 :
動的に増えるものはコードで書くしかないんじゃないのかな?

378 :
>>377
はい,なので今はボタンを押したらコードが動いて横方向のListBoxを作る,といった事をやろうとしています.
ですがXAMLで横方向のListBoxを作る方法しか知らず,コードでどのように作ればいいのかがよく解りません…
XAMLだと
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Height="{Binding PhotoListBox.Height}" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
でいけるのですが…

379 :
XAML
http://ideone.com/T6pIf
cs
http://ideone.com/fwfcg

380 :
>>379
ありがとうございます,追加の方法はわかりました.
ただ,今 >>360 さんの http://ideone.com/zKXvF のように,画像を横方向に並べたいと思っています.
ですがListBoxは初期状態では縦方向に追加されていってしまうので,
コード上で作ったListBoxも横方向に並べることはできたりしませんでしょうか?

381 :
>>380
できるよ
WPFの場合カスタムクラス作り放題でそういう細かいところの情報がよくわからないので
いれられなかっただけなんだけどね
テンプレート作っておけばインスタンス作って所定の親の配下に入れる前に適応すれば
同じような物が作れるよ

382 :
>>381
なるほど…とりあえず不可能ではないのですね.
テンプレートについてよく解ってないので,その辺を中心に勉強してみます.
どうもありがとうございました.

383 :
>>382
まずは>>380を参考にしてるのならテンプレートとかを分離して
リソース化することだね
最近触ってないのでうまくまとめて上げられないけど

384 :
カスタムコントロールを作った方が簡単だと思うよ
>>360のルート要素と基底クラスをUserControlに変更するだけ

385 :
>>383
ありがとうございます!
リソース化する,という方法があることを知って思い通りになりました!
<Window.Resources>
  <ItemsPanelTemplate x:Key="HorizontalPanel">
    <StackPanel Orientation="Horizontal" Height="{Binding PhotoListBox.Height}" />
  </ItemsPanelTemplate>
</Window.Resources>
ListBox lb = new ListBox();
lb.ItemsPanel = (ItemsPanelTemplate)this.Resources["HorizontalPanel"];

>>384
ありがとうございます.
ですがすみません,カスタムコントロールとかは全く知らなかったので活かせませんでした…精進します.

386 :
Rijndaelmanagedを使って暗号化を試みています
CipherMode列挙体がCBC他の時には問題なく暗号化が出来るのですが、CTSとOFBの時にはエラーになります
エラー「指定された cipher モードは、このアルゴリズムには有効ではありません。」
RijndaelManaged RM = new RijndaelManaged();
として、CTSはRM.Mode指定時に、OFBはRM.CreateEncryptor()生成時にエラーが発生します
モードにこだわりはないのでCBCを使えば良いのですが、調べてみてもRijndaelmanagedでCTS、OFB使えないという事例がなく、何かミスがあるのではないかと気になっています
もし思い当たることがあれば教えて下さい
RijndaelManaged RM = new RijndaelManaged();
//ブロックサイズ
RM.BlockSize = 128;
//キー最大長 ※事前に128、192、256から選択
RM.KeySize = Cipher_Rijndael_Size;
//CBCモード ※事前に各モードから選択
RM.Mode = Cipher_Rijndael_Mode;
//パディングモード
RM.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
//初期化ベクトルの設定と取得(ブロックサイズと同サイズ=128bit)
RM.GenerateIV();
byte[] bytesIV = RM.IV;
//処理済みパスワードをセット
RM.Key = Cipher_Rijndael_Key;
//暗号化オブジェクトの作成
ICryptoTransform encrypt = RM.CreateEncryptor();

387 :
WPFで好きなタイミングで画面全体のスクリーンショットを取って保存しようとしています.
やたたいことは普通のC#で書くとこんな感じなんですが,WPFだとScreenやCopyFromScreenが使えません.
string take_screenshot()
{
Rectangle rect = Screen.PrimaryScreen.Bounds;
Bitmap bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmp))
{
g.CopyFromScreen(rect.X, rect.Y, 0, 0, rect.Size, CopyPixelOperation.SourceCopy);
}
DateTime time = DateTime.Now;
long now = time.ToFileTimeUtc();
string filename = now.ToString() + ".png";
string filepath = screenshot_folder + "\\" + filename;
bmp.Save(filepath, ImageFormat.Png);
return filename;
}

一応SendKeysで取る方法はあったのですが,キーイベントを使わない方法を探しています.
http://www.ipentec.com/document/document.aspx?page=csharp-wpf-screen-capture-sendkey-winform
このページのCopyFromScreenメソッドを用いる方法も,上のコードと同じ理由で動きません.
どなたか他の方法をご存じの方はいらっしゃいませんでしょうか?

388 :
System.Windows.Forms.dllとSystem.Drawing.dllを参照すれば
WinFormのときのコードでいけるよ

389 :
WPFのウィンドウ内のスクリーンショットを撮るのであればRenderTargetBitmapでできるけど
画面全体はWPF全然関係ないな
そもそもそんなもんWPF使って作る必要あるのかと

390 :
>>388
動きました、ありがとうございます!
>>389
元々WPFで作っていて、そこに全体をキャプチャする機能をつけようとして詰まっていました。
私の説明がはしょりすぎでしたね、すみませんでした。

391 :
ウィンドウ上のボタンを押すと,
ウィンドウが消える→処理実行→ウィンドウが元に戻る
といった動作をしたいと思っています.
そこでこのようなコードを書いてみたのですが,それぞれ独立に動かすと上手くいきますが,
上記のように一連の流れにすると上手くいきません.
public void window_visible()
{
Visibility = System.Windows.Visibility.Visible;
WindowState = System.Windows.WindowState.Normal;
}
public void window_close()
{
//ウィンドウを非可視にする
Visibility = System.Windows.Visibility.Collapsed;
}
public void play()
{
window_close();
      長い処理
window_visible();
}
おそらくは非表示にしても,こちらの処理中なのでウィンドウの再描画が行われないのが原因ではないかと思っているのですが,
再描画をするにはどのようにすれば良いのでしょうか?
window_close()の後にShow()を実行してみましたが最終的に非表示になってしまい,処理中に非表示にはなってくれませんでした…

392 :
これWinFormじゃないよね
WPF?

393 :
window_close();
Task task = Task.Factory.StartNew(長い処理);
task.ContinueWith(_task => this.Dispatcher.Invoke((Action)this.window_visible));
こんな感じ?
.NET 3.5までならBackgroundWorkerで

394 :
>>392
はい,WPFでした.
>>393
動きました,ありがとうございます.
C#だと別スレッドで動かすのはこんなに簡単なんですね.

395 :
Listboxの要素をウィンドウ外にD&Dすると削除するようなコードを書こうとしています.
D&D自体のコードはこちらを参考にしており,同じウィンドウ内の別のListboxへは問題無くD&Dできています.
http://main.tinyjoker.net/Tech/CSharp/WPF/ListBox%A4%CE%A5%A2%A5%A4%A5%C6%A5%E0%A4%F2%C8%BE%C6%A9%CC%C0%A5%B4%A1%BC%A5%B9%A5%C8%A4%C4%A4%AD%A5%C9%A5%E9%A5%C3%A5%B0%A5%A2%A5%F3%A5%C9%A5%C9%A5%ED%A5%C3%A5%D7%A4%C7%CA%C2%A4%D9%C2%D8%A4%A8%A4%EB.html
古いですが似たような事をしようとしていた人がいましたが
http://oshiete.goo.ne.jp/qa/2668253.html
ウィンドウ外でドロップしてもe.ActionがDropになりません.
Continueは出続けているのですが,ドロップしたときのイベントが取れていないようです.
ドロップしようとしてもマウスカーソルが道路標識の通行止めマークになるので,それが原因だと思うのですが…
どなたか解決方法をご存じの方はお教え下さい.

396 :
無理

397 :
マウスカーソルの移動をピクチャーボックス内に制限したいんですけど
Cursor.Clip = pictureBox1.Bounds;
としても、ピクチャーボックスのクライアント領域とは全然違う領域に
制限されてしまうんですけどどうしてですか?
ちなみに、Cursor.Clip = this.Bounds;
とすると、ちゃんとピクチャーボックスがのっているフォーム内に
きっちりと移動が制限されます。
Cursor.Clip = pictureBox1.ClientRectangle;
としてみても駄目でした。

398 :
>>397
スクリーン座標

399 :
>>396
無理ですか…
D&Dが開始されたけどドロップできる要素にドロップされずに終了した事を検知できればいけると思ったんですが,
やっぱり無理なんですね…

400 :
自己解決しました.
>>399 の観点で探したら
DragDrop.DoDragDropの戻り値がドロップ失敗した時にDragDropEffects.Noneとなるので,
それを判定して処理すれば良かったようです.


401 :
テキストファイルの中身をそのままstring型の変数に代入するにはどうやればいいですか
第二表示.txt
というテキストファイルのテキストをそのままstring型変数にいれたいんだけど。

402 :
File.ReadAllText

403 :
402
ありがとう

404 :
404 Not Found

405 :
DGVだけの画面があって、
DGVはセルの大きさに応じてサイズが変わるようにしてあるんですが、
肝心の画面サイズがデフォルトのままで困っています。
AutoSizeプロパティをtrueにするだけでは不十分なんでしょうか・・・

406 :
DGV.Dock = Fill;
って話?

407 :
いえ、
例えばDGVのサイズが(100,50)の時にFormをロードしたらFormサイズは(100以上、50以上)となり、
(200,100)の時は(200以上、50以上)となるような設定をしたいと考えています。
FormのサイズプロパティにDGVのHeightとWidthを当てようとしたのですが、エラーとなってしまいました

408 :
dgvはAnchor=Top|Left
Dock=None
FormはAutoSize=True
それだけ

409 :
でも"以上"の部分によるから晒してみれば?

410 :
http://itpro.nikkeibp.co.jp/members/NSW/ITBASIC/20050427/160243/
このサイトを参考にして作業を進めているのですが表示させる絵柄は
どこにどのようにして用意すればいいのでしょうか?

411 :
sage忘れすみません。

412 :
以前似たようなカード欲しい人が居たので作ったのがあった
http://www.dotup.org/uploda/www.dotup.org3257846.zip.html
著作権フリーつーか絵カードの中味は用意してないので
欲しければカードを出力するソースもあるよ

413 :
VS2003にトランプ画像なんて付いてたんだ。
サンプル用かな?知らなかった。
>>412
準備良すぎだろw

414 :
>>>410
プロジェクト作って貼り付けて実行すればOK
http://ideone.com/JvCiv

415 :
>>412 >>414
亀ですがありがとうございます。
そして>>414のプログラムが何がなんだかわからないです・・・
実行したらフォームが表示されるだけでデスクトップに空のファイルができてたのでそこに画像入れればいいんですかね?

416 :
しまった
LoadとShownはデザイナから先に追加しておかないと駄目なんだな
じゃあこれで。こっちはプロジェクト作って貼り付ければOK
http://ideone.com/Z2WDG

417 :
ユーザーコントロールを作っているのですが、
TableLayoutPanelの GetRowHeightsとGetColumnWidths が
'System.Windows.Forms.TableLayoutPanel' に 'GetColumnWidth' の定義が含まれておらず、型 'System.Windows.Forms.TableLayoutPanel' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
というエラーになります。
Windows 7 professional
Visual Studio 2010 professional
.NET Framework Client Profile 4
でやってます。
using System.Windows.Forms;
も入ってます。
どうしたら、このメソッドが使えますか?
使えないなら使えないで、こんな糞みたいなメソッドじゃない、クールな方法はありませんか?


418 :
糞みたいなメソッド
じゃなくて
糞みたいなコード
書いてるんじゃないの?

419 :
ま、ソース見ないと分からんね

420 :
すいません。s が抜けてました。

421 :
これが間違ってないとすれば書いてるコードがおかしいとしかいえない
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.tablelayoutpanel.getcolumnwidths.aspx
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.tablelayoutpanel.getrowheights.aspx

422 :
プロジェクトの形式でクラスライブラリを選んでて、アセンブリ追加していないとか

423 :
>>418
正解w

424 :
はじめまして。
C#のTimer使ってピクチャーボックスを表示したり非表示にしたりってどう書いたらいいんでしょうか?
モグラ叩きみたいのにしたいんでできれば表示する場合はランダムにしたいです。

425 :
>>424
コピペすればそのまま動くと思う
http://ideone.com/fjYPG
部分的に未完成

426 :
libmp4v2.dll をVC#で使っている方おりますでしょうか?
http://code.google.com/p/mp4v2/downloads/detail?name=mp4v2-r479-windows-binaries.zip&can=1&q=
ここを参考にしているのですが、MP4Readの段階でPInvokeStackImbalanceを出すので
難儀しております。。
http://social.msdn.microsoft.com/Forums/en-US/clr/thread/d8197416-0447-4e3a-a159-004d20a92f30

427 :
しょっぱなじゃねえか
dllの呼び出し規約がcdeclなんじゃないの

428 :
なぜコードを晒さないんだろうな・・・

429 :
こういう似たような条件同士のif文があったとして
.if(strChinko == "黒" || strChinko == "白"){
.  MessageBox.Show("Good!");
.}
こういう風に省略して書く方法がC#にはありますか?
.if(strChinko == "黒" "白"){
.  MessageBox.Show("Good!");
.}

430 :
ない
if (new[] { "黒", "白"}.Contains(strChinko))
というのもあるが、数個くらいなら普通に||で並べろ

431 :
>>429
ifじゃないけど
http://ideone.com/UqFEn

432 :
bool isChinko() {
 if (strChinko == "黒") return true;
 if (strChinko == "白") return true;
 return false;
}
if(isChinko()){
 MessageBox.Show("Good!");
}
が正解

433 :
>>432
そ、そうなのか

434 :
そりゃそうよ

435 :
>>432
その
if (strChinko == "黒") return true;
if (strChinko == "白") return true;
のところを
こういう風に省略して書く方法がC#にはありますか?
if (strChinko == "黒" "白") return true;

436 :
ないよ。

437 :
無いから代わりの方法だしてるのに理解してなくてワロタ

438 :
>>432-437
ありがとうございます、普通に記述します(´・ω・`)

439 :
machigaemasita
>>430-437
ありがとうございます、普通に記述します(´・ω・`)

440 :
なあ、みんな仕事以外でどんなのプログラミングしているの?
大抵のものは既に存在するし、作ってみようってお題がないんだが・・・

441 :
大抵の物はあるから模倣するのが勉強になるんじゃないか
その中でいろいろ学べて新しく吸収したことでもっと違う物を作ってみるかとなるかもしれない

442 :
なるほど、手始めに既存の小物ツールをオシャレGUIにしてみるかな

443 :
結局のところ自分の引き出しをいかに増やすかだな

444 :
やっぱり3Dのゲームでしょ
普通のITドカタならやらないから

445 :
プラットフォーム初、を狙え
Win8向けに、利用者の多いWebサービスの非公式クライアントを作ってストアに一番乗りしろ
Win8がコケようが一番乗りできれば一定数は確実に売れる

446 :
助けてください、エスパー向けの質問で失礼しますが助けてください
ファイルを読み込んでbyte配列に変換して編集して出力したいんですが、
編集していない個所まで書き換わってしまいます。
エンコードミスでしょうか?どうすれば元の文字コードで出力できるのでしょうか?
それともStreamReaderじゃあ元のデータを維持したまま読み込む子尾はできないのでしょうか?
もうわけがわからんです
■ソース
ttp://ideone.com/2jeTL
■Projectファイル
ttp://www.rupan.net/uploader/download/1347515489.zip

447 :
Project間違えました
■Projectファイル
ttp://www.rupan.net/uploader/download/1347516224.zip

448 :
>byte[] data = Encoding.GetEncoding("Shift_JIS").GetBytes(text);
これが原因じゃないの?
> StreamReader ss = new StreamReader(path, Encoding.GetEncoding("Shift_JIS"));
> string text = ss.ReadToEnd();
> ss.Close();
この段階ではShift-JISから.netの内部で使ってるUSC-2に変換されてる
それをまたshift-JISのデータが入ってるように指定してbyte配列に変換して
書き換えて、shift-JISで保存すれば壊れても当たり前のような気も
つーかtextboxでも貼り付けて細かい中味を見てみろよ

449 :
途中で文字として扱う必要がないならStreamReader/StreamWriter使う意味なくね?
// っていうと「いや実際には……」って返ってきそうな薬罐

450 :
これでOK
http://ideone.com/1ByPj

451 :
>>448-450
ありがとうございますありがとうございます( _ _)
これで前に進めます

452 :
Formアプリケーションでこういうのやりたいんだが、専用のコントロールある?
http://www.atmarkit.co.jp/fdotnet/dotnettips/595aspajaxcollapspnl/aspajaxcollapspnl.html

453 :
無かったような
こんな感じで作れる・・・けど良く考えるとwebページみたいに開閉するたびに
ページコンテンツが移動していいの?
その辺がよくわからないのでこのパターンにしてみた
http://ideone.com/RgKVD

454 :
>>453
コードまでありがとう
SplitContainer良さそうだね
今回は開閉に合わせて他のコントロール含めForm全体の高さも
変えようと思ってるんで、これを参考に作ってみまつ

455 :
てs

456 :
遊び終わったゲームは秋葉原のフレンズで売ろう!
http://gameshop.ocnk.net/
・Webに掲載された買取価格は釣り(どんなに美品でも半額が最高)
・内訳出さない(ソフトに小さい値札を貼るだけ、査定終わったら剥がされる 簡単に証拠は残さないYO!)
・当然、引換証も出さない
その代わりメモ用紙に「○○円 受け取りました 住所+氏名」と書かせる なにそれ?マジで意味わからん・・
・売買成立してないのに身分証明を要求、査定前にコピーして口封じを図る
飲み会のネタが確実に一つ増えますよ(^^
> 201 :なまえをいれてください:2008/09/26(金) 04:34:08 ID:eWPbQdE2
> アキバ行って査定
> PS 学校であった怖い話S(帯無、美品)
>
> web買取価格表
> フレンズ 9000円
>
> フレンズ
> 査定500円
> 俺「webと随分違いますね」
> アホ面店員「美品での買取価格なので」
> じゃ、”ソフトのみ” ”完品” ”美品+α” に 分ける必要あんの?
> 俺の美品が完品にすらならんの?
> 2ちゃんで半額とか当たり前とか聞いてまさかと思ったが、半額どころじゃなかったよ
> それでも客が売りにくる不思議はあるがな。断れない気の弱い客狙いなのかね
> どこをどうすると500円という金額が出てくるんですかね?Rならぶん殴られてるわ
> 他にも10本程度持ってったが全部webの1割程度かそれ以下
> さすがにあきれて言葉も返せさなかったわ、よく訴えられないねこの店

457 :
winAPIのULONG_PTRって型をC#で定義するときはIntPtrでいいのかな
名前的にオーバーフローしそうな気がするんだけど問題ない?
UIntPtrってのもあるけどこっちのがいいのかな

458 :
IntPtrで問題ない

459 :
不安ならtypedefしているところを確認したまえ
http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx
#if defined(_WIN64)
 typedef unsigned __int64 ULONG_PTR;
#else
 typedef unsigned long ULONG_PTR;
#endif

460 :
signedかunsignedかということなら
UIntPtrは使わないよな

461 :
え?

462 :
え?じゃなくて。
使う場面ないっしょ

463 :
windows7 64bit VS2010
UIntPtr up = new UIntPtr();
up = (UIntPtr)uint.MaxValue; // 通る
up = (UIntPtr)ulong.MaxValue; // x64向けビルドは通る
IntPtr p = new IntPtr();
p = (IntPtr)uint.MaxValue; // x64向けビルドは通る
//p = (IntPtr)ulong.MaxValue; // コンパイルエラー
>>459見るとULONG_PTRは32/64bit符号なし整数だから
やっぱり値によってはオーバーフローするように思えるんだけど…
何か勘違いしてたら指摘お願いします

464 :
>>463
UIntPtrもIntPtrも実体はアドレスが入る入れ物だからx86かx64でのみ長さが変わる
X86ならIntPtrもUIntptrも64bitだが、x86なら両方とも32bit
詳しく調べないといけないけど、落ちる理由は全然別だと思うよ

465 :
ULONG_PTR Method();
というCのコードがあったとして
C#でP/Invokeするときに
[DllImport...]
extern IntPtr Method();
と宣言しても
[DllImport...]
extern UIntPtr Method();
と宣言してもどっちでも使えるよってこと
>>463は.netの世界でのエラーの話だろ
int i = (int)uint.MaxValuel;
がコンパイルエラー出すのと同じ
Cで書かれたMethod()が0xFFFFFFFFFFFFFFFFを返してきた場合を考えてみても
ビット列としては同一で、IntPtrなら-1になるだけの話
UIntPtrを使う場面ないっしょというのは、intとuintを混在させて使うメリットないというのと同じ意味っす

466 :
>>465
>Cで書かれたMethod()が0xFFFFFFFFFFFFFFFFを返してきた場合を考えてみても
>ビット列としては同一で、IntPtrなら-1になるだけの話
いやだから、返ってくるのはポインターだからアドレス値。IntptrでもUIntptrでもUnsignedだよ
違いはそのアドレスが指し示す場所にあるデータがsignedかunsignedって違いだけ

467 :
ちょっと何言ってるか分からないです

468 :
IntPtrに-1は入るけど、UIntPtrには入らないのはなんか関係あんの?

469 :
頭のUの意味を考えれば・・・

470 :
IntPtrもUIntPtrターゲットが同じならbit幅は同じ
同じbit幅の中で表現できる情報は限られててどう表現するか
UなしのIntPtrは補数表現込み
UありのIntPtrは補数表現なし

471 :
いや、なぜハッキリ「符号に意味がないんだよ」ってことを言わないのかなと思って

472 :
>>466
 typedef unsigned __int64 ULONG_PTR;
 typedef unsigned long ULONG_PTR;
何言ってるんだかちょっとわからないです。

473 :
絶対アドレスだけを扱うなら符号なしでもいいけど
相対アドレスも考慮するとあるアドレスからマイナスの番地は必要だよ

474 :
>>473
ポインタ同士の加算はできないから不要だよ

475 :
相対アドレスはオフセットであってマイナスの番地とは意味が違うっす

476 :
必要ないけどIntがあってUIntが無いのはなんかキモイから追加した
みたいなことがMSDNには書いてあるね

477 :
>>476
まあその程度だよね
なんでわざわざもめてるのかよくわからんかった

478 :
IntPtr p = (IntPtr)0x7FFFFFFF;
p = IntPtr.Add(ppp, 1);
pはいくらでしょうか

479 :
ppp
どこから出てきたの?

480 :
そこはコピペに失敗したのでppp->pと読み替えてください

481 :
>>478
それは実装によるんじゃないの?
一番下層のx86の仕組に依存するのかその上の方で判断してるのかしらんけど

482 :
なんとなくわかってきた
.netで呼び出す過程では、変数のサイズさえあってれば
(符号無視して)そのままのビット列で返ってくることでいいのか

483 :
うん
オーバーフローするかもしれないが別にそんなことに意味はない

484 :
例えば、
enum animal { cat, dog, mouse };
...
Console.WriteLine(animal.cat);
で、 cat が出力されますが、これって意味があるのでしょうか?
animal.cat としている段階でcatの存在は自覚しているはずで
cat を出力したければ、Console.WriteLine("cat"); などとすればよいと思うのですが。。。
もしくは、animal.cat として cat を求めなければならない
理由や状況などがあれば教えていただきたいのです。

485 :
禅問答か何か?
どうあるべきが自分の中では正解だと思ってるの?

486 :
//Console.WriteLine(animal.cat);
こうすりゃいい

487 :
>>484
例えばだけど、コンボボックスでanimal型を選択できるようにしておいて
ユーザーが何を選択したかによって動作を変える場合とか
animal someAnimal = animal.cat; // ここにユーザーが選択した値が入ってくるとして
Console.WriteLine("{0}が選択されました", someAnimal);
if (someAnimal == animal.cat) {
...
あとよくあるのはメソッドの引数でオプション指定するような使い方
例えばFile.Open関数の第二引数は列挙体になってる
File.Open(string, FileMode);
それから列挙体の名前は一般的に大文字でスタートさせるのが慣習なんで注意しましょう

488 :
例えば、
enum animal { cat, dog, mouse };
...
Console.WriteLine(animal.cat);
で、 cat が出力されますが、これって意味があるのでしょうか?
animal.cat としている段階でcatの存在は自覚しているはずで
cat を出力したければ、Console.WriteLine("cat"); などとすればよいと思うのですが。。。
もしくは、animal.cat として cat を求めなければならない
理由や状況などがあれば教えていただきたいのです。

489 :
すいません誤爆しました。
ありがとうございました。

490 :
実行ファイルをリソースに埋め込むことは可能でしょうか?

491 :
実行ファイルをリソースに埋め込むことは可能でしょうか?

492 :
リソースへのストリーム開いてbyte配列に読み込んでAssembly.Load(byte[])

493 :
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね 
ソウカ
死・ね 
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね
ソウカ
死・ね 
ソウカ
死・ね

494 :
参照の追加でuser32.dllなどのwinapiライブラリを追加できないでしょうか

495 :
>>494
これじゃだめなの?
http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32api.html

496 :
こういうのもある
WindowsR API Code Pack for MicrosoftR .NET Framework
http://archive.msdn.microsoft.com/WindowsAPICodePack

497 :
http://ideone.com/Xqxm3
ボタン1を押すとエラーになりますが、ボタン2はエラーになりません
初心者の直感ではボタン1のAddControl行とWriteLine行で実行される引数は同じものなので
問題なく動きそうな気がしますが、何が問題なのでしょうか?

498 :
Select呼び出した時点ではまだその中に記述したデリゲートは実行されていない
foreachした時点で初めて実行される
もちろん二回foreachしたらそれぞれ別々に実行される

499 :
>>498
Controlのハッシュコード見て納得しました。両者の引数の中身は別々のものだったんですね
ありがとうございます

500 :
フォント変えるたびにサイズだのMarginだのUIがグダグダになるんだけどフォントだけ変えられないの?

501 :
無理です

502 :
AutoScaleModeをFontじゃくすればおk

503 :
>>502
ありがと

504 :
AutoHotKey、C、C++、C#、1から覚えるならどれがよいでしょうか?

505 :
>>504
何がしたいのかによる
手っ取り早くGUIアプリ作りたいならC#

506 :
C、C++を使わなければならない場面って
どんな時が想定されるのでしょうか?

507 :
C#が気に入らないとき

508 :
C#が気に入らないときって
どんなときなのでしょうか?

509 :
所詮は道具なのに自分の存在価値がC++を信望する
ことにあるように思い込んでるオールドグラマーのプライドが傷ついたとき
所詮は道具

510 :
>>506
速度が必要なときとかドライバ開発するときとか

511 :
C++の名前空間がついた関数をC#から呼ぶ方法ってありますか?
C++
namespace std
{
dllexport void hello{}
};
C#
class Test{
[DllImport("Hello.dll")]
public static extern void std::hello();
}

512 :
ありまっせん

513 :
C++/CLI でバイパス関数を作るとか?

514 :
dumpbin /exportsでエクスポートされてる名前調べて
DllImportのEntryPointに指定する
@とか色々ついてるの全部な

515 :
みなさんマイクロソフトのVC#2010お使いですか?
時期バージョンではメトロアプリケーションしか作れないって本当ですか?

516 :
とっくに2012出てるし普通のアプリケーションも作れるfor Desktopもあります
しかしVistaでは動きませんwwwwwwwww

517 :
>>516
無償版出てるんですか?

518 :
2012あったんかVistaの俺オワタwwwwwwwww

519 :
嘘です。

520 :
VisualStudio 2010で
VisualStudioのプロパティ設定画面のような入力を実現したいのですが
1. そーゆーフォームってありますか?
2. サンプルが載っているようなサイトがあったら教えてください。
プロパティ  設定値
位置        5 , 80
サイズ      20 , 50
色          ■ ←赤く表示されてる
背景色       □ ←白く表示されてる
みたいなやつです。

521 :
Win7でしか動かない機能があるからVista駄目って名目だけどホンマかいな

522 :
Win8って売れるのかあれ?

523 :
あれだけ安ければ売れるだろ

524 :
>>520
http://dobon.net/vb/dotnet/control/propertygrid.html

525 :
ドボンすげー

526 :
>>524
PropertyGridコントロールっていうのですね。
ありがとうございます。助かりました。

527 :
ILSpy使ってみたのですが

base..ctor();

こんなのがでてきます
なんですか、これは?

528 :
基底クラスのコンストラクタ呼び出し
.ctor:コンストラクタ
.cctor:静的コンストラクタ
.dtor:ファイナライザ

529 :
ありがとうございます
なんでそんなものがでてくるのかわかりませんが、コンパイル通らないので削っておきました

530 :
C#の絵本買って読んでみてるけど
まったく頭に入らない。プログラムは難しいね

531 :
なんだってェ・・・?

532 :
>>529

533 :
>>529
!?

534 :
どういうことなん

535 :
ILSpy使ってる時点でコンパイルは済んでいるはずだが……

536 :
ILSpy使ったことない人たち乙
使ってみればわかるよ

537 :
一応言っておくけど
クラッキングに関する話題はローカルルールで禁止のはずだから
その辺弁えてね
違うなら別に良いけど

538 :
べ……弁えてね……

539 :
べんべん

540 :
その位わきまえろよ

541 :
逆コンパイル防止とかできますか?

542 :
無理

543 :
動作する以上、逆コンパイル自体の防止なんてネイティブでも不可能だけど
読みづらくして逆コンパイルした奴にやる気を無くさせることはできる
お前の作ったカスをわざわざ手間かけて解読しようなんて酔狂はいないから極めて有効

544 :
C#は将来性のある言語でしょうか?

545 :2012/11/02
スマホ向けクロスプラットフォーム開発では圧倒的トップシェアなんだっけ
TOP カテ一覧 スレ一覧 2ch元 削除依頼
JetAudio Part8 (976)
SopCast/NIJI Part7 (510)
Giveaway of the Dayについて 5Days (400)
Giveaway of the Dayについて 5Days (400)
【DC】 Dreamcast総合スレッド26nd 【EMU】 (560)
Mozilla Firefox 非公式ビルド(MOD)スレッド13 (474)
--log9.info------------------
あぼーん (758)
35歳のプログラマ志望なんですが・・ (819)
ふざけた変数名を使う奴 (697)
基本情報技術者試験 (426)
組み込みプログラマー雑談スレッド その23 (811)
◆◆ とんずら・バックレ 劇場 4幕 ◆◆ (904)
amachang撲滅振興協議会 (496)
プログラマーをマジギレさせる言動 2 (267)
◆個人事業主(フリーランサー)専門スレ38本目◆ (594)
【MS】DreamSpark総合スレ【開発ソフト無料】 (851)
【GNU】アンチGPLなプログラマ3【汚染対策】 (879)
プログラマーはアニメをみよう! 5クール (464)
【禁じられた】ブラックな快楽【定時退社】 (598)
【政治】マ板ニュースオッチ Ver3【経済】 (265)
ブラック企業をリストアップしよう。 (592)
ユニシステム株式会社 (205)
--log55.com------------------
【MAZDA3】マツダ3 Vol.66【4代目アクセラ改め】
【TOYOTA】ヤリス/YARIS Part11【ヴィッツ後継】
【TOYOTA】GRヤリス/GR YARIS part15【WRC】
【HONDA】4代目フィット Part31【FIT】
【お買い得】中古車購入相談スレ/52台目
空自次期主力戦闘機考察スレ739
中国軍総合スレ37
韓国KFX次期ステルス戦闘機 Part21