ふらっとC#,C♯,C#(初心者用) Part65
立てて直ぐになんですが前スレにあったラムダ式の習得法がわかりません どういう時に必要なのかがイマイチ想像できないといいますか…… @ITなんか読んで概念と構文はわかるんですけど実際に自分で書いているときに使う機会が無い
あなたWPFスレで305名乗ってる人?
この板は初心者用のこのスレしか見てません……
とりあえず単純なループ処理の代わりにWhere、Select、FirstOrDefaultを意識して使ってみればいいんじゃね
Form1,Form2,Form3と3つフォームがある中で、それぞれがそれぞれに(それぞれのコンポーネントに)アクセスできるようにしたいのですが、 フォーム1に public partial class Form1 : Form { Form2 form2 = new Form2(); Form3 form3 = new Form3(); ・・・ と記述しました。 するとform2.textBox1.text=・・・と操作することができました。 しかし、フォーム2に public partial class Form2 : Form { Form1 form1 = new Form1(); Form3 form3 = new Form3(); ・・・ と記述しました。 するとForm1 form1 = new Form1();の行でSystem.StackOverflowExceptionの例外が発生します。 どうすればフォーム2から同じようにform1.textBox1.text=・・・などと操作できるようにすればいいのでしょうか?
まず public partial class Form1 : Form { public Form2 form2 = new Form2(this); public Form3 form3 = new Form3(this); としてForm2Form3をそれぞれ public partial class Form2 : Form { Form1 form1; public Form2(Form1 f1){ form1 = f1; } とすればいい Form2からForm1を参照する場合は単純に form1; Form2からForm3を参照する場合は form1.form3;
そりゃー当然だわな。 参照渡すようにしなよ。
>>9 Form1を生成する
Form2が生成される
Form1を生成する
以下繰り返し
無限ループって怖くね?
でもコントロール作りすぎでWindowsのエラーとかじゃなくてスタックオーバーフローのほうが先なんだな 意外
15 :
デフォルトの名無しさん :2010/11/09(火) 22:57:57
そりやまそうだろう
そりゃそうだな
18 :
17 :2010/11/09(火) 23:04:04
リロードしてなかったよ・・・。 ,,,_ _ァュ,,..__ ィチュ::ミミ:.:三彡:.:: :.:.:ヽ /::彡'':.: :.::/:.:{{.::r‐‐ ::_:.: :.:..、 ,ィ/:.: /:..: ::{{:..川||::! ヾ::;;:、 ,ィ:.: ::.: /:. ::川:.:ヾ:.:.!{:: ヽ::! ///:.: :.:.:||ll: :.: .::.:.:ヾ::.::.i ':! !:|:.:::ミ:: :.;;;川:.: :.:巛、ヾ::! 、 l ゙::ミミh::. :;:.::||l|:.:: :.}}::!l {{ ヾ _,,...ィ r'' 、 ゙::ミミ:.: ::.;:.:ミミヾ:.: :.:| ヾ、 '´ , マ ヾ:: .:.:ミミ三 :.:州リリ _,,..rテ' ヽ ヾ::;ィ'´ ̄`''ヾ州! ,. ヽ ゙レ'⌒r ィ ,;;. .. .:' ,rィ ’ ヽ し :.: .. 、 ヽ ,,ハ`ー- ..ィ _,.. ィ ィ:::! \ ヽ. ィ{:::... /:::::! \ ` - ..__ 丿::::::ヽ /:::::::ヘ \ ` ーァ-一'::::.:::.:::.::.!ヽ /:::::.:..:::::::::ヽ \ リ::. :::.:.:.:.:::.:.:.:.::::!:::.::! 轌山相太郎 [そりやまそうだろう] (群馬.明治一九年〜昭和一七年)
>>10 ありがとうございます
public partial class Form1 : Form
{
public Form2 form2 = new Form2(this);
public Form3 form3 = new Form3(this);
のthisを消したらコンパイラを通って例外も起こりませんでした
実際動くようになったのですが、いまいち仕組みがよくわからないのです
できれば解説していただけないでしょうか?
こんないろはのいみたいな質問する前に入門サイトでも読んでこいよ
>>19 ほかの言語の経験は?
オブジェクト指向がよく分かってないような
>>19 そんなはずはない
Form2でform1.textBox1.text=・・・ってやると例外発生するはずだぞ
>>21 Delphiを少々やっていました
オブジェクト指向については参考書を読んでもよくわからず、「Aの中にB,C,D・・・と項目があってそれぞれを設定できる(A.B=○○・・・のような)」というような感じに受け止めていたのですが・・・
>>22 うわ確認不足でしたすいません
でもthis入れるとコンパイラ通らないんです
>>23 ていうかどうしてあんなことをしたいのかが問題だと思う
どうせ初心者にありがちな、面倒だからってことなんだろうけど
楽してコードを書けば書くほど複雑になるのがプログラムの難しいところ
>>25 Form2に若干ごみが混じってるwサーセン
>>25 動きました
ありがとうございます
とりあえず参考サイトや参考書を読み直してきます
すいませんでした
そもそもクラスの概念が分かってないような
C#で質問、ほかのアプリが最小化されているかどうか調べるためにはどうしたらいいでしょうか? IsIconicにハンドル渡して調べる以外ではないのでしょうか?よろしくおねがいいたします
30 :
デフォルトの名無しさん :2010/11/10(水) 12:40:41
その辺はwin32APIの話じゃないの?
flowLayoutPanel1.Controls.Add(pictureBox1); の後にflowLayoutPanel1からpictureBox1.Imageを変えることはできますか?
意味が不明・・・ パネルのイベントか何かでImageを変更するってことかな?
pictureBox1のインスタンスがわかれば問題ないよ
うまく説明しようと考えてたら自己解決しました flowLayoutPanel1にPictureBoxを入れていって後からflowLayoutPanel1の任意の場所にあるPictureBoxのImageを取得したり設定したくて flowLayoutPanel1.Controls[n].Image = img; こんな感じでやってたのですが PictureBox pb = (PictureBox)flowLayoutPanel1.Controls[n]; とキャストして取り出したらできました…すみません
FlowLayoutPanelを継承したクラスを作ってPictureBoxを 追加管理するメンバ関数を用意 それ経由でアクセスするようにすればいいんじゃね? で継承したクラスないでList<PictureBox>としてインスタンス管理とかさ
フォームのshow()、Hide()を使うのとVisible=true、Visible=false使うのって何か違いとかあるんですか?
ない Visibleプロパティにtrueとfalseを代入するだけのメソッド
そこでUIスレッド以外からの呼び出しですよ 関係ないか
WPFむずすぎワロタ Windows Formなら簡単にできることもWPFだとなにやっていいかわからんwww Windowsアプリの一番上のメニューバー追加しようと思ってもできねーし 「ファイル」「編集」「表示」「ヘルプ」とかのやつねwwww すべてのコモンWPFコントロールとかいうのからMENUはりつけてもできないしなにこれwwwwwwww
WinFormのときも最初はそんな感じのわけワカメだったはず
WPFは手間がかかるだけ コントロールの挙動も違うし、いらない機能もあるからそれを潰していかないといけない バインディングも面倒でプロパティで指定すればいいだけなのにものすごく手間 それでいて重いしメリットは1つもない オシャレなGUIを誰かに見せるわけでもなければ やる価値はまったくないと断言できる
まだWPFが「オシャレなGUI」とか言ってる人いるんだなw
public class Person { public string 名前{get;set;} public double 身長{get;set;} public string 好きな食べ物{get;set;} } public class Form1:Form { public ??? Persons=new ???(); //データグリッドに名前と身長を表示 //選択されたDataGridViewのセルの人物のtextBoxに好きな食べ物を表示 public void PersonsSave() { //Personsをセーブ } public void PersonsLoad() { //Personsにデータを読み込む } } この場合どんな型のPersonsにすればいいでしょうか? Personはユーザーの入力で増えたり減ったりします よろしくおねがいします
45 :
デフォルトの名無しさん :2010/11/11(木) 03:48:38
List<Person>でいいんじゃね?
List<Person>
foreach (Person p in Persons) { moviesDataGridView.Rows.Add(new string[]{p.名前,p.身長}); } その場合こういう感じで追加していくのでしょうか? 実はPersonクラス内のプロパティはもっと多いのですが・・・。 それと、DataGridViewの項目をユーザーに編集されたのを Personsに反映するにはどうすればいいですか? 変更されるたびに、新しくPersonsを作ってDataGridViewのデータを書き込むのでしょうか?
>>42 バインディングの素晴らしさを何一つ理解できていないようだw
>オシャレなGUI
ワロタ
47 初心者の質問のフリをしてBindingを啓蒙する作戦に見えてきた
>>50 それ見ましたけど、難しくて私には理解できませんでした
DataGridView.DataSourceにそのままPersonsを放り込んだら
簡単に表示してくれました。
しかも、DataGridViewでの編集がちゃんとソースにも反映された
これでできるのにINotifyPropertyChangedを使う理由はなんですか?
それとXmlSerializerでもそのままPersonsのデータを出力できました
Loadのやり方は今調べているところです
http://msdn.microsoft.com/ja-jp/library/swxzdhc0.aspx ここではList<T>型はXmlSerializerでは扱えませんと書いているのにどうして?
ソース → ターゲット ソースの変更をターゲットに更新させるにはソース側のOnPropertyChangedが必要。 ターゲット → ソース (TwoWay, OneWayToSource) ターゲットの変更をソースに更新させるのは気にしなくていい。
なるほど逆は試していませんでした
うーん、データバインドに関してはWPFの方が楽そうですね
DataSouceにそのまま放り込むとプロパティ全部リストアップされる
例えば、
>>44 の好きな食べ物プロパティも項目に追加される
一部だけをバインドするようにできるのかもしれないけど・・・やり方がわからない
でもWPFはスクロールが遅いらしいからなー
まだ試してないけど1万行ぐらいのデータ扱いたいんだけど無理かな
>>51 > ここではList<T>型はXmlSerializerでは扱えませんと書いているのにどうして?
そんなこと書いてない
List<T>の配列って書いてるだろう
object[] obj=new object[]{ List<T>,List<T>,List<T>,List<T>} こういうこと?
56 :
831 :2010/11/11(木) 06:42:08
>>53 デザイナーでdataGridViewのDataSourceプロパティをPerson型に指定してやるとカラムが自動定義される
あとはColmunsプロパティから表示したくないやつを非表示にすればいい
名前が残ってたw
>>53 WPFのDataGridが糞だからやめた方が良い、らしい。
WPF慣れると快適だよ。いまいち重いのが難だけど。
因みに一部だけというのはAutoGenerateColumns (だったかな)をfalseにして自分でカラムを定義すれば行けるはず
で?
こういうメソッドを作って、Do(FuncAなど)とすると、 FuncAが実行されるのですが、 static void Do(System.Threading.ThreadStart func) { func(); } System.Threading.ThreadStartはどういう意味があるんでしょうか? ThreadStart threadDelegate = new ThreadStart(Work.DoWork); Thread newThread = new Thread(threadDelegate); newThread.Start(); とは根本的に関係無いですよね?
>>58 AutoGenerateColumnsをnoneにしても
DataSourceに放り込むと
自分が作ったカラムの後ろに新しく作られてしまう
みなさんList<Person>みたいなものどうやっていれているんですか?
>>56 それで一応いけました
列幅自動調整にしていると、ユーザーからの列サイズ変更ができなくなるって
WPFのDataGridと比べて微妙に使いづらい
62 :
60 :2010/11/11(木) 17:59:29
>>60 は
static void Do(System.Threading.ThreadStart func)
のところを
static void Do(Action func)
にしても結果は同じです。
この場合は、delegate System.Actionの説明は、
パラメータを受け取らず、戻り値を持たないメソッドをカプセル化します。
になっていて、まぁ、納得できます。
何でも良いんでしょうか?
System.Threading.ThreadStartはデリゲート デリゲートが何かはまずはググッてくれ
そんなのでググらせても全く意味ないだろ Actionでデリゲートするのが普通のやり方。 スレッドを作るわけでもないのにThreadStartを使うのは変わったやり方。
Action使うと、.NET3.5以降じゃないと動かない。
同じの自分で定義すればいいじゃん
ActionとかFuncとか使い出して以来Delegateの宣言をほとんどしなくなったなあ
引数1つのActionは実は.NET1.0からあった。
違うよ ジェネリックだから2.0から
卒業しろし
MethodInvokerが代用に出来そうなのだけど、 System.Windows.Formsなのはなぜだ。
おしえないよ
FuncとActionとEventHandler<T>以外のデリゲートは爆発しろ
74 :
デフォルトの名無しさん :2010/11/11(木) 21:57:03
ラムダ式厨と同じ臭いがする。
>>73 PredicateとAsyncCallbackは許して
どう考えてもSystem.ComponentModelだよな。
最近入社した会社はラムダとかLinqとか使うと「保守性が下がる」という理由で禁止です 意味が分からない
非同期にRxはおろかTaskを使ったりしたら首になりそうな勢いだな
NEなんて無知ばっかだからな
騙りか
アルファ付き32bitRGBのビットマップを簡単に アルファ付き32bitRGBのアイコンに変換するには どういう風にコーディングすればいいですか? アイコンからビットマップにはToBitmapメソッドで簡単にできるようですが 逆が用意されてないみたいです
>>81 X をバインドしてるテキストボックスに負の数入れてみて。
>>85 なるほど、変更されるような場所に
CanExecuteChanged()を配置しろってことですか
多分理解できました
ありがとう
いやでもちょっとおかしいですね Executeでファイルの読み込み CanExecuteの中でファイルが存在するかどうかのチェックをする場合 ((DelegateCommand)OkCommand).RaiseCanExecuteChanged(); のコードを書かなくても、ファイルが無い場合エラーがでない つまり、コード実行時にCanExecuteの処理がされているということですよね? やっぱり無くてもいいんじゃないですか?
Execute実行前にはCanExecuteが呼び出されるから不思議じゃない RaiseCanExecuteChangedを使うのはファイルが削除された瞬間にボタンが押せなくなるような処理を組んだ場合
>>88 Changed イベント出す理由は、実行可否が変わった瞬間にコントロールの IsEnabled を切り替えて欲しい場合。
そのファイルの存在可否で切り替える場合だと、即時性求めるなら、
FileSystemWatcher で監視して、その中で Raise する。
そこまでしないんなら確かに Raise の部分要らない。
>>89 >>90 なるほどなるほど、ようやくわかりました
変更された瞬間に何かの処理をさせたいとき以外は
別にやらなくてもいいってことですね。
つまりこれだけは、ほかのメソッドと違う動きなんですね
ありがとうございました
こういうのって普通はすぐわかることなのかな?
MSDN見てスイスイわかるひとが羨ましい
>>91 そのメソッドの中で event を呼んでるってのがポイント。
event が何してるか(外部に通知)を知ってれば、大体見て意図とれるはず。
C# はそういう意図で event って仕組み持ってる。
>>92 普通のeventを書く場合ならどのメソッドを呼び出しているか、コードみたらわかるけど
CanExecuteChangedがCanExecuteを呼び出しているかは見ただけでは
判断つかないですよね?
var d = CanExecuteChanged;
if (d != null)
d(this, null);
一応これをみてDelegateCommandとnullの値を使って何かしてるんだろうなとまでしかわからない
ViewがDelegateCommandを参照して一体何をしているかも
この見えない部分の動作説明が少なくていつも躓くんだけど
いろいろ試していくしかないのかな?
イベントを発生させる側と受け取る側を混同していないかい?
>どのメソッドを呼び出しているか、コードみただけでわかる
それはイベントを受け取る側の話
今回のようにイベントを発生させる側では、普通どんなコードが呼び出されるかは関知しない
じゃあなんでCanExcetuteが呼び出されているかっていうと
CanExcetuteChangedイベントを受け取って呼び出されたメソッドの中でCanExcetuteが呼び出されているから
もちろん呼び出すかどうかは受け取った側の自由だけど、イベントの意味を考えればCanExcetuteが呼び出されるのは誰にでも推測できる
そしてそのイベントの意味やらを定義しているのがICommandインターフェース
実際ICommandのイベントの説明には
"通常、このイベントが発生すると、コマンド ソースからコマンドの CanExecute が呼び出されます。"って書いてある
http://msdn.microsoft.com/ja-jp/library/system.windows.input.icommand.canexecutechanged.aspx
>それはイベントを受け取る側の話 +=Button_Click(obj,e)と混同してた >イベントの意味を考えればCanExcetuteが呼び出されるのは誰にでも推測できる そんなもんですか var d = CanExecuteChanged;//ここで呼びだしているんですよね? if (d != null) d(this, null); ブレークポイント作ってdの値を見ると CanExecuteがtrueの時はOnCanExecute・・・って長いのが入ってて そうでない場合はnull で、この結果がOkCommandをバインドしているコントロールすべてに影響するように ICommandインターフェース内で何か処理しているんですよね むずかしーなー もしかしてプログラミングって習得するまで何年もかかるの?
残念だけど全然違います。
var d = CanExecuteChanged;は呼出じゃなくて単純な代入。
呼び出しならCanExecuteChanged(this, null);だけでいいんだけど、
CanExecuteChangedがnullじゃない時だけという条件を確実に満たすためにこういう書き方をしている。
順を追って説明する
まずコマンドをボタンにバインドするとボタンの中で
OkCommand.CanExecuteChanged += OnCanExecuteChanged; //
>>95 でいうところの+=Button_Click(obj,e)
みたいな感じでイベントを登録する。
そしてファイルが削除されてRaiseCanExecuteChangedが実行されると
d(this, null); によってCanExecuteChangedイベントに結び付けられたOnCanExecuteChangedが実行される。
OnCanExecuteChangedメソッドは
if(command.CanExecute()){
this.Enable = true;
} else ・・・
みたいな感じになっててめでたくCanExecuteが実行されるってわけ。
難しく感じるのはデリゲートやイベント、インターフェースなどの基礎知識が不足しているから
それさえ身につければ今回の話もすんなり理解できるし、インターフェース内で何か処理するなんていう発想には至らない。
基礎の習得はやる気さえあれば1週間でなんとかなるからまずはそっちを頑張ってください。
これ、例のあいつだろ
例ってWPFとかデリゲートが分からんとかいってたあの人? まさかmvvmについてカッコよく語っちゃう人がこんな質問するわけがない
>>93 考え方が違う。
CanExecute … 実行可否を調べる
CanExecuteChanged … 実行可否が変化したことを通知してもらうためのイベント
とドキュメントにあるはず。
別に、「変化が発生した」ってことだけ知った(event 受け取った)上で、
実際に true か false か調べなおす(CanExecute を呼ぶ)かどうかは利用側の勝手。
LINQの勉強中ですが、scala の map に相当するものってありますか? とりあえず以下のように考えてみましたが、他のやり方ありますよね? array.Count((item) => { Console.WriteLine(item); //実行したい処理 return true; });
>>101 is 演算子が void も受け付けるという裏ワザもあるけども。
Count(x => Console.WriteLine(x) is int)
LINQ の設計思想的には、そういう最後に副作用起こす部分は普通に foreach で書こうよって感じになってる。
ただ、それだと、Reactive Extensions みたいな push 通知に対応できないので、
Rx には Run か何かそんな名前の拡張メソッドあったはず。
103 :
101 :2010/11/12(金) 11:53:13
>>102 なるほど。そう言う書き方もできるのですね。勉強になりました。
やっぱり Count は気持ち悪いので、foreach の方が良さそうですね。
ToList(), ToArray()とかToXX系が即時実行。 結局foreachだけど、こんなのがあればいいのかな。 public static void ToVoid<T>(this IEnumerable<T> src) { foreach (var s in src) {}; }
関数型言語は大抵遅延評価じゃないの? 挙動似てるなーと思ってるよ (map (+ 1) (1 2 3 4)) は (new int[] {1,2,3,4}).select(x=>x+1) と同じみたいな ところで map って第一引数の関数をリストに順次適用していったリストを返す関数だよ・・・ね
>>107 .NET は void の扱いが特別だから、Console.Write みたいなのは Select できないのよね。
しょうがないから is int(黒魔術)。
まあ、mixed なパラダイムの言語でなんでもかんでもメソッドチェーンにする意味ないんだけども。
普通に foreach で回せば。
mapは本当に写像って意味なんでは・・・ となると元の質問者がmapを勘違いしてる気がする
数学では、空集合に対する写像もあるからね。 全部 void 返す = 集合→空集合 の写像。 それを Run 的に扱っちゃうのってどうなの?とは思うけど。
こんなのもあると便利。 public static IEnumerable<T> Pipe<T>(this IEnumerable<T> src, Action<T> act) { foreach (var s in src) { act(s); yield return s; } }
>>110 最初はForEachにしてたのだけど、IList.ForEachとかぶってしまうのでそういう名前にした。
>110 一回scalaのmapの定義をggrばいいと思うよ 俺はselectが一番妥当だと思う
(´・ω・`)…
116 :
95 :2010/11/12(金) 17:08:14
ForEachは副作用が目的だからLINQには入ってないんだよ C#は関数型言語じゃないから副作用があっても構わないとかいう突っ込みは勘弁 少なくともEnumerableに入ってないのは実際にMSの中の人が副作用を嫌った結果
ArrayList使いたがる人はどぼん見ているひと あそこ更新するか閉鎖しないと勘違いが増えるだけだよな
副作用起こして死ねよ
しかしFunctionalな塊のReactive ExtensionsにはEnumerable用に
Run(ForEach、
>>106 のと同じ)とかDo(
>>111 のものと同じ)とか
副作用全開のものもかなり入っているのであった。
Reactive Extensionsは全然functionalじゃないどころか functionalなものを手続き的に使うためのライブラリでしょ
手続きというよりも流れを持たせることだと思うのよ。 それをモナドっていうといやらしいんだけどさ、 Functional Reactive Programming自体はHaskellが一番活況だし。
>>121 それでも、アセンブリ的には Interactive でしょ。
Reactive の部分は正式に採用されそうな勢いだけど、Interactive 微妙臭い。
(Run とかは Observable 用は入るけど、Enumerable 用は別)
Rxって非同期プログラミングで状態変数使いまくるのが嫌だからDSL使って順番に書けるようにしましょうってことで 本質的には副作用を嫌ってるんだわ
2chってなんでこういう、本当は実戦ではむしろどうでもいいトリビアルな知識ばっかり 豊富な奴に偏ってるんだろう。 そのくせ実践的な話になると打っても響かないんだよなこの手の人は。
これ初心者向けのネタか?
「オブジェクト指向とは」と大差ないレベルだし初心者向けだろ
ttp://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_013/cs2_013_01.html はは、ここ恐ろしくわかりにくいね
デリゲートの使い方はわかるけど、だから何?って感じ
Sample sample = new Sample(instance.method);
ここまでするぐらいなら、instance.method(2,3)て書いた方が早いでしょ
デリゲートってつまり、呼び出し側があって、呼び出される側に処理してもらうわけで
どんなメソッドが呼び出すのか呼び出し側で把握するのっておかしくない?
どのクラスのどのメソッドを使うか呼び出し側が決めるならデリゲートいらないでしょ・・・
例えば、ボタンクリックイベントでも、どのイベントハンドラが呼び出されるか事前にわかっているなら
マイクロソフトもデリゲート作らなくていいでしょって話
大丈夫 みんなそうやって大人になるんだ
川俣の文章は全体的にアレだから。
>>129 呼び出し側とか呼び出される側とか何のこと言ってるんだ。
言っちゃ悪いけどアンタのレスの方が分かりにくいぞ
>クラスAのメソッドaは常にクラスBのメソッドbに処理を委ねるとしよう。 >このような場合、メソッドaの中にメソッドbを呼び出すコードを書けばよいので、 >特別な機能は何も必要がない。 >しかし、常に委ねる相手が決まっているとは限らないし、 >委ねる相手が常に1つとも限らない。このような状況に対処するために、C#のデリゲート機能が存在する なるほどなるほど、ここまではよくわかる で、サンプルコードみたら、class1から既に決まっている相手class2のメソッド呼び出すコードだしw なんで上記のようなことを想定したコードを書いてくれないのかと
川俣だからな 実際にどういうときに使うか〜みたいな話をしだしたらオナニーに走って もっとわけのわからない説明になるよ
136 :
135 :2010/11/12(金) 22:44:21
記事ちゃんと読んでなかったけどこれは
>>133 が間違ってる
記事のList 13-2はデリゲートの利用例としては適切
137 :
135 :2010/11/12(金) 22:48:56
class Class3 { public int method( int x, int y ){ return x+y; } } if(〜){ sample = new Sample(class2.method); }else{ sample = new Sample(class3.method); } int result = sample( 2, 3 ); ここまで書かないとわかんないの?
if(〜){ (new Class2).method(2,3); }else{ (new Class3).method(2,3); } これでいいじゃん?
>>139 そんなこといいだしたら最終的に
if(〜){
Console.WriteLine( "6" );
}else{
Console.WriteLine( "5" );
}
になっちまうぞ
>>140 それでいいんじゃないの?
何が不都合なの?
デリゲートって便利だなーって思わせてよ
お前は使わなくていいよ。
例えばさ
>>129 のList 13-1の例がデリゲートの便利な使い方というなら
Console.WriteLine()
Console.ReadLine()
これらもデリゲートにすればいいんじゃないの?
handler=.WriteLine()
handler("デリゲートって便利だなー");
144 :
135 :2010/11/12(金) 23:27:31
>List 13-1を見ても、デリゲートの利用価値はいま1つ分からないかもしれない。 >そこで、デリゲートを使って異なる処理を一元化する例をList 13-2に示そう。 と書いてあるだろ 13-2のcalcはClass2に依存していない
そうか、List 13-1見た時点でこいつやばいんじゃないかって臭いがしたので とりあえず、続き読んでみるわ
>>143 List 13-1はデリゲートの便利な使い方じゃないよ
デリゲートの使い方のサンプルだよ
>>129 見た時点でこいつやばいんじゃないかって臭いがした
calc( 2, 3, new Sample( instance.methodPlus ) );
これも
int result=(new Class2).methodPlus(2,3)
Console.WriteLine(result);
でいいよね
記述が長くなり、わかりにくくなっただけで利点がわからない
>>146 そこもずっと前にみたけどさ。スレッドとかわかりにくいことしているのがなぁ。
委譲するのはなぜか?という一番の疑問に答えてくれるサイトがない
デリゲートの記述の仕方ばかり解説しているだけで
記述の仕方も使い方もわかる。でも、これを今やっているプログラムにいれると
便利だな、コード短くなってわかりやすくなるなと思わせてくれない
イベントは便利だなと思う
イベントの宣言だけしておけば、あとはどんなメソッドが呼び出されて
どんな処理をされようが、呼び出す側は気にしなくてもいいし
第一依存してないから、仮に呼び出される側のメソッドが無くてもいいし。
でも、デリゲートは直接メソッド呼べばいいだけのをわざわざ仲介しているのがよくわからない
いやいや、イベントってまさにデリゲートだぞ
List<T>のソートにT比較用のデリゲートを渡せる これでもデリゲートのありがたみがわからんかい
おれがほしいのは、デリゲートがもしなかったら どういう場面で面倒になったりするのかを書いてくれるとうれしい たとえば、JAVAではデリゲートがなくてイベントを処理する場合 クラスを大量に作らなくてはいけないらしい そういうのを書いてくれたらいいのにな イベントもデリゲートの機能を使っているようだけど、 デリゲートだけだと使い道あるの?って感じがする てか、みんなデリゲート使ってる?
ようるすに、 AがBから呼ばれたいのだけどBはA専用には設計できない(設計したくない)、というとき デリゲートかイベントを使う(と良い) (さもなくば呼び出される側の詳細を隠蔽するためだけに継承と多態を使う、みたいなアホらしい設計になる) で、BからAを呼び出すにあたり、呼び出し先がA一つで良いときはデリゲート、 Aだけとは限らず、Aがあずかり知らない不特定多数(CやDやE)も同じタイミングでの Bからの呼び出しを必要としているかもしれない(Aにはわからない or わからせたくない)場合はイベントを使う 前者は昔はコールバックと呼ばれていたしくみ
>>152 class Form1 : Form {
// ...
void Foo() {
if (InvokeRequired) {
Invoke(new Action(Foo));
} else {
label1.Text = "Hello World!";
}
}
>>152 Cで関数ポインタを使うぐらいの頻度。
要するに使う分野では使うけど、必用ない分野では殆ど使わない。
川俣はC#2.0の連載で匿名メソッドを「デザートじゃなくご飯」って書いてたけど、
あれは誇大広告もいいところでむしろデザートそのもの。
川俣はデタラメを言う「トンデモさん」ではないと俺は思うけど、
大げさで偏ってるのは確か。
非同期関係はデリゲート必須だよな
>>152 List<int> list = new List<int>();
list.Add(10);
list.Add(20);
list.ForEach(Console.WriteLine);
非同期では必須なのに、 「スレッドとかわかりにくい」と言われた・・・ そりゃ、「わからないからスレッド使わない、だからデリゲートも使わない」 と言われれば、「うん、使う必要ないね」としか言いようがなく。
あとデリゲートをクロージャとして使う手がある。 非同期局面でシグナルでなくデリゲートじゃなきゃヤダ、というのは大概このケース つまんり、 int[] result = new int[10]; for (int i = 0; i < 10; ++i) { Action<int> act = new Action<int>((x) => { result[i] = x; }) B.LetsCallback(act); } みたいな、
スマンスresultのlock忘れたorz
>>152 デリゲートというか、ラムダ式はC#3.0以降は必須。
Linqの使い方を学べばデリゲートの有効な使い方ってのがよくわかる。
2.0以下だったらピンと来ないのも当然かもしれない。
>>152 正直、デリゲートの概念なかった頃は冗談抜きで面倒よ。
簡単に説明してくれといわれて簡単に書く気になれないレベル。
だから例が出てこないのよ。
さらにいうと、デリゲートはC#テンプレートの機能不足を補うのにも使わざるおえない すわなち、引数付きコンストラクタしかないクラスTを型引数とし、内部でnewするテンプレートは Tのファクトリをデリゲートで渡すようなテンプレートにするしか手がない、 ハズ…! (引数なしのコンストラクタで生成するならnew()制約で良いが、引数付きを扱う構文が無い)
>>163 仮にデリゲートがなかったとしたら
全部インターフェースとクラスで代用?
>>151 そういう言い方されても俺には理解できない
>>151 List<T>もソートの意味もそれぞれわかるけど「List<T>のソート」とはどういうことかわからない
T比較用もよくわからない
よくある解説で、条件式のところにデリゲートを入れると便利的なことを書いているが
どうもピンと来ないんだよね
>>153 ちょっとまって、List 13-1でいうと呼び出し側はclass1で呼び出される側はclass2ですよね?
なんで「class1(classA)がclass2(classB)から呼ばれたい」という書き方しているの?
classABがどういうのか書いてくれないとわからない
ていうか、呼び出し側と呼び出され側の区別ってどうやってするの?もうわけわかんないよ。
>>156 その使う場面がわからない
>>157 それはわかりますよ
デリゲート使わないと無理だから
でも、そうでない場合の使い方がわからない
>>158 ForEachno定義が無いとしてエラーがでますが?なんですかそれは。
>>159 てことは、非同期以外では使わないというご意見ですね?
>>162 それって匿名メソッドとかそういうことなんでしょ
やっぱり2.0じゃ有用性説明できないってことですか
なんだろな、解説サイトあらゆるところみて一通り読んだのに
使われる場面が違うとさっぱりわからないな
頭がプログラマ向きじゃないのかなー
>>165 ありがとう、いままでその方法に気づかなかった
>>166 Java の場合は匿名クラスってのが実質的にデリゲートの役目担ってて、まだマシ。
ものすっごいコード量増えるけど。
C++ とかだと悲惨。
インスタンスメソッドでなければ、関数ポインターっての使えば簡単っちゃ簡単なんだけど、
インスタンス持たせようとした瞬間酷いことに。
あと、循環参照つきものだからメモリ管理がすごく面倒になる。
>>167 >>146 に書かれてる例、ものすごい頻出パターンよ。
それみて、使いどころ分からないとなると、頻出パターンすらわかってないことになる。
今更気づいたけど、こいつは、いつかのWPFがどうのこうのとか言ってた奴か? 「解説サイトあらゆるところみて一通り読んだ」のに「何一つ頭に入ってない」ね。
>>169 C#選んでよかった
ところでWPFのコンバーターなんかもクラスじゃなくてデリゲート渡せたらなあって思うんだよね
>>171 多分そうじゃないかな。
WPFの時もデリゲートわかんないって言ってて、
周りから「デリゲートもわからないってやばい」って言われて、
それで今に至ってるっぽい?
普通にやってたら頻出するはずのパターン見て「何が便利かわからない」って言ってる辺りもそっくり。
>>167 はもうコテ半つけてもいいレベルの名物キャラクターです
>「List<T>のソート」とはどういうことかわからない マジでいってんの?
>>172 XAML って仕組み的に、シリアライズ可能なものでないと書けないからね。
デリゲートは相性よろしくない。
例えばさ、DelegateCommandがなぜ必要かといったら これがなかったら、ICommandインターフェースを使った クラスをそれぞれのコマンドごとに作らなくてはいけなくなる だから、ICommandインターフェースを実装したDelegateCommandクラスを作って デリゲートを通して、実処理部分のVMのメソッドはここですとDelegateCommandクラスに渡して DelegateCommandクラスから、VMのメソッドを呼びなおしてもらうと そのことによって、イベントハンドラごとにクラスを作らなくても良いようにしている つまり、共通的な処理部分をデリゲートで呼び出したほかのクラスのメソッドに処理させて 相違部分は呼び出し元で処理する場合に便利ってことなんだろうけど これも、インターフェースが必要としない場合だと、ただ共通機能をまとめた メソッドを作って直接呼び出せばいいだけだし
>>176 それはわかってるんだけどコンバータクラスが大量に増えてしまう現状は何とかしてほしい
なんかうまい方法とかないかな
>>179 それこそDelegateCommandと同じ要領でいけるでしょ
コンバータークラスを1つ作っておいて
デリゲートでVMなどの実処理するメソッドを呼び出してもらう
181 :
153 :2010/11/13(土) 00:53:32
>>167 言った手前返事しとこうとぞ思う、
>153は、List 13-1(>129のさらにリンク先)と異なる記号を使って無用の混乱を招いた点はお詫びしとく
List 13-1は非常に単純化されたサンプルなので、>153に当てはめて解釈するのは無理がある
Class2のインスタンスinstanceはClass1から呼び出されてはいるものの、instanceが特にそういう要求を持っているわけではない。
すなわち、instanceはClass1から呼ばれようが呼ばれまいが自己不整合を起こして破綻したりしない。
このような、Class2を知っているClass1が一方的にClass2を呼び出す場合はデリゲートを使うまでもない。
実際、List 13-1の19〜20行目はただ単に instance.method(2, 3); と1行書けば済む
だがそうは済まないケースがあり、それが>153だったり>157だったりするというしくみ
わからないのは必要に迫られていないからかもしれない、
ttp://ufcpp.net/study/csharp/misc_delegate.html ここ見ても、イベントと非同期はわかりますよ
デリゲートなければできないですから。
イベントの場合、ボタンクリックで例えると
イベントハンドラを作る我々開発者はクリックイベントが起きた場合に
このメソッドを呼び出してほしいとイベントハンドラを代入して呼び出してもらう
でも、イベントハンドラを書かないでクリックされても無反応であってもいい構わないわけで
こちら側にすべての処理を委ねられているって感じがします。
でも、List 13-2にしても、上記のURLの図2にしても
普通に処理するメソッドを直接書けばいいだけなのを
わざわざデリゲートで呼び出している理由がわからない
>>181 さんの言うとおり「必要に迫られていないからかもしれない」ってことなんだろうけど
>>181 その説明はすごくわかりやすかったです。
で、その説明で
>>153 を説明するとどうなりますか?
>>182 いやでも、それはインターフェースを実装しなければいけないという
制約があるから、デリゲートするしかないってのはわかるけど
例えば、インターフェースなくてもいいってのなら・・・
あれ?やっぱりクラスが増えることになるか・・・
いやいや、違うな
この場合は、呼び出し側がマイクロスフトの設計によるものだから
つまり、ボタンを設計したマイクロソフトであり、コンバーターやコマンドを作ったマイクロソフトが呼び出し側
呼び出し側も呼び出される側も自分で設計する場合は
やっぱり普通に直接メソッド呼び出すよね
だからデリゲートの有用性がわからないんです
なんかウダウダ雑談がしたいだけなのか、本当にアタマ悪いのかどっちなんだろ....
両方じゃない?
それが必要な場面に直面しないと、本当の意味で必要性を感じない。 必要性を感じない人に理解させるのは難しい。
189 :
デフォルトの名無しさん :2010/11/13(土) 01:25:56
そうそう 無理して教える必要はないw どうせ聞く方も身に付かないだろうし 教える方も疲れるだけw 会社の後輩だったら業務命令等あるだろうけどw
なんだかんだいってみんな暇なんだよ
>>183 >イベントハンドラを作る我々開発者はクリックイベントが起きた場合に
>このメソッドを呼び出してほしいとイベントハンドラを代入して呼び出してもらう
これは、「開発者のコード」が、ボタンクリック時の処理を、我=「開発者のコード」に属するイベントハンドラに委譲せよ、と「ボタン」迫るケース。
しかし「ボタン」を実装したコード自体はマイクロソフト謹製でかつビルド済みだから、開発者側はそれを改変できない。
だから「「ボタン」が「開発者のコードを直接呼び出せばいいのに!」という系の願いは叶えられようがない。
こういうとき、イベントハンドラのコードをデータのごとく「ボタン」に渡せて初めて解決する。デリゲートはその入れ物。
なお、「ボタン」を作るのがマイクロソフトでなくて今日の漏れで、「開発者のコード」を書くのが3000年後の漏れだとしても約同じ事
これが>153の説明。「ボタン」は「開発者のコード」専用には設計できない。
>>184 >呼び出し側も呼び出される側も自分で設計する場合は
>やっぱり普通に直接メソッド呼び出すよね
例えばだが、switch文x=1,2,3,...,10000に応じて自作関数1万個のどれかに分岐する1万行のコードのかわりにデリゲート1万個の配列をつくっておけば
呼び出しは1行で済むし、
一方、デリゲートに収容するコードはデータとして生成もできる(>160)から、初期化には1万行要らない(かもしれない)
いやいや、説明がなんか哲学じみてきたね^^ (デリゲートは使ってる立場ですけど)
>>185 これはデリゲート使ってないやり方ですよね?
このままでいいと思いますけど、何がだめなんでしょうか?
persons.Sort(compareAge).Select(s=>Console.WriteLine(s));
DelegateCommandに習うとするなら
実装を変えたくないClassAがあるという大前提で
ClassAのプロパティであるClassBの処理で計算結果が出される場合
ClassBの処理をいくつか変更したくなった場合に
ClassBにデリゲートを設けて、C,D,Eを呼び出して処理を変更するために
デリゲートを使うというのならわかる
でも、これはあくまで一部の使い方なんだよね
ラムダとかでデリゲート使ってるのみると、上記のようなことを
頭に浮かべながら考えるなんて大変すぎる
みんなデリゲートが大好きなのさ
>>193 いやいやいやいや
デリゲートつかってますよ?
哲学じみてるんじゃなくて説明下手なだけ。 デリゲートなんて一次接近としてはただの関数ポインタだと理解すればいいわけで、 そんな難しい概念じゃないんだけどね。 機械語だったら今まで CALL #label と即値のアドレスしかコールできなかったのが、 CALL funcPtr と、メモリーのどこかに入ってるアドレス値を参照してコールできるようになりましたよ、 とそれだけの話。 実行時に呼び出しアドレスを動的に変えたい場合があるって、そんな高尚な話か?
俺のデリゲートに対する最初の理解は 「関数ポインタが安全に使えるようになりました」だった。
それはデリゲートの本来の使い方とは違う。 アプリケーションに取っては、スレッド間通信が本来の使い方でしょ。 参照コールの機能もあるけどね。
>>191 >例えばだが、switch文x=1,2,3,...,10000に応じて自作関数1万個のどれかに分岐する1万行のコードのかわりにデリゲ>ート1万個の配列をつくっておけば
>呼び出しは1行で済むし
1行で済みますか?
デリゲートは
Sample sample = new Sample(instance.method);
こんな風に直接メソッドを指定してデリゲートに登録するんですよね?
つまり、分岐の数だけ、別クラスの特定のメソッドをデリゲートに登録する記述を書かなくてはいけないですよね?
例えばDelegateCommandのようにプロパティとして渡して置くというのなら
1行で済むでしょうけど
C++/CLIでdelegateを使うと関数ポインタとの違いというかデリゲートの正体が理解できるかも。
>>196 デリゲートは関数ポインタよりも高尚な概念なんですよ^^
クロージャでもあるっていうのがその証拠
デリゲート=関数ポインタ、は正しくない
デリゲート=関数ポインタ+無名関数、は冗長
>>193 persons.Sort(new Comparison<Person>(compareAge));
こう書けばわかる?
Comparison<T>はデリゲートね
ちなみにSortの返り値はVoidだし
Selectも遅延実行だから何も表示されない
>>196 >>197 こういう説明の仕方が一番嫌いです。
わざとなんでしょうけど。
ある未知の機能を説明するのに、未知の機能を例にする説明ってよくないと思うの
読んでる側は0の知識の可能性があるのに。
>>195 デリゲートの宣言ないですけど
例えば Select(x => x * x) ってのは Select(new Func<int,int>(x => x * x) であり static int Hoge(int x) { return x * x; } // というメソッドが外に定義してあって Select(Hoge) とも同じであり Select(new Func<int, int>(Hoge)) でもあり var delg = new Func<int, int>(Hoge); // 代入して Select(delg); // こう使ってもいい になる。 匿名関数じゃないデリゲートがビミョーって主張なら、まあ分かる。
デリゲート=関数ポインタ+オブジェクトへの参照 // static関数の場合参照はnull クロージャになったのは.NET2.0から。
>>203 未知って、だから関数ポインタがどういうものかもちゃんと説明してるじゃん。
デリゲートより関数ポインタの方が具体的だから、そっちをまず理解するんだよ。
関数ポインタがわからないのにより抽象度が高いデリゲートが分かるわけないだろう。
>>203 一番単純な概念から説明しようとしてるだけだろ。
>こういう説明の仕方が一番嫌いです。
なんて言い訳して逃げるからいつまで経っても理解できないんだろうがw
>>203 ごめんね、そこまで書かないとわかんないとは思わなかったんだよ
>>202 にも書いてあるけど
public delegate int Comparison<T>(T x, T y);
っていうデリゲートがSystem名前空間に定義されてるんですよ
で、SortはこのComparison<T>を引数にとる。
persons.Sort(new Comparison<Person>(compareAge));
で2.0からはわざわざnewする必要がなくなったから
persons.Sort(compareAge);
って書き方になるわけです。
◆Jzt/EX0TGY8T にわかるように説明できたら勝ち そんなゲームに思えてきた
>>202 うーんわからないです
Sort()メソッドの実態は
Array.Sortを使ってある条件に基づいてソートすると
そのソート条件をcompareAge(Person a, Person b)で示していると
で、デリゲートがなければ、Array.Sortを直接呼び出してソートすればいいだけですよね?
211 :
デフォルトの名無しさん :2010/11/13(土) 02:26:17
まだやってるのかw
>>210 「直接呼び出してソートすればいい」
どうやって条件を指定するの?
デリゲート使ったのは
「そのソート条件をcompareAge(Person a, Person b)で示している」
ためなのに。
>>210 じゃあ仮にデリゲートを使わないとしたら
Persons.Sort()の実行結果はどんな並び方になると思う?
>>206 関数ポインタって関数が書かれているメモリアドレスじゃないんですか?
よくわかりません。
>>204 なんとなくわかるんですが、
それなら、Hogeを改名してSelectにして直接使えばよかったのでは?と思うのです
つまり、Selectメソッドの実態には、hoge(int x)を呼ぶかhoge(int y)を呼ぶかの選択肢があるってこと?
でも、それはオーバーロードでいいですよね?
>>207 いやでも、自分で調べろよじゃ解説になってないってことを宣言していることだと思いますよ
>>208 ってーことは
内部がList 13-2みたいなことになっているってことですよね?
calcがSortみたいな感じですか?
つまりSortを利用する側は記述が少なくて済むと・・・
sortを利用する側は呼び出し側ということでいいですか?
>>213 ?
デリゲート使う使わないに関係なく
Sortメソッドが利用しているアルゴリズムを直接使えば同じことでは?
>>214 掲示板の少ない分量で、知識0で理解する気のない奴に解説しろ って無理ゲーにもほどがあるだろ。
218 :
デフォルトの名無しさん :2010/11/13(土) 02:48:07
まあ今日は一旦置いて落ち着いて勉強しろ
頭が回らなくなってきたしそうします
イーノック「一番良いデリケートを頼む」
さっきつい、ポロっとすごいアイデア言っちゃった おれもDelegateConverterクラス作ってみよ
>>215 を見る限り、デリゲートの前にソートについて考えたほうがいいかも。
根本的に何もかも分かってないのに、あれこれ調べたお陰なのか、
ご立派な言葉だけは並べられるみたいでよくないね。
あと、というか考える前にとりあえず手を動かせよって感じでもある。 少しでも実行してみれば自分がどれだけ変なこと言ってるか気づくと思うのだけど。
>>214 そうですSortはcalcに相当しています
ソート用のアルゴリズムと、要素の比較方法が分離可能なら
いろいろなところで使いまわせるでしょ?
◆Jzt/EX0TGY8T は間違いなくナルシスト系 自分は頭いいのに理解できないのは説明がよくないからって考えてる。 だからここに書かれた説明にちょっとでもわからない部分があるとすぐ攻撃的になって、 あらさがしや、わからないのはお前の説明が悪いからという態度になる。 そうやって自分の無能さから目をそらしているだけ。
Sortの例で理解できないのはおかしい
分かった上で暇な俺らにネタ供給してたんじゃなかったの?
>>228 それなら◆Jzt/EX0TGY8T は天才的な才能の持ち主だな
◆Jzt/EX0TGY8Tは無事チューリングテストにパスしたようで何より
◆Jzt/EX0TGY8Tって人工知能だったの!? まじかー、そりゃいっぱいやられたな 開発者マジすげー、尊敬するよ
そこで式ツリーですね
式ツリーって使ったことないんだけど、 ユーザーに簡単な数式みたいなやつを入力させて、 プログラムの動作を変更するみたいなことできる?
デリゲートに好きして
くっそ、DelegateConverterをやっと作ったのに ConverterはBindingできませんとかww どうすりゃいいんだよー
あ、イベントでやればいいのか
ちょっと質問 イベントを発生させるメソッドの命名規則としてOn〜ってするのは割とよくあると思うんだけど (protected virtual OnLoaded(){ this.Loaded(〜); }) イベントを受け取る側のメソッドの名前ってどんなふうにつけてる? 標準ライブラリ見ると受け取る側もOn〜って名前になってたりするんだけど なんか一緒っていうのも気持ち悪いし
>>239 CallBackとかじゃないのHandlerとか
寝ようとしたが閃いた
例えば、サイトから画像をダウンロードするソフトを作る場合
サイトによってダウンロードの仕方が違う
その相違部分をダウンロードするクラスに教えてやるためにデリゲートを使うって感じかな
でも、多態性でもできそうだよね・・・・うーん
ページ内の画像を一括保存するようなのだと 不要な画像(広告とか)のURLをフィルタリングするデリゲートを後から注入できるように設計しとくと便利かもね。 外から後で実装を注入できるのはデリゲートの重要な使い方の一つ。 例えばコレクションのソートでは、並び順を中身のクラスや状況によって変えたいケースは多いと思う。 そんな時にデリゲートが使えないとIComparerを実装したクラスを何度も作る羽目になっちゃうでしょ >多態性でもできそう 単純な処理を各クラスに割り振ると数が増えすぎて複雑になってしまう。 でも複雑な処理ならクラスにする方が見通しがいい。 その辺のさじ加減はやっぱり経験になるけど、目安としては多態性で抽象化されるメソッドが複数ならインターフェイス、単一ならデリゲート
コテハンつけてくれたので嬉しい
>>241 その説明すごくわかりやすい
要は汎用的に使えるクラスがあるという大前提に基づいて
話を進めていかないとだめなんですよ
汎用的なクラスに固有の機能をつけて利用するためにデリゲートを使うと
クラスライブラリを作るとかさ、そういう前提の話じゃないこれって
それを@ITはMAINクラスを汎用クラス的な扱いにしているからわかりにくかったんだよ
それに、calcメソッドをclass1に入れているのもよくないね
あれはclass2にするべき、そしてclass2のメソッドをclass1でやらないとだめでしょ
例えるとclass2を電卓として、class1が入力する側という感じでコードを書けばわかりやすい
説明するのに専門用語でずらずらっと並べられてもわからないんですよね
初心者はすべてのライブラリや文法を理解しているわけじゃないんだから
できるだけ日常使うような言葉だけで説明してほしい
ごめんちょっと何言ってるのかわからない
ちょっとレベルが高すぎたかな? もっと簡潔にいうと @ITのサンプルコードは IDEやアドオン、プラグイン対応のアプリを開発するための雛形なんだよ 初心者がそんなこと想定して作るかっつーの
@ITの記事にはIDEやアドオンっていう単語は書かれて無いケド・・・ やっぱり何考えてるのか分からない
>>240 Callbackとイベントは混同したくない
Handlerはデリゲートの名前に使うからかぶらせたくない
何かほかにありませんか?
わざわざそこまで説明されなくても
>>146 の「述語: 条件式を外から挿す」を読んだだけで
汎用的なものに具体的な処理を注入するって発想にいたると思うんだけどなぁ
サイト紹介しても 「そこ読んだけどわかりづらい、解説されてない、例えが悪い」 ばっかりだもん。説明してる人、お疲れさまです。
>>249 その考え方が既にプログラミングがわかる人のものの考え方であって
例えば、全く知らない分野について、汎用的なものって言われてもわからないでしょ?
汎用的という言葉の意味はわかっていても、分野によってまったく内容が違う
CAD設計において汎用的なやり方って言われてイメージできますか?
汎用的なものすらプログラミングしたことのな初心者にとっては理解できないんですよ
今で作ったソフトは、ソートも必要ないし、イベントに対して直接動作を書き込んで
できちゃうようなプログラミングばかりだったので、デリゲートの概念なんて意識しないで使っていた
なに?プログラミングを全く知らない人にデリゲートを説明しなきゃいけないの?そりゃ至難の業だな
>>251 誰もあんたの想像してる脳内人物を理解できていないってことをそろそろ学べよ
口だけだぞ
いつまでも俺は初心者だからお前らのわかりにくい説明が悪いんだってスタンスやめてくれよ。 そんなに初心者でいたかったらもうプログラミングなんてやめちゃえよ。
>>252 >>249 の発言は、俺がまだ理解できていなかったときに対しての発言でしょ?
その時はプログラミングにおける汎用的なイメージがつかめていなかったんだから
>汎用的なものに具体的〜なんて言ったところで無意味なのはわかるよね?
>>243 の時点で理解できたから汎用的と使ったまでで
そのイメージを理解できていなかったときの俺が共有しているというわけではない
つまり、ただの煽りなんだよね
>>249 は今のあなたに向けての言葉ですよ
何で過去のあなたに説明しなきゃいけないの
だいたい
>>146 の記事には汎用的なんて難しい(笑)言葉でてこないし
汎用的なものに相当する部分は誰でもわかるSum(合計)っていう日常的なものに置き換えられてるだろ
◆Jzt/EX0TGY8Tまだ生きてたんだ そろそろSelect拡張メソッドの使い方ぐらいは暗記できた?
>>239 いつも
OnClick += OnClickHandler; // (1)
みたいな名前付けにしてるが、むしろ
OnClickHandlers += OnClick; // (2)
の方が意味的に自然鴨、
ただソースコードに現れる回数という点では左辺の方が多いから
左辺と右辺を区別するならタイプ量が(左辺)<(右辺)となる(1)の書き方が正義と信ずる、
(実際のところあまり気にしてない)
>>239 原則privateだしコードから直接呼ぶことはまずないからどうでもいいです
MSのコードだとAcceptButtonClickみたいなのが多い気がする
>実際のところあまり気にしてない
>どうでもいいです
仰る通りなんですが、せめて自分の中だけでも統一したいなと思いまして。
イベント用のデリゲート、イベント、イベントの発生用メソッドに関しては
.NETのクラスライブラリに習って、〜EventHandler、過去分詞形(Clicked)、On〜としてあるんですが、
これにかぶらない形の受け取り用メソッドの規則が思いつかなかったんですよ。
他にないようなら、
>>262 のAcceptがよさそうなんでこれを使っていくことにします。
264 :
262 :2010/11/13(土) 12:08:22
違う違う AcceptButtonのClickイベントね もしくはOn(コントロール名)Click
>>264 なんという恥さらし状態 orz
やはりクラス名(or変数名) + イベント名あたりが妥当なところでしょうか
でもOn + クラス名 + イベント名にしておけば
Onがつくのはイベントを扱うメソッドという括りもできるしこっちもいいな
266 :
257 :2010/11/13(土) 15:06:49
267 :
デフォルトの名無しさん :2010/11/13(土) 15:28:38
>>265 Handle + (イベント名)とかでどう?
268 :
262 :2010/11/13(土) 15:38:19
>>263 ガイドライン的にはClickedじゃなくてClickだよ
過去形を使うのは、Closing→Closedと対になっている場合
>>268 ごめんなさい、その部分だけ別のところの規約を間違って書いてしまいました><
標準ライブラリのコード規約だと
>>268 が正しいです
270 :
デフォルトの名無しさん :2010/11/13(土) 18:18:45
ネットワーク越しにファイルコピーをするにはどうすればよいのでしょうか System.IO.File.Copyだと出来なかったです
File.CopyってUNC使えるんだっけ
File.Copyでコピーできるけどねぇ。
>>270 コンピュータ名 PC01 のC:\Hoge\hoge.txtからローカルC:\Piyo\piyo.txtにコピーなら
File.Copy(@"\\PC01\C\Hoge\hoge.txt", @"C:\Piyo\piyo.txt");
でいけるはずずず
C:\ を C って名前で共有しとく必要があるな。
実はネットワークとはインターネットのことだった!とか
276 :
273 :2010/11/13(土) 19:19:37
どういたしまして
MessageBox.Showが貧弱なので Console.WriteLineみたいに何でも表示できるようにしたいです どのようにすればいいですか?
#AARRGGBB の色形式に、「なんとか表記」みたいな何か名前ついてますか? または、何と呼ばれることが多いとかありますか?
APIの質問なのか?
>>280 別の関数使うのじゃなくて
int x=5;
MessageBox.Show(x);
で表示されるようにしたいのです
そうすれば、他のプロジェクトでも使いまわしができると思うので
C#の質問ならしかるべきところでやれよ糞ハゲ
>>284 MessageBox.Show(x.ToString());
とするのは面倒じゃないですか?
場合によったらすごく長いコードになるし
ToStringでいいなら""+で行けるでしょう
MessageBoxを継承したMyMessageBox作って Show2()作って引数.ToString()をShow()に渡せば
継承するのならオーバーロードしろよ
>>288 それだとConsol.Writeと同じ機能にならないですね
「同じ機能」って具体的にはどういう動きを期待してんの?
>>291 Console.WriteLineと同じ動きです
Console.WriteLineは使えないの?
地道にオーバーロード書きまくればいいだろ
かえればか
http://ideone.com/2GX4L public PropatyChanged Propaty_Changed;
//public event PropatyChanged Propaty_Changed;
この部分だけが違うだけで動作はまったく同じになるのですが
何が違うのでしょうか?
eventを使うと外部からは+=と-=しか使えなくなります
問題はMessageBox.Show自体に既に複数のオーバーライドが存在していることだな。 Showには21個、WriteLineには19個。まあ全部必要になるわけじゃないにしても400個近くはオーバーロード書かなきゃいかんな
299 :
298 :2010/11/13(土) 21:02:33
最初のもオーバーロードな
>>297 それだけの違いだとデリゲートだけで良さそうですね
他に何かあるんでしょうか?
eventはプロパティの一種なのでインターフェイスに含むことが出来たり、 独自のアクセサを書くことが出来る。
プロパティの一種ではないと思うけどw イベントの存在意義は、それがイベントであることでしょ。 謎掛けでもなんでもなくマジでそうだよ。
>>297 を言い換えると
ただのデリゲートだとMainWindow側からPropaty_Changedを発生させたり、MainWindow以外から登録されたメソッドをcp.Propaty_Changed = null;で消せてしまうということ。
イベントのadd/removeアクセサの例。 private List<EventHandler<MessengerEventArgs>> publish3 = new List<EventHandler<MessengerEventArgs>>(); public event EventHandler<MessengerEventArgs> Publish3 { add { publish3.Add(value); } remove { publish3.Remove(value); }} イベントハンドラごとに異なる情報を渡したり、呼び出す順番をコントロールしたり、 例外が起きた場合の処理を特別にやりたいとかそういったケースで使う。
>>302 プロパティに非常に近い概念だよ
実際VBではadd/removeアクセサを定義したイベントをイベントプロパティと呼ぶ
プロパティはgetとsetのメソッドを一括りにしたものであるのに対して
イベントはadd/removeメソッドを一括りにしたもの
決定的なのは
>>304 だよねえ
何個も入るってこと
>>303 イベントでもアクセサ使えば、別のクラスでイベント発生させられる
デリゲートのすごい機能また発見した Form2からForm1のメソッドを利用したい場合 Form1のインスタンスをForm2に渡して利用させたりするけど デリゲート使えばそんなことせずにあらゆるクラスからそのメソッドを利用できる なんでこんな重要なこと教えてくれないんだよ
え、え、あ、いや、あの、ごめんなさい
条件をクラスに挿入できるとか、 非同期プログラミングとか イベント処理とか・・ そんな難しいことばっかり言って 初心者が最初に一番悩むのが、 「Form2からForm1のメソッドを利用したい」 ここじゃないか よく質問でもあるじゃない、 from2.Form1=this; みたいなの・・・・ 解説サイトもこういうこと言ってくれれば 初心者もデリゲートにすぐ食いつくのに
>>304 こんな書き方もあるのか
普段アクセサなんて使ってなかったから全然知らんかった
でもpublish3に入ったそれぞれの値って区別できるの?
追加された逆順で呼び出すぐらいの操作しか思いつかない
プロパティ公開しておけばいいだけなのに わざわざそんなことする方が理解に苦しむよ
またキチガイか。
>>311 List<T>.Removeの説明をよく見ろ
>>306 何個もってハンドラを?
デリゲートにもメソッドを何個も入れられるよ。マルチキャストってやつ。
>>315 でもデリゲートだと特定のものを削除できない
キチガイは書くときは必ずトリップ付けて出てきてくれよ
>>314 いや、Removeは比較対象のvalueがあるから取り除けるのはわかる。
protected virtual void OnPublish3(){
foreach (var item in publish3) {
try {
item(...);
} catch {
}}}
って書けば例外を個別に処理できるのもわかる。
だけど追加されるデリゲートは内部からは他のものと区別できないから(できる?)
並び替えも、ハンドラごとに違う情報を渡すってのも良く解らんなぁと思って。
できるぞ
>>316 特定のデリゲートを削除できるよ。
dele -= new TestDelegate(hoge);
てな感じで。
おそらくForm.Closingイベントで使ってる。 CancelEventArgsをチェックしてCancel=Trueになったら処理を中断している。
そろそろ結論お願いします
結局デリゲートというものがありながら、なぜイベントなんて構文を用意したかというと、 外部からデリゲートを実行してほしくない、nullとか入れられたくない、 使用者はデリゲートの追加と削除だけ行えばいいんだ。 という理由によりわざわざ用意したんだね。 他になにか理由ある?
ないよ
325 :
318 :2010/11/13(土) 22:14:31
デリゲートのTargetプロパティから普通にオブジェクトの情報参照できるから区別できるのね
>>321 リフレクタで覗いてみたがListじゃなくて単純なマルチキャストだったよ
C#では定義できないけどイベントアクセサにはaddとremoveの他にraiseというのがある
>>327 add
{
class2.class2Event+=value;
}
jpgをgifにしたいのですが、綺麗に減色する方法はありますか?
あります。
ILにはraiseアクセサがある。 VBのイベントにはRaiseがあるが、なぜかIL上のraiseアクセサは使っていない。
WebBrowserでページを読み込む→読み込まれたページにある画像を保存、という作業って何通りくらいのやり方がありますかね 自分だとソースから画像のアドレスを分析して直ダウンロード、くらいしか思いつかないのですが・・・ 他に方法ってあるのでしょうか ちょっと気になったので
わざわざRaise使わなくても public void Raise〜(e){ this.handler(this, e ) } でできるような希ガス
DocumentにImagesぷろぱちーなかったっけ
>>336 ありました!
ありがとうございます
・・・そしてすいません
どうすればImage型の変数に入れられるんでしょうか?
どうも変換の仕方がわからなくて;
そろそろ眠くなってきたお
338.Sleep(new TimeSpan(7, 0, 0));
338.Exit();
>>337 src使って画像ファイルをダウンロード、でいいんじゃね?
キャッシュ効きそうな気するし。
IHTMLElementRender.DrawToDC()とかでなんとかできんのかなと思うけど。
WebClient の DownloadData のち ImageConverter
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\ja の中にあるxmlの英語版が欲しいです。 英語版をインストールしたらenディレクトリが出来たりするのでしょうか? どなたか、英語版をインストールしている方、調べてみて下さいませんでしょうか?
自分でやれ
>>343 DLLのXMLドキュメントならv4.0フォルダに入ってない?
>>345 どうもです。
どうやら、3.0と3.5とSilverlightの3.0と4.0は英語と日本語の両方が入っているけれど、
4.0だけ、jaしか入らないようです……
なるほど……
347 :
デフォルトの名無しさん :2010/11/14(日) 08:29:16
勉強のため、 NetworkStream、TcpClient を使って、HTTP通信を試してますが、 HTMLが全て受信できなくて困っています。 いつも同じ場所で受信できなくなり、 それ以降は無限ループさせて Read させても、受信できません。 そもそも、レスポンスの Content-Length: が想定よりも、短く返ってきているため、 apache の問題のような気もします。 (ブラウザでアクセスした場合は、正常に動作しています) また、NetworkStream は、ブラウザでアクセスするよりも4倍近く遅いのですが、 そう言うものなのでしょうか?
chunkedに対応していないとみた
>>341 ありがとうございます
ちょっと調べてみますね
350 :
347 :2010/11/14(日) 09:33:56
>>348 特にそう言った指定はしていないのですが、
NetworkStream と言うよりも、HTTP の話と言うことですかね。
ちょっとそっち方面で再度調べてみます。ありがとうございました。
C#のチャートコントロールについて質問です。 エリアチャートを使用し、塗りつぶしを行いたいのですが マイナスの値をとった場合、色塗りの基準点が自動的に0からになってしまいます。 Y軸の最小から塗りつぶしを行いたいのですが、どのような方法があるでしょうか。 また、空の値を入れる方法と、空の値の間を線グラフに表示しない方法もありましたら ご教授いただければ幸いです。 値はDBからの取得ではなく、算出して設定しています。 よろしくお願いいたします。
うん
へえ
WPF遅いよ
WPFってGUIが複雑になるほど どこでどんなデータを必要としているのかわかりにくくないですか? こういう場合簡単にわかる方法は用意されてないの?
またおまえか
そんなもんWPFとか関係ないだろ ちゃんと仕様書を書け
仕様書?本職でもないのにそんな面倒なことしてられるかよw
面倒とか言ってて破綻したら世話無いわ UMLでも描いとけ
UMLなんて面倒すぎるだろ GUIが必要としているプロパティがパっとわかるような機能ないの?
無いよ。帰れ。
こんな簡単なことすらできないのか なんのために分離したんだよ GUIと分離コードの連結部分がどのようになっているか 視覚的に見れないなんて、把握しづらいじゃないか
そんなことはあらかじめ決めているべきことであって 後でわからなくなること自体がおかしい
>>363 ここは初心者スレ
大抵は作りながらあれこれ機能を足していくもの
それに、全体把握して作れるにしても
あって悪い機能ではないだろ
何でマイクロソフトに媚びた発言してるの?
またお前か。
トリップつけとけよ。
きちんと拡張性を意識した設計ならあとで分からなくなるとかないと思うんだ
わかんなくなって困る、ってんなら、GUIとコードを視覚化する ツールでも作れば? せっかく開発ツール使ってんだしさ。
とりあえずオブジェクト指向に即したコード書いてれば 拡張性を意識しなくてすむんじゃね?
拡張性を意識した設計のための勉強ってどうすればいいのだろう
VとVMのバインドなんて単純作業だから構造把握できない理由になんてならんだろ 自分の能力不足をMVVMのせいにするなよ
>>370 そんなことはない
拡張性考えないで素直に作ったらクラス間が依存しまくりで拡張性なんか無くなる
>>373 クラス間が依存しまくるコードってオブジェクト指向の方向性として正しいか?
例えば2chブラウザのような複雑なものを作ろうとした場合 大量にbindingするじゃない xamlのプロパティから分離コードに、又はその逆に飛べたりすりゃまだいいが それができないからもう、どこがどこバインドしててどうなってるか わからなくなるんじゃない?
わからなくならないように作りましょう
>>374 たとえば、オブジェクトAでイベントが発生したことをオブジェクトBが受け取りたいとすると
素直に考えりゃAがBにメッセージを送る、つまりAのクラスでBのメソッドを呼ぶのが一番自然なわけだけど
そうしないでObserverパターンやデリゲートを使うのは、やっぱり拡張性を意識してるわけだ。
EEしか使ったことないけどProだとUML生成してくれるんだろ? 活用しようぜ
>>376 できるわけないだろ
2chブラウザなんて大量のコントロール配置するんだぞ
それをxamlでズラーっと並べられているのを読めって言われてもな
昔のBasicインタプリタじゃないんだからさ
どうにかしてほしいわ
え?2chブラウザのUIってそんな複雑か?
うーん、Jane見る限り以前作ったショッピングサイト管理ツールの方が コントロール10倍くらい多いが
WPFならツールボタンやメニューアイテム一つ一つがViewModelを持つようにするんだろうから そんなに複雑にはならんでしょ
ショッピングサイト管理ツールって サイト自体の管理ツール? 想像しただけで恐ろしい
お前らは楽できる機能が要らないということか? だったらアセンブラで書けよ なんとために、B,C,C#ができたんだよ できればいいだけなら、C#いらないだろ
>>382 だからさ、XamlからすぐVMのコードに飛べないだろ?
XamlでVMのプロパティが候補に出ないだろ?
こういうのが面倒なんだよ
無い物ねだりしてもしゃーないし、 3つTreeView・ListViewがあるだけのビューで困るのはスキル不足としか
>>385 無いものはしょうがないんだからMSに要望でも出しとけば?
>>385 それかそう言うのができるもっと素晴らしい言語を探すたびに出てください。
「例えば2chブラウザのような複雑なもの」はどこいった
C#++はまだですか
どんな2ちゃんねるブラウザを使ってるのか興味あるわ それらがC#よりも便利な言語で開発されているなら考え改めるけど
日本人はこういう発想だから、snoopやXAML Power Toysみたいなのが作れないんだろうな 現状で甘んじてるてて向上心がない
>>390 3つTreeView・ListViewがあるだけの2chブラウザしかお前は見たことがないの?
>>392 ツインテールも重いだけだろ
ここは初心者向けのスレじゃなかったのかよ
C#5.0で何の機能がつくのかな C#4.0だとダイナミックとか なんか関数のオーバーロードみたいなやつ(引数なしの関数使えるやつ) とか出てきて、クソ楽になったんだが。 いちいち型とか決めるのめんどくさいから全部ダイナミックでいいじゃん、みたいな。
うわ、ひょっとしてtwintailスレのキチガイか
文法覚えるより、膨大なライブラリから目的の機能を見つけるのが非常に面倒
>>395 初心者スレだけどすさまじい向上心を持った初心者が現れたのです
自分の必要な開発補助が存在しないことにご立腹みたいです
とりあえず相談室かVisualStudioスレ行って。 ここは Q これどうやるんですか A こう Q できた、ありがとー♪ こういうレベルのスレだから。
@ITのWPF解説はほんと糞だったわ あそこみてもWPFの概要がまったく理解できてなかったらしく パネルにボタン配置する方法すらわからなかったわ たかがこの程度の機能をつけるのに何時間もかけさせやがって ItemsControlというのがあり これがコレクションデータを表示ために必要 これに対して、どのようにボタンを配置するか、 パネルはないを使うかをテンプレートで設定しなければいけない こういう根本的なことをなぜ解説しないんだよ どっかまともなWPFを解説するサイトないのかねー
頼むからトリップ付けてくれ
>>401 それはお前が悪い
@ITのドトネト記事は
インサイダーNET
NET開発者中心
っていう二種類があるが
インサイダーNETは初心者中心
NET開発者中心はある程度の知識や経験がある人向け
WPF入門はNET開発者中心だから、おまえみたいな初心者が見るものじゃない
なんでもタダでもらえると思い込んでる、クレクレ君か・・・。
もうほっとけって
>>401 > あそこみてもWPFの概要がまったく理解できてなかったらしく
ごめん日本語で
日記が書きたいなら別にスレ立ててやれ
>>407 自分自身を客観的に見ることはできるんです
あなたとは違うんです
>>401 のセリフが客観的とか、それこそ日本語でOK
>なんか関数のオーバーロードみたいなやつ(引数なしの関数使えるやつ) ってなに?
4.0じゃないけど拡張メソッドか?
4.0 の話してるし、エスパーするとデフォルト引数のことかね?
オプション引数でしょ バージョニングの問題があるからアセンブリの外から見えるメンバには使えないよ FxCopで警告が出る
XAMLで登録した、<Window.Resources><BitmapImage>ってCS側で利用するのどうすんの?
>>413-414 static int Sum(int x = 0, int y = 0, int z = 0){ return x + y + z; }
これのことか
確かにこれは便利だね
>>415 this.Resourcesからx:Keyでつけたキー名で取得
よくWPFのDataGridは重たいって聞くけど リアルタイムで項目が追加されるデータソースを表形式で表示するような場合 WinFormsのDataGridView(仮想モード)と比べて体感できるほど違いはある? データ多くて10万件くらいまで、速い時で秒間30項目くらい追加されます。
試せばいいじゃん
>>421 WPF初心者がよくわからないままDataGrid使っても
本来のパフォーマンスを出せないんじゃないかという心配が。
それはいいわけかwとりあえず試してみる
WPFのDataGridはスクロールが重すぎて実用にならん、という話は聞いたことがあるな しかし10万行をユーザにどうしろってんだ…
>>423 Wireshark(パケットキャプチャソフト)みたいなイメージです
項目がどんどん追加されて流れていくみたいな感じ
VisualStudioの2011はでそうなのかな。 今更2010Pro買うか迷うわぁ・・・。
>>420 比べると3倍ぐらい重い
ソートも遅い
スクロールのfpsは1桁以下
通常表示でも30fps程度
これで3Dやろうなんてのは無能
そもそも表示するだけならListViewでよくね?
とりあえず自分でも作って試しますが、
>>426-427 を読む限り、DataGridはむりそうですね
WPF化自体を諦めるべき?
>>429 個人で使うだけで、尚且つハイスペックマシン(GTA4を3つ同時起動できるぐらい)
ならやってもいいんじゃない?
>>428 よくわかってないんですが、ListView + データ編集機能 = DataGridってことですか?
ListViewならパフォーマンスも期待できる?
>>430 そんな灰スペPC持ってないです><
>>431 とにかくどんなアルゴリズムでやろうとも
WindowsフォームやC++MFCで作られたものと
比べて体感できるほど重い、もっさりだよ
20行程度でソートするのに0.5秒かかるからなww
どこでスペック食ってるんだよとw
>>431 VSのIDEみてみろ。あのもっさり感
超エリート集団が作ったのでさえ、あのもっさりだよ?
パフォーマンス気になるならC++がオススメ
手間が多少かかるが、速度的に不満が出ることはない
もちろん、クライアントもランタイムや速度で不満が出ない
>>432-433 まじですか。上司からは、スムーズな動作(見た目的に)を要求されてるんでWPFはダメそうですね。
DirectX使ってるからこういうのは有利なのかなと思ったんですが勘違いでしたか。
やはりC++ですか。
C#以外でGUI作ったことないんですがMFCなんかを勉強すればいいんですかね
失礼、
>>432 にC++MFCって書いてありますね。
ちょっとMFC勉強してきます。
いまからMFC勧めるとか・・・ 有料IDEじゃないと開発環境そろわないのに・・・
シリアルあればだれでもUltimate体験版を製品版にできるし
>シリアルあれば なにそれ怖い。犯罪?
こうして多少どころじゃない茨の道を進むことになったものがまた一人
封じるとか犯罪とかなによw ちゃんと購入してシリアル入れれば製品版になるよ
442 :
デフォルトの名無しさん :2010/11/15(月) 01:59:01
まあシリアルなんかいれなくても評価版をインストールしてしまえば 展開されるATL+MFCのフォルダをピーコしてExpress環境で 使えるようにしちゃえばいいだけなんだけどねw
そんな面倒なことするより、あるファイルにシリアル入れてインスコすればだれでもUltimate体験版を製品・・・
>>422 >WPF初心者がよくわからないままDataGrid使っても本来のパフォーマンスを出せない
スクロールする度にサイズ調節が走ってレイアウト変更するようなやつ作っておいて、遅いとDataGridのせいにしてる人はよく居る。
余計なサイズ調節が入らないようにして仮想化(EnableRowVirtualization/EnableColumnVirtualization)しとけばだいぶマシになる。それでも他に比べりゃ遅いけど
WPFのDataGridは色々入っててオーバースペックなので、軽い機能制限版がいいならListViewで作っちゃってもいい。WPFでは(ListViewを含む)あらゆるコントロールでデータ編集機能を実装できる。
WinFormsのDetaGridで十分ならそれでもいい。WPFに組み込みたいならWindowsFormsHost。
>C++(略
C++とMFCでDataGrid?w まぁいいけど
どうやったらこんなに重いソフトが作れるんだろうな 3Dゲームがあれだがグリグリ動くのに どうしてこれはこんなに重いのか
コントロール名で検索してもWPFの記事ばっかり見つかる もうだれもwinフォームで作ってないのか?
つーかMVVMを実現するためにテキストを使ってるんでしょ?
DataGridもさることながら、.NETとMFCのPropertyGridの使い勝手の差はひどい。
449 :
420 :2010/11/15(月) 02:50:14
とりあえずWPFのDataGridとWindowsのDataGirdViewで試してみましたが、 WPFのほうがスムーズでCPU使用率も低くなりました。 DataGirdViewの仮想モードの使い方が間違ってるのかな。 そして時間がががががが
450 :
420 :2010/11/15(月) 03:07:48
>>449 が言葉足らずなので補足しておきます
データの追加がない時の手動スクロールに関しては
みなさんの仰る通りWindowsFormの方が圧倒的に優れていましたが、
30msごとにデータを追加してその項目を表示するという動作に関しては
WPFのほうがカクツキが少なく、CPU使用率も半分程度でした。
>>450 それWinFormで自動ソートとかにしてるんじゃないの?
頻繁に追加・変更・削除するならWPFでいいんじゃないか?
オサレなGUIを作りたいならWPFでいいんじゃないか?
456 :
420 :2010/11/15(月) 06:57:22
>>444 なるほど参考になります。
>>451 そんな機能ありましたっけ?
>>455 なるほど、列数が増えると遅くなるのか。
あとで試してみます。
ふー ・今日はブラシでオサレGUI ・DataGridよりListViewの方が軽いとのことでxaml大幅に改良 でも、分離コードは全然弄らなくてよかった。すげーw ・WindowsフォームでもそうだったがWPFのListViewにソートついてないんだなこれが、ソートはまた明日だな ・ListViewで一部の列の右揃えで苦戦したわwwなんなんだこれは 着実に進んではいるが2週間でまだGUIができてないってwwwいつになったら完成だよ
君の個人的な進捗なんてだれも興味ないんだけどやめてくれない?
つ チラシの裏
460 :
420 :2010/11/15(月) 09:22:52
>>455 列数を3から実際に使う予定の8に増やしたところ劇的にパフォーマンスが落ちました。
やっぱDataGrid使えないです。
DataGridViewの方はRowCountを設定している部分がボトルネックのようです。回避不可能?
とりあえず、ListViewは列が増えてもそれなりに動いてくれたのでこれで行きます。
いろいろなご意見ありがとうございました。
リストビューでJpeg画像をImageListで表示してます。 でもパレットが256色以下に劣化してしまいます。 フルカラーの画像はリストビューでは表示出来ない仕様でしょうか?
ImageListにbitなんちゃらみたいなプロパティがあるはず。 なんちゃら32bitにしとけばおk。
みんなエディタのフォント何を使ってるの?
>>460 WPFのDataGridはSilverlightからの移植だから
もともとそんなに多量のデータを表示するようにはできてない
465 :
461 :2010/11/15(月) 10:02:39
>>462 ありがとう、うまくいきました!!!!
imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit;
これで一発でした、PictureBoxに表示してTableLayoutPanelに乗っけてとか
やってたら何かややこしい事になってたよ
>>466 メイリオすごく綺麗・・・
今までゴクックにしてたのが馬鹿みたいだ
>>468 重要なのは
l | ! i 1 0 O o : ;
が簡単に見分けられるか
メイリオだとちょっと怪しい
>>469 Consolasは2008までと書いてたけどインスコしたら使えた
プログラミング用にはこっちのがいいですね
Consolas以外ありえん
ListViewに2列のColumnがあって、常にその2列の幅の合計がListViewの幅と同じになるようにしたいのですが、 private void listView1_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e) { int idx = e.ColumnIndex; int nw = e.NewWidth; if (idx == 0) { listView1.Columns[1].Width = listView1.Width - nw; } if (idx == 1) { } } ユーザーが0列目の幅を変えた時はこれで1列目が自動的に変化してくれるのですが、 逆の条件if(idx==1)を書くと無限ループになってしまうのでできません。 if(idx==1){ e.cancel=true;}ではダメなようです。 とにかく列の無い空白部分が表示されなければいいのですが、なにか方法はありませんか?
int w = listView1.Columns[1 - e.ColumnIndex].Width; int nw = listView1.ClientSize.Width - e.NewWidth; if (w != nw) listView1.Columns[1 - e.ColumnIndex].Width = nw; これでうまくいったが
ChangingじゃなくてChangedイベントに書いたらできました。 お騒がせしました。
フォントをCourier Newに変えたらJavaのソースみたいに見える
Bitstream Vera Sans Mono一択
ListViewのColumnのWidthは、-1と-2がColumnの幅を整える特別な数字。 ちょっと調べてみ。
(´・ω・`)…
・ω・`)…
ω・`)…
C#は先行宣言できない、でおk? // 修正不可のコード public enum Hoge { foo1 } Hogeにfoo2を追加したいが、方法はあるでせうか?
新しい列挙体を作るとか
>>481 `)… できない。どうしてもというならもう少し詳しい状況説明を
485 :
デフォルトの名無しさん :2010/11/15(月) 23:10:21
>>481 というかなんでロジックじゃないのに修正不可なの?
影響範囲とか簡単に調べれそうだけどw
487 :
481 :2010/11/15(月) 23:50:37
VC++だと元のソースに手を入れなくてもenumにメンバー追加が可能(らしい) で、C#も何かうまい方法あるの?という質問だった C#はenumにメンバー追加するとき、元のソース修正は必須 であれば、受け入れるしかないか… 代替としてクラスで定義しておけば、MyHogeからfoo1が参照できるか と考えています(型がenumかintの違いはあるが) // 修正不可 public class Hoge { public const int foo1 = 0; } // 追加のソース public class MyHoge : Hoge { public const int foo2 = 1; }
>>487 すごく疑問なんですけど、それってどういう状況で必要なの?
>>481 の例だと
public enum Hoge2
{
foo1,
foo2
}
みたいにもう一個作ればいいんじゃないの?
>>487 のMyHogeみたいに定数として使うだけなら、
public enum Hoge { foo1 } // 変更不可
public enum Hoge2 { foo2 = 1 } //つくる
でもいいと思うんだけど。
public enum hoge { foo } public enum piyo { foo = hoge.foo, bar } piyo p = (piyo)hoge.foo; こう書いとけば少しは安全かな?
安全重視なら普通に新規作成がいいかと
C,C++,C#の違いを分かりやすく教えてください。ググったけどよく分からなくて。。。
本に例えると C 古典 C++ 専門書 C# ラノベ
三国人は空気を吐くがごとく嘘を吐く
ぜんぜんワカンネーし
C++たん、C#たんは見つかったけどCたんはググったけど見つからなかった
じゃあガンダムで言うと各言語ってどんな感じ? C言語を初代ガンダムとして。
うるせえよクズ 何にたとえたってお前には関係ねえよ
そのたとえ系はニュー速とかでやれよ
うめぇうめぇ
どうでもいいから
textBox1からtextBox10まで連続で名前をつけているコントロールがあるのですが、 これらをforを使って利用することはできませんか?
TextBox[]という配列でもいいし List<TextBox>というリストでもいいので作る 0始まりから9でもいいし0はダミーにして1始まりでもいいし お好きなように
(TextBox)this.Controls["textBox" + index.ToString()]とか?
中華PGはそういう書き方を当たり前にしてくるから怖い
>>509 Controlsが全部TextBoxである保証があるんだったらそれでもいいけどさ
指定されたパスにファイルが作成可能かどうか調べる方法はないしょうか? 今は実際に作ってみて、例外出たら無理みたいな処理なんですが。
それが一番確実でアトミックでもあるので問題ない フォルダーの書込み権限をチェックしたいとかなら System.IO.DirectoryInfo.GetAccessControlあたりとか
>>507 1.
TextBox[] itr = {textBox1, textBox2, ...};
2.
private IEnumerable<TextBox> itr() {
foreach (var c in this.Controls) {
if (c is TextBox)
yield return c;
}
で foreach (var c in x) ..;
回せればいいなら1.でいいんでないの
教えてください。2010Expressを使ってますが、ヘルプが表示されません。 何処かのサイトの記事に「解らないキーワードの上にマウスを置きF1」と書いてあったのですが、 うちのはヘルプが表示されません。そのとき表示される指示通り、 コンテンツもダウンロード更新しましたが、やはり表示されません。 どうすればヘルプが使用できるようになりますか?
518 :
481 :2010/11/16(火) 12:23:29
質問は純粋にC#の文法に関する問題で、
1行目に書いてある
>C#は先行宣言できない、でおk?
です
enumは元のソースを変更するとこなしに、メンバー追加できるか?で、
>>484 できない、が答えのようです d
>>485 ,488
今回はどういう状況で必要か、という問題には踏み込んでいません
どうしてもと言うなら、
・派生バージョンを作りたくない
・元のコードがおぞましいので見たくない
など何でもどうぞ
>>489 パーシャルでクラスを定義しておけば、目的のことができそう
ということに気づきました
みんな d
他のソフトに不正に割り込んで処理したいんじゃない?
>>518 >>487 ではint型使ってるけどenumみたいにしたいならこういう書き方のほうがいいかもね
public class Hoge {
public static readonly Hoge foo = new Hoge();
public static readonly Hoge bar = new Hoge();
}
かもね
ファイルの操作で教えてほしいのですが。 テキストファイルを読み込んだ後、当該ファイルを別フォルダに移動したいのですが、 テキストファイルを読み込むところから排他ロックを掛けて移動終了後に排他ロック を外したいです。 using(FileStream(...)){}を使用してファイルをロックして読みこんで処理と考えたのですが IOException例外が発生します。読込んだ後(using終了後)直ちにFile.Moveをしたとしても 他プロセスがロック待ちだと割り込まれそうで・・・ ロックを解除せずファイルの読み込み→移動にはどのような方法があるのでしょうか?
コピーすれば
よくわからんけど 監視対象となるフォルダXにぼこぼこファイルが出来て、 そこを見張ってる複数のプロセスがあって、 読んだプロセスが、読み終わったらフォルダYに移動する(=監視対象から外れる) ってことでいいの? まず別のフォルダ(Zとする)に移動してから読めばロック要らないんじゃないの? そんな単純な話じゃないのか
525 :
522 :2010/11/16(火) 18:27:50
んと、
>>524 さんのおっしゃるとおり、大体の流れはそうです。詳しくは
Xフォルダに別アプリケーションがTxtファイルを次々作成していきます。
(※その際に同ファイル名を作成(上書き)することもあります)
当該アプリは作成されたファイル名、ファイル内容、を確認したのちデータベース
に問い合わせて既に登録されているならUpdata、異なるならInsert処理を行います。
成功したならDoneエラーならError、それ以外だとそのままフォルダに残しておくようになります。
>>523 コピーだとファイル作成(更新日時)が変更されるためMoveを使用したく考えております。
(FileInfoから更新日時も変更できますが・・・当面は考えておりません)
526 :
522 :2010/11/16(火) 18:29:34
追加: 既に走っているソフトを1から作成し直すので大きい処理の流れは変更したくありません。 よろしくおねがいします。(C++ →C#)
>>525 よくわからんが、そのTxtファイルを作る側の(既存の)アプリとの
レースコンディションを考えてるわけか?
処理中に上書きされたくない、と
>成功したならDoneエラーならError、それ以外だとそのままフォルダに残して
>おくようになります。
イマイチ何を言ってるんだかわからんのだが、まずどっかに移動して処理、
残すべきときは単に戻す、ではダメなのか
JavaかC#をやろうと思ってるんですけど なんかSunがオラクルに買収されてからJavaコミュニティが元気ないように見えます 今からならC#のほうがいいですかね?
529 :
522 :2010/11/16(火) 18:43:50
現在の処理の流れを変えないように、、と上からのお達しがあるので
ロックをかける処理を行いたいです。
>>527 ちゃんと説明できていませんでしたね><
成功したらDoneフォルダ、失敗したらErrorフォルダ、サーバー接続エラーはフォルダ移動しない
と、したいです。
俺ならまずファイル名をに.tempとか付けて 上書きされないように(上書きする側の処理がWAITしないように)してから読むかなぁ。 別フォルダーに移動させるのと同じようなもんだけど。
う〜〜〜む、、、方法がなさそうかなぁ・・・・orz こうなったら上司に中間フォルダ作っていいか相談しようかな@w@
俺もよく分からなくなってきた。以前はちゃんと動いてたの? できるか知らないけど、usingじゃなくてAPIを使って昔ながらのロックを掛けたりできないのかな。
以前のプログラムはちゃんと動いていました・・・と、言いたいところですが 作成者も退職し残ったのはコードのみでそのコードもコンパイルできない (C++Builderのバージョン相違のため)という状況です。 なので、1から作り直すのにソースコードみて作成しています。また、 WinAPIはC#なら可能な限り使わず.NETに提供されているのを使ってくれ と言われているので、今回は,NETオンリー(できれば)で作成したいと思っています
なんか矛盾した要求だなぁ (なるべく変えるな⇔.NETを使え)
処理の流れは変えるな、使用する道具は.NETで統一しろっていうことですね
まあその上司と相談して決めればいいんじゃね
3年前にガソリンスタンドへ行った時の話。あの痛ましい事故は今でも鮮明に覚えている。 俺がガソリンを入れている最中、隣に空気が全然入ってないタイヤを履いた トラックが止まった。どうやら空気圧の点検を怠っていた為に減っている様だった。 俺は車が汚れていたので、洗車を頼みつつ店内に入って暫く外を眺めてた。 店内からはピット作業をしている所が見れたので、俺はさっきのトラックが ピットに入って来たので、ぼんやりと作業を見てた。 で、新しいバイトだと思われる可愛い茶髪の女の子が、先輩の指導を仰ぎながら黙々と 作業の手伝いをしていた。作業員が空気の入っていないタイヤを外し、 女の子が空気圧を入れる様に頼まれた所で痛ましい事故は起こった。 女の子が5分経ってもずっと空気を入れつづけているので、俺は「トラックのタイヤは 空気を入れるのは大変なんだろうな〜。女の子なのに大変だな。」と思った瞬間、 「ズドン!!」と言う爆音と共に女の子の頭が弾けて赤い血の霧が舞い上がった。 同時に店内の窓ガラスをブチ破って何か光る物が突っ込んできた。 店長が、「救急車呼べ!!一旦店閉めろ!!誰かタオルもってこい!!、〇〇(女の子の名前) の体を抑えてろ!!(激しく痙攣してのた打ち回ってた)」と動転し、 俺は何が起こったのか確かめようと、店内に飛び込んできた物を探し出した。 それはトラックのホイールだった。大きさは直径1メートルはあったと思う。 女の子は頭が半分吹っ飛んでいて、ピクピク痙攣しながら「うぅ〜、ふぅ〜」と 細い息をしていたが、俺は彼女がもう死ぬだろうと分かった。 何故なら血にまみれた脳が見えていたのだ。彼女が自分の手で脳みそを抑えていた光景は今でも 忘れられない。救急車が到着する間もなく、白目を剥いたまま彼女は死んでしまった。
_,. -‐ '' " ",. ̄'' ̄` ''‐、 ,.-' ,r'' _,,.. - 、 ` 、 ,.r'/// / ,.-' `' 、. \ / ,r' ,r' ,rfn、 \ '、 / ///// ,' ,' ,rffn. '" ヽ ', i ,.ァ .i '" ,riiニヽ. ',. ', | ,.r '" |. { ,riiニヽ _. ', ', | .,.r' | ! ,.. _,,.. -‐' _,..r' i .i |,' ', ', '、., __ ,.. -‐''"゙ } | .| | ', `、 ヽ ! } .} ', ', '、 ヽ ./ ! .| '、 `、 \ `ヽ==='゙ ,' ! `、 '、 ' 、 / .,' '、'-..,,_____ ___`、 `''‐- ..,, ,,.. r' / \ ヾヾヾヾヾ \ / ` 、 、、、、、、、、 ` - ..,,, _ _,.r'゙ `' - .,,_ _,. - ''" `"'' '' '' ""
なんぞ
static classについて、インスタンス1個しか作んないから使うってのは動機として正しいのでしょうか あと、private staticなメンバを含むことはできるのでしょうか
static class があればシングルトンそんなにいる?ってのは思う。 = じゃなくて、static class 使う ⊃ インスタンス1個しか作らないから ならいいんじゃないかと。 そりゃ、private メンバーも持てる。
>>541 回答あざっす
使用例ggってもpublicしか出てこなくて、ひょっとしたらだめなのかしらと思いまして
シングルトンはあとでインスタンス化するときに少し楽…になる 場合がある。 ちゃんとするとき、static に要求されるものって結構厳しいんだ。 すべてスレッドセーフ必須とか。状態なければいいんだけど シングルトンと比較するような用件は持ってたりするでしょ状態。
むしろ静的クラスはシングルトンを言語機能として実装したものと言っても過言ではない。
静的クラスが、というより、静的コンストラクターの仕組みかな<シングルトンを言語機能として。
546 :
デフォルトの名無しさん :2010/11/17(水) 10:44:22
WebBrowserを使用してますが、毎回Flashがあるサイトに行くと、アドオンのインストールがはじまります。 これを回避するにはどうしたら良いでしょうか? 環境はVS2008、OSはVistaです。
547 :
デフォルトの名無しさん :2010/11/17(水) 10:46:23
静的クラスは一度ロードするとメモリにずっと残る?けど、 シングルトンなら、不要になったらGCで削除されるとかの違いってありますかね?
えっ
。。。。。はい?
>>547 シングルトンをグローバル変数の代わりに使いそう
むしろシングルトンの9割はグローバル変数です
Settings.csに自分で設定保存をかいたものがあります。、 これは特に指定がないとLocalに保存されるみたいなのですが、 Roamingに保存するにはどう書けばいいのでしょうか?
554 :
552 :2010/11/17(水) 13:23:16
自己解決しました。
555 :
547 :2010/11/17(水) 13:32:42
事故解決しました。
>>553 グローバル変数じゃない正しいシングルトンの使い方の例を挙げてみてよ
つまり、アプリケーション全体でインスタンスが一つしか要らないんじゃなくて
そのクラス自身の仕様上、複数作られたら正しく動作しない場合ね
とっても少ないと思うよ
はぁ?シングルトンにグローバル変数としての性質があるのは常識だろ。 なんでわざわざ当たり前のこと書いてるのさ グローバル変数の代用としてシングルトンを多用するのは誤った使い方。 突然、むしろシングルトンの9割はグローバル変数です(キリッ)なんて言われても困惑するだけなんだが
まぁ本質的なことからすればグローバル変数は副作用みたいなもんだよな
?
?
?
アリガdって書く割りには、シングルdって書かないんだな。
グローバルに開放しないシングルトンも記述可能だが?
?
!
(/ω\)
え?
グローバル変数だってグローバルに開放しなくてもいいんだけど。
1分かける1年分の時系列データがあるんだけど、メモリ多かったらデータ全部メモリに載せる? それとも小分けする? 教えて。
そのデータの容量による
ありがとう。
>>569 件数にして約513Kか。1レコードあたり1KB程度なら余裕でオンメモリだな。
>>569 今後数年とか数十年のデータ増える予定があるなら逐次処理。
>>569 小分け。
どうやって表示したりするのかわからないけど、そんなに細かいデータなら、日時指定は普通だと思うから。
プロパティのget setの後にセミコロンがつかないのがきも public int X{get; set;} //この}の後ろにセミコロンつけるとエラー }がセミコロンの代用なのかと思ったら、 int[] a={1,2,3,4,5} みたいなのだとセミコロン必要みたいだし どういうこっちゃ?
式の終わりは常にセミコロン だからオブジェクト初期化子もコレクション初期化子の終わりにもセミコロンが入る。
578 :
デフォルトの名無しさん :2010/11/18(木) 02:57:31
モダンな言語でスコープは名前空間と関数のローカルに区切られる グローバルなんつースコープは古代遺跡にしか存在しない
アプリの機能が、アプリの目的が達成されるなら何でもよい
public class x{ public int X {get; set;}; public void Y(bool z){ if(z){ }; }; }; こっちのほうがよっぽどきもい
>むしろシングルトンの9割はグローバル変数です
>>578 グローバル変数なんて存在しません
えっ
>>579 つくって終わりならそれでいいんだけどねぇ
583 :
デフォルトの名無しさん :2010/11/18(木) 04:30:31
>>581 グローバルとローカルしかない世界からようこそ
>むしろシングルトンの9割はグローバル変数です スタティックでパブリックなフィールドをグローバル変数と同列に扱うなら分かるけど、 静的クラスやシングルトンをグローバル変数っていうのは違う気がする。 グローバル変数が嫌われるのはどこで変更されるか管理できない点なわけだし。 あと、静的クラスはシングルトンのように唯一のインスタンスを保証するために使われているというより System.IO.Fileみたいなショートカット置き場、System.Environmentみたいな定数置き場みたいな使い方が多い気がする。
別のスレッドからフォームを操作したい場合、 Invokeメソッド SynchronizationContextクラス AsyncOperationクラス を使えば実現できることはわかったんだけど どんな感じで使い分ければいいの?
>>585 ユーザープログラムではControl.InvokeかBackgroundWorkerを使う。
あとの2つは直接使うことはまずない。
AsyncOperationはBackgroundWorkerが内部的に使っている。
普通のアプリならInvoke/BeginInvokeとかBackgroundWorkerで十分 AsyncOperationとかはBackgroundWorkerそのものとかを作るためのライブラリ作成者向け
>>586-587 実はライブラリを作っているのです。
利用者側で同期をとるならInvoke、
ライブラリ内で同期をとるならSynchronizationContextかAsyncOperationというわけですね。
>>576 それは、if(){} の後ろのセミコロンが付かないのキモいって言ってるようなもの。
>>588 C# 5.0 の async の実装では SynchronizationContext 使ってた。
591 :
デフォルトの名無しさん :2010/11/18(木) 10:24:25
すみません質問させてください。 今カレンダーを作ってるんですが、 日付部分をlblDay0〜lblDay41というラベルにしてます。 このラベルの.Textを変更する際にたとえば |int i = 0; |("lblDay" + i).Text = "31" のようにオブジェクト名の一部を変数で指定することはできませんか?
リフレクション使うか、 コントロールを配列しにして管理するか、 WPFに乗り換えてItemsControl.ItemTemplateに頼るか。
wpfアプリケーションを開発してるんですが、textboxに入力したstring型の文字列(数字)をdouble型に変換したいのですが、どのような手法を用いたらよいのでしょうか?ご教授お願いします。
594 :
デフォルトの名無しさん :2010/11/18(木) 10:32:50
>>592 回答ありがとうございます!!
その3つぐぐってみます。
WPFってよく知らないですけど新しくて描画とかがすごいらしいですね
勉強するのに予備知識要りますか?
自分プログラム歴3日なのですorz
>>593 とりあえず、WPFと関係なく、
Double.Parse()
Double.TryParse()
C#自体の理解が不十分なうちはWPF難しいんじゃないかな
(前例がいるし・・・)
とりあえずはWindowsFormやっとけ、サンプルもいっぱいあるし
あと
>>591 は
>>507 あたりに似たような質問あるから見とけ
597 :
デフォルトの名無しさん :2010/11/18(木) 11:01:35
>>596 はい、
>>507 みてました。
あまり理解できなかったんですが回答の中の
>>515 は
>>592 さんが仰ってる「コントロールを配列にして管理」
にあたるって認識でいいんでしょうか?
ひとまず「リフレクションを使う」で1日目を適正な位置におくことはできました。
でも配列にして管理しちゃったほうが楽そうな気がしてきました。
>>595 private double SetNum(string str)
{
bool XX;
double num = 0;
XX = double.TryParse(str, out num);
System.Console.WriteLine(XX);
return num;
}
で構文書いたんですけど、出力がFalse返ってくるんですよね。
どこが間違ってるんでしょう。。。
配列のほうが楽だろうね それにカレンダーだったら 二次元の配列をつかえば見通しも良くなる
>>598 トライパースの使い方
double num;
if(double.TryParse(str, out num)){
System.Console.WriteLine(num);
}else{
System.Console.WriteLine(str + " は数字ではありません");
}
今までConvert.ToDoubleを使っていた俺 tryParseのほうが早いのね
Convert.ToDoubleは中でdouble.Parseよんでるだけ ParseとTryParseのどっちが早いかっていうと 例外が発生しない分TryParseのほうが優勢
WPF ならデータバインディングしとけば勝手に文字列から値への変換してくれるのに。
>>606 System.Windows.Controls.TextBox: 4 は数字ではありません
System.Windows.Controls.TextBox: 4
0
>>607 半角です。
4じゃなてく、「System.Windows.Controls.TextBox: 4」が入力とかじゃないよね、まさか?
System.Windows.Controls.TextBox: 4 WPFでTextBoxが丸ごと文字列になって、それがTryParseされてる。 TextBoxのTextを取り出せ。
TextBox.ToString() してるヨカン
WPFからC#使い始める世代が出てくるのか
◆Jzt/EX0TGY8Tとかまさにそれだな
>>609 入力は4です。
>>610 頑張って…みます。
>>611 大正解です。これらを修正したらいいんでしょうか?
x = textBox1.ToString();
//System.Console.WriteLine(x);
X_point = SetNum(x);
//System.Console.WriteLine(X_point);
C#独学でやってるからもうわけがわかんない
>>609-611 できました!
感動しました。
下の階層にTextがあることに気が付きませんでした。
C#なんてみんな独学だろ
x = textBox1.Text; でおk。 でも、せっかくWPFならBindingとConverter勉強するよろし。
あえてConvertで double x = Convert.ToDouble(textBox1.Text); ToStringは文字列に変換する時に使う textBox1.Text = x.ToString();
バインディングは便利だな 複数のオブジェクトで同期するのが OnChangeイベント等でごちゃごちゃ書いてたのが 超簡単にかけるようになった
class Person{ public int age; public string name; } なクラスがあったとして Person taro = new Person(); taro.age=20; taro.name="山田太郎"; みたいに書くのを taro=20; って書いたら、ageに20が代入され taro="山田太郎"; って書いたら、nameに山田太郎が代入される みたいなことってできる? 演算子のオーバーロード利用すればできるかなと思ったんだけど =はオーバーロードできないみたいなんだけど、どうやればいいだろう
621 :
デフォルトの名無しさん :2010/11/18(木) 17:24:20
Person taro = new Person(){ 20, "山田太郎"}; こんな感じのことはできなかったっけ?
そんなことして何になると思うが taro.set(20) taro.set("山田太郎") ではいかんのか?
>>620 それをどこで実現するかだな
スクリプト組んだりやINIに書いて、それを評価してって話ならわかる
C#の中だとコンパイラにタコ呼ばわりされるだけだが
一つのクラスにint型が複数あったらごっちゃになるし、どこで使うんだそれ
ヒント class Person{ public string name; public int age; public int height; public int weight; }
VB〜6のwith構文はよかった with hoge_struct .name = "abc" .age = 15 end with
628 :
デフォルトの名無しさん :2010/11/18(木) 17:36:58
>>627 C#もにたようなことできなかったっけ?
どうしてもって言うならtryParseやParse(VBならIsNumeric)使って数値に変換出来るかチェックして、 数値に変換出来るならageに入れる
with文イラネ
>>626 >>625 は、person = 5; とかできるとした場合、age、height、weight のどれに入れて良いかわからないってことが言いたいんだと思うよ。
初期化するときに Person taro = new Person { age=20, Name="たろー" }; ならできる。
>>628 >>621 にもあるけどオブジェクト初期化子のこといってるならこんな感じ
var p = new Person() { age = 20, name = "山田君" };
>>631 625と626は同じこと同時に書き込んだだけ
改めてここの応答性の良さには驚かされる
620が言ってるのは初期化時の話じゃないだろ?
もう object age object name とかでいいや
いいやね
>>633 キモすぎるw
そんなコードに出会ったら前任者の嫌がらせとしか思えんわw
逆向きなら簡単なんだけどね string name = taro; みたいな
パブリックフィールドとプロパティって アクセサが付かないだけで同じだと思ってたのに WPFだとプロパティとして宣言しておかないと機能しないんだな どうやってVはプロパティではないと判断しているんだろう
プロパティってメソッドじゃなかったっけ
メソッドの扱いならメソッド自体もそのまま扱えるはずだけど、 実際はObjectDataProviderなんかを使う必要があるので、 プロパティだけ特別な扱いなんだろう。
.NET 1.0のはじめからプロパティとフィールドは別扱い WinFormのPropertyGridだってフィールドは表示しない
>>642 WPF のあれはリフレクションでやってるからねぇ。
Type.GetProperty 使うとプロパティしか返ってこない。
実装上、プロパティとフィールドはまるで別物。
区別しない方がむしろ難しい。
ProcessStartInfoで外部のコンソールアプリを実行させた後、 DOS窓を閉じないようにするにはどうしたらいいですか?
cmd /k
ListBoxで選択してある項目を全部削除したいのですが Lbox.SelectedItems.Clear(); としても, foreach(int x in Lbox.SelectedIndices){ Lbox.Items.RemoveAt(x); } としても期待通りに動いてくれません。 何か方法があればよろしくお願いします。
まず、ListBox.SelectedItemsで取得したコレクションをClear()しても、 ListBox.Itemsには何の影響ももたらさないことは当然ということを理解しよう。
なんらかのテキストファイルに 日本 13 40 中国 140 420 アメリカ 25 280 ロシア 10 500 ・ ・ ・ みたいに 国名 数字1 数字2が書いてるとします このテキストファイルを読みとってCountryクラスの配列を自動的に作りたい。 class Country{ public string name; public int data1 public int data2 } country[0].nameが日本,data1が13,data2が40で country[1]が中国 140,420で・・・ こんな風にするにはどうしたらいい?
テキストファイルを読みとってCountryクラスの配列を作ればいいだけじゃ
>>649 List<object> sv = new List<object>();
foreach (var item in listBox1.Items)
{
sv.Add(item);
}
foreach (var item in listBox1.SelectedItems)
{
sv.Remove(item);
}
listBox1.Items.Clear();
listBox1.Items.AddRange(sv.ToArray());
>>651 public static Country[] LoadCountries(string path) {
var list = new List<Country>();
using (var sr = new System.IO.StreamReader(path)) {
while (!sr.EndOfStream) {
var line = sr.ReadLine();
var strs = line.Split(' ');
var d1 = int.Parse(strs[1]);
int d2 = int.Parse(strs[2]);
list.Add(new Country() { name = strs[0], data1 = d1, data2 = d2 });
}
}
return list.ToArray();
}
ファイルがない場合や書式が違っていた場合の例外処理は自分で作ってくれ
APIスレかこちらか迷ったのですが・・・ midiOutOpen()をC#で呼び出したときについて教えてください。 以下はPINVOKEより、C#のサンプルコーディングですが、 [DllImport("winmm.dll")] static extern uint midiOutOpen(ref IntPtr lphMidiOut, uint uDeviceID, IntPtr dwCallback, IntPtr dwInstance, uint dwFlags); IntPtr hmidi = IntPtr.Zero; midiOutOpen(ref hmidi, 0, IntPtr.Zero, IntPtr.Zero, 0); Q1:IntPtr.Zeroフィールドって何ですか?hmidiも、第3・第4引数も全部IntPtr.Zeroってのは、これは何をやっているのですか?hmidiは開きたいmidiデバイスのハンドルですが、そこにCALLBACK(?)を代入してるのですか? Q2:上とも関連しますが、第5引数が0ということは、これはCALLBACK_EVENTってことですか?この場合のCALLBACKがどういう機能なのかイマイチわからないです。 解らない事だらけでスミマセンorz。部分的でも結構です。よろしくお願いします。 C#上でのCALLBACKの挙動を理解しないと、次のmidi受信系の段階に進めそうにないので・・・
656 :
デフォルトの名無しさん :2010/11/19(金) 09:07:32
いわゆるぬるぽだね Cで開発する際にポインタに何も設定されてませんよっていうヌル(NULLだっけ?)と同等
657 :
656 :2010/11/19(金) 09:10:36
658 :
656 :2010/11/19(金) 09:13:44
コールバックでぐぐって勉強してください。 非同期で何かの処理をやってもらう際に別のスレッドもしくはタスクから 特定条件で呼び出して欲しい場合に使ったりする
>>656 レスありがとうございます。
プログラミング始めて2ヶ月なので、いまいち内容がわかりませんが、勉強してきます。
お蔭様で、紹介してもらったページで初めてフラグやリザルトが数値で対応してる表に出会いました。
MSDNではテキストしか載ってないので、どこかに対応表は無いのかと探していました。
コールバックフラグ=0はCALLBACK_NULLだったんですね。
660 :
655 :2010/11/19(金) 11:55:56
>>657 すみません。紹介していただいたページの記述に関して質問なのですが、
第5引数のuint dwFlagsに入れる数値なのですが、
CALLBACK_WINDOW(表の2段目)を指定したいとき、フラグは「0x00010000」と表記してますが、
「0x」とは16進数を表す記号だと理解してるのですが、
その後ろの「00010000」というのは8bitの文字列表記(?)なんですかね?
ということは16進数の通常表記だと「0x10」とか「10H」ってことですか?
これを第5引数のuint dwFlagsに入れるには、10進整数に直して
dwFlags = 16 ですか?
なんか色んな表記や型が出てきてこんがらがってしまって。
0xFFFFFFFF
プログラム始めて2ヶ月の初心者が、マーシャリングが必要な 「C#でmidi」に挑戦するのは難しいよ 不可能とは言わんが 素直にC・C++で始めた方がいい
>>660 0x0001000は65536の16進数表記ですよ
ちなみに1を引くと0x0000FFFFになります
PInvoke 回りがネックになるのは悲しいなぁ。 そのためだけにC/C++に移ると、それはそれでネック以外のところで苦労するし。 特に GUI アプリにするなら。
665 :
655 :2010/11/19(金) 13:28:10
>>663 ありがとうございます!0x10000(または10000H)と同じ意味なんですね。
使っていない上の桁まで0で埋めるのは、そういう慣習なんですかね?
初めて見る表記で、意味不明です・・・
>>664 そうなんですよね。C++2010ExpressのWindowsフォームアプリケーションは、
ちょっとGUI楽みたいだけど、CRLだから普通のC++とは違う物らしいですし・・・
一応、平行してC++勉強もしてるんですけど、混乱してます。
あっそ
「標準講座C#」とかの本を一読してみた方が良いよ>655
>>665 >使っていない上の桁まで0で埋めるのは
好みの問題
変数の大きさで勝手にやってくれるし
なるべく変数のサイズで書いた方が分かりやすいのも事実
>>653 どうもありがとうございます!
一旦全部消してから追加するってのは思いつかなかったです。
あれこれ何時間もハマってたので助かりました><
>>669 わざわざ全部消さなくてもこれで十分
var arr = new System.Collections.ArrayList(listBox1.SelectedItems);
foreach (var item in arr) {
listBox1.Items.Remove(item);
}
>>670 あれこれ何時間もハマってたので助かりました><
>>649 の下は何でダメ?
消してる最中にindexずれちゃう?
List<T>でnewしたlistlinkに、ちゃんとリストが出来てるか内容を確認したくて、 一時的にリストボックスに表示させようと listBox1.Items.Add(listlink); としたのですが、リストボックスには「(コレクション)」としか表示されません。 リストボックスに項目を表示させるには、またはlistlinkの内容を確かめるにはどうすればいいですか?
>>672 SelectedIndicesのEnumeratorは"内部的"にSelectedItemsを保持してる。
Itemsから項目を削除するとSelectedItemsも更新されるのでItemsに対するindexがずれることはない。
ただしSelectedItemsの項目数は減るので、Enumeratorのindexがずれてしまう。
結果1つ飛ばしで選択された項目が消えることになる。
>>673 listBox1.Items.AddRange(listlink.ToArray());
>>675 無効な引数が含まれると、int[]をobject[]に変換できないと叱られました。
List<T>はList<int>です。
じゃあこっちで foreach (var item in listlink) { listBox1.Items.Add(item); }
>>678 できました。ありがとうございます。
Addメソッドは逐次追加にしないと駄目なんですね。
VC#でC#4.0のコードを書いた場合、.NETframework4.0がインストールされたマシンしかそのプログラムは実行できないんですか?
言語のバージョンと.NETのバージョンは基本的に関係ないぞ VS2010使えばC# 4.0だがターゲットは.NET 2.0〜.NET 4まで選べる まあ.NETのライブラリに依存する言語機能もあるけどな
c#ってなんでconstメソッドがないの?
C++でもまともに使えてるやつはあんまいないのに旧VBの惨状を考えれば.NETに導入できるわけないだろう?
無料厨の変遷 Delphi6→C#
無料のくせにVC# Expressが便利すぎるから仕方ない
でもVS2010から完全なフリーではないんでしょ?
え、何が?
>>687 完全なフリーって何?
無料で手に入って、仕事で使って成果物を販売するのだって一切制限されてないけど
シリアルの取得をしないといけないだけ
スレタイに“ふらっと”を入れているあたり、音楽とかけているのか
はじめのころはC#と全角で書いてたからな プログラマが立てたスレタイとは思えなかった
windowの形を○や△などに変えたいのですが windowの外枠(最大化ボタンなどがあるフレーム))を消す方法ってありますか?
FormBorderStyle
>>682 正しく使わないとうざいだけ、
あるいは、「面倒だから」を理由に利用の徹底が無理そうだから。
c++ってなんでconstメソッドがあるの?
>>692 スレタイに#を使わせなかった運営に言えよ
運・・・営・・・?
半角の#をスレタイに入れようとすると弾かれたって意味でしょ 当時のこと知らないから本当かどうかわからないけど
Part1 2002/06/11 くだスレC# Part4 2003/07/24 ふらっとC♯ Part6 2005/07/22 ふらっとC♯(初心者用) Part9 2006/09/10 ふらっとC♯, C#(初心者用) Part15 2007/04/12 ふらっとC#, C♯, C#(初心者用) Part16 2007/05/16 ふらっとC♯, C#(初心者用) Part21 2007/11/18 ふらっとC#,C♯,C#(初心者用) 半角#が定着したのはPart21から。 ちなみに相談室のPart1は2000/12/18から。もうすぐ10周年。
昔はGoogleで"C#"って単語だと認識されずにCと記号だとしか解釈されなかったから "C#"でググっても探せなかったって問題も関係あるのかも
思ったより伝統あるスレなんだな 9年前とは
ふーん あっそう で?
ふーん あっそう で?
ふーん あっそう で?
麻生がどうかしたか
cscって勝手に文字コード変えちゃうの? eucがsjisに変わっちゃうんだけど
712 :
デフォルトの名無しさん :2010/11/21(日) 22:36:11
ソースの話?
Console.Write("さしみ"); ↓ 、オ、キ、゚ になっちゃう エディタと出力はどっちもeucに設定してあるんだけどな
714 :
デフォルトの名無しさん :2010/11/21(日) 22:44:48
? >Console.Write("さしみ"); これを実行した結果の話をしてるの?
そうです
コマンドプロンプトの文字コードがcp932になってるからじゃないの?
そんなバナナ
まさか
719 :
デフォルトの名無しさん :2010/11/21(日) 22:53:24
Console.Write(@"さしみ"); これだと関係なかったっけ? \が入ってるパスのようなのを入れるときは@つけるんだっけ?
まったく無関係。
721 :
デフォルトの名無しさん :2010/11/21(日) 22:58:35
まあ、部分的にだされてもなあ・・・ OSとか環境とかIDEの設定とかも影響するかもしれないし 文字化けするとか言われても・・・
c言語ではエディタがeucでもできたんですよね
ソースコードのコードページがなんであっても内部コードはUnicode固定で、 Console.Writeでは出力時にコンソールのコードページに変換される。 /codepage:<n> でeucも通るのか。
>711 cscでコンパイルされると文字コードはUTF-16になる。 EUCで書いてEUCで出力してみたが、何も問題無いぞ。 using System; using System.Text; public static class Test { private static void Main() { Console.OutputEncoding = Encoding.GetEncoding(20932); Console.WriteLine("マンコ"); } } // csc.exe /codepage:20932 Test.cs // Test > out.txt
>>724 の通りやったらなんか画面の文字が変わったりフォントが変わったりしたから
なんか根本的におかしいのかな
726 :
724 :2010/11/21(日) 23:14:43
>>725 コンソールにEUCのデータ出力したら、そりゃおかしくなる。
ちゃんとリダイレクトで画面に(シフトJISとして)不正ななデータ出さないようにすんだよ。
というか、出力をどうしたかったの?
eucのソースコードをms932としてコンパイルしてないか? 環境が分からんが直接cscをコンソールで入力しているなら csc /codepage:20932 xxxxx.cs としないとcscはeucとして識別しない。
>>726 ただ普通に表示させたかったです
いつもLINUXでやってるからeucでやれたらいいなと思って
>>727 コマンドプロンプトっていうかcygwinでやってます
csc.exe test.csでコンパイルしてました
そうやらなきゃいけないのか、どうもー
UTF8で保存して、そのファイルEnc設定ちゃんとしないで文字列読み込んだんだろ
今時LINUX(笑)でEUC使ってる奴って何なの? コンパイラにソースの文字コード指定せずに自動認識されると思ってる奴って どれだけゆとり?
プログラム→
http://ideone.com/rJDVL @button1をクリック→panel1の左上に画像(ABC.GIF)を表示
A画像をドラッグ&ドロップで任意の位置に移動
↑をしたいのですが上手くいきません…
実行すると,1回目はできますが,2回目以降にpanel1内から消えます
どうしたら良いのでしょうか?教えていただけると嬉しいです
((Label)sender).Dispose(); これが原因じゃね?
733 :
デフォルトの名無しさん :2010/11/22(月) 01:03:43
ああ、書き方悪かった ((Label)sender).Dispose(); をelseじゃなくてif文で処理してみ
>>732 さん
((Label)sender).Dispose();とelseをコメントに変えて実行したけどダメでした…
>>733 さん
if文で処理する?
>>733 さん
731です こう?
if (e.Button == MouseButtons.Left) //左クリックのとき
{
if (Smove == false) //今まで固定モードなら
{
msym_s = new Point(e.X, e.Y); //移動前座標を取得
Symbol = sender; //選択されているlabel
Smove = true; //移動モード
}
else
{
Smove = false; //固定モード
((Label)sender).Dispose();
}
}
736 :
デフォルトの名無しさん :2010/11/22(月) 01:39:57
違った どこが悪いかみてないが確実なのは消えたんじゃなくて 座標計算がおかしいのか2回目は変なところに飛ぶ なので見えてないところに移動しただけだよ
private void newLabel_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { if (Smove == true) { msym_e = new Point(e.X, e.Y);//マウスアップしたときの相対座標の取得 Point p = (sender as Label).Location; //ラベルの現在位置を取得 p.Offset(msym_e.X - msym_s.X, msym_e.Y - msym_s.Y); //ラベルの移動後座標を求める (sender as Label).Location = p; //ラベルを移動する Smove = false;//固定モード } } コントロール移動時にのみ必要であるならば、Symbolという変数は要らないと思う。
738 :
737 :2010/11/22(月) 06:58:55
ああでも最後にクリックしたラベルをアクティブにして画像変えたりするために アクセスしたいのならばSymbolは必要になるかも。 それよりもSmoveという変数は間違いなくいらないな。 以下スッキリしたコードにしてみた private void newLabel_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button != MouseButtons.Left){ //右クリックでオブジェクトの開放 (sender as Label).Dispose(); return; } msym_s = new Point(e.X, e.Y);//マウスクリックしたときの相対座標を取得 //Symbol = sender; 必要なければ削除 } private void newLabel_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { msym_e = new Point(e.X, e.Y);//マウスアップしたときの相対座標の取得 Point p = (sender as Label).Location; //ラベルの現在位置を取得 p.Offset(msym_e.X - msym_s.X, msym_e.Y - msym_s.Y); //ラベルの移動後座標を求める (sender as Label).Location = p; //ラベルを移動する }
740 :
737 :2010/11/22(月) 09:32:14
>>739 だったらこうしようぜ!
void l_MouseMove(object sender, MouseEventArgs e)
{
Label l = sender as Label;
Size p = (Size)l.Tag;
Point movingOffset = e.Location - p; //マウス移動量の計算
Point endLocation = l.Location + (Size)movingOffset;//移動後の座標を求める
Rectangle r = l.Bounds;//ラベルの範囲を表すRectangle構造体
r.Offset(movingOffset);//ラベル移動後の範囲を求める
//Panel1の範囲外に出ている場合、範囲内に戻す
int diffX = panel1.Size.Width - r.Right;
int diffY = panel1.Size.Height - r.Bottom;
if (endLocation.X < 0) endLocation.X = 0;
if (endLocation.Y < 0) endLocation.Y = 0;
if (diffX < 0) endLocation.X += diffX - 2;//2pixelは左右のボーダーライン分
if (diffY < 0) endLocation.Y += diffY - 2;//2pixelは上下のボーダーライン分
l.Location = endLocation;//検証後の位置に移動する
}
これでぴたっと止まるぜ!
範囲の検証にRectangle.Contains()を使うとスムーズに動かんので、
XとYは別々に検証したほうがいいみたい。
Panel.ClientSize使えよ
>>740 無駄が多いよ´・ω・`)
Label l = (Label)sender;
Point p = l.Location + (Size)(e.Location - (Size)l.Tag);
p.X = Math.Max(0, Math.Min(panel1.Width - l.Width - 2, p.X));
p.Y = Math.Max(0, Math.Min(panel1.Height - l.Height - 2, p.Y));
l.Location = p;
>>736 さん
そうだったんですか!消えている訳ではないのですね
>>737 〜742さん
どうもありがとうございます!
実行するとどれも、l_MouseMove内の、
Label l = (Label)sender;
でエラーが発生するのですが、なぜなんでしょうか?
エラーメッセージ↓
型 'System.Windows.Forms.Panel' のオブジェクトを型 'System.Windows.Forms.Label' にキャストできません。
PanelのMouseMoveイベントにl_MouseMoveアタッチしてるからだろ l_MouseMove付けるのはLabelのMouseMoveイベントだぞ
複数のスレッドからひとつの変数iに対して++iという処理を行う場合, CやC++だとアセンブリコードでワンステップなので特別な排他制御を行わなくてもOKですが C#の場合はどうなんでしょうか?
どうなんでしょうかね
Interlocked.Incrementとか
クラス変数(static)、インスタンス変数のインクリメントにはInterlocked.Incrementを使う。 Interlockedはlockより低コストの排他制御。
低コストの排他制御ですね
2010Expressで、あるプロジェクトを開き、修正して、元のプロジェクトは元のまま残して、 修正したものを別名で「新プロジェクトとして」保存したいときどうすればいいのですか? 「名前をつけてform1.csを保存」だと、同じフォルダ(プロジェクト)内に保存されてしまい、そのほかのファイルも共有になってしまいます。 C#は「名前をつけて新プロジェクトで保存」は出来ないのでしょうか?
752 :
デフォルトの名無しさん :2010/11/22(月) 18:12:08
開く前のプロジェクト一式をフォルダごとコピー
先にフォルダをコピーしろ
>>752 >>753 えーと、それやるとプロジェクト開くんですかね?
やったことないんだけど。
フォルダの名前だけが違う同じ名前のプロジェクトとして作業するんですか?
755 :
デフォルトの名無しさん :2010/11/22(月) 18:26:57
>>754 そんな感じですな
まあ所詮はファイル群に過ぎないからw
コピーしろ
そうですか・・・じゃあ、途中でプロジェクト名を変えて、 別のプログラムにしたいなーなんてことができないんですか。
その辺はプロジェクトのプロパティで変更できなかったけ? まあ最悪の場合リリースビルドのexeの名前を変えればw
なんか沢山、関連ファイルがあるから、勝手にファイル名やフォルダー名を変えるのは危険そうだから、 自動でやってくれるもんだと思ってたのですが、、、
759 :
デフォルトの名無しさん :2010/11/22(月) 18:42:17
>>758 手動であれこれやらなければ大丈夫
IDE上で作業すればOK
なるほど!ソリューションエクスプローラ上で変更すれば、 他の関連付けもやってくれるんですかね? 試してみます。ありがとうございました。
761 :
デフォルトの名無しさん :2010/11/22(月) 18:52:11
まあとにかく実験して覚えろw コピーした方なら最悪壊れてもいいんだしw
MDIで子フォームを最大化している時の切り替えのチラツキを 防止する方法を教えてほしいでやんす。 あと、子フォームを連続で生成した場合にも同様のチラツキが出ますが これは防げないでありんすか?
え?
764 :
デフォルトの名無しさん :2010/11/22(月) 22:39:48
分からないでゲソ
zip、rarをメモリに解凍して加工するソフトを作りたいのですが フリーで使える解凍用のライブラリはどういうのを使っていますか?
766 :
デフォルトの名無しさん :2010/11/23(火) 00:20:15
さあ
始まるザマスよ
>>744 さん
panel1のイベントにl_MouesMoveをつけていました
わぁぁ!画像がドラッグ&ドロップできる
みなさん本当にありがとうございました!
VSはPropって入力して TABを押せば、自動的に public なんちゃら{get;set;} を書いてくれるんだな。 なんでこんな便利な機能があったのに気がつかなかった俺だお
>>770 イベントハンドラーだってtabtabで保管してくれるじゃん
細かい表示を見ないからだよ
>>770 コードスニペットはDependencyPropertyとかで無いと発狂する
enum作って switch タブタブ でそのenumを指定すると すげーぞ。感動するぞ。
>>766 だからー、HDDに解凍するのを探しているんじゃないんだよ
解凍したデータをそのままメモリ上で扱いたいんだよ
ちゃんと文章嫁よ
あるけどお前の態度が気に入らない
>>774 君はスレの人間を敵に回したいのか?
圧縮ファイルを扱うってのはフリーじゃああまりいいのはないよ
あとライブラリ次第だがc#はメモリをストレージぽく使えるので
指定できれば問題ないだろうけどね
なんていうか詳しくないので黙ってようと思ったけどさすがに
突っ込みさせてもらうわ
あいつだろ
>>775 あるなら既に答えているはず
おまえはどっちみち答えない
>>776 わからないなら黙っとけよ
加工するって言っているんだから
いちいちHDDに展開するわけないだろアホか
解凍したいだけなら、わざわざ質問するかよ
779 :
775 :2010/11/23(火) 02:15:09
アホ あんな発言する奴で答えた試しないし 大抵単発ID つまり、煽りたいだけの無知のバカ
ちゃんとトリップ付けてくんなきゃ困るわ
ここってID見れるの?
>>765 解凍してからメモリに読み込んで加工すればいいだけの話だろ。
どうせ裏では勝手にファイル出力されてるんだし。
もちろんページファイルも禁止ね
>>785 書庫を直接配列に解凍したほうが早いだろ
そういうライブラリ探しているんだよ
何度も言わせるなアホ
何度も言わせるぞアフォ
配列()笑
UnXXXExtractMem系の関数はメモリへの解凍だね さあ次は「ラッパー書かなくてすむ奴の方がいいだろそのほうが早いだろ」って来るぜ 提示された物のドキュメントにすら目を通さないメクラの癖にな
何マジになってんだよ。 こういう奴には適当に教えておけばいいの。
そうそう。煽って回答を得ようって意地汚いやり方。
煽ったら回答減る気がするんだがw 789書いたの俺だが、普段ならideoneにサンプル貼っつけて解説まで入れてる。
VC#2010 Expressを使用しています。 System.Web.HttpUtilityを使おうと思って、参照設定にSystem.Webを追加しようと思ったんですが、 「参照の追加」ダイアログの.NETタブの一覧にそれがなく、 仕方なく、System.Web.dllを指定して追加したところ、 追加したSystem.Webのところに!マークのアイコンが表示されて、利用できません。 どういった問題が考えるでしょうか。助言をお願いします。
.NET 4 ClientProfileをターゲットにしてんじゃね
対象フレームワークが Client Profile になってるんじゃないかな。 HttpUtility.UrlEncode/Decode 使うためだけに Client Profile からフルインストール版の .NET になるのが納得いかないけども、よくある。
798 :
795 :2010/11/23(火) 11:42:28
ありがとうございます。おっしゃる通りでした。 対象のフレームワークを.Net Framework 4に変更したところ、うまくいきました。
だれかHttpUtility.UrlEncode/Decodeだけ分離したライブラリ作ってくれ(´・ω・`)
リフレクタで逆汗して抜き出せよ。
そんなに難しくないから作ってみれば?
RFC39...39...なんだけ
URIはRFC3986だな。
>>800 ,801
思ったより簡単にできて拍子抜けした
ありがとう
ロリポップのレンタルサーバに、FtpWebRequestを使って、 SSLで接続したいのですが、 URIはどのように指定すれば良いのでしょうか? "ftps://*****.lolipop.jp/" にすると、「URI プレフィックスが認識されません。」と言うエラーが発生します。 SSLを使わない場合は、接続できました。
ftpsは非対応だった気が。ライブラリ探してこい。
807 :
805 :2010/11/23(火) 14:06:38
>>806 FtpWebRequest に EnableSsl と言うプロパティがあるので、できそうな気はします。
>>808 ftps C#でぐぐったんですね、わかります。
ググって当然のキーワードだな。
いや、ちょうど同じURLを貼ろうとしていたもんで
ここで質問するより、その辺のキーワードでググった方がよっぽど速い。
なんか、名前を付けるときに 英文字、数字、アンダーバー(_)は使用できるけど 名前の一番最初には数字は使えない(123abcみたいな) っていうのにはなんか理由あるの?
814 :
805 :2010/11/23(火) 14:27:39
>>808 ありがとうございます。
ftp:// にすると少し先にすすめましたが、GetResponse()で接続エラーが発生しました。
FileZilla でFTPESでの接続確認ができているので、設定値は問題ないと思うのですが、
他に確認すべきことはありますでしょうか?それとも、レンタルサーバがはじいているのか。
815 :
805 :2010/11/23(火) 14:33:43
すみません。 UsePassive = true にしたところ、無事SSLで接続できました。 レンタルサーバの設定と言うことですかね。 ありがとうございました。
つーか、クライアント側の問題だわな。
0x11とか 55L とか 50e10とか 変数かもしれんぞって言われたらコンパイラ泣いちゃう。
if(2oo < 3oo){ } プログラマも泣いちゃう
ToT って変数を見て、泣いたこともあったっけ。
知人が頓挫したプロジェクトのソースからdesumaって変数名を発見したっていってた
発見したっていってたね
.NET Framework Client Profileは積極的に選択するべき物ですか? それともユーザーのニーズが高そうなときのみ選択するものですか?
Windows Updateで提供されてるのはClient Profileのはずだから それで制作に困らないならClient Profileの方が配布は楽だろうな
利用出来るということですね
そーですね
>>789 C#のソースが公開されているものがいいんだけど
CodePlexでプロジェクト立ち上げてろクソカス
Visual C#のコード作成が融通きかなくて困る int x;//コメントです ここで、デザイナのほうでボタンにイベントとか追加すると int x; public void button1_click(sender,e){ }//コメントです みたいにコメントが後ろに書かれてしまう。
C# の場合、コメント、あんまり後ろに入れるもんじゃないからねぇ。 int x; だけ打ったあと、その前の行で /// って打って doc コメント生成するものだし。
docコメントって引数変えたら自動で整形してくれよな あれが面倒で///する気しない
C#やった後C++とかC言語やったらなんかつまらないエラー出すぎワロタ main()関数の後ろに構造体や関数とか作って main関数でその構造体や関数を使おうとすると、「定義されてません」みたいな英語でてきやがった。 うぜぇ C#は後ろでも前でもどこでもクラスを宣言してもエラーでないで実行できるから最高すぎるな。
C言語は30年以上前の言語だからなぁ。 それをいまだに引きずってるってのがすごいところだけども。
汎用関数をDLL化して、これを難読化した場合、誰も使えないDLLになってしまいますが、どうしたら良いでしょうか? 今は、汎用関数のI/Fを作成して、汎用関数群をオブジェクトとして使用することを考えてます。
部分的に難読化すれば?
匿名メソッド・ラムダ式のいい使い所が思い浮かばない・・・ なんか業務的に使用する部分でいいサンプルってないですか?
838 :
835 :2010/11/24(水) 10:00:56
>>837 ループ使っているところは、全てラムダで置き換えられる可能性がある。と、適当なことを言ってみる。
foreach(var i in collection) { イベント += (sender, e) => { iを使った処理 }; }
上位スコープの変数の寿命延長は面白い
環境は C# 2.0以降 WindowsXP〜Windows7までのOSです。 文字の中で第一水準と第二水準の文字だというのを判別したいんですが どのようにやればよいかわかりません。 Shift-Jisでは 第1水準=&h889F〜&h9872 第2水準=&h989F〜&hEAA4 となっているようなので Encodingを使用してShiftJisエンコードに変換してやれば第一段階はいけるのかな? と言うところまでは判るのですが、この先が判りません。 お分かりになる方がいらっしゃるようでしたらよろしくお願いいたします。
範囲わかってて、文字のコードがわかるなら比べるだけじゃん。
>>844 例えば1文字をバイト配列に展開して
それをShiftJisのコードに展開する方法でいけるのかな?
と思うんですが、その実現方法が・・・
846 :
デフォルトの名無しさん :2010/11/24(水) 17:30:57
何で悩んでるのかさっぱりわからんなあ・・・ 判定したテキストデータの塊はファイルか何かになってるんでしょ? それはS-JISなの? あとマルチバイトコードが面倒っていうのならC#のエンコード機能を使って 使いやすいコードにすればいいのとちゃうの?
847 :
デフォルトの名無しさん :2010/11/24(水) 17:45:14
完全独学の俺涙目・・・(´・ω・`)
Encoding.GetEncoding("Shift_JIS") の GetBytes のち 調べたい文字の2バイト分を、上下気にしつつ BitConverter.ToUInt16
先日、既存プロジェクトを変更して別のプロジェクト・プログラム名をつける方法を訪ねたものですが、 色々実験してやっと出来るようになったのですが・・・ ここに書くのを憚るくらい、めっちゃ煩雑なんですけど、こんな方法しか無いのですか? 2010Expressだと仕方ないのでしょうか? 以下、私の方法は、 @一番外側のソリューションフォルダは関連付けの必要がないようなので自由に変えて、 (変えるとIDEのスタートページ「最近使ったプロジェクト」からは開けなくなるけど、「既存のプロジェクト」から開く) Aソリューション名の変更(ソリューションエクスプローラ、右クリック) Bプロジェクト名の変更(ソリューションエクスプローラ、右クリック) Cnamespaceの変更(コードエディタ、右クリック、リファクタ→名前の変更) Dアセンブリ名の変更(プロジェクトのプロパティ) Eこれでもプロジェクトフォルダの名前が変わらないので、一旦IDEを閉じ、エクスプローラから手動でフォルダ名を変更。 FIDEを起動。この段階でソリューションファイルからは関連付けが切れてるので、さらに下のプロジェクトファイルから開き、 ソリューションエクスプローラのソリューション名にカーソルを置き、全てを保存。 Gするとプロジェクトフォルダ内にソリューションファイルを作ろうとするから、ひとつ上のソリューションフォルダに上がり上書き保存。以上 これでもデバッグ関係のフォルダに旧プロジェクト名のファイルが残るのですが、まあデバッグだからいいか・・・ みなさんはアセンブリ名だけ変えれば、フォルダ名やnamespaceに旧プロジェクト名が残ってても気にしませんか? 長文失礼しました。
プロジェクト名変更すること自体が異例だろ 実行ファイル名だけ変えとけばええがな
今日いつも通りに出社したらプロジェクト無くなっててワロタw ってことになるだろ
>>849 app.configとSettings.Designer.csとSettings.settingsの修正も必要だよ!
いらんだろ。
>>854 VS2005のVBだと.vbproj内のXML名を外部エディタで変えないといけなかった
C#4.0で必要なのかは分からんけど
857 :
856 :2010/11/24(水) 22:33:05
確認したが、VS2010ならプロジェクトのプロパティでファイル名が指定できた VS2005にファイル名のテキストボックスはないけど、 「XMLドキュメントファイルを生成する」のチェックを外せば値は消えるみたい
ぼーっとしてた
え?
861 :
849 :2010/11/25(木) 10:30:31
CDはプロジェクトのプロパティ画面で同時に出来るから、ちょっとだけ簡略できるみたい。
E以降は、プロジェクトフォルダの名前を統一したいためだけの作業なので、
プログラミング上、表面には出てこないので気にしない人は放置でも問題ない。
>>856 VC#2010Express以外使ったこと無いので分かりません。
でもE以降を放置すれば、全部IDE上での作業なので問題なく、
デバッグもエラーは出ないようです。
フォルダを別名に変更、ソリューションファイルダブルクリック あとは、IDEでプロジェクト名など変更するだけでいける
小規模なら新しいプロジェクト作って既存の項目の追加で 前のプロジェクトからファイル一式持ってくるのが楽そう
864 :
859 :2010/11/25(木) 18:28:47
自己解決しました。 重いのはIDEでデバッグ中のみで、binフォルダ内の実行ファイルを直接実行した場合は問題なしでした。 スレ汚し失礼しました><
手軽に変更できないことからみて、みんな途中で変更しないのか。 初めのプロジェクト名の命名は大事だな。
Project1のままだわw
Project1かw 社運をかけた巨大プロジェクトとかスパイの秘密プロジェクトみたいでかっこいいじゃないか
せやろ?wかっこええやろ?w
じゃあおれはProjectAで
ジャッキー乙
じゃあ俺はProjectA子で
うん
EXcelで直線を引くと両端に小さい円がありますよね その円で自由に直線の長さや角度を変更できますが あれは、なんという機能なんでしょうか? C#で実装しようとすると、どんな単語をwwwを検索すればいいですか?
そんなのあったっけ? スクリーンショットくれ
world wide webなんだろうけど藁ってるように見えるわ 末期だな
ラバーバンドとかグラブハンドル?
コントロールハンドルとか? というか『実装』って初心者に人気の言葉だよな
プロに人気なのは仮装だからな
適当なレスも初心者特有だなw
>>873 たしかChartオブジェクトじゃなかったっけ
C#で「excelで引いた直線に小さい円が付いていて、それを掴んで移動させると自由に直線の長さや角度を変更」できる機能
なんて作ったらexcelクローンできちゃう
もっと色んなソフト試して本当に必要な項目洗い出せるようになったほうがいいんでは
Chartはグラフだろ。バカ?
いや、881は馬鹿。 例に出しただけでexcelクローンとか。 馬鹿。
>>861 IDE上で書き換えた結果と書き換え前で差分取って
IDE使わず書き換えるツール作ってみたら?
何で簡単に変更できないようになっているんだろうな あることを試したくてコードを大幅に変更するときがすごく面倒
>あることを試したくてコードを大幅に変更するときがすごく面倒 バージョン管理ツール使え tortoisesvnならフリーだしVisualStudioとの連携もある
>883 ごめんなさい、それExcELじゃないのでだめです
>>890 ネタのつもりならもう少し面白いこと書いてくれ
そうじゃないならほとんどExcelと同じものの説明なのにどうだめなのか詳しく書いてくれ
refキーワードって 関数の引数で値を変えたいときだけにしかつかわない? int x; func(ref x);//xが変わっちゃう こんな感じの用途だけ?
>>892 その場合はrefじゃなくてoutを使うのが適切
refは引数として意味がないといけない
refもoutも使いそうになったら仕様を一回考えたほうがいいな
outはint.TryParseの例があるからいいとして、 refの使いどころはいまいちわからん
>>894 2つ以上の値を返したい場合はoutかrefが必要だよね.
Private Boolean GetXXX(ref int X)とか.
おれの場合
outはいったん受け取った後に中身を判断して何かするときに使ってる.
refは直接更新して欲しい変数のとき使ってる.
>>896 それ、outとref逆じゃない?
outは未割り当ての変数として処理されるから中身の判断なんてできない。
例に挙げたのも
bool GetXXX(out int x)
にするのが適切だと思う。
ついでに単純に2つ以上の値を返すだけなら
構造体やクラスを使用することが推奨されてたはず。
表現が分かりずらかったかな? 受け取った後にとは,関数を呼んだ側の処理. int i = 0; if (GetXXX(out i)) { if (i == 0) { ・・・ } } 2つ値を返すのにclassやstructにする意味が分からん.
そんなのわざわざ書かなくてもわかってるよ そういうことじゃなくてX座標とY座標の値を返すときは Point型を使いましょうって話
outがあるから関数の戻り値は全部voidでいいんです派
>>900 部下ならクビにする
上司なら会社辞める
>>898 どっちでもいいけど、outだからiは初期化しなくてもいい
この辺りはmsdnにガイドがあったはず
out があるから関数の戻り値は関数の成功失敗をかえせばいいんですWinAPI派
色んなやり方があるんだなあ
>>901 デメリット教えてよ。皆が慣れてないから?
逆にメリットを聞きたい
デメリット ・結果を参照するために必ず変数を宣言しなくてはいけない ・結果を無視してもいい場合でも変数を宣言しなくてはいけない ・戻り値なら1行ですむところが2行になる メリット ・なし こんなの好き好んで使うやつは死んだほうがいい
>>904 .Where(…).OrderBy(…).ToList(…)とか出来なくなって俺のモチベーションが下がる
string[] strArray = { "1", "2", "3", "4", "5" }; int length; bool b; iArray.GetArrayLength(iArray, out length, out b); if (!b) return; for (int i = 0; i < length; i++) { int n; bool b; int.GetTryParse(strArray[i], out n, out b); if (!b) continue; foo(i, n); } こんなコーディングするメンバーと開発なんてしたくねえよw
メソッドの成功失敗は例外で報告するべき →でもtryで囲むの面倒だし、頻繁に例外が発生してしまう →Tester-Doerパターンで事前にチェックできるようにする →でもDoerでやってることは元のメソッドでもやってるので二度手間 →結局Try-Parseパターンしか実装しない 皆さんはどうしてます?
>>909 クエリ構文だとfrom a in bとかselect aとか記述量多くなるから滅多に使わないなあ
クエリわかんねw メソッドばっかりだわー
クエリ構文の名誉のために SelectManyが必要になるような場合はクエリ構文のほうがわかりやすいと書いておく Enumerable.Range(0, 10).SelectMany(_ => Enumerable.Range(0, 10), (a, b) => a * b); from a in Enumerable.Range(0, 10) from b in Enumerable.Range(0, 10) select a * b;
関数の成功失敗は戻り値としてboolで返す 例外投げるのはコストとか見やすさとか考えるとどうなのってなる きっとWinAPIに浸かってたせい WinAPIでいうGetAsyncKeyState的なものって.NETにある?
WinAPIでいうGetAsyncKeyState的なものが.NETにあるといいですね
エラーは何が何でも例外で報告しろってどんな教条主義だ
>>916 .netの標準ライブラリってそんな感じじゃない?
とはいっても例外以外で「これはエラーです」って確かに伝える方法ないよね ライブラリ側で「負の数値は検索結果が無いときの戻り値です」って言われても、 何らかの都合でマニュアル紛失したらスルーされちゃうだろうし
HRESULTディスってんの?
WPFってパッド認識できる?
boolでエラー返るようにしてるとif文ばっかりになる
>>921 パッドはDirectXの領域でしょうな。
WPFってDirectXをラップしてるだけじゃないの? パッドも使えないのかよ
925 :
デフォルトの名無しさん :2010/11/27(土) 00:31:49
C#プログラマの皆さんは、今どきリスト内包表現のすら無い言語を使って恥ずかしくなったりしませんか?
生まれてきてすみません///
音楽性の違いで…
弘法だから道具は選びませんの
実際の弘法は道具ヲタだったけどな
>>925 何を言っているのか分からない。例えば
foreach(var item in from x in array where x % 2 == 0 select x * x)
{
//
}
という記述は内包表記と表現力は全く変わらないわけだが。
>>930 みたいなコード書く奴がいたらいじめたくなるな
AC版買ったけど、なんの認証もないんだなw
てか、シリアルあればUltimate使えるし
in...in...とかやってらんない感じだな。
ふ〜ん
女教師in...
>>925 ここではともかくC++スレでそういう挑発はやめてくれな。
メタプログラミングを駆使して実現しようとする変態が現れる。
hahaha
>>910 例外握り潰していいならTry-Parseパターン
例外が必要ならtry-catch
リスト内包表現調べてみたらLINQとほぼ一緒でわろた
>>925 さんは、今どきLINQのすら知らずにそんな書き込みして恥ずかしくなったりしませんか?
[x*x for x in array if x % 2 == 0] from x in array where x % 2 == 0 select x * x array.Where(x => x % 2 == 0).Select(x => x * x) リスト内包表現が一番すっきりしてるな
>>943 に.OrderBy().ThenBy().Skip().Take()を追加したらどうなる?
それでもリスト内包表現とやらの方が簡潔なの?
ある程度エラーがあるのが分かっている場合 try〜catch使うとifより遅くなるの? try { x = int.Parse(y); } catch { // φ } if (y.Length > 0) x = int.Parse(y); 例なのでTryPaese使えって言うのはなしで。
>>944 リスト内包表現に.OrderBy().ThenBy().Skip().Take()に相当するものはないよ
それ以外の機能を使えば簡単に実現は可能だけどね
Pythonの場合、OrderByとThenByはsortedで代用
SkipとTakeはスライスで代用ってところかな
ソートに関してはOrderByのほうが簡潔にかけるけど
SkipとTakeはスライスのほうが記述量が少ない
arr.Take(5)
arr[:5]
まあこんな比較まったく価値がないことだけど
>>943 タイピング量だけで見ちゃだめよ。
何気に、select が後ろなのって大事。
補完的な意味で。
例外ってちゃんと処理してもめちゃくちゃ重いんだね こりゃ頻繁に例外が発生するようなプログラムは書いちゃいかんわ
文字列を数値にするのって 入力側で気をつけて数字以外受け付けないようにするか(例:年齢の入力)、 それを使う段階で内部エラーにするか(例:ポート番号の入力)だな (前者の制限を付けるのはかったるいけど) 結局ほとんどの例外がtry-catchベースで例外処理するのに、 「数値のときだけ if で tryparse して時間稼ぎます(キリュッ」ってのは場合わけの方が面倒じゃないのか?
例外は、 ・try するだけならノーコスト ・例外が throw されたら正常フローの2〜3ケタくらい遅い で、大体、利用指針としては、 ・メソッド呼ぶ前のチェックで回避できるものは回避(tester-doer) ・テストの段階で全部取る ・チェック用のコードが元のコードと同じような処理になっちゃう場合は TryParse ・ファイル競合みたいに事前チェックしてもタイミング次第で絶対起きるものだけをcatchで対処
>>952 数値の Parse だけじゃないよ。
Dictionary の TryGetValue とか、
DynamicObject.TryGetMember とか、
2度同じ処理書くことになるものには Try 版がある。
955 :
910 :2010/11/27(土) 11:43:42
>>953 なるほど、すっきりしました。
ところでTry 版には接頭辞としてTryをつけるべき?
リターンが分かりやすいからつけた方がいいんじゃないの Tryじゃない版も作るならの話だけど
ですね、そうします
958 :
デフォルトの名無しさん :2010/11/27(土) 14:08:32
●A string str = DateTime.Now + ""; ●B string str = DateTime.Now.ToString; Aだとうまくいくが、Bだとエラー。 エラーメッセージでは、非デリゲートだからとか、 ほんわかとイメージがつくが、ばしっと理由がわからない。 ググり方が下手なせいかよくわかりませんでした。 AとBの具体的な違いがわかる人はわかる人はおられるでしょうか?
Aはプロパティだよ Bはプロパティでもメソッドでもないからエラーになって当然
DateTime.Now.ToString();
961 :
デフォルトの名無しさん :2010/11/27(土) 14:20:25
あああ、すごい勘違いでした。 ()が無いけどアドレスじゃないから、デリゲートのエラーだったんですね。 単純な記述ミスでした。 959さん 960さん 回答ありがとうございます。
アドレス? 正しい理解のためにも用語は正しく使おうぜ。 Nowはプロパティだから値の取得に()は必要ない ToStringはメソッドだから値の取得に()が必要。
>>961 どこまでわかってるのかすごい心配になるレスだなw
基礎を学ばずに使い始めるとこうなるんですね
少なくとも、初心者にとって 関数、メソッドの()をつけないことはよくあるミスかもしれないが 「アドレス」なんていいかたしないからな 中途半端に余計な知識ついてしまってるんだろうな。
別の言語から入ったとかじゃない? 文字列でアドレスっていうといかにもC言語っぽいが
VB?
え?
VBはメソッドの()が省略可能で、VB6に至っては自動で消えるからなあ
VBにはAddressOf演算子があるね
昔の名残が意味を変えて登場するのって 初心者騙し専用だな
ん?
デリゲートうんたらってのは Action a = UnkoMethod; みたいに()なしで書くから?
そう VBと違って引数なしのメソッドでも()付けないと呼べないし AddressOfみたいなやつを付けなくてもデリゲートだって解釈される
それは省略形。1.x まではこう書く必要があったな。 MothodInvoker mi = new MethidInvoker( FuncXX );
あるActiveXを使ってるんですが、そいつの関数 void Foo(string s, ref object o)を呼び出して、 引数のoにデータが格納されてかえってくるんですが、 データのタイプを判別すると、「double[]」となってました。 で、そのdoubleの配列の要素数を知りたいのですが、どのようにすれば知ることができるのでしょうか?
>>976 それでもメソッド名には()つけてないよね。FuncXX()とは書かないし
さあ
え?
(double[])o.Lengthでいいんじゃないの?
しまった罠か
げ,あぶね〜.そんなルールあったのかw
>>986 C#, C♯, C#相談室は今Part63だよ
あわてんぼさんめ
なんという狡猾な罠
ぬるぽ
GC.SuppressFinalize(this)
>>978 ・()あり メソッドコール
・()なし メソッドグループ(デリゲート派生型に変換可能)
994 :
978 :2010/11/27(土) 19:58:04
double[] dData = (double[])o; で、ようやくforeachでデータを取り出すことが出来ました。
null pointer access violation
if(o is double[]){ double[] dData = (double[])o; } ってするか double[] dData = o as double[]; if(o != null) { 〜 } ってしとかな危ないぞ
997 :
996 :2010/11/27(土) 20:04:36
if(dData != null)な すまn
危ないね
ぬるポ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。