ふらっとC#,C♯,C#(初心者用) Part65
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/11/09(火) 21:57:30「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっとC#,C♯,C#(初心者用) Part64
http://hibari.2ch.net/test/read.cgi/tech/1286890729/
■関連スレ
C#, C♯, C#相談室 Part62
http://hibari.2ch.net/test/read.cgi/tech/1284775031/
VB.NET質問スレ(Part35)
http://hibari.2ch.net/test/read.cgi/tech/1284423653/
くだすれC++/CLI(初心者用)part2
http://pc12.2ch.net/test/read.cgi/tech/1268613679/
■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
http://ideone.com/
コードを貼り付けてRun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます。
直接貼る場合は下記サイトなどを利用してhtmlエンコードした方が
インデントも残って見やすいです
http://kawama.jp/php/encode_html.php
0002デフォルトの名無しさん
2010/11/09(火) 21:59:55乙
1000げとずさー
0003デフォルトの名無しさん
2010/11/09(火) 22:02:44どういう時に必要なのかがイマイチ想像できないといいますか……
@ITなんか読んで概念と構文はわかるんですけど実際に自分で書いているときに使う機会が無い
0004デフォルトの名無しさん
2010/11/09(火) 22:14:150005デフォルトの名無しさん
2010/11/09(火) 22:18:200006デフォルトの名無しさん
2010/11/09(火) 22:22:10Linq使えばすぐ分かる。
0007デフォルトの名無しさん
2010/11/09(火) 22:25:390008デフォルトの名無しさん
2010/11/09(火) 22:32:51ちょっと意識してみます
ありがとう
0009デフォルトの名無しさん
2010/11/09(火) 22:36:58フォーム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=・・・などと操作できるようにすればいいのでしょうか?
0010デフォルトの名無しさん
2010/11/09(火) 22:42:53public 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;
0011デフォルトの名無しさん
2010/11/09(火) 22:45:01参照渡すようにしなよ。
0012デフォルトの名無しさん
2010/11/09(火) 22:46:12どっちみちそういう設計だと破綻するぞ
0013デフォルトの名無しさん
2010/11/09(火) 22:47:28Form1を生成する
Form2が生成される
Form1を生成する
以下繰り返し
無限ループって怖くね?
0014デフォルトの名無しさん
2010/11/09(火) 22:56:57意外
0015デフォルトの名無しさん
2010/11/09(火) 22:57:57そりゃそうじゃね?
0016デフォルトの名無しさん
2010/11/09(火) 22:59:180017デフォルトの名無しさん
2010/11/09(火) 23:01:46001817
2010/11/09(火) 23:04:04,,,_ _ァュ,,..__
ィチュ::ミミ:.:三彡:.:: :.:.:ヽ
/::彡'':.: :.::/:.:{{.::r‐‐ ::_:.: :.:..、
,ィ/:.: /:..: ::{{:..川||::! ヾ::;;:、
,ィ:.: ::.: /:. ::川:.:ヾ:.:.!{:: ヽ::!
///:.: :.:.:||ll: :.: .::.:.:ヾ::.::.i ':!
!:|:.:::ミ:: :.;;;川:.: :.:巛、ヾ::! 、 l
゙::ミミh::. :;:.::||l|:.:: :.}}::!l {{ ヾ _,,...ィ r'' 、
゙::ミミ:.: ::.;:.:ミミヾ:.: :.:| ヾ、 '´ , マ
ヾ:: .:.:ミミ三 :.:州リリ _,,..rテ' ヽ
ヾ::;ィ'´ ̄`''ヾ州! ,. ヽ
゙レ'⌒r ィ ,;;. .. .:' ,rィ ’
ヽ し :.: .. 、 ヽ
,,ハ`ー- ..ィ _,.. ィ
ィ:::! \ ヽ. ィ{:::...
/:::::! \ ` - ..__ 丿::::::ヽ
/:::::::ヘ \ ` ーァ-一'::::.:::.:::.::.!ヽ
/:::::.:..:::::::::ヽ \ リ::. :::.:.:.:.:::.:.:.:.::::!:::.::!
轌山相太郎 [そりやまそうだろう]
(群馬.明治一九年〜昭和一七年)
0019デフォルトの名無しさん
2010/11/09(火) 23:05:37ありがとうございます
public partial class Form1 : Form
{
public Form2 form2 = new Form2(this);
public Form3 form3 = new Form3(this);
のthisを消したらコンパイラを通って例外も起こりませんでした
実際動くようになったのですが、いまいち仕組みがよくわからないのです
できれば解説していただけないでしょうか?
0020デフォルトの名無しさん
2010/11/09(火) 23:09:400021デフォルトの名無しさん
2010/11/09(火) 23:09:49ほかの言語の経験は?
オブジェクト指向がよく分かってないような
0022デフォルトの名無しさん
2010/11/09(火) 23:11:39そんなはずはない
Form2でform1.textBox1.text=・・・ってやると例外発生するはずだぞ
0023デフォルトの名無しさん
2010/11/09(火) 23:25:13Delphiを少々やっていました
オブジェクト指向については参考書を読んでもよくわからず、「Aの中にB,C,D・・・と項目があってそれぞれを設定できる(A.B=○○・・・のような)」というような感じに受け止めていたのですが・・・
>>22
うわ確認不足でしたすいません
でもthis入れるとコンパイラ通らないんです
0024デフォルトの名無しさん
2010/11/09(火) 23:29:59ていうかどうしてあんなことをしたいのかが問題だと思う
どうせ初心者にありがちな、面倒だからってことなんだろうけど
楽してコードを書けば書くほど複雑になるのがプログラムの難しいところ
0025デフォルトの名無しさん
2010/11/09(火) 23:34:06ああすまん、適当に書きすぎた
http://ideone.com/PHWfp
こういう書き方がいいか悪いかは別にしてこれで動くはず
0026デフォルトの名無しさん
2010/11/09(火) 23:34:57Form2に若干ごみが混じってるwサーセン
0027デフォルトの名無しさん
2010/11/10(水) 00:03:05動きました
ありがとうございます
とりあえず参考サイトや参考書を読み直してきます
すいませんでした
0028デフォルトの名無しさん
2010/11/10(水) 07:30:020029デフォルトの名無しさん
2010/11/10(水) 10:06:47IsIconicにハンドル渡して調べる以外ではないのでしょうか?よろしくおねがいいたします
0030デフォルトの名無しさん
2010/11/10(水) 12:40:410031デフォルトの名無しさん
2010/11/10(水) 15:58:48の後にflowLayoutPanel1からpictureBox1.Imageを変えることはできますか?
0032デフォルトの名無しさん
2010/11/10(水) 16:01:45パネルのイベントか何かでImageを変更するってことかな?
0033デフォルトの名無しさん
2010/11/10(水) 16:03:060034デフォルトの名無しさん
2010/11/10(水) 16:21:26flowLayoutPanel1にPictureBoxを入れていって後からflowLayoutPanel1の任意の場所にあるPictureBoxのImageを取得したり設定したくて
flowLayoutPanel1.Controls[n].Image = img; こんな感じでやってたのですが
PictureBox pb = (PictureBox)flowLayoutPanel1.Controls[n];
とキャストして取り出したらできました…すみません
0035デフォルトの名無しさん
2010/11/10(水) 16:25:06追加管理するメンバ関数を用意
それ経由でアクセスするようにすればいいんじゃね?
で継承したクラスないでList<PictureBox>としてインスタンス管理とかさ
0036デフォルトの名無しさん
2010/11/10(水) 20:33:140037デフォルトの名無しさん
2010/11/10(水) 20:37:18Visibleプロパティにtrueとfalseを代入するだけのメソッド
0038デフォルトの名無しさん
2010/11/10(水) 20:49:53関係ないか
0039デフォルトの名無しさん
2010/11/10(水) 21:38:14ありがとうございました
0040デフォルトの名無しさん
2010/11/11(木) 02:47:40Windows Formなら簡単にできることもWPFだとなにやっていいかわからんwww
Windowsアプリの一番上のメニューバー追加しようと思ってもできねーし
「ファイル」「編集」「表示」「ヘルプ」とかのやつねwwww
すべてのコモンWPFコントロールとかいうのからMENUはりつけてもできないしなにこれwwwwwwww
0041デフォルトの名無しさん
2010/11/11(木) 02:57:110042デフォルトの名無しさん
2010/11/11(木) 03:25:32コントロールの挙動も違うし、いらない機能もあるからそれを潰していかないといけない
バインディングも面倒でプロパティで指定すればいいだけなのにものすごく手間
それでいて重いしメリットは1つもない
オシャレなGUIを誰かに見せるわけでもなければ
やる価値はまったくないと断言できる
0043デフォルトの名無しさん
2010/11/11(木) 03:32:490044デフォルトの名無しさん
2010/11/11(木) 03:46:34{
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はユーザーの入力で増えたり減ったりします
よろしくおねがいします
0045デフォルトの名無しさん
2010/11/11(木) 03:48:380046デフォルトの名無しさん
2010/11/11(木) 03:48:460047デフォルトの名無しさん
2010/11/11(木) 03:58:19{
moviesDataGridView.Rows.Add(new string[]{p.名前,p.身長});
}
その場合こういう感じで追加していくのでしょうか?
実はPersonクラス内のプロパティはもっと多いのですが・・・。
それと、DataGridViewの項目をユーザーに編集されたのを
Personsに反映するにはどうすればいいですか?
変更されるたびに、新しくPersonsを作ってDataGridViewのデータを書き込むのでしょうか?
0048デフォルトの名無しさん
2010/11/11(木) 04:22:19バインディングの素晴らしさを何一つ理解できていないようだw
>オシャレなGUI
ワロタ
0049デフォルトの名無しさん
2010/11/11(木) 04:39:39初心者の質問のフリをしてBindingを啓蒙する作戦に見えてきた
0050デフォルトの名無しさん
2010/11/11(木) 05:12:17>Bindingを啓蒙
サンプル向きの題材(人物一覧)を選んでるあたりが、ホントに初心者?って思えてくるね。
さらにMSDNにそのものズバリの回答があるわけでw
http://msdn.microsoft.com/ja-jp/library/system.componentmodel.inotifypropertychanged.aspx
0051デフォルトの名無しさん
2010/11/11(木) 05:20:21それ見ましたけど、難しくて私には理解できませんでした
DataGridView.DataSourceにそのままPersonsを放り込んだら
簡単に表示してくれました。
しかも、DataGridViewでの編集がちゃんとソースにも反映された
これでできるのにINotifyPropertyChangedを使う理由はなんですか?
それとXmlSerializerでもそのままPersonsのデータを出力できました
Loadのやり方は今調べているところです
http://msdn.microsoft.com/ja-jp/library/swxzdhc0.aspx
ここではList<T>型はXmlSerializerでは扱えませんと書いているのにどうして?
0052デフォルトの名無しさん
2010/11/11(木) 05:31:44ソースの変更をターゲットに更新させるにはソース側のOnPropertyChangedが必要。
ターゲット → ソース (TwoWay, OneWayToSource)
ターゲットの変更をソースに更新させるのは気にしなくていい。
0053デフォルトの名無しさん
2010/11/11(木) 05:41:37うーん、データバインドに関してはWPFの方が楽そうですね
DataSouceにそのまま放り込むとプロパティ全部リストアップされる
例えば、>>44の好きな食べ物プロパティも項目に追加される
一部だけをバインドするようにできるのかもしれないけど・・・やり方がわからない
でもWPFはスクロールが遅いらしいからなー
まだ試してないけど1万行ぐらいのデータ扱いたいんだけど無理かな
0054デフォルトの名無しさん
2010/11/11(木) 05:53:58> ここではList<T>型はXmlSerializerでは扱えませんと書いているのにどうして?
そんなこと書いてない
List<T>の配列って書いてるだろう
0055デフォルトの名無しさん
2010/11/11(木) 05:58:36こういうこと?
0056831
2010/11/11(木) 06:42:08デザイナーでdataGridViewのDataSourceプロパティをPerson型に指定してやるとカラムが自動定義される
あとはColmunsプロパティから表示したくないやつを非表示にすればいい
0057デフォルトの名無しさん
2010/11/11(木) 06:45:090058デフォルトの名無しさん
2010/11/11(木) 09:17:06WPFのDataGridが糞だからやめた方が良い、らしい。
WPF慣れると快適だよ。いまいち重いのが難だけど。
因みに一部だけというのはAutoGenerateColumns (だったかな)をfalseにして自分でカラムを定義すれば行けるはず
0059デフォルトの名無しさん
2010/11/11(木) 17:44:230060デフォルトの名無しさん
2010/11/11(木) 17:46:47FuncAが実行されるのですが、
static void Do(System.Threading.ThreadStart func) {
func();
}
System.Threading.ThreadStartはどういう意味があるんでしょうか?
ThreadStart threadDelegate = new ThreadStart(Work.DoWork);
Thread newThread = new Thread(threadDelegate);
newThread.Start();
とは根本的に関係無いですよね?
0061デフォルトの名無しさん
2010/11/11(木) 17:49:54AutoGenerateColumnsをnoneにしても
DataSourceに放り込むと
自分が作ったカラムの後ろに新しく作られてしまう
みなさんList<Person>みたいなものどうやっていれているんですか?
>>56
それで一応いけました
列幅自動調整にしていると、ユーザーからの列サイズ変更ができなくなるって
WPFのDataGridと比べて微妙に使いづらい
006260
2010/11/11(木) 17:59:29static void Do(System.Threading.ThreadStart func)
のところを
static void Do(Action func)
にしても結果は同じです。
この場合は、delegate System.Actionの説明は、
パラメータを受け取らず、戻り値を持たないメソッドをカプセル化します。
になっていて、まぁ、納得できます。
何でも良いんでしょうか?
0063デフォルトの名無しさん
2010/11/11(木) 18:00:02デリゲートが何かはまずはググッてくれ
0064デフォルトの名無しさん
2010/11/11(木) 18:15:37Actionでデリゲートするのが普通のやり方。
スレッドを作るわけでもないのにThreadStartを使うのは変わったやり方。
0065デフォルトの名無しさん
2010/11/11(木) 18:20:360066デフォルトの名無しさん
2010/11/11(木) 19:24:130067デフォルトの名無しさん
2010/11/11(木) 19:30:130068デフォルトの名無しさん
2010/11/11(木) 20:30:400069デフォルトの名無しさん
2010/11/11(木) 20:41:14ジェネリックだから2.0から
0070デフォルトの名無しさん
2010/11/11(木) 21:14:000071デフォルトの名無しさん
2010/11/11(木) 21:17:04System.Windows.Formsなのはなぜだ。
0072デフォルトの名無しさん
2010/11/11(木) 21:41:300073デフォルトの名無しさん
2010/11/11(木) 21:50:390074デフォルトの名無しさん
2010/11/11(木) 21:57:030075デフォルトの名無しさん
2010/11/11(木) 22:05:18PredicateとAsyncCallbackは許して
0076デフォルトの名無しさん
2010/11/11(木) 22:09:170077デフォルトの名無しさん
2010/11/11(木) 22:11:16意味が分からない
0078デフォルトの名無しさん
2010/11/11(木) 22:17:420079デフォルトの名無しさん
2010/11/11(木) 22:24:590080デフォルトの名無しさん
2010/11/11(木) 23:02:19俺実装でやる方がよっぽど保守性下がるのにな
0081デフォルトの名無しさん
2010/11/11(木) 23:20:32http://www.atmarkit.co.jp/fdotnet/chushin/introwpf_06/introwpf_06_03.html
これのList7で
((DelegateCommand)OkCommand).RaiseCanExecuteChanged();
これがある意味がわからないんですが、どうしてですか?
これがなくてもコマンドが実行されます
よろしくおねがいしまーす
0082デフォルトの名無しさん
2010/11/11(木) 23:23:010083デフォルトの名無しさん
2010/11/11(木) 23:41:02アルファ付き32bitRGBのアイコンに変換するには
どういう風にコーディングすればいいですか?
アイコンからビットマップにはToBitmapメソッドで簡単にできるようですが
逆が用意されてないみたいです
0084デフォルトの名無しさん
2010/11/11(木) 23:43:220085デフォルトの名無しさん
2010/11/12(金) 00:59:33X をバインドしてるテキストボックスに負の数入れてみて。
0086デフォルトの名無しさん
2010/11/12(金) 01:03:37なるほど、変更されるような場所に
CanExecuteChanged()を配置しろってことですか
多分理解できました
ありがとう
0087デフォルトの名無しさん
2010/11/12(金) 01:32:00解決したなら相談室の方にも書いとけよ
0088デフォルトの名無しさん
2010/11/12(金) 01:51:45Executeでファイルの読み込み
CanExecuteの中でファイルが存在するかどうかのチェックをする場合
((DelegateCommand)OkCommand).RaiseCanExecuteChanged();
のコードを書かなくても、ファイルが無い場合エラーがでない
つまり、コード実行時にCanExecuteの処理がされているということですよね?
やっぱり無くてもいいんじゃないですか?
0089デフォルトの名無しさん
2010/11/12(金) 02:07:54RaiseCanExecuteChangedを使うのはファイルが削除された瞬間にボタンが押せなくなるような処理を組んだ場合
0090デフォルトの名無しさん
2010/11/12(金) 02:08:29Changed イベント出す理由は、実行可否が変わった瞬間にコントロールの IsEnabled を切り替えて欲しい場合。
そのファイルの存在可否で切り替える場合だと、即時性求めるなら、
FileSystemWatcher で監視して、その中で Raise する。
そこまでしないんなら確かに Raise の部分要らない。
0091デフォルトの名無しさん
2010/11/12(金) 02:39:08>>90
なるほどなるほど、ようやくわかりました
変更された瞬間に何かの処理をさせたいとき以外は
別にやらなくてもいいってことですね。
つまりこれだけは、ほかのメソッドと違う動きなんですね
ありがとうございました
こういうのって普通はすぐわかることなのかな?
MSDN見てスイスイわかるひとが羨ましい
0092デフォルトの名無しさん
2010/11/12(金) 02:42:04そのメソッドの中で event を呼んでるってのがポイント。
event が何してるか(外部に通知)を知ってれば、大体見て意図とれるはず。
C# はそういう意図で event って仕組み持ってる。
0093デフォルトの名無しさん
2010/11/12(金) 03:58:25普通のeventを書く場合ならどのメソッドを呼び出しているか、コードみたらわかるけど
CanExecuteChangedがCanExecuteを呼び出しているかは見ただけでは
判断つかないですよね?
var d = CanExecuteChanged;
if (d != null)
d(this, null);
一応これをみてDelegateCommandとnullの値を使って何かしてるんだろうなとまでしかわからない
ViewがDelegateCommandを参照して一体何をしているかも
この見えない部分の動作説明が少なくていつも躓くんだけど
いろいろ試していくしかないのかな?
0094デフォルトの名無しさん
2010/11/12(金) 04:39:25>どのメソッドを呼び出しているか、コードみただけでわかる
それはイベントを受け取る側の話
今回のようにイベントを発生させる側では、普通どんなコードが呼び出されるかは関知しない
じゃあなんでCanExcetuteが呼び出されているかっていうと
CanExcetuteChangedイベントを受け取って呼び出されたメソッドの中でCanExcetuteが呼び出されているから
もちろん呼び出すかどうかは受け取った側の自由だけど、イベントの意味を考えればCanExcetuteが呼び出されるのは誰にでも推測できる
そしてそのイベントの意味やらを定義しているのがICommandインターフェース
実際ICommandのイベントの説明には
"通常、このイベントが発生すると、コマンド ソースからコマンドの CanExecute が呼び出されます。"って書いてある
http://msdn.microsoft.com/ja-jp/library/system.windows.input.icommand.canexecutechanged.aspx
0095デフォルトの名無しさん
2010/11/12(金) 04:56:50+=Button_Click(obj,e)と混同してた
>イベントの意味を考えればCanExcetuteが呼び出されるのは誰にでも推測できる
そんなもんですか
var d = CanExecuteChanged;//ここで呼びだしているんですよね?
if (d != null)
d(this, null);
ブレークポイント作ってdの値を見ると
CanExecuteがtrueの時はOnCanExecute・・・って長いのが入ってて
そうでない場合はnull
で、この結果がOkCommandをバインドしているコントロールすべてに影響するように
ICommandインターフェース内で何か処理しているんですよね
むずかしーなー
もしかしてプログラミングって習得するまで何年もかかるの?
0096デフォルトの名無しさん
2010/11/12(金) 05:47:36var 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週間でなんとかなるからまずはそっちを頑張ってください。
0097デフォルトの名無しさん
2010/11/12(金) 06:28:590098デフォルトの名無しさん
2010/11/12(金) 06:43:55まさかmvvmについてカッコよく語っちゃう人がこんな質問するわけがない
0099デフォルトの名無しさん
2010/11/12(金) 10:07:25考え方が違う。
CanExecute … 実行可否を調べる
CanExecuteChanged … 実行可否が変化したことを通知してもらうためのイベント
とドキュメントにあるはず。
別に、「変化が発生した」ってことだけ知った(event 受け取った)上で、
実際に true か false か調べなおす(CanExecute を呼ぶ)かどうかは利用側の勝手。
0100デフォルトの名無しさん
2010/11/12(金) 10:10:33その先 CanExecute が呼ばれてるかどうかとか知ったこっちゃない。
そこから先はドキュメント読むしかない。
http://msdn.microsoft.com/ja-jp/library/ms752308.aspx
ここ見ると、
「、CanExecuteChanged イベントにサブスクライブし、CanExecute が false を返す場合に無効にし」
って書かれてて、
この文章読んで初めて挙動分かる。
0101デフォルトの名無しさん
2010/11/12(金) 11:26:32とりあえず以下のように考えてみましたが、他のやり方ありますよね?
array.Count((item) =>
{
Console.WriteLine(item); //実行したい処理
return true;
});
0102デフォルトの名無しさん
2010/11/12(金) 11:34:13is 演算子が void も受け付けるという裏ワザもあるけども。
Count(x => Console.WriteLine(x) is int)
LINQ の設計思想的には、そういう最後に副作用起こす部分は普通に foreach で書こうよって感じになってる。
ただ、それだと、Reactive Extensions みたいな push 通知に対応できないので、
Rx には Run か何かそんな名前の拡張メソッドあったはず。
0103101
2010/11/12(金) 11:53:13なるほど。そう言う書き方もできるのですね。勉強になりました。
やっぱり Count は気持ち悪いので、foreach の方が良さそうですね。
0104デフォルトの名無しさん
2010/11/12(金) 12:17:59selectでいいんでないの
0105デフォルトの名無しさん
2010/11/12(金) 12:20:49Selectも遅延実行
0106デフォルトの名無しさん
2010/11/12(金) 12:25:52結局foreachだけど、こんなのがあればいいのかな。
public static void ToVoid<T>(this IEnumerable<T> src) { foreach (var s in src) {}; }
0107デフォルトの名無しさん
2010/11/12(金) 12:27:44挙動似てるなーと思ってるよ
(map (+ 1) (1 2 3 4)) は (new int[] {1,2,3,4}).select(x=>x+1) と同じみたいな
ところで map って第一引数の関数をリストに順次適用していったリストを返す関数だよ・・・ね
0108デフォルトの名無しさん
2010/11/12(金) 12:29:49.NET は void の扱いが特別だから、Console.Write みたいなのは Select できないのよね。
しょうがないから is int(黒魔術)。
まあ、mixed なパラダイムの言語でなんでもかんでもメソッドチェーンにする意味ないんだけども。
普通に foreach で回せば。
0109デフォルトの名無しさん
2010/11/12(金) 12:32:46となると元の質問者がmapを勘違いしてる気がする
0110デフォルトの名無しさん
2010/11/12(金) 12:37:28全部 void 返す = 集合→空集合 の写像。
それを Run 的に扱っちゃうのってどうなの?とは思うけど。
0111デフォルトの名無しさん
2010/11/12(金) 12:45:20public static IEnumerable<T> Pipe<T>(this IEnumerable<T> src, Action<T> act) {
foreach (var s in src) {
act(s);
yield return s;
}
}
0112デフォルトの名無しさん
2010/11/12(金) 12:46:33最初はForEachにしてたのだけど、IList.ForEachとかぶってしまうのでそういう名前にした。
0113デフォルトの名無しさん
2010/11/12(金) 12:52:10http://msdn.microsoft.com/ja-jp/library/bwabdf9z.aspx
0114デフォルトの名無しさん
2010/11/12(金) 13:19:40一回scalaのmapの定義をggrばいいと思うよ
俺はselectが一番妥当だと思う
0115デフォルトの名無しさん
2010/11/12(金) 15:18:550117デフォルトの名無しさん
2010/11/12(金) 19:02:08C#は関数型言語じゃないから副作用があっても構わないとかいう突っ込みは勘弁
少なくともEnumerableに入ってないのは実際にMSの中の人が副作用を嫌った結果
0118デフォルトの名無しさん
2010/11/12(金) 19:55:24またお前か
0119デフォルトの名無しさん
2010/11/12(金) 20:12:21あそこ更新するか閉鎖しないと勘違いが増えるだけだよな
0120デフォルトの名無しさん
2010/11/12(金) 20:20:000121デフォルトの名無しさん
2010/11/12(金) 20:29:36Run(ForEach、>>106のと同じ)とかDo(>>111のものと同じ)とか
副作用全開のものもかなり入っているのであった。
0122デフォルトの名無しさん
2010/11/12(金) 20:38:27functionalなものを手続き的に使うためのライブラリでしょ
0123デフォルトの名無しさん
2010/11/12(金) 20:43:45それをモナドっていうといやらしいんだけどさ、
Functional Reactive Programming自体はHaskellが一番活況だし。
0124デフォルトの名無しさん
2010/11/12(金) 20:45:40それでも、アセンブリ的には Interactive でしょ。
Reactive の部分は正式に採用されそうな勢いだけど、Interactive 微妙臭い。
(Run とかは Observable 用は入るけど、Enumerable 用は別)
0125デフォルトの名無しさん
2010/11/12(金) 20:46:56本質的には副作用を嫌ってるんだわ
0126デフォルトの名無しさん
2010/11/12(金) 21:27:13豊富な奴に偏ってるんだろう。
そのくせ実践的な話になると打っても響かないんだよなこの手の人は。
0127デフォルトの名無しさん
2010/11/12(金) 21:27:360128デフォルトの名無しさん
2010/11/12(金) 21:32:060129デフォルトの名無しさん
2010/11/12(金) 21:34:12はは、ここ恐ろしくわかりにくいね
デリゲートの使い方はわかるけど、だから何?って感じ
Sample sample = new Sample(instance.method);
ここまでするぐらいなら、instance.method(2,3)て書いた方が早いでしょ
デリゲートってつまり、呼び出し側があって、呼び出される側に処理してもらうわけで
どんなメソッドが呼び出すのか呼び出し側で把握するのっておかしくない?
どのクラスのどのメソッドを使うか呼び出し側が決めるならデリゲートいらないでしょ・・・
例えば、ボタンクリックイベントでも、どのイベントハンドラが呼び出されるか事前にわかっているなら
マイクロソフトもデリゲート作らなくていいでしょって話
0130デフォルトの名無しさん
2010/11/12(金) 21:38:54みんなそうやって大人になるんだ
0131デフォルトの名無しさん
2010/11/12(金) 21:40:160132デフォルトの名無しさん
2010/11/12(金) 21:43:47呼び出し側とか呼び出される側とか何のこと言ってるんだ。
言っちゃ悪いけどアンタのレスの方が分かりにくいぞ
0133デフォルトの名無しさん
2010/11/12(金) 22:34:59>このような場合、メソッドaの中にメソッドbを呼び出すコードを書けばよいので、
>特別な機能は何も必要がない。
>しかし、常に委ねる相手が決まっているとは限らないし、
>委ねる相手が常に1つとも限らない。このような状況に対処するために、C#のデリゲート機能が存在する
なるほどなるほど、ここまではよくわかる
で、サンプルコードみたら、class1から既に決まっている相手class2のメソッド呼び出すコードだしw
なんで上記のようなことを想定したコードを書いてくれないのかと
0134デフォルトの名無しさん
2010/11/12(金) 22:41:11あんた馬鹿だろ
0135デフォルトの名無しさん
2010/11/12(金) 22:41:22実際にどういうときに使うか〜みたいな話をしだしたらオナニーに走って
もっとわけのわからない説明になるよ
0138デフォルトの名無しさん
2010/11/12(金) 22:51:19public 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 );
ここまで書かないとわかんないの?
0139デフォルトの名無しさん
2010/11/12(金) 22:54:31(new Class2).method(2,3);
}else{
(new Class3).method(2,3);
}
これでいいじゃん?
0140デフォルトの名無しさん
2010/11/12(金) 22:58:35そんなこといいだしたら最終的に
if(〜){
Console.WriteLine( "6" );
}else{
Console.WriteLine( "5" );
}
になっちまうぞ
0141デフォルトの名無しさん
2010/11/12(金) 22:59:38それでいいんじゃないの?
何が不都合なの?
デリゲートって便利だなーって思わせてよ
0142デフォルトの名無しさん
2010/11/12(金) 23:02:500143デフォルトの名無しさん
2010/11/12(金) 23:24:39Console.WriteLine()
Console.ReadLine()
これらもデリゲートにすればいいんじゃないの?
handler=.WriteLine()
handler("デリゲートって便利だなー");
0144135
2010/11/12(金) 23:27:31>そこで、デリゲートを使って異なる処理を一元化する例をList 13-2に示そう。
と書いてあるだろ
13-2のcalcはClass2に依存していない
0145デフォルトの名無しさん
2010/11/12(金) 23:31:47とりあえず、続き読んでみるわ
0146デフォルトの名無しさん
2010/11/12(金) 23:33:26http://ufcpp.net/study/csharp/misc_delegate.html
0147デフォルトの名無しさん
2010/11/12(金) 23:39:16List 13-1はデリゲートの便利な使い方じゃないよ
デリゲートの使い方のサンプルだよ
0148デフォルトの名無しさん
2010/11/12(金) 23:44:060149デフォルトの名無しさん
2010/11/12(金) 23:46:56これも
int result=(new Class2).methodPlus(2,3)
Console.WriteLine(result);
でいいよね
記述が長くなり、わかりにくくなっただけで利点がわからない
>>146
そこもずっと前にみたけどさ。スレッドとかわかりにくいことしているのがなぁ。
委譲するのはなぜか?という一番の疑問に答えてくれるサイトがない
デリゲートの記述の仕方ばかり解説しているだけで
記述の仕方も使い方もわかる。でも、これを今やっているプログラムにいれると
便利だな、コード短くなってわかりやすくなるなと思わせてくれない
イベントは便利だなと思う
イベントの宣言だけしておけば、あとはどんなメソッドが呼び出されて
どんな処理をされようが、呼び出す側は気にしなくてもいいし
第一依存してないから、仮に呼び出される側のメソッドが無くてもいいし。
でも、デリゲートは直接メソッド呼べばいいだけのをわざわざ仲介しているのがよくわからない
0150デフォルトの名無しさん
2010/11/12(金) 23:49:220151デフォルトの名無しさん
2010/11/12(金) 23:54:00これでもデリゲートのありがたみがわからんかい
0152デフォルトの名無しさん
2010/11/12(金) 23:56:25どういう場面で面倒になったりするのかを書いてくれるとうれしい
たとえば、JAVAではデリゲートがなくてイベントを処理する場合
クラスを大量に作らなくてはいけないらしい
そういうのを書いてくれたらいいのにな
イベントもデリゲートの機能を使っているようだけど、
デリゲートだけだと使い道あるの?って感じがする
てか、みんなデリゲート使ってる?
0153デフォルトの名無しさん
2010/11/12(金) 23:57:56AがBから呼ばれたいのだけどBはA専用には設計できない(設計したくない)、というとき
デリゲートかイベントを使う(と良い)
(さもなくば呼び出される側の詳細を隠蔽するためだけに継承と多態を使う、みたいなアホらしい設計になる)
で、BからAを呼び出すにあたり、呼び出し先がA一つで良いときはデリゲート、
Aだけとは限らず、Aがあずかり知らない不特定多数(CやDやE)も同じタイミングでの
Bからの呼び出しを必要としているかもしれない(Aにはわからない or わからせたくない)場合はイベントを使う
前者は昔はコールバックと呼ばれていたしくみ
0154デフォルトの名無しさん
2010/11/12(金) 23:58:15つLINQ
0155デフォルトの名無しさん
2010/11/13(土) 00:01:06class Form1 : Form {
// ...
void Foo() {
if (InvokeRequired) {
Invoke(new Action(Foo));
} else {
label1.Text = "Hello World!";
}
}
0156デフォルトの名無しさん
2010/11/13(土) 00:01:33Cで関数ポインタを使うぐらいの頻度。
要するに使う分野では使うけど、必用ない分野では殆ど使わない。
川俣はC#2.0の連載で匿名メソッドを「デザートじゃなくご飯」って書いてたけど、
あれは誇大広告もいいところでむしろデザートそのもの。
川俣はデタラメを言う「トンデモさん」ではないと俺は思うけど、
大げさで偏ってるのは確か。
0157デフォルトの名無しさん
2010/11/13(土) 00:01:510158デフォルトの名無しさん
2010/11/13(土) 00:05:14List<int> list = new List<int>();
list.Add(10);
list.Add(20);
list.ForEach(Console.WriteLine);
0159デフォルトの名無しさん
2010/11/13(土) 00:05:27「スレッドとかわかりにくい」と言われた・・・
そりゃ、「わからないからスレッド使わない、だからデリゲートも使わない」
と言われれば、「うん、使う必要ないね」としか言いようがなく。
0160デフォルトの名無しさん
2010/11/13(土) 00:07:27非同期局面でシグナルでなくデリゲートじゃなきゃヤダ、というのは大概このケース
つまんり、
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);
}
みたいな、
0161デフォルトの名無しさん
2010/11/13(土) 00:08:210162デフォルトの名無しさん
2010/11/13(土) 00:10:46デリゲートというか、ラムダ式はC#3.0以降は必須。
Linqの使い方を学べばデリゲートの有効な使い方ってのがよくわかる。
2.0以下だったらピンと来ないのも当然かもしれない。
0163デフォルトの名無しさん
2010/11/13(土) 00:15:41正直、デリゲートの概念なかった頃は冗談抜きで面倒よ。
簡単に説明してくれといわれて簡単に書く気になれないレベル。
だから例が出てこないのよ。
0164デフォルトの名無しさん
2010/11/13(土) 00:16:00たしかにw
0165デフォルトの名無しさん
2010/11/13(土) 00:17:56すわなち、引数付きコンストラクタしかないクラスTを型引数とし、内部でnewするテンプレートは
Tのファクトリをデリゲートで渡すようなテンプレートにするしか手がない、
ハズ…!
(引数なしのコンストラクタで生成するならnew()制約で良いが、引数付きを扱う構文が無い)
0166デフォルトの名無しさん
2010/11/13(土) 00:18:30仮にデリゲートがなかったとしたら
全部インターフェースとクラスで代用?
0167デフォルトの名無しさん
2010/11/13(土) 00:22:32そういう言い方されても俺には理解できない
>>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じゃ有用性説明できないってことですか
なんだろな、解説サイトあらゆるところみて一通り読んだのに
使われる場面が違うとさっぱりわからないな
頭がプログラマ向きじゃないのかなー
0168デフォルトの名無しさん
2010/11/13(土) 00:22:44ありがとう、いままでその方法に気づかなかった
0169デフォルトの名無しさん
2010/11/13(土) 00:23:50Java の場合は匿名クラスってのが実質的にデリゲートの役目担ってて、まだマシ。
ものすっごいコード量増えるけど。
C++ とかだと悲惨。
インスタンスメソッドでなければ、関数ポインターっての使えば簡単っちゃ簡単なんだけど、
インスタンス持たせようとした瞬間酷いことに。
あと、循環参照つきものだからメモリ管理がすごく面倒になる。
0170デフォルトの名無しさん
2010/11/13(土) 00:25:40>>146 に書かれてる例、ものすごい頻出パターンよ。
それみて、使いどころ分からないとなると、頻出パターンすらわかってないことになる。
0171デフォルトの名無しさん
2010/11/13(土) 00:25:53「解説サイトあらゆるところみて一通り読んだ」のに「何一つ頭に入ってない」ね。
0172デフォルトの名無しさん
2010/11/13(土) 00:27:55C#選んでよかった
ところでWPFのコンバーターなんかもクラスじゃなくてデリゲート渡せたらなあって思うんだよね
0173デフォルトの名無しさん
2010/11/13(土) 00:28:09多分そうじゃないかな。
WPFの時もデリゲートわかんないって言ってて、
周りから「デリゲートもわからないってやばい」って言われて、
それで今に至ってるっぽい?
普通にやってたら頻出するはずのパターン見て「何が便利かわからない」って言ってる辺りもそっくり。
0174デフォルトの名無しさん
2010/11/13(土) 00:29:030175デフォルトの名無しさん
2010/11/13(土) 00:30:16マジでいってんの?
0176デフォルトの名無しさん
2010/11/13(土) 00:31:41XAML って仕組み的に、シリアライズ可能なものでないと書けないからね。
デリゲートは相性よろしくない。
0177デフォルトの名無しさん
2010/11/13(土) 00:33:21WPFスレではコテハンになったぞw
0178デフォルトの名無しさん
2010/11/13(土) 00:36:48これがなかったら、ICommandインターフェースを使った
クラスをそれぞれのコマンドごとに作らなくてはいけなくなる
だから、ICommandインターフェースを実装したDelegateCommandクラスを作って
デリゲートを通して、実処理部分のVMのメソッドはここですとDelegateCommandクラスに渡して
DelegateCommandクラスから、VMのメソッドを呼びなおしてもらうと
そのことによって、イベントハンドラごとにクラスを作らなくても良いようにしている
つまり、共通的な処理部分をデリゲートで呼び出したほかのクラスのメソッドに処理させて
相違部分は呼び出し元で処理する場合に便利ってことなんだろうけど
これも、インターフェースが必要としない場合だと、ただ共通機能をまとめた
メソッドを作って直接呼び出せばいいだけだし
0179デフォルトの名無しさん
2010/11/13(土) 00:40:53それはわかってるんだけどコンバータクラスが大量に増えてしまう現状は何とかしてほしい
なんかうまい方法とかないかな
0180305 ◆Jzt/EX0TGY8T
2010/11/13(土) 00:50:19それこそDelegateCommandと同じ要領でいけるでしょ
コンバータークラスを1つ作っておいて
デリゲートでVMなどの実処理するメソッドを呼び出してもらう
0181153
2010/11/13(土) 00:53:32言った手前返事しとこうとぞ思う、
>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だったりするというしくみ
わからないのは必要に迫られていないからかもしれない、
0182デフォルトの名無しさん
2010/11/13(土) 00:55:05なんだ、わかってるじゃないか
ここ見ても、イベントと非同期はわかりますよ
デリゲートなければできないですから。
イベントの場合、ボタンクリックで例えると
イベントハンドラを作る我々開発者はクリックイベントが起きた場合に
このメソッドを呼び出してほしいとイベントハンドラを代入して呼び出してもらう
でも、イベントハンドラを書かないでクリックされても無反応であってもいい構わないわけで
こちら側にすべての処理を委ねられているって感じがします。
でも、List 13-2にしても、上記のURLの図2にしても
普通に処理するメソッドを直接書けばいいだけなのを
わざわざデリゲートで呼び出している理由がわからない
>>181さんの言うとおり「必要に迫られていないからかもしれない」ってことなんだろうけど
>>181
その説明はすごくわかりやすかったです。
で、その説明で>>153を説明するとどうなりますか?
いやでも、それはインターフェースを実装しなければいけないという
制約があるから、デリゲートするしかないってのはわかるけど
例えば、インターフェースなくてもいいってのなら・・・
あれ?やっぱりクラスが増えることになるか・・・
いやいや、違うな
この場合は、呼び出し側がマイクロスフトの設計によるものだから
つまり、ボタンを設計したマイクロソフトであり、コンバーターやコマンドを作ったマイクロソフトが呼び出し側
呼び出し側も呼び出される側も自分で設計する場合は
やっぱり普通に直接メソッド呼び出すよね
だからデリゲートの有用性がわからないんです
0185デフォルトの名無しさん
2010/11/13(土) 01:18:40これならデリゲートのありがたみがわかるんじゃないか?
わざわざ自分で実行しなくても下のほうに結果も表示されるようになってるからね
0186デフォルトの名無しさん
2010/11/13(土) 01:18:440187デフォルトの名無しさん
2010/11/13(土) 01:22:090188デフォルトの名無しさん
2010/11/13(土) 01:24:38必要性を感じない人に理解させるのは難しい。
0189デフォルトの名無しさん
2010/11/13(土) 01:25:56無理して教える必要はないw
どうせ聞く方も身に付かないだろうし
教える方も疲れるだけw
会社の後輩だったら業務命令等あるだろうけどw
0190デフォルトの名無しさん
2010/11/13(土) 01:27:450191デフォルトの名無しさん
2010/11/13(土) 01:47:19>イベントハンドラを作る我々開発者はクリックイベントが起きた場合に
>このメソッドを呼び出してほしいとイベントハンドラを代入して呼び出してもらう
これは、「開発者のコード」が、ボタンクリック時の処理を、我=「開発者のコード」に属するイベントハンドラに委譲せよ、と「ボタン」迫るケース。
しかし「ボタン」を実装したコード自体はマイクロソフト謹製でかつビルド済みだから、開発者側はそれを改変できない。
だから「「ボタン」が「開発者のコードを直接呼び出せばいいのに!」という系の願いは叶えられようがない。
こういうとき、イベントハンドラのコードをデータのごとく「ボタン」に渡せて初めて解決する。デリゲートはその入れ物。
なお、「ボタン」を作るのがマイクロソフトでなくて今日の漏れで、「開発者のコード」を書くのが3000年後の漏れだとしても約同じ事
これが>153の説明。「ボタン」は「開発者のコード」専用には設計できない。
>>184
>呼び出し側も呼び出される側も自分で設計する場合は
>やっぱり普通に直接メソッド呼び出すよね
例えばだが、switch文x=1,2,3,...,10000に応じて自作関数1万個のどれかに分岐する1万行のコードのかわりにデリゲート1万個の配列をつくっておけば
呼び出しは1行で済むし、
一方、デリゲートに収容するコードはデータとして生成もできる(>160)から、初期化には1万行要らない(かもしれない)
0192デフォルトの名無しさん
2010/11/13(土) 01:52:49(デリゲートは使ってる立場ですけど)
これはデリゲート使ってないやり方ですよね?
このままでいいと思いますけど、何がだめなんでしょうか?
persons.Sort(compareAge).Select(s=>Console.WriteLine(s));
DelegateCommandに習うとするなら
実装を変えたくないClassAがあるという大前提で
ClassAのプロパティであるClassBの処理で計算結果が出される場合
ClassBの処理をいくつか変更したくなった場合に
ClassBにデリゲートを設けて、C,D,Eを呼び出して処理を変更するために
デリゲートを使うというのならわかる
でも、これはあくまで一部の使い方なんだよね
ラムダとかでデリゲート使ってるのみると、上記のようなことを
頭に浮かべながら考えるなんて大変すぎる
0194デフォルトの名無しさん
2010/11/13(土) 01:57:180195デフォルトの名無しさん
2010/11/13(土) 01:58:08いやいやいやいや
デリゲートつかってますよ?
0196デフォルトの名無しさん
2010/11/13(土) 02:00:10デリゲートなんて一次接近としてはただの関数ポインタだと理解すればいいわけで、
そんな難しい概念じゃないんだけどね。
機械語だったら今まで
CALL #label
と即値のアドレスしかコールできなかったのが、
CALL funcPtr
と、メモリーのどこかに入ってるアドレス値を参照してコールできるようになりましたよ、
とそれだけの話。
実行時に呼び出しアドレスを動的に変えたい場合があるって、そんな高尚な話か?
0197デフォルトの名無しさん
2010/11/13(土) 02:05:25「関数ポインタが安全に使えるようになりました」だった。
0198デフォルトの名無しさん
2010/11/13(土) 02:05:54アプリケーションに取っては、スレッド間通信が本来の使い方でしょ。
参照コールの機能もあるけどね。
>例えばだが、switch文x=1,2,3,...,10000に応じて自作関数1万個のどれかに分岐する1万行のコードのかわりにデリゲ>ート1万個の配列をつくっておけば
>呼び出しは1行で済むし
1行で済みますか?
デリゲートは
Sample sample = new Sample(instance.method);
こんな風に直接メソッドを指定してデリゲートに登録するんですよね?
つまり、分岐の数だけ、別クラスの特定のメソッドをデリゲートに登録する記述を書かなくてはいけないですよね?
例えばDelegateCommandのようにプロパティとして渡して置くというのなら
1行で済むでしょうけど
0200デフォルトの名無しさん
2010/11/13(土) 02:07:200201デフォルトの名無しさん
2010/11/13(土) 02:07:39デリゲートは関数ポインタよりも高尚な概念なんですよ^^
クロージャでもあるっていうのがその証拠
デリゲート=関数ポインタ、は正しくない
デリゲート=関数ポインタ+無名関数、は冗長
0202デフォルトの名無しさん
2010/11/13(土) 02:08:03persons.Sort(new Comparison<Person>(compareAge));
こう書けばわかる?
Comparison<T>はデリゲートね
ちなみにSortの返り値はVoidだし
Selectも遅延実行だから何も表示されない
>>197
こういう説明の仕方が一番嫌いです。
わざとなんでしょうけど。
ある未知の機能を説明するのに、未知の機能を例にする説明ってよくないと思うの
読んでる側は0の知識の可能性があるのに。
>>195
デリゲートの宣言ないですけど
0204デフォルトの名無しさん
2010/11/13(土) 02:15:05Select(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); // こう使ってもいい
になる。
匿名関数じゃないデリゲートがビミョーって主張なら、まあ分かる。
0205デフォルトの名無しさん
2010/11/13(土) 02:15:22クロージャになったのは.NET2.0から。
0206デフォルトの名無しさん
2010/11/13(土) 02:18:05未知って、だから関数ポインタがどういうものかもちゃんと説明してるじゃん。
デリゲートより関数ポインタの方が具体的だから、そっちをまず理解するんだよ。
関数ポインタがわからないのにより抽象度が高いデリゲートが分かるわけないだろう。
0207デフォルトの名無しさん
2010/11/13(土) 02:18:13一番単純な概念から説明しようとしてるだけだろ。
>こういう説明の仕方が一番嫌いです。
なんて言い訳して逃げるからいつまで経っても理解できないんだろうがw
0208デフォルトの名無しさん
2010/11/13(土) 02:19:47ごめんね、そこまで書かないとわかんないとは思わなかったんだよ
>>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);
って書き方になるわけです。
0209デフォルトの名無しさん
2010/11/13(土) 02:23:58そんなゲームに思えてきた
うーんわからないです
Sort()メソッドの実態は
Array.Sortを使ってある条件に基づいてソートすると
そのソート条件をcompareAge(Person a, Person b)で示していると
で、デリゲートがなければ、Array.Sortを直接呼び出してソートすればいいだけですよね?
0211デフォルトの名無しさん
2010/11/13(土) 02:26:170212デフォルトの名無しさん
2010/11/13(土) 02:27:23「直接呼び出してソートすればいい」
どうやって条件を指定するの?
デリゲート使ったのは
「そのソート条件をcompareAge(Person a, Person b)で示している」
ためなのに。
0213デフォルトの名無しさん
2010/11/13(土) 02:35:10じゃあ仮にデリゲートを使わないとしたら
Persons.Sort()の実行結果はどんな並び方になると思う?
関数ポインタって関数が書かれているメモリアドレスじゃないんですか?
よくわかりません。
>>204
なんとなくわかるんですが、
それなら、Hogeを改名してSelectにして直接使えばよかったのでは?と思うのです
つまり、Selectメソッドの実態には、hoge(int x)を呼ぶかhoge(int y)を呼ぶかの選択肢があるってこと?
でも、それはオーバーロードでいいですよね?
>>207
いやでも、自分で調べろよじゃ解説になってないってことを宣言していることだと思いますよ
>>208
ってーことは
内部がList 13-2みたいなことになっているってことですよね?
calcがSortみたいな感じですか?
つまりSortを利用する側は記述が少なくて済むと・・・
sortを利用する側は呼び出し側ということでいいですか?
?
デリゲート使う使わないに関係なく
Sortメソッドが利用しているアルゴリズムを直接使えば同じことでは?
0216デフォルトの名無しさん
2010/11/13(土) 02:46:16掲示板の少ない分量で、知識0で理解する気のない奴に解説しろ って無理ゲーにもほどがあるだろ。
>>139
0218デフォルトの名無しさん
2010/11/13(土) 02:48:070220デフォルトの名無しさん
2010/11/13(土) 02:51:230222デフォルトの名無しさん
2010/11/13(土) 02:52:54根本的に何もかも分かってないのに、あれこれ調べたお陰なのか、
ご立派な言葉だけは並べられるみたいでよくないね。
0223デフォルトの名無しさん
2010/11/13(土) 02:53:50少しでも実行してみれば自分がどれだけ変なこと言ってるか気づくと思うのだけど。
0224デフォルトの名無しさん
2010/11/13(土) 02:56:06そうですSortはcalcに相当しています
ソート用のアルゴリズムと、要素の比較方法が分離可能なら
いろいろなところで使いまわせるでしょ?
0225デフォルトの名無しさん
2010/11/13(土) 02:57:12>>210
やっぱあほ杉わろた
0226デフォルトの名無しさん
2010/11/13(土) 03:04:54自分は頭いいのに理解できないのは説明がよくないからって考えてる。
だからここに書かれた説明にちょっとでもわからない部分があるとすぐ攻撃的になって、
あらさがしや、わからないのはお前の説明が悪いからという態度になる。
そうやって自分の無能さから目をそらしているだけ。
0227デフォルトの名無しさん
2010/11/13(土) 03:07:190228デフォルトの名無しさん
2010/11/13(土) 03:08:100229デフォルトの名無しさん
2010/11/13(土) 03:11:04それなら◆Jzt/EX0TGY8T は天才的な才能の持ち主だな
0230デフォルトの名無しさん
2010/11/13(土) 03:14:530231デフォルトの名無しさん
2010/11/13(土) 03:18:39まじかー、そりゃいっぱいやられたな
開発者マジすげー、尊敬するよ
0232デフォルトの名無しさん
2010/11/13(土) 03:23:240233デフォルトの名無しさん
2010/11/13(土) 03:25:28ユーザーに簡単な数式みたいなやつを入力させて、
プログラムの動作を変更するみたいなことできる?
0234デフォルトの名無しさん
2010/11/13(土) 03:28:47式ツリーをビルトできるんだから出来る
0235デフォルトの名無しさん
2010/11/13(土) 03:29:120236デフォルトの名無しさん
2010/11/13(土) 03:39:11ありがと、ちょっと調べてみるよ
しかし何でこの記事真っ白なんだ?
http://msdn.microsoft.com/ja-jp/library/bb882637.aspx
ConverterはBindingできませんとかww
どうすりゃいいんだよー
0239デフォルトの名無しさん
2010/11/13(土) 04:53:29イベントを発生させるメソッドの命名規則としてOn〜ってするのは割とよくあると思うんだけど
(protected virtual OnLoaded(){ this.Loaded(〜); })
イベントを受け取る側のメソッドの名前ってどんなふうにつけてる?
標準ライブラリ見ると受け取る側もOn〜って名前になってたりするんだけど
なんか一緒っていうのも気持ち悪いし
CallBackとかじゃないのHandlerとか
寝ようとしたが閃いた
例えば、サイトから画像をダウンロードするソフトを作る場合
サイトによってダウンロードの仕方が違う
その相違部分をダウンロードするクラスに教えてやるためにデリゲートを使うって感じかな
でも、多態性でもできそうだよね・・・・うーん
0241デフォルトの名無しさん
2010/11/13(土) 06:00:57不要な画像(広告とか)のURLをフィルタリングするデリゲートを後から注入できるように設計しとくと便利かもね。
外から後で実装を注入できるのはデリゲートの重要な使い方の一つ。
例えばコレクションのソートでは、並び順を中身のクラスや状況によって変えたいケースは多いと思う。
そんな時にデリゲートが使えないとIComparerを実装したクラスを何度も作る羽目になっちゃうでしょ
>多態性でもできそう
単純な処理を各クラスに割り振ると数が増えすぎて複雑になってしまう。
でも複雑な処理ならクラスにする方が見通しがいい。
その辺のさじ加減はやっぱり経験になるけど、目安としては多態性で抽象化されるメソッドが複数ならインターフェイス、単一ならデリゲート
0242デフォルトの名無しさん
2010/11/13(土) 06:11:40その説明すごくわかりやすい
要は汎用的に使えるクラスがあるという大前提に基づいて
話を進めていかないとだめなんですよ
汎用的なクラスに固有の機能をつけて利用するためにデリゲートを使うと
クラスライブラリを作るとかさ、そういう前提の話じゃないこれって
それを@ITはMAINクラスを汎用クラス的な扱いにしているからわかりにくかったんだよ
それに、calcメソッドをclass1に入れているのもよくないね
あれはclass2にするべき、そしてclass2のメソッドをclass1でやらないとだめでしょ
例えるとclass2を電卓として、class1が入力する側という感じでコードを書けばわかりやすい
説明するのに専門用語でずらずらっと並べられてもわからないんですよね
初心者はすべてのライブラリや文法を理解しているわけじゃないんだから
できるだけ日常使うような言葉だけで説明してほしい
0244デフォルトの名無しさん
2010/11/13(土) 06:49:33もっと簡潔にいうと
@ITのサンプルコードは
IDEやアドオン、プラグイン対応のアプリを開発するための雛形なんだよ
初心者がそんなこと想定して作るかっつーの
0246デフォルトの名無しさん
2010/11/13(土) 07:02:31やっぱり何考えてるのか分からない
0247デフォルトの名無しさん
2010/11/13(土) 07:07:530248デフォルトの名無しさん
2010/11/13(土) 07:14:58Callbackとイベントは混同したくない
Handlerはデリゲートの名前に使うからかぶらせたくない
何かほかにありませんか?
0249デフォルトの名無しさん
2010/11/13(土) 07:31:20>>146の「述語: 条件式を外から挿す」を読んだだけで
汎用的なものに具体的な処理を注入するって発想にいたると思うんだけどなぁ
0250デフォルトの名無しさん
2010/11/13(土) 07:38:24「そこ読んだけどわかりづらい、解説されてない、例えが悪い」
ばっかりだもん。説明してる人、お疲れさまです。
その考え方が既にプログラミングがわかる人のものの考え方であって
例えば、全く知らない分野について、汎用的なものって言われてもわからないでしょ?
汎用的という言葉の意味はわかっていても、分野によってまったく内容が違う
CAD設計において汎用的なやり方って言われてイメージできますか?
汎用的なものすらプログラミングしたことのな初心者にとっては理解できないんですよ
今で作ったソフトは、ソートも必要ないし、イベントに対して直接動作を書き込んで
できちゃうようなプログラミングばかりだったので、デリゲートの概念なんて意識しないで使っていた
0252デフォルトの名無しさん
2010/11/13(土) 08:01:10汎用的って表現はあなたの>>243から借りて使ってるんだよ
0253デフォルトの名無しさん
2010/11/13(土) 08:03:560254デフォルトの名無しさん
2010/11/13(土) 08:06:22誰もあんたの想像してる脳内人物を理解できていないってことをそろそろ学べよ
口だけだぞ
0255デフォルトの名無しさん
2010/11/13(土) 08:09:03そんなに初心者でいたかったらもうプログラミングなんてやめちゃえよ。
>>249の発言は、俺がまだ理解できていなかったときに対しての発言でしょ?
その時はプログラミングにおける汎用的なイメージがつかめていなかったんだから
>汎用的なものに具体的〜なんて言ったところで無意味なのはわかるよね?
>>243の時点で理解できたから汎用的と使ったまでで
そのイメージを理解できていなかったときの俺が共有しているというわけではない
つまり、ただの煽りなんだよね
0257デフォルトの名無しさん
2010/11/13(土) 08:25:07VS2008用には記事があるのにね。
http://msdn.microsoft.com/ja-jp/library/bb882637%28v=VS.90%29.aspx
0258デフォルトの名無しさん
2010/11/13(土) 08:26:13何で過去のあなたに説明しなきゃいけないの
だいたい>>146の記事には汎用的なんて難しい(笑)言葉でてこないし
汎用的なものに相当する部分は誰でもわかるSum(合計)っていう日常的なものに置き換えられてるだろ
0259デフォルトの名無しさん
2010/11/13(土) 09:01:42そろそろSelect拡張メソッドの使い方ぐらいは暗記できた?
0260デフォルトの名無しさん
2010/11/13(土) 09:04:54ありがとう、助かります。
0261デフォルトの名無しさん
2010/11/13(土) 10:46:47いつも
OnClick += OnClickHandler; // (1)
みたいな名前付けにしてるが、むしろ
OnClickHandlers += OnClick; // (2)
の方が意味的に自然鴨、
ただソースコードに現れる回数という点では左辺の方が多いから
左辺と右辺を区別するならタイプ量が(左辺)<(右辺)となる(1)の書き方が正義と信ずる、
(実際のところあまり気にしてない)
0262デフォルトの名無しさん
2010/11/13(土) 11:15:54原則privateだしコードから直接呼ぶことはまずないからどうでもいいです
MSのコードだとAcceptButtonClickみたいなのが多い気がする
0263デフォルトの名無しさん
2010/11/13(土) 11:53:18>どうでもいいです
仰る通りなんですが、せめて自分の中だけでも統一したいなと思いまして。
イベント用のデリゲート、イベント、イベントの発生用メソッドに関しては
.NETのクラスライブラリに習って、〜EventHandler、過去分詞形(Clicked)、On〜としてあるんですが、
これにかぶらない形の受け取り用メソッドの規則が思いつかなかったんですよ。
他にないようなら、>>262のAcceptがよさそうなんでこれを使っていくことにします。
0264262
2010/11/13(土) 12:08:22AcceptButtonのClickイベントね
もしくはOn(コントロール名)Click
0265デフォルトの名無しさん
2010/11/13(土) 12:30:53なんという恥さらし状態 orz
やはりクラス名(or変数名) + イベント名あたりが妥当なところでしょうか
でもOn + クラス名 + イベント名にしておけば
Onがつくのはイベントを扱うメソッドという括りもできるしこっちもいいな
0267デフォルトの名無しさん
2010/11/13(土) 15:28:38Handle + (イベント名)とかでどう?
0269デフォルトの名無しさん
2010/11/13(土) 16:15:58ごめんなさい、その部分だけ別のところの規約を間違って書いてしまいました><
標準ライブラリのコード規約だと>>268が正しいです
0270デフォルトの名無しさん
2010/11/13(土) 18:18:45System.IO.File.Copyだと出来なかったです
0271デフォルトの名無しさん
2010/11/13(土) 18:20:570272デフォルトの名無しさん
2010/11/13(土) 18:54:100273デフォルトの名無しさん
2010/11/13(土) 19:06:30コンピュータ名 PC01 のC:\Hoge\hoge.txtからローカルC:\Piyo\piyo.txtにコピーなら
File.Copy(@"\\PC01\C\Hoge\hoge.txt", @"C:\Piyo\piyo.txt");
でいけるはずずず
0274デフォルトの名無しさん
2010/11/13(土) 19:10:570275デフォルトの名無しさん
2010/11/13(土) 19:12:170277デフォルトの名無しさん
2010/11/13(土) 20:10:210278デフォルトの名無しさん
2010/11/13(土) 20:12:05Console.WriteLineみたいに何でも表示できるようにしたいです
どのようにすればいいですか?
0279デフォルトの名無しさん
2010/11/13(土) 20:16:05または、何と呼ばれることが多いとかありますか?
0280デフォルトの名無しさん
2010/11/13(土) 20:16:47string.Format
0281デフォルトの名無しさん
2010/11/13(土) 20:17:230282デフォルトの名無しさん
2010/11/13(土) 20:19:02別の関数使うのじゃなくて
int x=5;
MessageBox.Show(x);
で表示されるようにしたいのです
そうすれば、他のプロジェクトでも使いまわしができると思うので
0283デフォルトの名無しさん
2010/11/13(土) 20:20:590284デフォルトの名無しさん
2010/11/13(土) 20:22:19意味不明過ぎる
0285デフォルトの名無しさん
2010/11/13(土) 20:24:07APIスレと同時に開いてるからだぞ♪
0286デフォルトの名無しさん
2010/11/13(土) 20:26:01MessageBox.Show(x.ToString());
とするのは面倒じゃないですか?
場合によったらすごく長いコードになるし
0287デフォルトの名無しさん
2010/11/13(土) 20:27:020288デフォルトの名無しさん
2010/11/13(土) 20:30:40Show2()作って引数.ToString()をShow()に渡せば
0289デフォルトの名無しさん
2010/11/13(土) 20:32:400290デフォルトの名無しさん
2010/11/13(土) 20:33:49それだとConsol.Writeと同じ機能にならないですね
0291デフォルトの名無しさん
2010/11/13(土) 20:35:220292デフォルトの名無しさん
2010/11/13(土) 20:36:00Console.WriteLineと同じ動きです
0293デフォルトの名無しさん
2010/11/13(土) 20:37:510294デフォルトの名無しさん
2010/11/13(土) 20:38:030295デフォルトの名無しさん
2010/11/13(土) 20:38:070296デフォルトの名無しさん
2010/11/13(土) 20:51:16public PropatyChanged Propaty_Changed;
//public event PropatyChanged Propaty_Changed;
この部分だけが違うだけで動作はまったく同じになるのですが
何が違うのでしょうか?
0297デフォルトの名無しさん
2010/11/13(土) 20:53:250298デフォルトの名無しさん
2010/11/13(土) 21:01:20Showには21個、WriteLineには19個。まあ全部必要になるわけじゃないにしても400個近くはオーバーロード書かなきゃいかんな
0299298
2010/11/13(土) 21:02:330300デフォルトの名無しさん
2010/11/13(土) 21:05:07それだけの違いだとデリゲートだけで良さそうですね
他に何かあるんでしょうか?
0301デフォルトの名無しさん
2010/11/13(土) 21:09:57独自のアクセサを書くことが出来る。
0302デフォルトの名無しさん
2010/11/13(土) 21:18:47イベントの存在意義は、それがイベントであることでしょ。
謎掛けでもなんでもなくマジでそうだよ。
0303デフォルトの名無しさん
2010/11/13(土) 21:23:42ただのデリゲートだとMainWindow側からPropaty_Changedを発生させたり、MainWindow以外から登録されたメソッドをcp.Propaty_Changed = null;で消せてしまうということ。
0304デフォルトの名無しさん
2010/11/13(土) 21:23:53private List<EventHandler<MessengerEventArgs>> publish3 =
new List<EventHandler<MessengerEventArgs>>();
public event EventHandler<MessengerEventArgs> Publish3 {
add { publish3.Add(value); }
remove { publish3.Remove(value); }}
イベントハンドラごとに異なる情報を渡したり、呼び出す順番をコントロールしたり、
例外が起きた場合の処理を特別にやりたいとかそういったケースで使う。
0305デフォルトの名無しさん
2010/11/13(土) 21:30:56プロパティに非常に近い概念だよ
実際VBではadd/removeアクセサを定義したイベントをイベントプロパティと呼ぶ
プロパティはgetとsetのメソッドを一括りにしたものであるのに対して
イベントはadd/removeメソッドを一括りにしたもの
0306デフォルトの名無しさん
2010/11/13(土) 21:34:09何個も入るってこと
0307デフォルトの名無しさん
2010/11/13(土) 21:35:05イベントでもアクセサ使えば、別のクラスでイベント発生させられる
0308デフォルトの名無しさん
2010/11/13(土) 21:38:10Form2からForm1のメソッドを利用したい場合
Form1のインスタンスをForm2に渡して利用させたりするけど
デリゲート使えばそんなことせずにあらゆるクラスからそのメソッドを利用できる
なんでこんな重要なこと教えてくれないんだよ
0309デフォルトの名無しさん
2010/11/13(土) 21:39:120310デフォルトの名無しさん
2010/11/13(土) 21:45:24非同期プログラミングとか
イベント処理とか・・
そんな難しいことばっかり言って
初心者が最初に一番悩むのが、
「Form2からForm1のメソッドを利用したい」
ここじゃないか
よく質問でもあるじゃない、 from2.Form1=this;
みたいなの・・・・
解説サイトもこういうこと言ってくれれば
初心者もデリゲートにすぐ食いつくのに
0311デフォルトの名無しさん
2010/11/13(土) 21:45:53こんな書き方もあるのか
普段アクセサなんて使ってなかったから全然知らんかった
でもpublish3に入ったそれぞれの値って区別できるの?
追加された逆順で呼び出すぐらいの操作しか思いつかない
0312デフォルトの名無しさん
2010/11/13(土) 21:46:32わざわざそんなことする方が理解に苦しむよ
0313デフォルトの名無しさん
2010/11/13(土) 21:47:110314デフォルトの名無しさん
2010/11/13(土) 21:47:52List<T>.Removeの説明をよく見ろ
0315デフォルトの名無しさん
2010/11/13(土) 21:53:02何個もってハンドラを?
デリゲートにもメソッドを何個も入れられるよ。マルチキャストってやつ。
0316デフォルトの名無しさん
2010/11/13(土) 21:57:36でもデリゲートだと特定のものを削除できない
0317デフォルトの名無しさん
2010/11/13(土) 21:58:280318デフォルトの名無しさん
2010/11/13(土) 22:00:26いや、Removeは比較対象のvalueがあるから取り除けるのはわかる。
protected virtual void OnPublish3(){
foreach (var item in publish3) {
try {
item(...);
} catch {
}}}
って書けば例外を個別に処理できるのもわかる。
だけど追加されるデリゲートは内部からは他のものと区別できないから(できる?)
並び替えも、ハンドラごとに違う情報を渡すってのも良く解らんなぁと思って。
0319デフォルトの名無しさん
2010/11/13(土) 22:03:240320デフォルトの名無しさん
2010/11/13(土) 22:03:44特定のデリゲートを削除できるよ。
dele -= new TestDelegate(hoge);
てな感じで。
0321デフォルトの名無しさん
2010/11/13(土) 22:09:39CancelEventArgsをチェックしてCancel=Trueになったら処理を中断している。
0322デフォルトの名無しさん
2010/11/13(土) 22:10:050323デフォルトの名無しさん
2010/11/13(土) 22:11:23外部からデリゲートを実行してほしくない、nullとか入れられたくない、
使用者はデリゲートの追加と削除だけ行えばいいんだ。
という理由によりわざわざ用意したんだね。
他になにか理由ある?
0324デフォルトの名無しさん
2010/11/13(土) 22:14:210325318
2010/11/13(土) 22:14:310326デフォルトの名無しさん
2010/11/13(土) 22:21:12リフレクタで覗いてみたがListじゃなくて単純なマルチキャストだったよ
0327デフォルトの名無しさん
2010/11/13(土) 22:37:32どうやって?
0328デフォルトの名無しさん
2010/11/13(土) 22:43:550329デフォルトの名無しさん
2010/11/13(土) 22:44:38add
{
class2.class2Event+=value;
}
0330デフォルトの名無しさん
2010/11/13(土) 22:47:54そんなのあるんだ
0331デフォルトの名無しさん
2010/11/13(土) 22:48:330332デフォルトの名無しさん
2010/11/13(土) 22:49:300333デフォルトの名無しさん
2010/11/13(土) 22:50:31VBのイベントにはRaiseがあるが、なぜかIL上のraiseアクセサは使っていない。
0334デフォルトの名無しさん
2010/11/13(土) 22:53:14自分だとソースから画像のアドレスを分析して直ダウンロード、くらいしか思いつかないのですが・・・
他に方法ってあるのでしょうか
ちょっと気になったので
0335デフォルトの名無しさん
2010/11/13(土) 22:53:22public void Raise〜(e){ this.handler(this, e ) }
でできるような希ガス
0336デフォルトの名無しさん
2010/11/13(土) 22:57:310337デフォルトの名無しさん
2010/11/13(土) 23:25:18ありました!
ありがとうございます
・・・そしてすいません
どうすればImage型の変数に入れられるんでしょうか?
どうも変換の仕方がわからなくて;
0338デフォルトの名無しさん
2010/11/13(土) 23:30:490339デフォルトの名無しさん
2010/11/13(土) 23:44:410340デフォルトの名無しさん
2010/11/13(土) 23:50:380341デフォルトの名無しさん
2010/11/13(土) 23:51:29src使って画像ファイルをダウンロード、でいいんじゃね?
キャッシュ効きそうな気するし。
IHTMLElementRender.DrawToDC()とかでなんとかできんのかなと思うけど。
0342デフォルトの名無しさん
2010/11/13(土) 23:53:550343デフォルトの名無しさん
2010/11/14(日) 00:06:02の中にあるxmlの英語版が欲しいです。
英語版をインストールしたらenディレクトリが出来たりするのでしょうか?
どなたか、英語版をインストールしている方、調べてみて下さいませんでしょうか?
0344デフォルトの名無しさん
2010/11/14(日) 00:10:190345デフォルトの名無しさん
2010/11/14(日) 00:26:11DLLのXMLドキュメントならv4.0フォルダに入ってない?
0346デフォルトの名無しさん
2010/11/14(日) 00:37:28どうもです。
どうやら、3.0と3.5とSilverlightの3.0と4.0は英語と日本語の両方が入っているけれど、
4.0だけ、jaしか入らないようです……
なるほど……
0347デフォルトの名無しさん
2010/11/14(日) 08:29:16NetworkStream、TcpClient を使って、HTTP通信を試してますが、
HTMLが全て受信できなくて困っています。
いつも同じ場所で受信できなくなり、
それ以降は無限ループさせて Read させても、受信できません。
そもそも、レスポンスの Content-Length: が想定よりも、短く返ってきているため、
apache の問題のような気もします。
(ブラウザでアクセスした場合は、正常に動作しています)
また、NetworkStream は、ブラウザでアクセスするよりも4倍近く遅いのですが、
そう言うものなのでしょうか?
0348デフォルトの名無しさん
2010/11/14(日) 08:32:200349デフォルトの名無しさん
2010/11/14(日) 09:28:34ありがとうございます
ちょっと調べてみますね
0350347
2010/11/14(日) 09:33:56特にそう言った指定はしていないのですが、
NetworkStream と言うよりも、HTTP の話と言うことですかね。
ちょっとそっち方面で再度調べてみます。ありがとうございました。
0351デフォルトの名無しさん
2010/11/14(日) 12:53:56エリアチャートを使用し、塗りつぶしを行いたいのですが
マイナスの値をとった場合、色塗りの基準点が自動的に0からになってしまいます。
Y軸の最小から塗りつぶしを行いたいのですが、どのような方法があるでしょうか。
また、空の値を入れる方法と、空の値の間を線グラフに表示しない方法もありましたら
ご教授いただければ幸いです。
値はDBからの取得ではなく、算出して設定しています。
よろしくお願いいたします。
0352デフォルトの名無しさん
2010/11/14(日) 13:56:590353デフォルトの名無しさん
2010/11/14(日) 17:02:180354デフォルトの名無しさん
2010/11/14(日) 18:19:180355デフォルトの名無しさん
2010/11/14(日) 20:25:34どこでどんなデータを必要としているのかわかりにくくないですか?
こういう場合簡単にわかる方法は用意されてないの?
0356デフォルトの名無しさん
2010/11/14(日) 20:39:340357デフォルトの名無しさん
2010/11/14(日) 20:40:01ちゃんと仕様書を書け
0358デフォルトの名無しさん
2010/11/14(日) 20:40:490359デフォルトの名無しさん
2010/11/14(日) 20:45:00UMLでも描いとけ
0360デフォルトの名無しさん
2010/11/14(日) 20:46:52GUIが必要としているプロパティがパっとわかるような機能ないの?
0361デフォルトの名無しさん
2010/11/14(日) 20:47:580362デフォルトの名無しさん
2010/11/14(日) 20:55:24なんのために分離したんだよ
GUIと分離コードの連結部分がどのようになっているか
視覚的に見れないなんて、把握しづらいじゃないか
0363デフォルトの名無しさん
2010/11/14(日) 20:58:42後でわからなくなること自体がおかしい
0364デフォルトの名無しさん
2010/11/14(日) 21:39:44ここは初心者スレ
大抵は作りながらあれこれ機能を足していくもの
それに、全体把握して作れるにしても
あって悪い機能ではないだろ
何でマイクロソフトに媚びた発言してるの?
0365デフォルトの名無しさん
2010/11/14(日) 21:40:440366デフォルトの名無しさん
2010/11/14(日) 21:41:400367デフォルトの名無しさん
2010/11/14(日) 21:50:170368デフォルトの名無しさん
2010/11/14(日) 21:52:36それを初心者に求めるなよ
0369デフォルトの名無しさん
2010/11/14(日) 21:53:16ツールでも作れば? せっかく開発ツール使ってんだしさ。
0370デフォルトの名無しさん
2010/11/14(日) 21:55:07拡張性を意識しなくてすむんじゃね?
0371デフォルトの名無しさん
2010/11/14(日) 21:56:530372デフォルトの名無しさん
2010/11/14(日) 21:57:34自分の能力不足をMVVMのせいにするなよ
0373デフォルトの名無しさん
2010/11/14(日) 21:57:56そんなことはない
拡張性考えないで素直に作ったらクラス間が依存しまくりで拡張性なんか無くなる
0374デフォルトの名無しさん
2010/11/14(日) 21:59:18クラス間が依存しまくるコードってオブジェクト指向の方向性として正しいか?
0375デフォルトの名無しさん
2010/11/14(日) 21:59:19大量にbindingするじゃない
xamlのプロパティから分離コードに、又はその逆に飛べたりすりゃまだいいが
それができないからもう、どこがどこバインドしててどうなってるか
わからなくなるんじゃない?
0376デフォルトの名無しさん
2010/11/14(日) 22:02:590377デフォルトの名無しさん
2010/11/14(日) 22:03:18たとえば、オブジェクトAでイベントが発生したことをオブジェクトBが受け取りたいとすると
素直に考えりゃAがBにメッセージを送る、つまりAのクラスでBのメソッドを呼ぶのが一番自然なわけだけど
そうしないでObserverパターンやデリゲートを使うのは、やっぱり拡張性を意識してるわけだ。
0378デフォルトの名無しさん
2010/11/14(日) 22:03:46活用しようぜ
0379デフォルトの名無しさん
2010/11/14(日) 22:04:58できるわけないだろ
2chブラウザなんて大量のコントロール配置するんだぞ
それをxamlでズラーっと並べられているのを読めって言われてもな
昔のBasicインタプリタじゃないんだからさ
どうにかしてほしいわ
0380デフォルトの名無しさん
2010/11/14(日) 22:08:090381デフォルトの名無しさん
2010/11/14(日) 22:09:47コントロール10倍くらい多いが
0382デフォルトの名無しさん
2010/11/14(日) 22:10:52そんなに複雑にはならんでしょ
0383デフォルトの名無しさん
2010/11/14(日) 22:11:16サイト自体の管理ツール?
想像しただけで恐ろしい
0384デフォルトの名無しさん
2010/11/14(日) 22:12:27だったらアセンブラで書けよ
なんとために、B,C,C#ができたんだよ
できればいいだけなら、C#いらないだろ
0385デフォルトの名無しさん
2010/11/14(日) 22:13:37だからさ、XamlからすぐVMのコードに飛べないだろ?
XamlでVMのプロパティが候補に出ないだろ?
こういうのが面倒なんだよ
0386デフォルトの名無しさん
2010/11/14(日) 22:14:213つTreeView・ListViewがあるだけのビューで困るのはスキル不足としか
0387デフォルトの名無しさん
2010/11/14(日) 22:14:47無いものはしょうがないんだからMSに要望でも出しとけば?
0388デフォルトの名無しさん
2010/11/14(日) 22:16:51それかそう言うのができるもっと素晴らしい言語を探すたびに出てください。
0389デフォルトの名無しさん
2010/11/14(日) 22:16:58そんな単純なもの作っているんじゃない
0390デフォルトの名無しさん
2010/11/14(日) 22:18:160391デフォルトの名無しさん
2010/11/14(日) 22:18:510392デフォルトの名無しさん
2010/11/14(日) 22:21:19それらがC#よりも便利な言語で開発されているなら考え改めるけど
0393デフォルトの名無しさん
2010/11/14(日) 22:21:59現状で甘んじてるてて向上心がない
0394デフォルトの名無しさん
2010/11/14(日) 22:23:253つTreeView・ListViewがあるだけの2chブラウザしかお前は見たことがないの?
>>392
ツインテールも重いだけだろ
0395デフォルトの名無しさん
2010/11/14(日) 22:24:320396デフォルトの名無しさん
2010/11/14(日) 22:25:14C#4.0だとダイナミックとか
なんか関数のオーバーロードみたいなやつ(引数なしの関数使えるやつ)
とか出てきて、クソ楽になったんだが。
いちいち型とか決めるのめんどくさいから全部ダイナミックでいいじゃん、みたいな。
0397デフォルトの名無しさん
2010/11/14(日) 22:25:520398デフォルトの名無しさん
2010/11/14(日) 22:27:200399デフォルトの名無しさん
2010/11/14(日) 22:27:35初心者スレだけどすさまじい向上心を持った初心者が現れたのです
自分の必要な開発補助が存在しないことにご立腹みたいです
0400デフォルトの名無しさん
2010/11/14(日) 22:29:27ここは
Q これどうやるんですか
A こう
Q できた、ありがとー♪
こういうレベルのスレだから。
0401デフォルトの名無しさん
2010/11/14(日) 22:38:22あそこみてもWPFの概要がまったく理解できてなかったらしく
パネルにボタン配置する方法すらわからなかったわ
たかがこの程度の機能をつけるのに何時間もかけさせやがって
ItemsControlというのがあり
これがコレクションデータを表示ために必要
これに対して、どのようにボタンを配置するか、
パネルはないを使うかをテンプレートで設定しなければいけない
こういう根本的なことをなぜ解説しないんだよ
どっかまともなWPFを解説するサイトないのかねー
0402デフォルトの名無しさん
2010/11/14(日) 22:40:320403デフォルトの名無しさん
2010/11/14(日) 22:42:57それはお前が悪い
@ITのドトネト記事は
インサイダーNET
NET開発者中心
っていう二種類があるが
インサイダーNETは初心者中心
NET開発者中心はある程度の知識や経験がある人向け
WPF入門はNET開発者中心だから、おまえみたいな初心者が見るものじゃない
0404デフォルトの名無しさん
2010/11/14(日) 22:43:410405デフォルトの名無しさん
2010/11/14(日) 22:43:440406デフォルトの名無しさん
2010/11/14(日) 22:44:44http://www.atmarkit.co.jp/fdotnet/vblab/uiframework_02/uiframework_02_05.html
ここだよここ
ItemsControlと言って置きながらListBox使ってテンプレート作ってるし
どうしてこんなややこしくするのかねー
ここでItemsControlを使ってコード書いてくれればすぐわかったのに
0407デフォルトの名無しさん
2010/11/14(日) 22:45:30> あそこみてもWPFの概要がまったく理解できてなかったらしく
ごめん日本語で
0408デフォルトの名無しさん
2010/11/14(日) 22:46:310409デフォルトの名無しさん
2010/11/14(日) 23:05:04自分自身を客観的に見ることはできるんです
あなたとは違うんです
0410デフォルトの名無しさん
2010/11/14(日) 23:08:120411デフォルトの名無しさん
2010/11/14(日) 23:09:04ってなに?
0412デフォルトの名無しさん
2010/11/14(日) 23:11:400413デフォルトの名無しさん
2010/11/14(日) 23:11:510414デフォルトの名無しさん
2010/11/14(日) 23:12:18バージョニングの問題があるからアセンブリの外から見えるメンバには使えないよ
FxCopで警告が出る
0415デフォルトの名無しさん
2010/11/14(日) 23:14:510416デフォルトの名無しさん
2010/11/14(日) 23:19:52static int Sum(int x = 0, int y = 0, int z = 0){ return x + y + z; }
これのことか
確かにこれは便利だね
0417デフォルトの名無しさん
2010/11/14(日) 23:25:55this.Resourcesからx:Keyでつけたキー名で取得
0418デフォルトの名無しさん
2010/11/14(日) 23:27:19FindResource
0419デフォルトの名無しさん
2010/11/14(日) 23:35:30thx たすかった。
0420デフォルトの名無しさん
2010/11/15(月) 00:42:28リアルタイムで項目が追加されるデータソースを表形式で表示するような場合
WinFormsのDataGridView(仮想モード)と比べて体感できるほど違いはある?
データ多くて10万件くらいまで、速い時で秒間30項目くらい追加されます。
0421デフォルトの名無しさん
2010/11/15(月) 00:46:590422デフォルトの名無しさん
2010/11/15(月) 00:49:32WPF初心者がよくわからないままDataGrid使っても
本来のパフォーマンスを出せないんじゃないかという心配が。
それはいいわけかwとりあえず試してみる
0423デフォルトの名無しさん
2010/11/15(月) 00:56:32しかし10万行をユーザにどうしろってんだ…
0424デフォルトの名無しさん
2010/11/15(月) 00:57:51Wireshark(パケットキャプチャソフト)みたいなイメージです
項目がどんどん追加されて流れていくみたいな感じ
0425デフォルトの名無しさん
2010/11/15(月) 00:59:06今更2010Pro買うか迷うわぁ・・・。
0426デフォルトの名無しさん
2010/11/15(月) 01:04:17比べると3倍ぐらい重い
ソートも遅い
スクロールのfpsは1桁以下
通常表示でも30fps程度
これで3Dやろうなんてのは無能
0427デフォルトの名無しさん
2010/11/15(月) 01:05:161000行程度で十分重いです^^
0428デフォルトの名無しさん
2010/11/15(月) 01:08:450429デフォルトの名無しさん
2010/11/15(月) 01:09:06>>426-427を読む限り、DataGridはむりそうですね
WPF化自体を諦めるべき?
0430デフォルトの名無しさん
2010/11/15(月) 01:13:01個人で使うだけで、尚且つハイスペックマシン(GTA4を3つ同時起動できるぐらい)
ならやってもいいんじゃない?
0431デフォルトの名無しさん
2010/11/15(月) 01:17:01よくわかってないんですが、ListView + データ編集機能 = DataGridってことですか?
ListViewならパフォーマンスも期待できる?
>>430
そんな灰スペPC持ってないです><
0432デフォルトの名無しさん
2010/11/15(月) 01:26:21とにかくどんなアルゴリズムでやろうとも
WindowsフォームやC++MFCで作られたものと
比べて体感できるほど重い、もっさりだよ
20行程度でソートするのに0.5秒かかるからなww
どこでスペック食ってるんだよとw
0433デフォルトの名無しさん
2010/11/15(月) 01:29:38VSのIDEみてみろ。あのもっさり感
超エリート集団が作ったのでさえ、あのもっさりだよ?
パフォーマンス気になるならC++がオススメ
手間が多少かかるが、速度的に不満が出ることはない
もちろん、クライアントもランタイムや速度で不満が出ない
0434デフォルトの名無しさん
2010/11/15(月) 01:34:43まじですか。上司からは、スムーズな動作(見た目的に)を要求されてるんでWPFはダメそうですね。
DirectX使ってるからこういうのは有利なのかなと思ったんですが勘違いでしたか。
やはりC++ですか。
C#以外でGUI作ったことないんですがMFCなんかを勉強すればいいんですかね
0435デフォルトの名無しさん
2010/11/15(月) 01:36:12ちょっとMFC勉強してきます。
0436デフォルトの名無しさん
2010/11/15(月) 01:40:14有料IDEじゃないと開発環境そろわないのに・・・
0437デフォルトの名無しさん
2010/11/15(月) 01:41:400438デフォルトの名無しさん
2010/11/15(月) 01:43:37なにそれ怖い。犯罪?
0439デフォルトの名無しさん
2010/11/15(月) 01:51:540440デフォルトの名無しさん
2010/11/15(月) 01:55:082010は封じられたんじゃないの?
0441デフォルトの名無しさん
2010/11/15(月) 01:56:37ちゃんと購入してシリアル入れれば製品版になるよ
0442デフォルトの名無しさん
2010/11/15(月) 01:59:01展開されるATL+MFCのフォルダをピーコしてExpress環境で
使えるようにしちゃえばいいだけなんだけどねw
0443デフォルトの名無しさん
2010/11/15(月) 02:06:400444デフォルトの名無しさん
2010/11/15(月) 02:10:23>WPF初心者がよくわからないままDataGrid使っても本来のパフォーマンスを出せない
スクロールする度にサイズ調節が走ってレイアウト変更するようなやつ作っておいて、遅いとDataGridのせいにしてる人はよく居る。
余計なサイズ調節が入らないようにして仮想化(EnableRowVirtualization/EnableColumnVirtualization)しとけばだいぶマシになる。それでも他に比べりゃ遅いけど
WPFのDataGridは色々入っててオーバースペックなので、軽い機能制限版がいいならListViewで作っちゃってもいい。WPFでは(ListViewを含む)あらゆるコントロールでデータ編集機能を実装できる。
WinFormsのDetaGridで十分ならそれでもいい。WPFに組み込みたいならWindowsFormsHost。
>C++(略
C++とMFCでDataGrid?w まぁいいけど
0445デフォルトの名無しさん
2010/11/15(月) 02:16:533Dゲームがあれだがグリグリ動くのに
どうしてこれはこんなに重いのか
0446デフォルトの名無しさん
2010/11/15(月) 02:22:00もうだれもwinフォームで作ってないのか?
0447デフォルトの名無しさん
2010/11/15(月) 02:21:590448デフォルトの名無しさん
2010/11/15(月) 02:45:320449420
2010/11/15(月) 02:50:14WPFのほうがスムーズでCPU使用率も低くなりました。
DataGirdViewの仮想モードの使い方が間違ってるのかな。
そして時間がががががが
0450420
2010/11/15(月) 03:07:48データの追加がない時の手動スクロールに関しては
みなさんの仰る通りWindowsFormの方が圧倒的に優れていましたが、
30msごとにデータを追加してその項目を表示するという動作に関しては
WPFのほうがカクツキが少なく、CPU使用率も半分程度でした。
0451デフォルトの名無しさん
2010/11/15(月) 03:11:39それWinFormで自動ソートとかにしてるんじゃないの?
0452デフォルトの名無しさん
2010/11/15(月) 03:36:510453デフォルトの名無しさん
2010/11/15(月) 03:54:230454デフォルトの名無しさん
2010/11/15(月) 06:11:39これは友達に自慢できるよ
結局、WPF学ぶにはここから順にやってったほうが身に付くな
@ITはだめだ、簡潔過ぎて頭に入らない
Windows Presentation Foundation
http://msdn.microsoft.com/ja-jp/netframework/aa663326.aspx
0455デフォルトの名無しさん
2010/11/15(月) 06:41:10.NET Framework 4のWPFに追加されるDataGridの縦スクロールの動画(凄く・・・遅いです・・・) - かずきのBlog@Hatena
http://d.hatena.ne.jp/okazuki/20100225/1267070169
0456420
2010/11/15(月) 06:57:22なるほど参考になります。
>>451
そんな機能ありましたっけ?
>>455
なるほど、列数が増えると遅くなるのか。
あとで試してみます。
・今日はブラシでオサレGUI
・DataGridよりListViewの方が軽いとのことでxaml大幅に改良
でも、分離コードは全然弄らなくてよかった。すげーw
・WindowsフォームでもそうだったがWPFのListViewにソートついてないんだなこれが、ソートはまた明日だな
・ListViewで一部の列の右揃えで苦戦したわwwなんなんだこれは
着実に進んではいるが2週間でまだGUIができてないってwwwいつになったら完成だよ
0458デフォルトの名無しさん
2010/11/15(月) 08:40:090459デフォルトの名無しさん
2010/11/15(月) 09:12:120460420
2010/11/15(月) 09:22:52列数を3から実際に使う予定の8に増やしたところ劇的にパフォーマンスが落ちました。
やっぱDataGrid使えないです。
DataGridViewの方はRowCountを設定している部分がボトルネックのようです。回避不可能?
とりあえず、ListViewは列が増えてもそれなりに動いてくれたのでこれで行きます。
いろいろなご意見ありがとうございました。
0461デフォルトの名無しさん
2010/11/15(月) 09:25:45でもパレットが256色以下に劣化してしまいます。
フルカラーの画像はリストビューでは表示出来ない仕様でしょうか?
0462デフォルトの名無しさん
2010/11/15(月) 09:33:00なんちゃら32bitにしとけばおk。
0463デフォルトの名無しさん
2010/11/15(月) 09:47:270464デフォルトの名無しさん
2010/11/15(月) 09:53:23WPFのDataGridはSilverlightからの移植だから
もともとそんなに多量のデータを表示するようにはできてない
0465461
2010/11/15(月) 10:02:39ありがとう、うまくいきました!!!!
imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit;
これで一発でした、PictureBoxに表示してTableLayoutPanelに乗っけてとか
やってたら何かややこしい事になってたよ
0466デフォルトの名無しさん
2010/11/15(月) 10:17:32めいりお
0467デフォルトの名無しさん
2010/11/15(月) 10:31:14Consolas一択
等幅は必須条件
0468デフォルトの名無しさん
2010/11/15(月) 10:42:28メイリオすごく綺麗・・・
今までゴクックにしてたのが馬鹿みたいだ
0469デフォルトの名無しさん
2010/11/15(月) 10:56:52重要なのは
l | ! i 1 0 O o : ;
が簡単に見分けられるか
メイリオだとちょっと怪しい
0470デフォルトの名無しさん
2010/11/15(月) 11:08:18Consolasは2008までと書いてたけどインスコしたら使えた
プログラミング用にはこっちのがいいですね
0471デフォルトの名無しさん
2010/11/15(月) 11:10:360472デフォルトの名無しさん
2010/11/15(月) 12:05:39private 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;}ではダメなようです。
とにかく列の無い空白部分が表示されなければいいのですが、なにか方法はありませんか?
0473デフォルトの名無しさん
2010/11/15(月) 12:26:39int nw = listView1.ClientSize.Width - e.NewWidth;
if (w != nw)
listView1.Columns[1 - e.ColumnIndex].Width = nw;
これでうまくいったが
0474デフォルトの名無しさん
2010/11/15(月) 12:46:41お騒がせしました。
0475デフォルトの名無しさん
2010/11/15(月) 13:06:480476デフォルトの名無しさん
2010/11/15(月) 13:28:470477デフォルトの名無しさん
2010/11/15(月) 13:57:41ちょっと調べてみ。
0478デフォルトの名無しさん
2010/11/15(月) 16:46:580479デフォルトの名無しさん
2010/11/15(月) 17:04:230480デフォルトの名無しさん
2010/11/15(月) 20:07:550481デフォルトの名無しさん
2010/11/15(月) 21:04:59// 修正不可のコード
public enum Hoge
{
foo1
}
Hogeにfoo2を追加したいが、方法はあるでせうか?
0482デフォルトの名無しさん
2010/11/15(月) 21:49:210483デフォルトの名無しさん
2010/11/15(月) 22:07:17・`)…
0484デフォルトの名無しさん
2010/11/15(月) 22:31:31`)… できない。どうしてもというならもう少し詳しい状況説明を
0485デフォルトの名無しさん
2010/11/15(月) 23:10:21というかなんでロジックじゃないのに修正不可なの?
影響範囲とか簡単に調べれそうだけどw
0486デフォルトの名無しさん
2010/11/15(月) 23:30:09ソースが手元にないとかじゃない?
0487481
2010/11/15(月) 23:50:37で、C#も何かうまい方法あるの?という質問だった
C#はenumにメンバー追加するとき、元のソース修正は必須
であれば、受け入れるしかないか…
代替としてクラスで定義しておけば、MyHogeからfoo1が参照できるか
と考えています(型がenumかintの違いはあるが)
// 修正不可
public class Hoge
{
public const int foo1 = 0;
}
// 追加のソース
public class MyHoge : Hoge
{
public const int foo2 = 1;
}
0488デフォルトの名無しさん
2010/11/16(火) 00:11:48すごく疑問なんですけど、それってどういう状況で必要なの?>>481の例だと
public enum Hoge2
{
foo1,
foo2
}
みたいにもう一個作ればいいんじゃないの?
>>487のMyHogeみたいに定数として使うだけなら、
public enum Hoge { foo1 } // 変更不可
public enum Hoge2 { foo2 = 1 } //つくる
でもいいと思うんだけど。
0489デフォルトの名無しさん
2010/11/16(火) 00:20:52foo
}
public enum piyo {
foo = hoge.foo,
bar
}
piyo p = (piyo)hoge.foo;
こう書いとけば少しは安全かな?
0490デフォルトの名無しさん
2010/11/16(火) 00:29:160491デフォルトの名無しさん
2010/11/16(火) 00:31:180492デフォルトの名無しさん
2010/11/16(火) 00:37:30C 古典
C++ 専門書
C# ラノベ
0493デフォルトの名無しさん
2010/11/16(火) 00:40:490494デフォルトの名無しさん
2010/11/16(火) 00:41:060495デフォルトの名無しさん
2010/11/16(火) 00:41:150496デフォルトの名無しさん
2010/11/16(火) 00:45:12違いを知ってどうるすの?
0497デフォルトの名無しさん
2010/11/16(火) 00:52:15Cたん知らないとか
http://vision.ameba.jp/watch.do?movie=190596
0498デフォルトの名無しさん
2010/11/16(火) 01:31:46C言語を初代ガンダムとして。
0499デフォルトの名無しさん
2010/11/16(火) 01:34:16何にたとえたってお前には関係ねえよ
0500デフォルトの名無しさん
2010/11/16(火) 01:35:460501デフォルトの名無しさん
2010/11/16(火) 01:51:010502デフォルトの名無しさん
2010/11/16(火) 08:39:14C言語をガンダムに例えてる記事見つけちまった
C言語 ガンダム(RX-78)
C++ Zガンダム(MSZシリーズ)
Objective-C デンドロビウム(RX-78GP03)
C#,Java ∀ガンダム
http://gihyo.jp/book/pickup/2009/0049
0503デフォルトの名無しさん
2010/11/16(火) 08:39:500504デフォルトの名無しさん
2010/11/16(火) 10:00:44http://www.google.com/search?num=50&hl=ja&lr=&safe=off&&sa=X&ei=nNfhTL36NMnJcbqMpe0L&ved=0CBUQBSgA&q=programmers+hierarchy&spell=1
0505デフォルトの名無しさん
2010/11/16(火) 10:09:10>>502
ttp://www.upload.ee/image/360460/lisp-programmers.jpg
0506デフォルトの名無しさん
2010/11/16(火) 10:12:15ttp://adam.pra.to/public/pics/lisp-table2.jpg
0507デフォルトの名無しさん
2010/11/16(火) 10:38:00これらをforを使って利用することはできませんか?
0508デフォルトの名無しさん
2010/11/16(火) 10:50:39List<TextBox>というリストでもいいので作る
0始まりから9でもいいし0はダミーにして1始まりでもいいし
お好きなように
0509デフォルトの名無しさん
2010/11/16(火) 10:57:070510デフォルトの名無しさん
2010/11/16(火) 11:02:350511デフォルトの名無しさん
2010/11/16(火) 11:05:47Controlsが全部TextBoxである保証があるんだったらそれでもいいけどさ
0512デフォルトの名無しさん
2010/11/16(火) 11:06:26今は実際に作ってみて、例外出たら無理みたいな処理なんですが。
0513デフォルトの名無しさん
2010/11/16(火) 11:13:55フォルダーの書込み権限をチェックしたいとかなら
System.IO.DirectoryInfo.GetAccessControlあたりとか
0514デフォルトの名無しさん
2010/11/16(火) 11:14:16若干大げさだけど、自作のライブラリから
http://ideone.com/qwGAv
0515デフォルトの名無しさん
2010/11/16(火) 11:41:421.
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.でいいんでないの
0516デフォルトの名無しさん
2010/11/16(火) 11:56:51何処かのサイトの記事に「解らないキーワードの上にマウスを置きF1」と書いてあったのですが、
うちのはヘルプが表示されません。そのとき表示される指示通り、
コンテンツもダウンロード更新しましたが、やはり表示されません。
どうすればヘルプが使用できるようになりますか?
0517デフォルトの名無しさん
2010/11/16(火) 12:02:23ヘルプなんて入れなくてもここで検索したらいいよ
http://msdn.microsoft.com/ja-jp/library/default.aspx
0518481
2010/11/16(火) 12:23:291行目に書いてある
>C#は先行宣言できない、でおk?
です
enumは元のソースを変更するとこなしに、メンバー追加できるか?で、
>>484
できない、が答えのようです �d
>>485,488
今回はどういう状況で必要か、という問題には踏み込んでいません
どうしてもと言うなら、
・派生バージョンを作りたくない
・元のコードがおぞましいので見たくない
など何でもどうぞ
>>489
パーシャルでクラスを定義しておけば、目的のことができそう
ということに気づきました
みんな �d
0519デフォルトの名無しさん
2010/11/16(火) 12:28:010520デフォルトの名無しさん
2010/11/16(火) 12:52:34>>487ではint型使ってるけどenumみたいにしたいならこういう書き方のほうがいいかもね
public class Hoge {
public static readonly Hoge foo = new Hoge();
public static readonly Hoge bar = new Hoge();
}
0521デフォルトの名無しさん
2010/11/16(火) 15:14:470522デフォルトの名無しさん
2010/11/16(火) 17:40:17テキストファイルを読み込んだ後、当該ファイルを別フォルダに移動したいのですが、
テキストファイルを読み込むところから排他ロックを掛けて移動終了後に排他ロック
を外したいです。
using(FileStream(...)){}を使用してファイルをロックして読みこんで処理と考えたのですが
IOException例外が発生します。読込んだ後(using終了後)直ちにFile.Moveをしたとしても
他プロセスがロック待ちだと割り込まれそうで・・・
ロックを解除せずファイルの読み込み→移動にはどのような方法があるのでしょうか?
0523デフォルトの名無しさん
2010/11/16(火) 18:01:360524デフォルトの名無しさん
2010/11/16(火) 18:10:14監視対象となるフォルダXにぼこぼこファイルが出来て、
そこを見張ってる複数のプロセスがあって、
読んだプロセスが、読み終わったらフォルダYに移動する(=監視対象から外れる)
ってことでいいの?
まず別のフォルダ(Zとする)に移動してから読めばロック要らないんじゃないの?
そんな単純な話じゃないのか
0525522
2010/11/16(火) 18:27:50Xフォルダに別アプリケーションがTxtファイルを次々作成していきます。
(※その際に同ファイル名を作成(上書き)することもあります)
当該アプリは作成されたファイル名、ファイル内容、を確認したのちデータベース
に問い合わせて既に登録されているならUpdata、異なるならInsert処理を行います。
成功したならDoneエラーならError、それ以外だとそのままフォルダに残しておくようになります。
>>523
コピーだとファイル作成(更新日時)が変更されるためMoveを使用したく考えております。
(FileInfoから更新日時も変更できますが・・・当面は考えておりません)
0526522
2010/11/16(火) 18:29:34既に走っているソフトを1から作成し直すので大きい処理の流れは変更したくありません。
よろしくおねがいします。(C++ →C#)
0527デフォルトの名無しさん
2010/11/16(火) 18:35:02よくわからんが、そのTxtファイルを作る側の(既存の)アプリとの
レースコンディションを考えてるわけか?
処理中に上書きされたくない、と
>成功したならDoneエラーならError、それ以外だとそのままフォルダに残して
>おくようになります。
イマイチ何を言ってるんだかわからんのだが、まずどっかに移動して処理、
残すべきときは単に戻す、ではダメなのか
0528デフォルトの名無しさん
2010/11/16(火) 18:39:15なんかSunがオラクルに買収されてからJavaコミュニティが元気ないように見えます
今からならC#のほうがいいですかね?
0529522
2010/11/16(火) 18:43:50ロックをかける処理を行いたいです。
>>527
ちゃんと説明できていませんでしたね><
成功したらDoneフォルダ、失敗したらErrorフォルダ、サーバー接続エラーはフォルダ移動しない
と、したいです。
0530デフォルトの名無しさん
2010/11/16(火) 18:47:33上書きされないように(上書きする側の処理がWAITしないように)してから読むかなぁ。
別フォルダーに移動させるのと同じようなもんだけど。
0531デフォルトの名無しさん
2010/11/16(火) 18:52:27こうなったら上司に中間フォルダ作っていいか相談しようかな@w@
0532デフォルトの名無しさん
2010/11/16(火) 18:55:57できるか知らないけど、usingじゃなくてAPIを使って昔ながらのロックを掛けたりできないのかな。
0533デフォルトの名無しさん
2010/11/16(火) 19:04:39作成者も退職し残ったのはコードのみでそのコードもコンパイルできない
(C++Builderのバージョン相違のため)という状況です。
なので、1から作り直すのにソースコードみて作成しています。また、
WinAPIはC#なら可能な限り使わず.NETに提供されているのを使ってくれ
と言われているので、今回は,NETオンリー(できれば)で作成したいと思っています
0534デフォルトの名無しさん
2010/11/16(火) 19:11:03(なるべく変えるな⇔.NETを使え)
0535デフォルトの名無しさん
2010/11/16(火) 19:12:260536デフォルトの名無しさん
2010/11/16(火) 19:43:270537デフォルトの名無しさん
2010/11/16(火) 20:30:54俺がガソリンを入れている最中、隣に空気が全然入ってないタイヤを履いた
トラックが止まった。どうやら空気圧の点検を怠っていた為に減っている様だった。
俺は車が汚れていたので、洗車を頼みつつ店内に入って暫く外を眺めてた。
店内からはピット作業をしている所が見れたので、俺はさっきのトラックが
ピットに入って来たので、ぼんやりと作業を見てた。
で、新しいバイトだと思われる可愛い茶髪の女の子が、先輩の指導を仰ぎながら黙々と
作業の手伝いをしていた。作業員が空気の入っていないタイヤを外し、
女の子が空気圧を入れる様に頼まれた所で痛ましい事故は起こった。
女の子が5分経ってもずっと空気を入れつづけているので、俺は「トラックのタイヤは
空気を入れるのは大変なんだろうな〜。女の子なのに大変だな。」と思った瞬間、
「ズドン!!」と言う爆音と共に女の子の頭が弾けて赤い血の霧が舞い上がった。
同時に店内の窓ガラスをブチ破って何か光る物が突っ込んできた。
店長が、「救急車呼べ!!一旦店閉めろ!!誰かタオルもってこい!!、〇〇(女の子の名前)
の体を抑えてろ!!(激しく痙攣してのた打ち回ってた)」と動転し、
俺は何が起こったのか確かめようと、店内に飛び込んできた物を探し出した。
それはトラックのホイールだった。大きさは直径1メートルはあったと思う。
女の子は頭が半分吹っ飛んでいて、ピクピク痙攣しながら「うぅ〜、ふぅ〜」と
細い息をしていたが、俺は彼女がもう死ぬだろうと分かった。
何故なら血にまみれた脳が見えていたのだ。彼女が自分の手で脳みそを抑えていた光景は今でも
忘れられない。救急車が到着する間もなく、白目を剥いたまま彼女は死んでしまった。
0538デフォルトの名無しさん
2010/11/16(火) 20:35:35,.-' ,r'' _,,.. - 、 ` 、
,.r'/// / ,.-' `' 、. \
/ ,r' ,r' ,rfn、 \ '、
/ ///// ,' ,' ,rffn. '" ヽ ',
i ,.ァ .i '" ,riiニヽ. ',. ',
| ,.r '" |. { ,riiニヽ _. ', ',
| .,.r' | ! ,.. _,,.. -‐' _,..r' i .i
|,' ', ', '、., __ ,.. -‐''"゙ } | .|
| ', `、 ヽ ! } .}
', ', '、 ヽ ./ ! .|
'、 `、 \ `ヽ==='゙ ,' !
`、 '、 ' 、 / .,'
'、'-..,,_____ ___`、 `''‐- ..,, ,,.. r' /
\ ヾヾヾヾヾ \ /
` 、 、、、、、、、、 ` - ..,,, _ _,.r'゙
`' - .,,_ _,. - ''"
`"'' '' '' ""
0539デフォルトの名無しさん
2010/11/16(火) 22:27:200540デフォルトの名無しさん
2010/11/16(火) 23:59:30あと、private staticなメンバを含むことはできるのでしょうか
0541デフォルトの名無しさん
2010/11/17(水) 00:02:44= じゃなくて、static class 使う ⊃ インスタンス1個しか作らないから ならいいんじゃないかと。
そりゃ、private メンバーも持てる。
0542デフォルトの名無しさん
2010/11/17(水) 00:16:04回答あざっす
使用例ggってもpublicしか出てこなくて、ひょっとしたらだめなのかしらと思いまして
0543デフォルトの名無しさん
2010/11/17(水) 01:04:49場合がある。
ちゃんとするとき、static に要求されるものって結構厳しいんだ。
すべてスレッドセーフ必須とか。状態なければいいんだけど
シングルトンと比較するような用件は持ってたりするでしょ状態。
0544デフォルトの名無しさん
2010/11/17(水) 01:17:450545デフォルトの名無しさん
2010/11/17(水) 01:30:450546デフォルトの名無しさん
2010/11/17(水) 10:44:22これを回避するにはどうしたら良いでしょうか?
環境はVS2008、OSはVistaです。
0547デフォルトの名無しさん
2010/11/17(水) 10:46:23シングルトンなら、不要になったらGCで削除されるとかの違いってありますかね?
0548デフォルトの名無しさん
2010/11/17(水) 10:50:470549デフォルトの名無しさん
2010/11/17(水) 11:06:450550デフォルトの名無しさん
2010/11/17(水) 11:12:25シングルトンをグローバル変数の代わりに使いそう
0551デフォルトの名無しさん
2010/11/17(水) 12:44:030552デフォルトの名無しさん
2010/11/17(水) 12:52:34これは特に指定がないとLocalに保存されるみたいなのですが、
Roamingに保存するにはどう書けばいいのでしょうか?
0553デフォルトの名無しさん
2010/11/17(水) 13:04:36使い方の問題
0554552
2010/11/17(水) 13:23:160555547
2010/11/17(水) 13:32:420556デフォルトの名無しさん
2010/11/17(水) 14:36:30グローバル変数じゃない正しいシングルトンの使い方の例を挙げてみてよ
つまり、アプリケーション全体でインスタンスが一つしか要らないんじゃなくて
そのクラス自身の仕様上、複数作られたら正しく動作しない場合ね
とっても少ないと思うよ
0557デフォルトの名無しさん
2010/11/17(水) 15:06:42なんでわざわざ当たり前のこと書いてるのさ
グローバル変数の代用としてシングルトンを多用するのは誤った使い方。
突然、むしろシングルトンの9割はグローバル変数です(キリッ)なんて言われても困惑するだけなんだが
0558デフォルトの名無しさん
2010/11/17(水) 15:12:400559デフォルトの名無しさん
2010/11/17(水) 15:22:560560デフォルトの名無しさん
2010/11/17(水) 15:23:570561デフォルトの名無しさん
2010/11/17(水) 15:47:360562デフォルトの名無しさん
2010/11/17(水) 16:15:390563デフォルトの名無しさん
2010/11/17(水) 17:17:170564デフォルトの名無しさん
2010/11/17(水) 17:17:220565デフォルトの名無しさん
2010/11/17(水) 18:04:280566デフォルトの名無しさん
2010/11/17(水) 18:41:540567デフォルトの名無しさん
2010/11/17(水) 18:50:540568デフォルトの名無しさん
2010/11/17(水) 19:57:290569デフォルトの名無しさん
2010/11/17(水) 20:09:55それとも小分けする?
教えて。
0570デフォルトの名無しさん
2010/11/17(水) 20:12:540571デフォルトの名無しさん
2010/11/17(水) 20:16:390572デフォルトの名無しさん
2010/11/17(水) 20:21:38件数にして約513Kか。1レコードあたり1KB程度なら余裕でオンメモリだな。
0573デフォルトの名無しさん
2010/11/17(水) 21:13:16そういう話じゃねーよ馬鹿w
0574デフォルトの名無しさん
2010/11/17(水) 21:53:31今後数年とか数十年のデータ増える予定があるなら逐次処理。
0575デフォルトの名無しさん
2010/11/17(水) 22:50:35小分け。
どうやって表示したりするのかわからないけど、そんなに細かいデータなら、日時指定は普通だと思うから。
0576デフォルトの名無しさん
2010/11/18(木) 02:19:44public int X{get; set;} //この}の後ろにセミコロンつけるとエラー
}がセミコロンの代用なのかと思ったら、
int[] a={1,2,3,4,5}
みたいなのだとセミコロン必要みたいだし
どういうこっちゃ?
0577デフォルトの名無しさん
2010/11/18(木) 02:54:26だからオブジェクト初期化子もコレクション初期化子の終わりにもセミコロンが入る。
0578デフォルトの名無しさん
2010/11/18(木) 02:57:31グローバルなんつースコープは古代遺跡にしか存在しない
0579デフォルトの名無しさん
2010/11/18(木) 03:00:410580デフォルトの名無しさん
2010/11/18(木) 03:12:59public int X {get; set;};
public void Y(bool z){
if(z){
};
};
};
こっちのほうがよっぽどきもい
0581デフォルトの名無しさん
2010/11/18(木) 03:16:55>>578 グローバル変数なんて存在しません
えっ
0582デフォルトの名無しさん
2010/11/18(木) 03:26:30つくって終わりならそれでいいんだけどねぇ
0583デフォルトの名無しさん
2010/11/18(木) 04:30:31グローバルとローカルしかない世界からようこそ
0584デフォルトの名無しさん
2010/11/18(木) 05:12:03スタティックでパブリックなフィールドをグローバル変数と同列に扱うなら分かるけど、
静的クラスやシングルトンをグローバル変数っていうのは違う気がする。
グローバル変数が嫌われるのはどこで変更されるか管理できない点なわけだし。
あと、静的クラスはシングルトンのように唯一のインスタンスを保証するために使われているというより
System.IO.Fileみたいなショートカット置き場、System.Environmentみたいな定数置き場みたいな使い方が多い気がする。
0585デフォルトの名無しさん
2010/11/18(木) 08:29:27Invokeメソッド
SynchronizationContextクラス
AsyncOperationクラス
を使えば実現できることはわかったんだけど
どんな感じで使い分ければいいの?
0586デフォルトの名無しさん
2010/11/18(木) 08:44:58ユーザープログラムではControl.InvokeかBackgroundWorkerを使う。
あとの2つは直接使うことはまずない。
AsyncOperationはBackgroundWorkerが内部的に使っている。
0587デフォルトの名無しさん
2010/11/18(木) 08:51:53AsyncOperationとかはBackgroundWorkerそのものとかを作るためのライブラリ作成者向け
0588デフォルトの名無しさん
2010/11/18(木) 09:15:23実はライブラリを作っているのです。
利用者側で同期をとるならInvoke、
ライブラリ内で同期をとるならSynchronizationContextかAsyncOperationというわけですね。
0589デフォルトの名無しさん
2010/11/18(木) 09:47:52それは、if(){} の後ろのセミコロンが付かないのキモいって言ってるようなもの。
0590デフォルトの名無しさん
2010/11/18(木) 09:49:33C# 5.0 の async の実装では SynchronizationContext 使ってた。
0591デフォルトの名無しさん
2010/11/18(木) 10:24:25今カレンダーを作ってるんですが、
日付部分をlblDay0〜lblDay41というラベルにしてます。
このラベルの.Textを変更する際にたとえば
|int i = 0;
|("lblDay" + i).Text = "31"
のようにオブジェクト名の一部を変数で指定することはできませんか?
0592デフォルトの名無しさん
2010/11/18(木) 10:26:50コントロールを配列しにして管理するか、
WPFに乗り換えてItemsControl.ItemTemplateに頼るか。
0593デフォルトの名無しさん
2010/11/18(木) 10:31:560594デフォルトの名無しさん
2010/11/18(木) 10:32:50回答ありがとうございます!!
その3つぐぐってみます。
WPFってよく知らないですけど新しくて描画とかがすごいらしいですね
勉強するのに予備知識要りますか?
自分プログラム歴3日なのですorz
0595デフォルトの名無しさん
2010/11/18(木) 10:43:58とりあえず、WPFと関係なく、
Double.Parse()
Double.TryParse()
0596デフォルトの名無しさん
2010/11/18(木) 10:44:31(前例がいるし・・・)
とりあえずはWindowsFormやっとけ、サンプルもいっぱいあるし
あと>>591は>>507あたりに似たような質問あるから見とけ
0597デフォルトの名無しさん
2010/11/18(木) 11:01:35はい、>>507みてました。
あまり理解できなかったんですが回答の中の>>515は
>>592さんが仰ってる「コントロールを配列にして管理」
にあたるって認識でいいんでしょうか?
ひとまず「リフレクションを使う」で1日目を適正な位置におくことはできました。
でも配列にして管理しちゃったほうが楽そうな気がしてきました。
0598デフォルトの名無しさん
2010/11/18(木) 11:12:05private double SetNum(string str)
{
bool XX;
double num = 0;
XX = double.TryParse(str, out num);
System.Console.WriteLine(XX);
return num;
}
で構文書いたんですけど、出力がFalse返ってくるんですよね。
どこが間違ってるんでしょう。。。
0599デフォルトの名無しさん
2010/11/18(木) 11:12:14それにカレンダーだったら
二次元の配列をつかえば見通しも良くなる
0600デフォルトの名無しさん
2010/11/18(木) 11:14:44トライパースの使い方
double num;
if(double.TryParse(str, out num)){
System.Console.WriteLine(num);
}else{
System.Console.WriteLine(str + " は数字ではありません");
}
0601デフォルトの名無しさん
2010/11/18(木) 11:18:34とりあえず試してみます(^p^)
0602デフォルトの名無しさん
2010/11/18(木) 11:34:34tryParseのほうが早いのね
0603デフォルトの名無しさん
2010/11/18(木) 11:42:49ParseとTryParseのどっちが早いかっていうと
例外が発生しない分TryParseのほうが優勢
0604デフォルトの名無しさん
2010/11/18(木) 11:46:290605デフォルトの名無しさん
2010/11/18(木) 11:52:13>>602-604
できませんでした。
数字を打ち込んだのに数字ではありませんの出力。。
とりあえず>>604を試してみます。
0606デフォルトの名無しさん
2010/11/18(木) 12:01:17出力された文字列ここに貼りつけてみ
0607デフォルトの名無しさん
2010/11/18(木) 12:13:41ひょっとして、全角数字?
0608デフォルトの名無しさん
2010/11/18(木) 12:29:52System.Windows.Controls.TextBox: 4 は数字ではありません
System.Windows.Controls.TextBox: 4
0
>>607
半角です。
0609デフォルトの名無しさん
2010/11/18(木) 12:32:400610デフォルトの名無しさん
2010/11/18(木) 12:35:18WPFでTextBoxが丸ごと文字列になって、それがTryParseされてる。
TextBoxのTextを取り出せ。
0611デフォルトの名無しさん
2010/11/18(木) 12:36:480612デフォルトの名無しさん
2010/11/18(木) 13:02:030613デフォルトの名無しさん
2010/11/18(木) 13:15:270614デフォルトの名無しさん
2010/11/18(木) 13:20:17入力は4です。
>>610
頑張って…みます。
>>611
大正解です。これらを修正したらいいんでしょうか?
x = textBox1.ToString();
//System.Console.WriteLine(x);
X_point = SetNum(x);
//System.Console.WriteLine(X_point);
C#独学でやってるからもうわけがわかんない
0615デフォルトの名無しさん
2010/11/18(木) 13:23:15できました!
感動しました。
下の階層にTextがあることに気が付きませんでした。
0616デフォルトの名無しさん
2010/11/18(木) 13:23:480617デフォルトの名無しさん
2010/11/18(木) 13:24:08でおk。
でも、せっかくWPFならBindingとConverter勉強するよろし。
0618デフォルトの名無しさん
2010/11/18(木) 13:27:26double x = Convert.ToDouble(textBox1.Text);
ToStringは文字列に変換する時に使う
textBox1.Text = x.ToString();
0619デフォルトの名無しさん
2010/11/18(木) 14:37:21複数のオブジェクトで同期するのが
OnChangeイベント等でごちゃごちゃ書いてたのが
超簡単にかけるようになった
0620デフォルトの名無しさん
2010/11/18(木) 17:19:44public int age;
public string name;
}
なクラスがあったとして
Person taro = new Person();
taro.age=20;
taro.name="山田太郎";
みたいに書くのを
taro=20;
って書いたら、ageに20が代入され
taro="山田太郎";
って書いたら、nameに山田太郎が代入される
みたいなことってできる?
演算子のオーバーロード利用すればできるかなと思ったんだけど
=はオーバーロードできないみたいなんだけど、どうやればいいだろう
0621デフォルトの名無しさん
2010/11/18(木) 17:24:20こんな感じのことはできなかったっけ?
0622デフォルトの名無しさん
2010/11/18(木) 17:26:03出来たらまずいと思う。
0623デフォルトの名無しさん
2010/11/18(木) 17:26:56taro.set(20)
taro.set("山田太郎")
ではいかんのか?
0624デフォルトの名無しさん
2010/11/18(木) 17:30:20それをどこで実現するかだな
スクリプト組んだりやINIに書いて、それを評価してって話ならわかる
C#の中だとコンパイラにタコ呼ばわりされるだけだが
0625デフォルトの名無しさん
2010/11/18(木) 17:30:500626デフォルトの名無しさん
2010/11/18(木) 17:31:44class Person{
public string name;
public int age;
public int height;
public int weight;
}
0627デフォルトの名無しさん
2010/11/18(木) 17:35:37with hoge_struct
.name = "abc"
.age = 15
end with
0628デフォルトの名無しさん
2010/11/18(木) 17:36:58C#もにたようなことできなかったっけ?
0629デフォルトの名無しさん
2010/11/18(木) 17:40:18数値に変換出来るならageに入れる
0630デフォルトの名無しさん
2010/11/18(木) 17:41:480631デフォルトの名無しさん
2010/11/18(木) 17:42:59>>625 は、person = 5; とかできるとした場合、age、height、weight のどれに入れて良いかわからないってことが言いたいんだと思うよ。
0632デフォルトの名無しさん
2010/11/18(木) 17:44:06Person taro = new Person { age=20, Name="たろー" };
ならできる。
0633デフォルトの名無しさん
2010/11/18(木) 17:44:22きもいのでやめたほうがいい
http://ideone.com/ZifLI
0634デフォルトの名無しさん
2010/11/18(木) 17:45:06>>621にもあるけどオブジェクト初期化子のこといってるならこんな感じ
var p = new Person() { age = 20, name = "山田君" };
0635デフォルトの名無しさん
2010/11/18(木) 17:47:08625と626は同じこと同時に書き込んだだけ
0636デフォルトの名無しさん
2010/11/18(木) 17:48:360637デフォルトの名無しさん
2010/11/18(木) 17:48:560638デフォルトの名無しさん
2010/11/18(木) 17:50:28object age
object name
とかでいいや
0639デフォルトの名無しさん
2010/11/18(木) 17:57:010640デフォルトの名無しさん
2010/11/18(木) 18:01:27キモすぎるw
そんなコードに出会ったら前任者の嫌がらせとしか思えんわw
0641デフォルトの名無しさん
2010/11/18(木) 18:18:19string name = taro;
みたいな
0642デフォルトの名無しさん
2010/11/18(木) 18:21:34アクセサが付かないだけで同じだと思ってたのに
WPFだとプロパティとして宣言しておかないと機能しないんだな
どうやってVはプロパティではないと判断しているんだろう
0643デフォルトの名無しさん
2010/11/18(木) 18:25:360644デフォルトの名無しさん
2010/11/18(木) 18:37:14実際はObjectDataProviderなんかを使う必要があるので、
プロパティだけ特別な扱いなんだろう。
0645デフォルトの名無しさん
2010/11/18(木) 20:27:47WinFormのPropertyGridだってフィールドは表示しない
0646デフォルトの名無しさん
2010/11/18(木) 20:45:12WPF のあれはリフレクションでやってるからねぇ。
Type.GetProperty 使うとプロパティしか返ってこない。
実装上、プロパティとフィールドはまるで別物。
区別しない方がむしろ難しい。
0647デフォルトの名無しさん
2010/11/18(木) 22:37:58DOS窓を閉じないようにするにはどうしたらいいですか?
0648デフォルトの名無しさん
2010/11/18(木) 22:39:130649デフォルトの名無しさん
2010/11/19(金) 03:05:44Lbox.SelectedItems.Clear();
としても,
foreach(int x in Lbox.SelectedIndices){
Lbox.Items.RemoveAt(x);
}
としても期待通りに動いてくれません。
何か方法があればよろしくお願いします。
0650デフォルトの名無しさん
2010/11/19(金) 03:35:29ListBox.Itemsには何の影響ももたらさないことは当然ということを理解しよう。
0651デフォルトの名無しさん
2010/11/19(金) 03:46:11日本 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で・・・
こんな風にするにはどうしたらいい?
0652デフォルトの名無しさん
2010/11/19(金) 03:50:200653デフォルトの名無しさん
2010/11/19(金) 04:46:45List<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());
0654デフォルトの名無しさん
2010/11/19(金) 05:44:34public 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();
}
ファイルがない場合や書式が違っていた場合の例外処理は自分で作ってくれ
0655デフォルトの名無しさん
2010/11/19(金) 09:03:41midiOutOpen()を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受信系の段階に進めそうにないので・・・
0656デフォルトの名無しさん
2010/11/19(金) 09:07:32Cで開発する際にポインタに何も設定されてませんよっていうヌル(NULLだっけ?)と同等
0657656
2010/11/19(金) 09:10:36http://yokohama.cool.ne.jp/chokuto/urawaza/api/midiOutOpen.html
>midiOutOpen(ref hmidi, 0, IntPtr.Zero, IntPtr.Zero, 0);
つまりオープンはするけどコールバックは使わないってことだね
0658656
2010/11/19(金) 09:13:44非同期で何かの処理をやってもらう際に別のスレッドもしくはタスクから
特定条件で呼び出して欲しい場合に使ったりする
0659デフォルトの名無しさん
2010/11/19(金) 09:54:54レスありがとうございます。
プログラミング始めて2ヶ月なので、いまいち内容がわかりませんが、勉強してきます。
お蔭様で、紹介してもらったページで初めてフラグやリザルトが数値で対応してる表に出会いました。
MSDNではテキストしか載ってないので、どこかに対応表は無いのかと探していました。
コールバックフラグ=0はCALLBACK_NULLだったんですね。
0660655
2010/11/19(金) 11:55:56すみません。紹介していただいたページの記述に関して質問なのですが、
第5引数のuint dwFlagsに入れる数値なのですが、
CALLBACK_WINDOW(表の2段目)を指定したいとき、フラグは「0x00010000」と表記してますが、
「0x」とは16進数を表す記号だと理解してるのですが、
その後ろの「00010000」というのは8bitの文字列表記(?)なんですかね?
ということは16進数の通常表記だと「0x10」とか「10H」ってことですか?
これを第5引数のuint dwFlagsに入れるには、10進整数に直して
dwFlags = 16 ですか?
なんか色んな表記や型が出てきてこんがらがってしまって。
0661デフォルトの名無しさん
2010/11/19(金) 12:01:520662デフォルトの名無しさん
2010/11/19(金) 12:03:56「C#でmidi」に挑戦するのは難しいよ 不可能とは言わんが
素直にC・C++で始めた方がいい
0663デフォルトの名無しさん
2010/11/19(金) 12:26:220x0001000は65536の16進数表記ですよ
ちなみに1を引くと0x0000FFFFになります
0664デフォルトの名無しさん
2010/11/19(金) 12:31:41そのためだけにC/C++に移ると、それはそれでネック以外のところで苦労するし。
特に GUI アプリにするなら。
0665655
2010/11/19(金) 13:28:10ありがとうございます!0x10000(または10000H)と同じ意味なんですね。
使っていない上の桁まで0で埋めるのは、そういう慣習なんですかね?
初めて見る表記で、意味不明です・・・
>>664
そうなんですよね。C++2010ExpressのWindowsフォームアプリケーションは、
ちょっとGUI楽みたいだけど、CRLだから普通のC++とは違う物らしいですし・・・
一応、平行してC++勉強もしてるんですけど、混乱してます。
0666デフォルトの名無しさん
2010/11/19(金) 13:59:510667デフォルトの名無しさん
2010/11/19(金) 14:17:330668デフォルトの名無しさん
2010/11/19(金) 15:34:05>使っていない上の桁まで0で埋めるのは
好みの問題
変数の大きさで勝手にやってくれるし
なるべく変数のサイズで書いた方が分かりやすいのも事実
0669デフォルトの名無しさん
2010/11/19(金) 15:50:43どうもありがとうございます!
一旦全部消してから追加するってのは思いつかなかったです。
あれこれ何時間もハマってたので助かりました><
0670デフォルトの名無しさん
2010/11/19(金) 17:36:25わざわざ全部消さなくてもこれで十分
var arr = new System.Collections.ArrayList(listBox1.SelectedItems);
foreach (var item in arr) {
listBox1.Items.Remove(item);
}
0671デフォルトの名無しさん
2010/11/19(金) 17:37:39あれこれ何時間もハマってたので助かりました><
0672デフォルトの名無しさん
2010/11/19(金) 18:00:34消してる最中にindexずれちゃう?
0673デフォルトの名無しさん
2010/11/19(金) 18:21:37一時的にリストボックスに表示させようと
listBox1.Items.Add(listlink);
としたのですが、リストボックスには「(コレクション)」としか表示されません。
リストボックスに項目を表示させるには、またはlistlinkの内容を確かめるにはどうすればいいですか?
0674デフォルトの名無しさん
2010/11/19(金) 18:25:46SelectedIndicesのEnumeratorは"内部的"にSelectedItemsを保持してる。
Itemsから項目を削除するとSelectedItemsも更新されるのでItemsに対するindexがずれることはない。
ただしSelectedItemsの項目数は減るので、Enumeratorのindexがずれてしまう。
結果1つ飛ばしで選択された項目が消えることになる。
0675デフォルトの名無しさん
2010/11/19(金) 18:27:41listBox1.Items.AddRange(listlink.ToArray());
0676デフォルトの名無しさん
2010/11/19(金) 18:58:32なるほど、面白いね
0677デフォルトの名無しさん
2010/11/19(金) 19:03:05無効な引数が含まれると、int[]をobject[]に変換できないと叱られました。
List<T>はList<int>です。
0678デフォルトの名無しさん
2010/11/19(金) 19:17:03foreach (var item in listlink) {
listBox1.Items.Add(item);
}
0679デフォルトの名無しさん
2010/11/19(金) 19:47:59できました。ありがとうございます。
Addメソッドは逐次追加にしないと駄目なんですね。
0680デフォルトの名無しさん
2010/11/20(土) 02:32:140681デフォルトの名無しさん
2010/11/20(土) 06:41:00VS2010使えばC# 4.0だがターゲットは.NET 2.0〜.NET 4まで選べる
まあ.NETのライブラリに依存する言語機能もあるけどな
0682デフォルトの名無しさん
2010/11/20(土) 11:35:510683デフォルトの名無しさん
2010/11/20(土) 12:20:560684デフォルトの名無しさん
2010/11/20(土) 13:16:560685デフォルトの名無しさん
2010/11/20(土) 15:58:52Delphi6→C#
0686デフォルトの名無しさん
2010/11/20(土) 16:58:400687デフォルトの名無しさん
2010/11/20(土) 19:29:000688デフォルトの名無しさん
2010/11/20(土) 19:30:450689デフォルトの名無しさん
2010/11/20(土) 19:31:25完全なフリーって何?
無料で手に入って、仕事で使って成果物を販売するのだって一切制限されてないけど
0690デフォルトの名無しさん
2010/11/20(土) 20:45:420691デフォルトの名無しさん
2010/11/20(土) 22:11:030692デフォルトの名無しさん
2010/11/20(土) 23:29:35プログラマが立てたスレタイとは思えなかった
0693デフォルトの名無しさん
2010/11/20(土) 23:35:59windowの外枠(最大化ボタンなどがあるフレーム))を消す方法ってありますか?
0694デフォルトの名無しさん
2010/11/20(土) 23:37:420695デフォルトの名無しさん
2010/11/20(土) 23:39:32リージョンで検索
0696デフォルトの名無しさん
2010/11/21(日) 01:02:55正しく使わないとうざいだけ、
あるいは、「面倒だから」を理由に利用の徹底が無理そうだから。
0697デフォルトの名無しさん
2010/11/21(日) 04:46:280698デフォルトの名無しさん
2010/11/21(日) 06:27:24スレタイに#を使わせなかった運営に言えよ
0699デフォルトの名無しさん
2010/11/21(日) 06:31:110700デフォルトの名無しさん
2010/11/21(日) 08:01:15当時のこと知らないから本当かどうかわからないけど
0701デフォルトの名無しさん
2010/11/21(日) 08:29:42Part4 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周年。
0702デフォルトの名無しさん
2010/11/21(日) 09:10:58"C#"でググっても探せなかったって問題も関係あるのかも
0703デフォルトの名無しさん
2010/11/21(日) 09:39:01弾かれるどころか、#だけ無視してスレが作られる巧妙なトラップ
http://piza2.2ch.net/tech/kako/1002/10024/1002460602.html
0704デフォルトの名無しさん
2010/11/21(日) 09:58:23C相談室www
0705デフォルトの名無しさん
2010/11/21(日) 16:25:599年前とは
0706デフォルトの名無しさん
2010/11/21(日) 17:35:14あっそう
で?
0707デフォルトの名無しさん
2010/11/21(日) 17:37:21興味ないなら反応しなければいいのに
0708デフォルトの名無しさん
2010/11/21(日) 18:21:37あっそう
で?
0709デフォルトの名無しさん
2010/11/21(日) 18:53:37あっそう
で?
0710デフォルトの名無しさん
2010/11/21(日) 19:46:290711デフォルトの名無しさん
2010/11/21(日) 22:34:23eucがsjisに変わっちゃうんだけど
0712デフォルトの名無しさん
2010/11/21(日) 22:36:110713デフォルトの名無しさん
2010/11/21(日) 22:40:59↓
、オ、キ、゚
になっちゃう
エディタと出力はどっちもeucに設定してあるんだけどな
0714デフォルトの名無しさん
2010/11/21(日) 22:44:48>Console.Write("さしみ");
これを実行した結果の話をしてるの?
0715デフォルトの名無しさん
2010/11/21(日) 22:46:050716デフォルトの名無しさん
2010/11/21(日) 22:49:380717デフォルトの名無しさん
2010/11/21(日) 22:49:480718デフォルトの名無しさん
2010/11/21(日) 22:52:020719デフォルトの名無しさん
2010/11/21(日) 22:53:24これだと関係なかったっけ?
\が入ってるパスのようなのを入れるときは@つけるんだっけ?
0720デフォルトの名無しさん
2010/11/21(日) 22:55:460721デフォルトの名無しさん
2010/11/21(日) 22:58:35OSとか環境とかIDEの設定とかも影響するかもしれないし
文字化けするとか言われても・・・
0722デフォルトの名無しさん
2010/11/21(日) 22:59:260723デフォルトの名無しさん
2010/11/21(日) 22:59:59Console.Writeでは出力時にコンソールのコードページに変換される。
/codepage:<n> でeucも通るのか。
0724デフォルトの名無しさん
2010/11/21(日) 23:03:51cscでコンパイルされると文字コードは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
0725デフォルトの名無しさん
2010/11/21(日) 23:10:54なんか根本的におかしいのかな
0726724
2010/11/21(日) 23:14:43コンソールにEUCのデータ出力したら、そりゃおかしくなる。
ちゃんとリダイレクトで画面に(シフトJISとして)不正ななデータ出さないようにすんだよ。
というか、出力をどうしたかったの?
0727デフォルトの名無しさん
2010/11/21(日) 23:16:51環境が分からんが直接cscをコンソールで入力しているなら
csc /codepage:20932 xxxxx.cs
としないとcscはeucとして識別しない。
0728デフォルトの名無しさん
2010/11/21(日) 23:19:48ただ普通に表示させたかったです
いつもLINUXでやってるからeucでやれたらいいなと思って
>>727
コマンドプロンプトっていうかcygwinでやってます
csc.exe test.csでコンパイルしてました
そうやらなきゃいけないのか、どうもー
0729デフォルトの名無しさん
2010/11/21(日) 23:21:020730デフォルトの名無しさん
2010/11/21(日) 23:26:51コンパイラにソースの文字コード指定せずに自動認識されると思ってる奴って どれだけゆとり?
0731デフォルトの名無しさん
2010/11/22(月) 00:57:56�@button1をクリック→panel1の左上に画像(ABC.GIF)を表示
�A画像をドラッグ&ドロップで任意の位置に移動
↑をしたいのですが上手くいきません…
実行すると,1回目はできますが,2回目以降にpanel1内から消えます
どうしたら良いのでしょうか?教えていただけると嬉しいです
0732デフォルトの名無しさん
2010/11/22(月) 01:01:05これが原因じゃね?
0733デフォルトの名無しさん
2010/11/22(月) 01:03:43((Label)sender).Dispose();
をelseじゃなくてif文で処理してみ
0734デフォルトの名無しさん
2010/11/22(月) 01:18:56((Label)sender).Dispose();とelseをコメントに変えて実行したけどダメでした…
>>733さん
if文で処理する?
0735デフォルトの名無しさん
2010/11/22(月) 01:24:58731です こう?
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();
}
}
0736デフォルトの名無しさん
2010/11/22(月) 01:39:57どこが悪いかみてないが確実なのは消えたんじゃなくて
座標計算がおかしいのか2回目は変なところに飛ぶ
なので見えてないところに移動しただけだよ
0737デフォルトの名無しさん
2010/11/22(月) 06:35:12if (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という変数は要らないと思う。
0738737
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; //ラベルを移動する
}
0739デフォルトの名無しさん
2010/11/22(月) 07:10:59やっぱドラッグ&ドロップは動きがないと
http://ideone.com/nZmm5
0740737
2010/11/22(月) 09:32:14だったらこうしようぜ!
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は別々に検証したほうがいいみたい。
0741デフォルトの名無しさん
2010/11/22(月) 10:13:550742デフォルトの名無しさん
2010/11/22(月) 11:12:31無駄が多いよ´・ω・`)
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;
0743デフォルトの名無しさん
2010/11/22(月) 13:30:10そうだったんですか!消えている訳ではないのですね>>737〜742さん
どうもありがとうございます!
実行するとどれも、l_MouseMove内の、
Label l = (Label)sender;
でエラーが発生するのですが、なぜなんでしょうか?
エラーメッセージ↓
型 'System.Windows.Forms.Panel' のオブジェクトを型 'System.Windows.Forms.Label' にキャストできません。
0744デフォルトの名無しさん
2010/11/22(月) 14:23:01l_MouseMove付けるのはLabelのMouseMoveイベントだぞ
0745デフォルトの名無しさん
2010/11/22(月) 16:36:55CやC++だとアセンブリコードでワンステップなので特別な排他制御を行わなくてもOKですが
C#の場合はどうなんでしょうか?
0746デフォルトの名無しさん
2010/11/22(月) 16:59:190747デフォルトの名無しさん
2010/11/22(月) 17:27:43CやC++でも排他制御必要です。
0748デフォルトの名無しさん
2010/11/22(月) 17:28:200749デフォルトの名無しさん
2010/11/22(月) 17:28:41Interlockedはlockより低コストの排他制御。
0750デフォルトの名無しさん
2010/11/22(月) 17:57:300751デフォルトの名無しさん
2010/11/22(月) 18:10:51修正したものを別名で「新プロジェクトとして」保存したいときどうすればいいのですか?
「名前をつけてform1.csを保存」だと、同じフォルダ(プロジェクト)内に保存されてしまい、そのほかのファイルも共有になってしまいます。
C#は「名前をつけて新プロジェクトで保存」は出来ないのでしょうか?
0752デフォルトの名無しさん
2010/11/22(月) 18:12:080753デフォルトの名無しさん
2010/11/22(月) 18:12:320754デフォルトの名無しさん
2010/11/22(月) 18:25:04えーと、それやるとプロジェクト開くんですかね?
やったことないんだけど。
フォルダの名前だけが違う同じ名前のプロジェクトとして作業するんですか?
0755デフォルトの名無しさん
2010/11/22(月) 18:26:57そんな感じですな
まあ所詮はファイル群に過ぎないからw
コピーしろ
0756デフォルトの名無しさん
2010/11/22(月) 18:32:04別のプログラムにしたいなーなんてことができないんですか。
0757デフォルトの名無しさん
2010/11/22(月) 18:33:44まあ最悪の場合リリースビルドのexeの名前を変えればw
0758デフォルトの名無しさん
2010/11/22(月) 18:39:49自動でやってくれるもんだと思ってたのですが、、、
0759デフォルトの名無しさん
2010/11/22(月) 18:42:17手動であれこれやらなければ大丈夫
IDE上で作業すればOK
0760デフォルトの名無しさん
2010/11/22(月) 18:51:21他の関連付けもやってくれるんですかね?
試してみます。ありがとうございました。
0761デフォルトの名無しさん
2010/11/22(月) 18:52:11コピーした方なら最悪壊れてもいいんだしw
0762デフォルトの名無しさん
2010/11/22(月) 22:21:23防止する方法を教えてほしいでやんす。
あと、子フォームを連続で生成した場合にも同様のチラツキが出ますが
これは防げないでありんすか?
0763デフォルトの名無しさん
2010/11/22(月) 22:26:560764デフォルトの名無しさん
2010/11/22(月) 22:39:480765デフォルトの名無しさん
2010/11/23(火) 00:06:51フリーで使える解凍用のライブラリはどういうのを使っていますか?
0766デフォルトの名無しさん
2010/11/23(火) 00:20:15http://www.madobe.net/archiver/index.html
rarはやったこと無いけど、zipやlhaは、ここのライブラリで遊んだことあるよ
一応rarの解凍ライブラリもあるみたいだ
0767デフォルトの名無しさん
2010/11/23(火) 00:23:090768デフォルトの名無しさん
2010/11/23(火) 00:33:190769デフォルトの名無しさん
2010/11/23(火) 00:44:09panel1のイベントにl_MouesMoveをつけていました
わぁぁ!画像がドラッグ&ドロップできる
みなさん本当にありがとうございました!
0770デフォルトの名無しさん
2010/11/23(火) 01:09:27TABを押せば、自動的に
public なんちゃら{get;set;}
を書いてくれるんだな。
なんでこんな便利な機能があったのに気がつかなかった俺だお
0771デフォルトの名無しさん
2010/11/23(火) 01:10:30イベントハンドラーだってtabtabで保管してくれるじゃん
細かい表示を見ないからだよ
0772デフォルトの名無しさん
2010/11/23(火) 01:26:47コードスニペットはDependencyPropertyとかで無いと発狂する
0773デフォルトの名無しさん
2010/11/23(火) 01:43:03switch タブタブ でそのenumを指定すると
すげーぞ。感動するぞ。
0774デフォルトの名無しさん
2010/11/23(火) 01:47:19だからー、HDDに解凍するのを探しているんじゃないんだよ
解凍したデータをそのままメモリ上で扱いたいんだよ
ちゃんと文章嫁よ
0775デフォルトの名無しさん
2010/11/23(火) 01:55:370776デフォルトの名無しさん
2010/11/23(火) 01:56:10君はスレの人間を敵に回したいのか?
圧縮ファイルを扱うってのはフリーじゃああまりいいのはないよ
あとライブラリ次第だがc#はメモリをストレージぽく使えるので
指定できれば問題ないだろうけどね
なんていうか詳しくないので黙ってようと思ったけどさすがに
突っ込みさせてもらうわ
0777デフォルトの名無しさん
2010/11/23(火) 01:57:520778デフォルトの名無しさん
2010/11/23(火) 02:06:21あるなら既に答えているはず
おまえはどっちみち答えない
>>776
わからないなら黙っとけよ
加工するって言っているんだから
いちいちHDDに展開するわけないだろアホか
解凍したいだけなら、わざわざ質問するかよ
0780デフォルトの名無しさん
2010/11/23(火) 02:48:36あんな発言する奴で答えた試しないし
大抵単発ID
つまり、煽りたいだけの無知のバカ
0781デフォルトの名無しさん
2010/11/23(火) 02:56:58単発IDと言う割には>>775>>779で少なくとも2レスあるように思えるのだが、無知のバカは単発IDで煽られていると錯覚するようだ。
0782デフォルトの名無しさん
2010/11/23(火) 03:06:19うん、あいつだね。
0783デフォルトの名無しさん
2010/11/23(火) 03:08:270784デフォルトの名無しさん
2010/11/23(火) 09:29:470785デフォルトの名無しさん
2010/11/23(火) 10:16:29解凍してからメモリに読み込んで加工すればいいだけの話だろ。
どうせ裏では勝手にファイル出力されてるんだし。
0786デフォルトの名無しさん
2010/11/23(火) 10:20:550787デフォルトの名無しさん
2010/11/23(火) 10:25:51書庫を直接配列に解凍したほうが早いだろ
そういうライブラリ探しているんだよ
何度も言わせるなアホ
0788デフォルトの名無しさん
2010/11/23(火) 10:27:190789デフォルトの名無しさん
2010/11/23(火) 11:00:13にあるライブラリで書庫のメモリ展開ができる件について
0790デフォルトの名無しさん
2010/11/23(火) 11:11:420791デフォルトの名無しさん
2010/11/23(火) 11:12:05さあ次は「ラッパー書かなくてすむ奴の方がいいだろそのほうが早いだろ」って来るぜ
提示された物のドキュメントにすら目を通さないメクラの癖にな
0792デフォルトの名無しさん
2010/11/23(火) 11:19:41こういう奴には適当に教えておけばいいの。
0793デフォルトの名無しさん
2010/11/23(火) 11:21:490794デフォルトの名無しさん
2010/11/23(火) 11:30:02789書いたの俺だが、普段ならideoneにサンプル貼っつけて解説まで入れてる。
0795デフォルトの名無しさん
2010/11/23(火) 11:30:56System.Web.HttpUtilityを使おうと思って、参照設定にSystem.Webを追加しようと思ったんですが、
「参照の追加」ダイアログの.NETタブの一覧にそれがなく、
仕方なく、System.Web.dllを指定して追加したところ、
追加したSystem.Webのところに!マークのアイコンが表示されて、利用できません。
どういった問題が考えるでしょうか。助言をお願いします。
0796デフォルトの名無しさん
2010/11/23(火) 11:36:210797デフォルトの名無しさん
2010/11/23(火) 11:38:38HttpUtility.UrlEncode/Decode 使うためだけに
Client Profile からフルインストール版の .NET になるのが納得いかないけども、よくある。
0798795
2010/11/23(火) 11:42:28対象のフレームワークを.Net Framework 4に変更したところ、うまくいきました。
0799デフォルトの名無しさん
2010/11/23(火) 11:43:360800デフォルトの名無しさん
2010/11/23(火) 11:57:320801デフォルトの名無しさん
2010/11/23(火) 12:00:360802デフォルトの名無しさん
2010/11/23(火) 12:08:040803デフォルトの名無しさん
2010/11/23(火) 12:17:230804デフォルトの名無しさん
2010/11/23(火) 12:34:57思ったより簡単にできて拍子抜けした
ありがとう
0805デフォルトの名無しさん
2010/11/23(火) 13:56:45SSLで接続したいのですが、
URIはどのように指定すれば良いのでしょうか?
"ftps://*****.lolipop.jp/" にすると、「URI プレフィックスが認識されません。」と言うエラーが発生します。
SSLを使わない場合は、接続できました。
0806デフォルトの名無しさん
2010/11/23(火) 14:01:070808デフォルトの名無しさん
2010/11/23(火) 14:09:31http://www.gine.jp/blog/taka/post/C-e381a6-FTPSe382b5e383bce3838fe383bce381abe68ea5e7b69ae38199e3828b.aspx
0809デフォルトの名無しさん
2010/11/23(火) 14:18:08ftps C#でぐぐったんですね、わかります。
0810デフォルトの名無しさん
2010/11/23(火) 14:21:440811デフォルトの名無しさん
2010/11/23(火) 14:22:270812デフォルトの名無しさん
2010/11/23(火) 14:25:360813デフォルトの名無しさん
2010/11/23(火) 14:26:26英文字、数字、アンダーバー(_)は使用できるけど
名前の一番最初には数字は使えない(123abcみたいな)
っていうのにはなんか理由あるの?
0814805
2010/11/23(火) 14:27:39ありがとうございます。
ftp:// にすると少し先にすすめましたが、GetResponse()で接続エラーが発生しました。
FileZilla でFTPESでの接続確認ができているので、設定値は問題ないと思うのですが、
他に確認すべきことはありますでしょうか?それとも、レンタルサーバがはじいているのか。
0815805
2010/11/23(火) 14:33:43UsePassive = true にしたところ、無事SSLで接続できました。
レンタルサーバの設定と言うことですかね。
ありがとうございました。
0816デフォルトの名無しさん
2010/11/23(火) 14:36:120817デフォルトの名無しさん
2010/11/23(火) 14:41:25コンパイラたんの解析が大変になるから
0818デフォルトの名無しさん
2010/11/23(火) 14:50:340819デフォルトの名無しさん
2010/11/23(火) 14:52:34}
プログラマも泣いちゃう
0820デフォルトの名無しさん
2010/11/23(火) 14:54:580821デフォルトの名無しさん
2010/11/23(火) 14:56:380822デフォルトの名無しさん
2010/11/23(火) 15:18:060823デフォルトの名無しさん
2010/11/23(火) 15:36:38それともユーザーのニーズが高そうなときのみ選択するものですか?
0824デフォルトの名無しさん
2010/11/23(火) 15:46:15それで制作に困らないならClient Profileの方が配布は楽だろうな
0825デフォルトの名無しさん
2010/11/23(火) 15:58:35こちらの記事でも確認できました。
http://msdn.microsoft.com/ja-jp/netframework/ff687188.aspx#02
Vista以降ならインストール無しで.NET Framework 4 Client Profileを利用出来るということですね
0826デフォルトの名無しさん
2010/11/23(火) 20:02:320827デフォルトの名無しさん
2010/11/23(火) 20:06:580828デフォルトの名無しさん
2010/11/23(火) 21:48:46C#のソースが公開されているものがいいんだけど
0829デフォルトの名無しさん
2010/11/23(火) 22:07:110830デフォルトの名無しさん
2010/11/24(水) 00:28:17int x;//コメントです
ここで、デザイナのほうでボタンにイベントとか追加すると
int x;
public void button1_click(sender,e){
}//コメントです
みたいにコメントが後ろに書かれてしまう。
0831デフォルトの名無しさん
2010/11/24(水) 01:02:55int x; だけ打ったあと、その前の行で /// って打って doc コメント生成するものだし。
0832デフォルトの名無しさん
2010/11/24(水) 01:52:30あれが面倒で///する気しない
0833デフォルトの名無しさん
2010/11/24(水) 03:05:12main()関数の後ろに構造体や関数とか作って
main関数でその構造体や関数を使おうとすると、「定義されてません」みたいな英語でてきやがった。
うぜぇ
C#は後ろでも前でもどこでもクラスを宣言してもエラーでないで実行できるから最高すぎるな。
0834デフォルトの名無しさん
2010/11/24(水) 03:48:51それをいまだに引きずってるってのがすごいところだけども。
0835デフォルトの名無しさん
2010/11/24(水) 08:28:21今は、汎用関数のI/Fを作成して、汎用関数群をオブジェクトとして使用することを考えてます。
0836デフォルトの名無しさん
2010/11/24(水) 09:02:430837デフォルトの名無しさん
2010/11/24(水) 09:54:50なんか業務的に使用する部分でいいサンプルってないですか?
0839デフォルトの名無しさん
2010/11/24(水) 10:13:34http://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_07/extremecs_07_01.html
0840デフォルトの名無しさん
2010/11/24(水) 11:02:55{
イベント += (sender, e) => { iを使った処理 };
}
0841デフォルトの名無しさん
2010/11/24(水) 11:30:58サンクスです
何となく判ってきた気がする
0842デフォルトの名無しさん
2010/11/24(水) 11:39:300843デフォルトの名無しさん
2010/11/24(水) 16:39:43環境は
C# 2.0以降
WindowsXP〜Windows7までのOSです。
文字の中で第一水準と第二水準の文字だというのを判別したいんですが
どのようにやればよいかわかりません。
Shift-Jisでは
第1水準=&h889F〜&h9872
第2水準=&h989F〜&hEAA4
となっているようなので
Encodingを使用してShiftJisエンコードに変換してやれば第一段階はいけるのかな?
と言うところまでは判るのですが、この先が判りません。
お分かりになる方がいらっしゃるようでしたらよろしくお願いいたします。
0844デフォルトの名無しさん
2010/11/24(水) 16:50:040845デフォルトの名無しさん
2010/11/24(水) 17:15:28例えば1文字をバイト配列に展開して
それをShiftJisのコードに展開する方法でいけるのかな?
と思うんですが、その実現方法が・・・
0846デフォルトの名無しさん
2010/11/24(水) 17:30:57判定したテキストデータの塊はファイルか何かになってるんでしょ?
それはS-JISなの?
あとマルチバイトコードが面倒っていうのならC#のエンコード機能を使って
使いやすいコードにすればいいのとちゃうの?
0847デフォルトの名無しさん
2010/11/24(水) 17:45:140848デフォルトの名無しさん
2010/11/24(水) 18:07:17調べたい文字の2バイト分を、上下気にしつつ BitConverter.ToUInt16
0849デフォルトの名無しさん
2010/11/24(水) 19:28:07色々実験してやっと出来るようになったのですが・・・
ここに書くのを憚るくらい、めっちゃ煩雑なんですけど、こんな方法しか無いのですか?
2010Expressだと仕方ないのでしょうか?
以下、私の方法は、
�@一番外側のソリューションフォルダは関連付けの必要がないようなので自由に変えて、
(変えるとIDEのスタートページ「最近使ったプロジェクト」からは開けなくなるけど、「既存のプロジェクト」から開く)
�Aソリューション名の変更(ソリューションエクスプローラ、右クリック)
�Bプロジェクト名の変更(ソリューションエクスプローラ、右クリック)
�Cnamespaceの変更(コードエディタ、右クリック、リファクタ→名前の変更)
�Dアセンブリ名の変更(プロジェクトのプロパティ)
�Eこれでもプロジェクトフォルダの名前が変わらないので、一旦IDEを閉じ、エクスプローラから手動でフォルダ名を変更。
�FIDEを起動。この段階でソリューションファイルからは関連付けが切れてるので、さらに下のプロジェクトファイルから開き、
ソリューションエクスプローラのソリューション名にカーソルを置き、全てを保存。
�Gするとプロジェクトフォルダ内にソリューションファイルを作ろうとするから、ひとつ上のソリューションフォルダに上がり上書き保存。以上
これでもデバッグ関係のフォルダに旧プロジェクト名のファイルが残るのですが、まあデバッグだからいいか・・・
みなさんはアセンブリ名だけ変えれば、フォルダ名やnamespaceに旧プロジェクト名が残ってても気にしませんか?
長文失礼しました。
0850デフォルトの名無しさん
2010/11/24(水) 19:39:20そういうことをするプログラムを書け
0851デフォルトの名無しさん
2010/11/24(水) 20:07:29実行ファイル名だけ変えとけばええがな
0852デフォルトの名無しさん
2010/11/24(水) 20:48:00え?
0853デフォルトの名無しさん
2010/11/24(水) 21:00:40ってことになるだろ
0854デフォルトの名無しさん
2010/11/24(水) 22:10:41app.configとSettings.Designer.csとSettings.settingsの修正も必要だよ!
0855デフォルトの名無しさん
2010/11/24(水) 22:14:170856デフォルトの名無しさん
2010/11/24(水) 22:16:32VS2005のVBだと.vbproj内のXML名を外部エディタで変えないといけなかった
C#4.0で必要なのかは分からんけど
0857856
2010/11/24(水) 22:33:05VS2005にファイル名のテキストボックスはないけど、
「XMLドキュメントファイルを生成する」のチェックを外せば値は消えるみたい
0858デフォルトの名無しさん
2010/11/25(木) 02:17:070859デフォルトの名無しさん
2010/11/25(木) 04:04:17エクスプローラへのドロップなどに比べ、明らかに動作が遅いです(例えば、挿入マークの移動が遅いです)。
どうすれば軽くなりますか?
ちなみに、こちらの記事のコードでも同様の問題が起こってます。
http://www.atmarkit.co.jp/fdotnet/dotnettips/384expdragdrop/expdragdrop.html
よろしくお願いします。
0860デフォルトの名無しさん
2010/11/25(木) 07:10:470861849
2010/11/25(木) 10:30:31�E以降は、プロジェクトフォルダの名前を統一したいためだけの作業なので、
プログラミング上、表面には出てこないので気にしない人は放置でも問題ない。
>>856
VC#2010Express以外使ったこと無いので分かりません。
でも�E以降を放置すれば、全部IDE上での作業なので問題なく、
デバッグもエラーは出ないようです。
0862デフォルトの名無しさん
2010/11/25(木) 10:55:41あとは、IDEでプロジェクト名など変更するだけでいける
0863デフォルトの名無しさん
2010/11/25(木) 15:53:04前のプロジェクトからファイル一式持ってくるのが楽そう
0864859
2010/11/25(木) 18:28:47重いのはIDEでデバッグ中のみで、binフォルダ内の実行ファイルを直接実行した場合は問題なしでした。
スレ汚し失礼しました><
0865デフォルトの名無しさん
2010/11/25(木) 18:29:43初めのプロジェクト名の命名は大事だな。
0866デフォルトの名無しさん
2010/11/25(木) 18:55:110867デフォルトの名無しさん
2010/11/25(木) 20:13:59社運をかけた巨大プロジェクトとかスパイの秘密プロジェクトみたいでかっこいいじゃないか
0868デフォルトの名無しさん
2010/11/25(木) 20:20:530869デフォルトの名無しさん
2010/11/25(木) 20:36:170870デフォルトの名無しさん
2010/11/25(木) 21:27:410871デフォルトの名無しさん
2010/11/25(木) 21:28:190872デフォルトの名無しさん
2010/11/25(木) 21:55:520873デフォルトの名無しさん
2010/11/25(木) 23:10:51その円で自由に直線の長さや角度を変更できますが
あれは、なんという機能なんでしょうか?
C#で実装しようとすると、どんな単語をwwwを検索すればいいですか?
0874デフォルトの名無しさん
2010/11/25(木) 23:15:08スクリーンショットくれ
0875デフォルトの名無しさん
2010/11/25(木) 23:20:41グリップじゃないか。あれ。
0876デフォルトの名無しさん
2010/11/25(木) 23:22:28末期だな
0877デフォルトの名無しさん
2010/11/25(木) 23:35:090878デフォルトの名無しさん
2010/11/25(木) 23:36:05というか『実装』って初心者に人気の言葉だよな
0879デフォルトの名無しさん
2010/11/25(木) 23:44:210880デフォルトの名無しさん
2010/11/25(木) 23:45:170881デフォルトの名無しさん
2010/11/26(金) 00:42:13たしかChartオブジェクトじゃなかったっけ
C#で「excelで引いた直線に小さい円が付いていて、それを掴んで移動させると自由に直線の長さや角度を変更」できる機能
なんて作ったらexcelクローンできちゃう
もっと色んなソフト試して本当に必要な項目洗い出せるようになったほうがいいんでは
0882デフォルトの名無しさん
2010/11/26(金) 07:09:300883デフォルトの名無しさん
2010/11/26(金) 08:10:36Officeのヘルプサイトによれば、頂点(Vertices)だな
C#で実装するにはドラッグできるコントロールを2つ作って、
その間に直線がひかれるようにすればいい
0884デフォルトの名無しさん
2010/11/26(金) 09:03:23バカだけ余分だろ
0885デフォルトの名無しさん
2010/11/26(金) 11:52:56例に出しただけでexcelクローンとか。
馬鹿。
0886デフォルトの名無しさん
2010/11/26(金) 13:03:05IDE上で書き換えた結果と書き換え前で差分取って
IDE使わず書き換えるツール作ってみたら?
0887デフォルトの名無しさん
2010/11/26(金) 13:12:35あることを試したくてコードを大幅に変更するときがすごく面倒
0888デフォルトの名無しさん
2010/11/26(金) 13:20:30バージョン管理ツール使え
tortoisesvnならフリーだしVisualStudioとの連携もある
0889デフォルトの名無しさん
2010/11/26(金) 13:29:19いい加減チラシの裏使おうか
0890デフォルトの名無しさん
2010/11/26(金) 13:30:18ごめんなさい、それExcELじゃないのでだめです
0891デフォルトの名無しさん
2010/11/26(金) 13:50:35ネタのつもりならもう少し面白いこと書いてくれ
そうじゃないならほとんどExcelと同じものの説明なのにどうだめなのか詳しく書いてくれ
0892デフォルトの名無しさん
2010/11/26(金) 16:21:03関数の引数で値を変えたいときだけにしかつかわない?
int x;
func(ref x);//xが変わっちゃう
こんな感じの用途だけ?
0893デフォルトの名無しさん
2010/11/26(金) 17:21:52その場合はrefじゃなくてoutを使うのが適切
refは引数として意味がないといけない
0894デフォルトの名無しさん
2010/11/26(金) 17:51:420895デフォルトの名無しさん
2010/11/26(金) 18:28:50refの使いどころはいまいちわからん
0896デフォルトの名無しさん
2010/11/26(金) 18:35:132つ以上の値を返したい場合はoutかrefが必要だよね.
Private Boolean GetXXX(ref int X)とか.
おれの場合
outはいったん受け取った後に中身を判断して何かするときに使ってる.
refは直接更新して欲しい変数のとき使ってる.
0897デフォルトの名無しさん
2010/11/26(金) 18:45:34それ、outとref逆じゃない?
outは未割り当ての変数として処理されるから中身の判断なんてできない。
例に挙げたのも
bool GetXXX(out int x)
にするのが適切だと思う。
ついでに単純に2つ以上の値を返すだけなら
構造体やクラスを使用することが推奨されてたはず。
0898デフォルトの名無しさん
2010/11/26(金) 19:29:03受け取った後にとは,関数を呼んだ側の処理.
int i = 0;
if (GetXXX(out i))
{
if (i == 0)
{
・・・
}
}
2つ値を返すのにclassやstructにする意味が分からん.
0899デフォルトの名無しさん
2010/11/26(金) 19:42:53そういうことじゃなくてX座標とY座標の値を返すときは
Point型を使いましょうって話
0900デフォルトの名無しさん
2010/11/26(金) 19:51:300901デフォルトの名無しさん
2010/11/26(金) 20:10:16部下ならクビにする
上司なら会社辞める
0902デフォルトの名無しさん
2010/11/26(金) 20:18:01どっちでもいいけど、outだからiは初期化しなくてもいい
この辺りはmsdnにガイドがあったはず
0903デフォルトの名無しさん
2010/11/26(金) 20:18:380904デフォルトの名無しさん
2010/11/26(金) 20:21:10>>901
デメリット教えてよ。皆が慣れてないから?
0905デフォルトの名無しさん
2010/11/26(金) 20:32:120906デフォルトの名無しさん
2010/11/26(金) 20:49:20・結果を参照するために必ず変数を宣言しなくてはいけない
・結果を無視してもいい場合でも変数を宣言しなくてはいけない
・戻り値なら1行ですむところが2行になる
メリット
・なし
こんなの好き好んで使うやつは死んだほうがいい
0907デフォルトの名無しさん
2010/11/26(金) 20:52:20.Where(…).OrderBy(…).ToList(…)とか出来なくなって俺のモチベーションが下がる
0908デフォルトの名無しさん
2010/11/26(金) 20:54:47int 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
0909デフォルトの名無しさん
2010/11/26(金) 20:57:39LINQつかわんかいw
0910デフォルトの名無しさん
2010/11/26(金) 21:16:51→でもtryで囲むの面倒だし、頻繁に例外が発生してしまう
→Tester-Doerパターンで事前にチェックできるようにする
→でもDoerでやってることは元のメソッドでもやってるので二度手間
→結局Try-Parseパターンしか実装しない
皆さんはどうしてます?
0911デフォルトの名無しさん
2010/11/26(金) 21:19:40クエリ構文だとfrom a in bとかselect aとか記述量多くなるから滅多に使わないなあ
0912デフォルトの名無しさん
2010/11/26(金) 21:38:12メソッドばっかりだわー
0913デフォルトの名無しさん
2010/11/26(金) 21:42:41SelectManyが必要になるような場合はクエリ構文のほうがわかりやすいと書いておく
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;
0914デフォルトの名無しさん
2010/11/26(金) 22:14:05例外投げるのはコストとか見やすさとか考えるとどうなのってなる
きっとWinAPIに浸かってたせい
WinAPIでいうGetAsyncKeyState的なものって.NETにある?
0915デフォルトの名無しさん
2010/11/26(金) 22:20:310916デフォルトの名無しさん
2010/11/26(金) 22:27:550917デフォルトの名無しさん
2010/11/26(金) 22:32:56.netの標準ライブラリってそんな感じじゃない?
0918デフォルトの名無しさん
2010/11/26(金) 22:44:15ライブラリ側で「負の数値は検索結果が無いときの戻り値です」って言われても、
何らかの都合でマニュアル紛失したらスルーされちゃうだろうし
0919デフォルトの名無しさん
2010/11/26(金) 23:01:100920デフォルトの名無しさん
2010/11/26(金) 23:21:29BOTの方ですか?
0921デフォルトの名無しさん
2010/11/26(金) 23:24:570922デフォルトの名無しさん
2010/11/26(金) 23:33:460923デフォルトの名無しさん
2010/11/26(金) 23:50:48パッドはDirectXの領域でしょうな。
0924デフォルトの名無しさん
2010/11/27(土) 00:27:30パッドも使えないのかよ
0925デフォルトの名無しさん
2010/11/27(土) 00:31:490926デフォルトの名無しさん
2010/11/27(土) 00:34:150927デフォルトの名無しさん
2010/11/27(土) 00:37:340928デフォルトの名無しさん
2010/11/27(土) 00:38:320929デフォルトの名無しさん
2010/11/27(土) 00:39:140930デフォルトの名無しさん
2010/11/27(土) 00:39:18何を言っているのか分からない。例えば
foreach(var item in from x in array where x % 2 == 0 select x * x)
{
//
}
という記述は内包表記と表現力は全く変わらないわけだが。
0931デフォルトの名無しさん
2010/11/27(土) 00:43:570932デフォルトの名無しさん
2010/11/27(土) 00:45:420933デフォルトの名無しさん
2010/11/27(土) 00:47:410934デフォルトの名無しさん
2010/11/27(土) 00:49:28>のすら
やだ、恥ずかしい
0935デフォルトの名無しさん
2010/11/27(土) 00:50:150936デフォルトの名無しさん
2010/11/27(土) 00:58:380937デフォルトの名無しさん
2010/11/27(土) 01:00:480938デフォルトの名無しさん
2010/11/27(土) 01:06:36ここではともかくC++スレでそういう挑発はやめてくれな。
メタプログラミングを駆使して実現しようとする変態が現れる。
0939デフォルトの名無しさん
2010/11/27(土) 01:09:220940デフォルトの名無しさん
2010/11/27(土) 01:38:13例外握り潰していいならTry-Parseパターン
例外が必要ならtry-catch
0941デフォルトの名無しさん
2010/11/27(土) 07:23:46やっぱりクエリ構文って冗長だわ
0942デフォルトの名無しさん
2010/11/27(土) 07:33:08>>925さんは、今どきLINQのすら知らずにそんな書き込みして恥ずかしくなったりしませんか?
0943デフォルトの名無しさん
2010/11/27(土) 07:41:53from x in array where x % 2 == 0 select x * x
array.Where(x => x % 2 == 0).Select(x => x * x)
リスト内包表現が一番すっきりしてるな
0944デフォルトの名無しさん
2010/11/27(土) 08:06:23それでもリスト内包表現とやらの方が簡潔なの?
0945デフォルトの名無しさん
2010/11/27(土) 09:10:40try〜catch使うとifより遅くなるの?
try
{
x = int.Parse(y);
}
catch
{
// φ
}
if (y.Length > 0) x = int.Parse(y);
例なのでTryPaese使えって言うのはなしで。
0946デフォルトの名無しさん
2010/11/27(土) 09:14:32リスト内包表現に.OrderBy().ThenBy().Skip().Take()に相当するものはないよ
それ以外の機能を使えば簡単に実現は可能だけどね
Pythonの場合、OrderByとThenByはsortedで代用
SkipとTakeはスライスで代用ってところかな
ソートに関してはOrderByのほうが簡潔にかけるけど
SkipとTakeはスライスのほうが記述量が少ない
arr.Take(5)
arr[:5]
まあこんな比較まったく価値がないことだけど
0947デフォルトの名無しさん
2010/11/27(土) 09:22:13試せばいいじゃない
http://ideone.com/47NBm
0948デフォルトの名無しさん
2010/11/27(土) 09:33:57速度気にするのなんて10年速いわ
0949デフォルトの名無しさん
2010/11/27(土) 11:08:16つ ttp://msdn.microsoft.com/ja-jp/library/x4764854(v=VS.90).aspx
0950デフォルトの名無しさん
2010/11/27(土) 11:26:07タイピング量だけで見ちゃだめよ。
何気に、select が後ろなのって大事。
補完的な意味で。
0951デフォルトの名無しさん
2010/11/27(土) 11:27:59こりゃ頻繁に例外が発生するようなプログラムは書いちゃいかんわ
0952デフォルトの名無しさん
2010/11/27(土) 11:32:57入力側で気をつけて数字以外受け付けないようにするか(例:年齢の入力)、
それを使う段階で内部エラーにするか(例:ポート番号の入力)だな
(前者の制限を付けるのはかったるいけど)
結局ほとんどの例外がtry-catchベースで例外処理するのに、
「数値のときだけ if で tryparse して時間稼ぎます(キリュッ」ってのは場合わけの方が面倒じゃないのか?
0953デフォルトの名無しさん
2010/11/27(土) 11:35:11・try するだけならノーコスト
・例外が throw されたら正常フローの2〜3ケタくらい遅い
で、大体、利用指針としては、
・メソッド呼ぶ前のチェックで回避できるものは回避(tester-doer)
・テストの段階で全部取る
・チェック用のコードが元のコードと同じような処理になっちゃう場合は TryParse
・ファイル競合みたいに事前チェックしてもタイミング次第で絶対起きるものだけをcatchで対処
0954デフォルトの名無しさん
2010/11/27(土) 11:37:38数値の Parse だけじゃないよ。
Dictionary の TryGetValue とか、
DynamicObject.TryGetMember とか、
2度同じ処理書くことになるものには Try 版がある。
0956デフォルトの名無しさん
2010/11/27(土) 11:48:09Tryじゃない版も作るならの話だけど
0957デフォルトの名無しさん
2010/11/27(土) 12:03:060958デフォルトの名無しさん
2010/11/27(土) 14:08:32●A string str = DateTime.Now + "";
●B string str = DateTime.Now.ToString;
Aだとうまくいくが、Bだとエラー。
エラーメッセージでは、非デリゲートだからとか、
ほんわかとイメージがつくが、ばしっと理由がわからない。
ググり方が下手なせいかよくわかりませんでした。
AとBの具体的な違いがわかる人はわかる人はおられるでしょうか?
0959デフォルトの名無しさん
2010/11/27(土) 14:10:50Bはプロパティでもメソッドでもないからエラーになって当然
0960デフォルトの名無しさん
2010/11/27(土) 14:14:350961デフォルトの名無しさん
2010/11/27(土) 14:20:25()が無いけどアドレスじゃないから、デリゲートのエラーだったんですね。
単純な記述ミスでした。
959さん 960さん
回答ありがとうございます。
0962デフォルトの名無しさん
2010/11/27(土) 14:32:24正しい理解のためにも用語は正しく使おうぜ。
Nowはプロパティだから値の取得に()は必要ない
ToStringはメソッドだから値の取得に()が必要。
0963デフォルトの名無しさん
2010/11/27(土) 14:58:45どこまでわかってるのかすごい心配になるレスだなw
0964デフォルトの名無しさん
2010/11/27(土) 15:35:52心配になるレスですねw
0965デフォルトの名無しさん
2010/11/27(土) 15:41:430966デフォルトの名無しさん
2010/11/27(土) 15:46:15関数、メソッドの()をつけないことはよくあるミスかもしれないが
「アドレス」なんていいかたしないからな
中途半端に余計な知識ついてしまってるんだろうな。
0967デフォルトの名無しさん
2010/11/27(土) 15:47:32文字列でアドレスっていうといかにもC言語っぽいが
0968デフォルトの名無しさん
2010/11/27(土) 16:32:470969デフォルトの名無しさん
2010/11/27(土) 17:15:210970デフォルトの名無しさん
2010/11/27(土) 17:21:230971デフォルトの名無しさん
2010/11/27(土) 17:26:290972デフォルトの名無しさん
2010/11/27(土) 18:10:45初心者騙し専用だな
0973デフォルトの名無しさん
2010/11/27(土) 19:00:280974デフォルトの名無しさん
2010/11/27(土) 19:05:03Action a = UnkoMethod;
みたいに()なしで書くから?
0975デフォルトの名無しさん
2010/11/27(土) 19:14:46VBと違って引数なしのメソッドでも()付けないと呼べないし
AddressOfみたいなやつを付けなくてもデリゲートだって解釈される
0976デフォルトの名無しさん
2010/11/27(土) 19:16:10MothodInvoker mi = new MethidInvoker( FuncXX );
0977デフォルトの名無しさん
2010/11/27(土) 19:25:27引数のoにデータが格納されてかえってくるんですが、
データのタイプを判別すると、「double[]」となってました。
で、そのdoubleの配列の要素数を知りたいのですが、どのようにすれば知ることができるのでしょうか?
0978デフォルトの名無しさん
2010/11/27(土) 19:27:41それでもメソッド名には()つけてないよね。FuncXX()とは書かないし
0979デフォルトの名無しさん
2010/11/27(土) 19:28:210980デフォルトの名無しさん
2010/11/27(土) 19:30:12普通にキャストしたんじゃ駄目なんかい
0981デフォルトの名無しさん
2010/11/27(土) 19:30:390982デフォルトの名無しさん
2010/11/27(土) 19:31:220983デフォルトの名無しさん
2010/11/27(土) 19:32:12踏んだね
0984デフォルトの名無しさん
2010/11/27(土) 19:36:12新スレまだー?まだー?
0985デフォルトの名無しさん
2010/11/27(土) 19:36:410986デフォルトの名無しさん
2010/11/27(土) 19:37:40http://hibari.2ch.net/test/read.cgi/tech/1290854247/
0987デフォルトの名無しさん
2010/11/27(土) 19:42:040988デフォルトの名無しさん
2010/11/27(土) 19:42:20C#, C♯, C#相談室は今Part63だよ
あわてんぼさんめ
0989デフォルトの名無しさん
2010/11/27(土) 19:42:370990デフォルトの名無しさん
2010/11/27(土) 19:45:210991デフォルトの名無しさん
2010/11/27(土) 19:46:44駄目に決まっているだろ
0992デフォルトの名無しさん
2010/11/27(土) 19:49:530993デフォルトの名無しさん
2010/11/27(土) 19:51:38・()あり メソッドコール
・()なし メソッドグループ(デリゲート派生型に変換可能)
0994978
2010/11/27(土) 19:58:04で、ようやくforeachでデータを取り出すことが出来ました。
0995デフォルトの名無しさん
2010/11/27(土) 19:59:50access violation
0996デフォルトの名無しさん
2010/11/27(土) 20:03:54double[] dData = (double[])o;
}
ってするか
double[] dData = o as double[];
if(o != null) {
〜
}
ってしとかな危ないぞ
0997996
2010/11/27(土) 20:04:360998デフォルトの名無しさん
2010/11/27(土) 20:04:470999デフォルトの名無しさん
2010/11/27(土) 20:31:46ありがとうございます
1000デフォルトの名無しさん
2010/11/27(土) 20:33:1310011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。