ふらっとC#,C♯,C#(初心者用) Part64
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です ロクに回答もしない癖に態度だけデカイエセ回答者の出入り禁止 他人の人格を攻撃する荒らしの出入り禁止
(-_-メ)
4 :
デフォルトの名無しさん :2010/10/12(火) 23:08:39
(-_-メ)
>>4 前スレ見てないけどButton押しても反応ないよ?
7 :
デフォルトの名無しさん :2010/10/13(水) 14:25:46
>>4 textboxに入力された文字列で始まる項目のみを表示するプログラムだってのはわかってるのか?
俺の環境(vs2010 .net3.5)じゃしっかり動いてるぞ
8 :
7 :2010/10/13(水) 14:27:15
こうじゃだめなの? http://ideone.com/VsVaY
>>9 なんでDictionaryを使ったのか説明して欲しい
てかDictionaryとListは別物なんだからlistsって変数名はまずいだろ
listsは変数じゃないよ
じゃあ何?
13 :
デフォルトの名無しさん :2010/10/13(水) 15:13:35
dt.Rows.Add("aabc"); dt.Rows.Add("babc"); dt.Rows.Add("cabc"); dt.Rows.Add("zaabc"); すいませんAddRangeみたいに一気に入れられる方法教えてください
dtは何?
コピペしたものなので分かりません
>>13 元のデータはどういう形で存在するんだ?
コードに直打ちしてるの?テキストファイルから読み出すの?それともSQL?
はたまた別のクラスで生成されたListやDictonaryなの?
追加するデータは string[] myarray = new string[]{"no1","no2","no5","no158"} ListとDictonaryというのは使ってません listBox1がフォームにあります
string[] 配列 = { "abc", "aabc", "babc", "cabc", "zaabc" }; listBox1.Items.Clear(); listBox1.Items.AddRange(配列.Where(x => x.StartsWith(textBox1.Text)).ToArray()); 求められてるのとは違うような気がするけど・・・
20 :
デフォルトの名無しさん :2010/10/13(水) 15:27:13
コードは4さんのコードを使わせていただいてます dt.Rows.Add("aabc"); dt.Rows.Add("babc"); dt.Rows.Add("cabc"); dt.Rows.Add("zaabc"); の部分をItems.AddRangeみたいにできませんかね?
>>18 foreach (string s in myarray) dt.Rows.Add(s);
これでいいだろ
>>19 DataTableにこだわらないならそれもいいね
それはないとはどういう意味かね? まさか煽るだけかい?
Action action = ins.method; 上記のような括弧のないメソッドを記述したのを見つけたけど、 括弧付きの場合とどう違うのん?
>>25 C言語で言うところの関数ポインタ
デリゲートでぐぐればいいと思うよ
>>25 Action action = new Action(ins.method);の省略形
new っていつから省略できるようになったの?
29 :
デフォルトの名無しさん :2010/10/13(水) 19:10:51
そういう省略系はなるべく採用してほしくないなあ・・・ なんか段々Cのころへ戻ってるじゃん・・・ IDEがタイプ補助してくれるだしさ・・
C# 2.0から
デリゲートに限った省略だよ ラムダ式に new Func<int, int>(x => x)とか書きたい?
32 :
デフォルトの名無しさん :2010/10/13(水) 19:16:58
ならいいけどさw
C#2.0で匿名メソッドが導入されたから、それに合わせた変更でしょ
匿名メソッドやラムダ式はメソッドと同格なので、省略を許さないなら
>>31 みたいに書かないとおかしい
前スレの990です
>>4 先生ありがとうございます
どういたしまして
いえいえ
37 :
デフォルトの名無しさん :2010/10/13(水) 22:02:55
VS2008です。ASP.NETでジェネリック ハンドラを作成したいのですが、 コードビハインドになりません。 別のファイルにコードを書き込むのチェックがEnable=falseになってます。 ジェネリックハンドラってコードビハインドできなのでしょうか。
普通にできるけど・・・VS2010だからかな。
>>20 無ければ作ればいいじゃない。エンジニアなんだから。
public static void AddRange(this DataTable self, params string[] arg)
{
foreach (var s in arg)
{
dt,Rows.Add(s);
}
}
こうすれば
dt.AddRange(array);
みたいにできない?
こんなんに拡張メソッド作るのがいいのかという噺はるけど・・・
.NETのクラスライブラリ設計 開発チーム直伝の設計原則、コーディング標準、パターンより - 取るに足らない拡張メソッドを定義することを避けます -(特に、ソースコードを所有しているのではない型に対して)。 IEnumerable<T>みたいにインターフェースを拡張するのはいいけど、それ以外って誤解を生むだけだと思う。
ライブラリ(public なもの)のコーディング規約と、 ちょこっと自分で使うだけの private なものの規約はまたずいぶんと違うからなぁ。 public な物の規約厳しい MS でも、private は好きにやれ的スタンスだったはず。
たしかにライブラリの規約を持ち出すのは大げさか
DataTableではなくDataRowCollectionを拡張するべきだろう AddRangeがあるのにAddがないのはおかしいからな
(´・ω・`)…
>>43 そうだね〜。DataRowCollection拡張すべきだと思う。
携帯からだったから、Rowsプロパティが何型か忘れてて書けなかった。
補足ありがとう。
Data Tableに入っているデータっていうのはstring型とかbyte型とかint型とか何でも入れられる系ですか?
DataColumn.DataTypeが指定されていなければどんなデータを入れてもstringに変換される DataColumn.DataTypeは一応どんな型でも指定できるけど、 DataTableを正しく動作させるなら基本 .NET Framework データ型に限定するべき (基本 .NET Framework データ型ってのはstringとかbyteとかintとか)
なんていうかobject型って便利だよね 戻り値の型に文字列も数値も入れられるからobject型で作ったほうが楽
いかにも初心者スレっぽい意見だなあ
>>48 もう引数も返り値もぜんぶobjectにしとけよ
なんでそんあに投げやりなんですかい?objectがダメみたいじゃん
駄目なのはお前の頭だ objectのせいにするな
じゃあなんで49と50みたいな事言うのか説明を求める
何のためにジェネリック型が生まれたと思ってんの?
その薬みたいなジェネリック型とは何か?
56 :
デフォルトの名無しさん :2010/10/14(木) 12:24:25
実際にそういう考え方はあって、たいていのスクリプト言語はそうなってる。 デメリットを挙げるとキリがないが、一番初心者が実感してくれそうなのは 「インテリセンスが機能しない」かな
objectとobject型って何がちがうのぅ?
58 説明できないのか
>>59 みたいにそれで勝ったつもりになってる奴が一番不幸だよなw
59==60 相手が説明しないで逃げたからおれの勝ちみたい
?
で?
説明できないなら開き直らず謝罪しましょう
何様だよ
まじめに説明するのがアホらしくて、誰も説明しないんだろ。
失せろゴミ
いいから消えろよ クズども
ほいほい
おまえら全員Object型に入れてやる。
型が必要なくなるな
やっほーい
76 :
デフォルトの名無しさん :2010/10/14(木) 18:45:14
Yahho-i
今更だが
関数の返り値をobjectにすることは必ずしも悪いことじゃないよ
たとえばobjectを引数に取る関数に渡すことを目的としてる場合とか
外部データを特定の型に変換して返す場合(デシリアライズなど)とかね
でもそれは楽をするためじゃなくて、型が定まらないから仕方なくやること
>>48 を読むと楽をするために作者しか使えない意味不明な関数を作ってますっていう印象しか受けない
もし"勝ちたい"のであれば実際に作った関数をここに晒して、objectを返すことの有用性を証明すればいいよ
プログラマは楽をする為にコードを書きます
意味不明な関数で楽できるのは作ったやつだけ 周りの迷惑も考えてくれ まあ自分だけで使うんなら構わないがな
全てObjectにした場合、毎回キャストするのかね。 そう言えば昔、そう言うコーディング規約みたことあるな。 C言語だったので、型はちゃんと定義していたけど。
毎回キャストするくらいなんだってんだ
全てObjectにするならC#じゃなくてIronPythonあたりを使ったほうがいいかもな
初心者スレっぽくていいじゃん(*´・ω・)(・ω・`*)ネー
ライブラリでたまーにobjectを取るメソッドが公開されてると ちょっとこわい
WPFだとそんなんばっか
MSはメタプログラミング大好きだから昔からそういうの多い
dynamicはどうよ
dynamicって動的言語との連携以外使い道あるの?
COMがあるだろ 動的言語っていってもDLR言語に限らずブラウザのJavaScriptとの相互運用にも使えるから非常に有用
COMを参照設定したときに巨大なラッパーDLLが作られなくなった。 そのかわりインテリセンスも効かなくなったけど。
OfficeからCOMを使えた例しがない
Dreamキャスト
dynamic、簡易的にXML読みたい時と、多重ディスパッチには結構使える。
APIから帰ってくるJsonとか、でデシリアライズして、めんどうなことこの上ない。 しょうなないんだろうが。。。なんとかしてほしいの。
そもそもOfficeの中でCOM呼び出しまくりだろ。 糞クリップアートとか色々w
ListViewにgroupという機能がありますが、これでグループ化した時に そのグループ名をクリックしてそのグループを折りたたみたいと思います。 折りたたむ機能が無ければ、せめてクリックしたイベントがあればいいと思うのですが、 グループをクリックしたときのイベントはありますか?
C#のJavaに対するメリットとデメリットは何でしょうか? そもそもC#はJavaの代換として使えるのでしょうか? よろしくお願いします。
言語としての魅力は移行が簡単って所じゃないかな .netフレームワークとしてはどっちもどっちだけど(Tomcatに対抗してASPに組み込めるとか?)
>>99 移行が容易ってことだったら関係ないかな。。。どうもありがとう。
101 :
デフォルトの名無しさん :2010/10/15(金) 16:58:39
Windowsでクライアントやスタンドアロンアプリ作る上では圧倒的に楽
>>98 出来ることに、そんなに差はないと思うよ。
Monoとか使えばLinuxでも動くし。
MSのサポートは受けれないとおもうけど
列挙型に限ってはJavaの仕様の方が好きだ でもコードがfinalだらけになるのが致命的に好きじゃない
>>98 C# のメリット:
マイクロソフト、進化速い、サーバーもクライアントもライブラリそろってる、一貫性(オレオレライブラリ乱立してない)がある
C# のデメリット:
マイクロソフト、Mono だと GUI 回りはやっぱり弱い
Java の代替になら、完璧にこなす。
マイクロソフトってメリットじゃね?
メリットだよ。
企業としてみるならサンとオラクルよりは好き
現在最悪なのは林檎かねぇ… あまりに囲いすぎ…
C#に限った話ではないと思うのですが、開発環境がVS 2008なのでここで質問させて頂きます。 フォントサイズと行数によってTextBoxの高さを設定したいのですが、どのように算出出来るのかが解りません。 今ここで、MS UI Gothic 9pt で1行のみだと19pxとなりました。 9pt / 72 * 96 = 12px + 2*2(Fixed 3D境界線の幅)=16px と、3pxの行方が解らなくなりました。 これが一行おきに出来るマージなのか、全体におけるマージなのか理論的に判別出来ず状態で、知恵を貸して頂けたら幸いです。
あ、APIスレ落ちてんのか
難しいことは良くわからんが、こんなコードでいいんじゃないか? private void textBox1_TextChanged(object sender, EventArgs e) { if (string.IsNullOrEmpty(textBox1.Text)) { textBox1.Height = textBox1.PreferredHeight; } else { int margin = textBox1.PreferredHeight - textBox1.Font.Height; int height = textBox1.Font.Height * textBox1.Lines.Length; textBox1.Height = height + margin; } }
Font.HeightじゃなくてFont.GetHeight()使ったほうが正確かもしれない
115 :
110 :2010/10/15(金) 22:55:28
すいません、問題の書き方が悪かったです。 例えばTextBoxの最小行数を設定保存ファイルから読み込んで その行数から、Load時にminimumsizeを設定する…と言った具合です。 その時に境界線、スクロールバーの高さを差し引いて設定行数に合わせてTextBoxのサイズ変更・・・というのが最終的にやりたいことです。
だから、「設定行数」なんて概念に意味があるのかと。 冷静に考えてみ? 意味ないでしょ。
>>110 試しにフォントサイズ変更してみて。
もし、3pxのずれが大きくなるなら、仕様かな。どっかに書いてあった。
(´・ω・`)ノシ お〜い
120 :
110 :2010/10/15(金) 23:26:41
>>118 9pt→12pt(16px)にしたら高さ23pxだったので、差分値が3pxと同じでした・・・仕様ではないっぽいです(?)
>>117 ,113-114
コードとにらみ合ってます。
GetFontHeightもHeightも9ptで12pxと出ただけで、差分3pxの行方は解らずのままでした。
このスレは殺伐としてなくて良スレだな
>>120 いや、もう少し大きくしてみて。20ptぐらい。
123 :
110 :2010/10/15(金) 23:33:33
>>122 21pt(28px)でHeight=35pxでした。
境界線が2*2=4pxなので、35-32=3px で、やはり同様の結果でした
(整数計算の便宜上、20ではなく21にさせて頂きました)
textboxのPreferredHeightのソースを見ると int fontHeight = base.FontHeight; if (this.borderStyle != BorderStyle.None) { fontHeight += (SystemInformation.BorderSize.Height * 4) + 3; } return fontHeight; と、定数で3たしてるし あんまり気にしなくていいんじゃない?
超Magic☆Numberキタ━━━━(゚∀゚)━━━━ !!!!!
だから、目標行数にあわせてTextBoxの高さを変えるなんて発想が前時代的。 意味あんのかよそのUI。
PreferredHeight については触れた事が無いので曖昧ですが、 調べてみると3pxが定数で加算されるような情報は幾つか見当たりますね 定数として加算する方向でやってみようかと思います。。
PreferredHeightってのはテキストボックスのフォントの高さと境界線のスタイルに 基づいて計算された単一行テキストボックスに最適な高さのことだよ。
ボックスモデル?
131 :
122 :2010/10/16(土) 01:05:54
>>123 ものすごくごめんなさい。何か勘違いしてた。
以前Textboxの横に行番号をつける時があって、その時は +2 とか +3 で調整してた。。。
仕方がない、許したる。
なんと寛大なお心!
ガハハ
こうすれば細かい数値計算一切せずに確実な設定ができるぞ private void Form1_Load(object sender, EventArgs e) { int line = 5; textBox1.Text = new string('\n', line-1); System.Drawing.Size s = textBox1.GetPreferredSize(Size.Empty); textBox1.MinimumSize = new Size(0, s.Height); }
137 :
質問どす :2010/10/16(土) 11:20:20
キーイベントでの RControlKey, LControlKey は WinAPI の GetAsyncKeyState を利用しないと取れないって認識でおkですか?
修飾キーとしてなら、そうだな
140 :
デフォルトの名無しさん :2010/10/16(土) 12:49:00
( ̄ー ̄)ニヤリ
string hitomoji = "漢"; hitomojiが漢字なのかを簡単に判別するclassなどはありますでしょうか? hitomojiの内容は固定ではありません
Char.GetUnicodeCategory でUnicode カテゴリーとれる。 漢字ってカテゴリーまでとれたかどうか忘れたけども(ひょっとしたら可読文字でひとくくりかも)。
「その他の文字」で一括り。 SJIS(CP932)とUnicodeの対応表を入手してソースコードに持っといて 漢字以外を除外してやればいいんじゃない。
まず漢字とは何かを定義するところから
そもそも漢字の定義ってある程度曖昧だよね 踊り字は漢字か否か?とか
iskanji()ないのか・・・
へぇ、そんなのあったのか。
ありましたよ
backgroundworkerでforで1から20000までのカウントをリアルタイムでform1のlabel1に表示したいのですが、DoWorkからはコントロールを書き換えては駄目とありました どうすればよいのでしょう?
Invoke
153 :
デフォルトの名無しさん :2010/10/17(日) 18:11:30
DoWorkでReportProgressメソッドを呼び出して、ProgressChangedイベントを発生させればいいよ。 ProgressChangedイベントにアタッチされたメソッドがメインスレッドに同期した状態で実行されるから、そのメソッドにlabelを更新する処理が書ける。 ああ、WorkerReportsProgressプロパティをtrueに設定するのを忘れるなよ。
BackGroundWorkerって微妙に使いにくいよな
form1のlabel1に1から20000までのカウントをリアルタイムで表示するだけなら backgroundworkerなんて使わずにtimerで充分だけどな
C#で、CSVデータのデータ編集ツールを作りたいのですが、 編集をいちいちコーディングするのでは生産性が低いので、 InputManやActiveReportsのように入力支援や帳票開発 コンポーネントのように、データの項目編集に使える 良いコンポーネントって無いですか?
Access使えば簡単・・・
カウントをリアルタイムに表示・・・表示しても読めないだろw っていう話じゃないのか・・・
>>157 に一票。
どうしても作りたいなら InputMan 買えば?
それか、DataGrid, DataForm。
>>158 え、そこ!?
真面目に答えたおれ超KYじゃないか
>>159 InputManでテキストデータ編集できるんですか?
Accessクエリでも良いのですが、結構複雑なことを
やりたいんです。
ズバリ自動化やWaha!TransformerのようなEAIツールのような
感覚でデータ編集ジョブを作ってそれをC#で呼び出すような
ことが出来ると良いのですが・・
今は、Accessでクエリ作って、SQLビューでSQL文をコピって
SQLサーバーやOracleに貼り付けして使用なんて事もしているんですが
ある程度複雑なことをやろうとすると手詰まりになることもあるので・・・
あきらめろよ
川俣がまた何か言ってます
何か言ってますね
>>161 もうちょっとやりたいことをまとめてから質問した方が良いよ
情報小出しにされると解答するのめんどくさくなるから
167 :
166 :2010/10/17(日) 23:32:12
すいませんミスです
>>153 ありがとうございました!理想の動きができました!
アンカーだけ書く奴って時々いるけど、 こういう奴の思考回路って意味不明な質問文書く奴と同じなんだろうな。 基本、自分を客観視できないというか、他人から自分の言動がどう見えるか 多分想像する能力が欠如しまくってるとしか思えない。
やっちまったなw
>>168 みたいな奴って時々いるけど、
こういう奴の思考回路って意味不明な質問文書く奴と同じなんだろうな。
基本、自分を客観視できないというか、他人から自分の言動がどう見えるか
多分想像する能力が欠如しまくってるとしか思えない。
仕方がない、許したる。
こうして
>>168 は書き込み前リロードのスキルを身につけたのであった
次は172が面白いこと言う番ですね
ガハハ
LINQの勉強したいんだけど、なにかいい題材はない?
データベース系でよく見るのは図書管理かな
3D 関係だと、頂点とか面とかの数が多くなるから、LINQ が使える。 C# が使えるかどうかは別として。
C# から HLSL を生成するんだ! (注: 本当にやっている人います)
183 :
デフォルトの名無しさん :2010/10/18(月) 02:27:44
>>180 岡崎図書館の館長に土下座して許可取らないと愛知県警に逮捕されるぞw
>>180 検索、貸出管理、予約機能があれば十分ですかね
完成したらここに貼りつけてもいいですか?
>>181 ,182
なんかハードル高くね?間違いなく身長の3倍はある。
データベースは自分で作れよw Dictionaryとかで
>>185 DictionaryにしたらLinqの練習にならないんじゃない?
データソースを問わないのが LINQ だろ。
フォームアプリケーションで「Hellow World!」が出せるようになったばかりの者です。 めっちゃ基本的過ぎて誰にも聞けないので教えてください。 C#でビルドして出てきたEXEを、他のパソで起動するには、 そのパソにNET Frameworkとかいうのが入ってないと駄目なんですよね? しかもバージョンが合ってないと駄目なんですよね? で今のWindows7とかには最初からNET Frameworkは入ってるのですか?XPには入ってませんよね。
>>189 入ってないとダメ
バージョンは上位互換があるからとりあえず最新版が入ってればおk
7とVistaは最初から入ってる、XPは入ってない
>>190 どうもありがとうございました!スッキリしました!
>>194 お前は答えてないだろw
と毎回突っ込みたくなる
どうしてわかった?
乙 Linqの勉強にしてはLinq以外を作りすぎな気もするが・・・
学校の課題で褒められたから公開しよ! ↓ そうだ!自分でネタふりしてその回答提示でやればもっと凄いと思われるお!
>>199 そうだね、そういうつもりじゃなかったんだけど、
見返してみたらそのまんまでなんか嫌になってきた
>>198 Linqは横断的な技術で、コレクションやデータベース、
スレッドが縦糸とするとLinqは横糸的な位置づけ。
お題を決めたらLinq以外が膨らむのはしょうがないと思うよ。
コード評価の前に人が評価されるなんて ここは怖いインターネットですね^^;
ideoneおちてるな
ファイルのレジュームでレジューム可能ならレジュームを不可能なら最初からダウンロードしたいのですが 常に最初からのダウンロードになってしまいます。m_FileStream.Lengthがファイルの長さだと思うので 特に間違ってはいないように思うのですが何処がおかしいのでしょうか?。 m_FileStream = new FileStream(m_path, FileMode.OpenOrCreate, FileAccess.Write); HttpWebRequest request = (HttpWebRequest)ar.AsyncState; request.AddRange(m_FileStream.Length); HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(ar); if (response.StatusCode != HttpStatusCode.PartialContent) { m_FileStream.Seek(0, SeekOrigin.Begin); } else { m_FileStream.Seek(0, SeekOrigin.End); }
>>205 request.AddRange(m_FileStream.Length);
だと先頭からm_pathのファイルサイズまでってことじゃない?
バイト配列に格納されてる値にxor演算をしたいのですが(1つ単位で) どうやらバイト同士ではxor演算ができないようなので一度int型に入れてから演算し、もう一度バイト配列に入れようと思うのですが・・・ byte[] code;//値が代入されている byte[] code2; int ii; for (i = 0; i < code.Length; i ++) { ii = code[i]; ii = ii ^ 0x30; code2[i] = BitConverter.GetBytes(ii); } しかしこれだと「byte[]をbyteに暗黙的に変換できません」と怒られてしまいます byte配列の1つはbyte型と同じ扱いはできないのでしょうか? だとしたらどうすればいいですか?
BitConverter.GetBytes(int)の戻りをよく見ろ
>>207 その例ならiiを普通にbyteにキャストすればいいだけ。
GetBytesなんかループの中で使うな。恐ろしく非効率。
>>208-209 ありがとうございます。解決しました。
やっぱ似てるとはいえDelphiとは違いが多いですね;;
C#のビット演算や型変換はほぼC言語準拠だから
いくらDelphiと似てるといっても全く関係ない部分でしょ
でも
>>207 はDelphiと違うからわからないとかいうことではなくてそれ以前の問題な気がするが
code2[i] = (byte)(code[i] ^ 0x30); 念のために書いておくけどこれで十分だからね
>>210 Delphiでも普通にキャストするだろw
C#ではshortやbyte同士の演算結果がintに拡張されるからキャストが必要になるんだよね。 short a, b, c; a = (short) (b + c);
正確には演算結果が拡張されるんじゃなくて拡張してから演算してる C#に限らず、ごく一般的な動作
レジスターに格納するときどうこうという話でなくて名目上の動作の話。 Cの場合short同士の演算結果はあくまでshortで精度の拡張は行われないから こういうキャストはいらない。
Cはintからshortやunsigned charへの代入をキャストなしでできるので どちらの考え方があってるかは規格書見ないとわからんけど おそらく計算前に拡張しているでいいと思う。 C#との違いはキャストの要不要の部分だろう。
あってるよ Cでもchar+charでオーバーフローしたりはしない
Cの、intより小さい型からintへの汎整数拡張は演算の前に起きる。 キャストが要らないのはintを小さい型の変数に代入するのがエラーではないから。
どなたか教えてください。 某雑誌の「一気にわかるC#」という付録を見てサンプルを作ってみたのですが、 記事によると、フォームが開くとき、それをハンドラとして最初にロードされるプログラムを書く、 とあるのですが、記事の通り書いたのですが動いてくれません。 自分なりに調べたところ、フォームのデザイナが自動生成するコード(FormMain.Designer.cs)の中に 必要な一文が抜けてることを発見しました。 「this.Load += new System.EventHandler(this.FormMain_Load);」 なのですが、この一文をデザイナ(というかIDE?)で自動生成させるための操作はどうすればいいのでしょうか? 記事にはそのへんのところが詳しく書いてないのです。 手動で書き足すしかないのでしょうか? 他にも数箇所、抜けてる行があるのですが良く分かりません。orz
フォームをダブルクリック
なるほど!他のブタンとかのオブジェクトをハンドラにするときと同じなんだ! ありがとうございました。
VC#2010Expで勉強中なのですが、 複数のフォームから参照できる変数はどこに書けば良いのですか?
ブタンに引火しないように注意な。
>>223 C++やVBでいうところのグローバル変数は.NETには無いので
一番最初にその変数を使うクラス内でメンバ変数として保持しておいて、
別のフォームにはコンストラクタを追加して渡したり:
MyForm form2 = new MyForm("Additional Info");
プロパティ経由で渡したりする:
MyForm form3 = new MyForm();
form3.MyProp = "Additional Info";
実質的なグローバル変数はあるよ
internal static class Globals {
internal string どこからでも参照可能 = "Additional Info";
}
のようにすればどこからでも Globals.どこからでも参照可能 でアクセスできる
褒められたものではないけど初心者なら
>>225 のような方法よりもわかりやすいし
変に背伸びするより見通しのよいコードになると思う。
static class Programの中に変数書いたら他のフォームから見れました。
XmlReaderからXmlSerializerに切り替えたら、難読化してるせいで動かなくなってしまった。。。 ここら辺どうしてます?
難読化しない 難読化から除外する
>>229 あっ、部分的に除外ってできるのか。さんきゅー。
[ObfuscationAttribute(Exclude = true, ApplyToMembers = true)]
文字列変数string strが10文字に達していなかったら足りない分だけx(英字のx)で埋めたいのですが、指定した数だけ文字を作り出す関数とかってないですかね 参考書読んでも書いてないんですが・・・
String.PadRight or PadLeft
>>231 文字を作り出すのなら new String(char, count) も。
参考書より、この手のものはコンストラクタかメソッドか静的メソッドのどれかにあるわけだから
入力補完を眺めるのがいいと思うよ。
>>233 理想の動きができました
ありがとうございます
>>233 は文字列を作り出すならこういうやり方もあるよ」とうことであって
>>231 の目的ではPadRightとPadLeftが正解だろ
そのまんま「文字列が指定した文字数に達していなかったら足りない分だけ指定した文字で埋める」メソッドだ
ReactiveExtensionsって何?おいしいの?
>>236 イベントにたいする処理や非同期呼び出しをLINQ使って簡単に処理出来るようになるよ。
まだ始めたばかりのものなのですが、 フォームアプリのHowToが知りたくて、「"C#" フォームアプリケーション」でググったのですが、 「Hello World!」入門サイトか、逆にやたら難しい研究サイトみたいなのしか出てこないですね? 中間くらいの難易度で実用的なアプリのサンプルと、 そのコードの解説をしてるようなサイトか参考書を教えて欲しいです。お願いします。
>>238 @ITの.NET Tipsとかはどう?
240 :
デフォルトの名無しさん :2010/10/22(金) 08:23:57
>>239 こんな大きなサイトがあったのですね!参考になります。ありがとうございました。
( ^ω^)おっおっ
(´・ω・`)…
ω・`)…
・`)…
`)…
…
Form1でボタンを押すとForm2が開くようにしたいのですが、 Form2 frm2 =new Form2(); frm2.Show(); だとボタンを押す事に別のForm2が開いてしまいます。 一つだけ開けるようにするにはどうしたらいいですか。
private Form2 frm2; private void button1_Click(object sender, EventArgs e) { if (frm2 == null) { frm2 = new Form2(); frm2.FormClosed += (s, e1) => frm2 = null; frm2.Show(); } }
ボタンを押せなくする
252 :
デフォルトの名無しさん :2010/10/23(土) 00:10:26
Form2 frm2; これをForm1のどこからでも参照できる位置に置いて frm2 =new Form2(); この部分をLoadイベントもしくはShowイベントなどで一度だけ呼ばれるようにする
>>249 シングルトンパターンの応用でいいでしょ。
Form2のコントスラクタをprivateにして(この場合静的クラスは不可)、
こんなメソッドを作ればOK.
private static Form2 _instance;
public static void ShowInstance()
{
if (_instance == null)
{
_instance = new Form2();
_instance.FormClosed += _instance_Closed;
}
_instance.Show();
}
>>251 に一票入れたいのに無視されててどうしたものかと思案中
256 :
デフォルトの名無しさん :2010/10/23(土) 00:40:03
>>255 それでもいいけどボタンを再度おせるような状況も考えないといけないからなあ
一つしか開かないって言ってるんだから ボタンを再度押せるような状況考えてやっても 大きなお世話だろうけど、普通はシングルトンだろうな
ボタン押したらForm2をアクティブにさせるべきだろう
259 :
デフォルトの名無しさん :2010/10/23(土) 00:48:08
まあこれ以上は蛇足だろうな 質問者の条件が漠然としてるし その漠然とした要件を一応は満たした回答でてるんだし
一つしかいらないからってシングルトンにするのは間違い Form2の仕様の都合上二つ以上作れない場合に使うもの
261 :
デフォルトの名無しさん :2010/10/23(土) 01:49:46
TimeSpan型の値があるのですが、それが25分かどうか調べたい場合どうしたらいいのでしょうか? 行いたいことは、TimeSpan型の値が25分ぴったりになったときにMessageBoxを表示させたいと思っております。 TimeSpan型の値はライブラリから返される値なので、関数を呼ぶと取得ができます。
とりあえず、Timerを提案
http://dobon.net/vb/dotnet/file/binaryformatter.html ここを参考にバイナリへの読み書きを勉強してるのですが、
配列を扱う方法が分かりません。
例えば以下のようなクラスの配列Meiboの中身をバイナリへ順に書き込み、
読み出す時には同じようにMeiboに格納していくには、上記URLの例を
どういう風に変えればいいですか?
//クラス
[Serializable()]
public class Member
{
public string Name;
public int age;
}
//クラスの配列
static public Member[] Meibo = new Member[100];
>>261 もう少し詳しく書いてくれないかね
もしそのTimespanが実時間と連動しているならSystem.Timers.Timer使えばいい。
そうじゃなくてゲームの中の時間とか、シーク可能な動画の経過時間とかならこんな感じ。
double m = ts.TotalMinutes - 25;
if (0 <= m && m < 1) { // 25分から25分59秒99
// do task
}
定期的にTimespanをチェックする方法を知りたいなら、フォームのデザインビューでTimerを追加してそこのイベントに書けばいい
>>263 Meibo = (Member[])LoadFromBinaryFile("meibo.bin");
SaveToBinaryFile(Meibo, "meibo.bin");
変えなくてもこれでいいんじゃないか
要素がシリアル化可能ならその配列もバイナリ化できる
>>249 は普通にShowDialog()使えばいいとかの話じゃないよな?w
>>267 まさか幾ら何でもそんな落ちはないだろw
残り所要時間を出したいのですが、とても大きな秒数から日時に変換するシンプルな方法を教えてください。 DateTimeを使えば簡単にできそうな印象はあるのですがどうもスッキリいけません。
TimeSpanよく見ろよ
Console.WriteLine(new TimeSpan(0,0,1000000).Days);
まず時刻と時間を弁別するところから始めた方が良いかもしれない
DateTimeの加算演算子はオーバーロードされてるからTimeSpanそのまま加算できます
274 :
269 :2010/10/23(土) 12:29:13
みなさん、ありがと お礼 つ焼きそば
焼きそばなんているか そこに手をついて尻をこっちに向けろ
お札(さつ)をください
,,/⌒`ノ ;:;:;. ,/ `⌒γ ;:;:; ( /⌒⌒"" \\ ど ;:;: ( / ⌒ ⌒:::::::::ヽ i 明 う ;:;:. ヽi (・ )` ´( ・):::::::::::! る だ :;:;:;. | (_人__):::::::::::::::| く ;:;:;: \ 'ー´:::::::::::::/ヽ な ;:;:. ノ.:!:.:.:.:`ゞ-<7.:〉.:.:.:i.:.:} ろ っ 从 __ _,,,/.:.:/:.:.:.:.:.:| }-{/i.:/.:.:.:.:|.:/ う た 从从百円}と_」.:/!.:.:.:.:.:.:.!  ̄ リ.:.:.:.:.:り ?  ̄ ̄  ̄ |.:.:.:.:.:./_ :__ヽ.:.:.:.:\ \/.:.::..:.:.:.:.:.:..:\:.::./ /.:.:.:.:.:.:.「^Y.:.:.:.:.:.:|´ {.:.:.:.:.:.:.:.| ,!.:.:.:.:.:.:| \.:.:.:.:.:.V.:.:.:.:.:.:.:| \.:.:.::|.:.:.:.:.:.:.:! > 'ゝ─‐イ、
TimeSpan.FromSeconds こんなのもあるんだな
とてつもなく低レベルな質問ですが形振り構ってられないので投稿してみます C#
間違えて書き込んでしまいましたすみません出直してきます
形振り構ってられないのに出直してくる余裕あるの?
なんだこれw
なりふりかまわずのなりふりって形振って書くのか いい勉強になった
D:\chinko.exe --sikosiko と入力するとstringを返すCUIプログラムがあるとします。 これをVC#のフォームアプリでボタンを押すと実行されてDOS窓みたいなのを表示させず 返値だけ取得したいのですがどうすればいいですか?
非表示で実行してファイルにリダイレクト。 終わってからファイルを読み込み、ってのが一番楽。
288 :
280 :2010/10/24(日) 00:06:51
C#について全く知識が無いのですが 「何か展示品が欲しいからC#で簡単なゲームを5日で作ってこい」 という課題を無理に出されました 唯一勉強してるCの方も本を見通しただけでまともなプログラムなんて組めません 正直そこらへんの人とプログラミングに対する知識は差が無いです 何か簡単にプログラムを組めるゲームのお勧め等を教えてもらえないでしょうか(モグラたたきなど 何から取り組めばいいのかわかりません 課題を出した方も無理難題を言って叱りたいだけにしか見えなくて八方ふさがりです
>>287 そこ見たんですけど、
psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
の行の変え方が良くわかんないんです。
FileName = @"D:\chinko.exe"; // アプリ Arguments = "--sikosiko"; // 引数
>>288 じゃんけんでもいいんじゃないの?
グーチョキパーの絵書いて人に選ばせて、COMは自分の手を乱数で選んで、
勝ち負け判定で終わり
余裕があれば、ご褒美とか付ける
>ご褒美 脱衣とかw 別の意味で展示できなくて、ちょうど良い当て付けになるなw
293 :
288 :2010/10/24(日) 00:58:09
>>291 じゃんけん、○罰ゲーム、文字を読むゲーム(クイズ等)をあげたら
調子のんなカスとまで言われたので・・・でも知らない言語、短い期間でモグラ叩きとかまでは作れる気がしません;
じゃんけん以上モグラたたき以下のゲームで自分が作れる、となるともう選択肢がなくて参ってます;
>>293 テトリスとかマインスイーパぐらいなら満足してくれそうだな
C#でゲーム作れとかどういう状況だよwww
296 :
293 :2010/10/24(日) 01:12:33
>>294 そういうものなら満足してくれると思います
マインスイーパはデフォでPCについてるので流石に却下されますが・・・
1からC#を勉強してたら時間が無いので、勉強の仕方にも困ってます
>>295 ちょっとしたゲームはVBで作ったことがあるので最初はいける、と思ってたのですが
C#じゃないとダメみたいです、C#を使うことが重要だらしいので
>>293 5日後にそいつ殴れば? 面白いゲーム考えましたとか言いながらさ
298 :
デフォルトの名無しさん :2010/10/24(日) 01:18:38
C#でテトリスならすでにソースが公開されてたような・・・
300 :
デフォルトの名無しさん :2010/10/24(日) 01:21:42
>>290 すみません、引数の中にunko.txtなどのファイルのパスがあった場合はどう書くんですか?
どのプログラムで試しても引数にファイルパスが入ってると値が返ってこないんです。
302 :
296 :2010/10/24(日) 01:42:28
>>297 自分の相方が課題を出されたとき時全く文句を言わないで今になって「できねぇ・・・」って言ってるのが正直つらいです
反論してるときに「とりあえずやってない内から文句言うなよ・・・」みたいな感じの白い目を向けていたのになんなのもう
近頃騒がれてるブラックって常にこんな感じでやりとりしてるのかな、と思ったり・・・
>>299 今そこを参照しているのですが、ゲームを作るにあたって一個一個消化してたら
時間が無くなってしまうのでどうすればいいか途方にくれています
>>300 有難うございます
全部見て参考にしたほうがいいのかな、これ・・・
>>302 自分で作ったと言い張らなければいいんじゃないの?
嘘を言っても後で苦労するだろうしw
参考にしたと言っておけば・・
まあ作った経験がないのなら動くソースをいじって勉強するのが最短だよ
>>300 で貼られた動画の時点で理解できないんだけど詰んでるんだろうか・・・
>>303 有難うございます
怒られそうですが出来ないよりかはマシなので試してみます
ソースまで載せてるサイトが検索してもなかなか見つからないのですが、
どこか展示されているサイトなど知っていたら教えてくださると幸いです
305 :
299 :2010/10/24(日) 02:00:04
>>302 じゃあ右の目次だけ目を通しとけばいいよ
思い当たったら見ればいい
>>304 動画はC#じゃないよ
C(C++?)で作ってるし
それをC#で作るとこうなるってだけだから動画は後で参考にすればいいんじゃね?
1時間も見てると長い
ソース公開されてるでしょ
307 :
299 :2010/10/24(日) 02:12:55
308 :
304 :2010/10/24(日) 02:19:42
>>305 有難うございます
参照したいときに見てみます
>>306 ソースダウンロードしました、一応これは著作権フリーなのかな・・・?
実行できないのですが、何か実行する前にする操作などありますでしょうか
フォルダのbin/Debugのなかにblock.pngをいれれば動くんじゃないかな
310 :
308 :2010/10/24(日) 02:42:32
>>309 有難うございます、無事実行できました
既にあるフリーのソースコードをいじって勉強していく形でいく方針にするとします
以降は自分で出来る範囲まで頑張ってみます
普通なら罵倒される駄目質問に長時間にわたって親身になって答えてくれる皆様には感謝し尽くせません
怖いくらい優しくしてもらって本当に感謝してます、有難うございました
自動プロパティでgetのみを作ったのですが これをクラス内部で変える方法はあるのでしょうか。 public int X { get; } public void foo() { this.??? = 123; // Xを変えたいが記述が分からない } --------------------------- 自動を使わない方法のみ?? private int _x; public int X { get { return this._x; } } public void foo() { this._x = 123; }
312 :
デフォルトの名無しさん :2010/10/24(日) 04:30:11
>>311 クラス内部からそのまま_xを触れるでしょ
あくまで外部からどうするかだし
>>311 自動使わない方法のみか、
public int X { get; private set; }
にするか。
314 :
311 :2010/10/24(日) 05:01:59
>>312 分かりにくい書き方ですみませんorz
>>313 setをprivateにする記述があったとは!
ありがとうございます。
30分でいいから文法に目を通した方がスムーズに進む希ガス
public int X { get; } は、4.0ではコンパイル通るようになったのか?
通らない というか、仮に通ったとしてどういう動作が期待されるわけ?それは
>>317 値をセットできないじゃん。何がしたいの?
319 :
317 :2010/10/24(日) 12:58:12
え?俺? 提案者じゃないのでわかりません
320 :
316 :2010/10/24(日) 13:57:40
因みに俺も提案者ではないので、聞くなら311に
Ω<(ry
期待するのは313でしょ。 そういう質問じゃん。
class BaseClass{ public int A {get; private set;} public int B {get; private set;} public BaseClass(int a, int b); } class DrvClass : BaseClass{ public DrvClass(string c){ int a, b; // cからaとbを計算 base(a, b); } } 例のように派生クラスの引数から値を計算して 既定クラスのコンストラクタを呼び出したいんですが なにかいい方法はないでしょうか。
class DrvClass : BaseClass { class Hoge { public int a, b; } public DrvClass(string c) : this(Parse(c)) { } private DrvClass(Hoge x) : base(x.a, x.b) { } private static Hoge Parse(string x) { } } こんなのとか?
int[].Average()でint[]{0,326464}の時に0が返ってくる時があるのですが平均値を思い違いしているのでしょうか?
いみふ(
うん、意味不明。
>>327 「返ってくる時がある」って何?
LINQ の Average は決定論的な動作しかしないはずだけども。
他に何か変な処理してるんじゃないの?
>0が返ってくる時がある ってのは0の場合とそうじゃない場合があるってことか? 普通に考えたら163232以外ありえないが
331 :
327 :2010/10/24(日) 18:26:00
int rate = (int)int[].Average(); int abc = (int) (1192/rate); rateが予想に反して0になるから下の割り算でエラーになったのですが問題はrateがどうして 0になるのかがわからないのです。int[]の中身を見ると0,326464が入っていました。 int[]が非同期から持ってきている変数なのでタイミング的にデバッグの数字が一致しない 時があるのでしょうか?
配列にまだ何も入っていない状態でAverage計算 0除算エラー発生 0と326464が配列に追加される こんな流れだろ
int rate = (int)(int[].Average());
>>333 キャストより . が優先順位上なので、それは意味なす
指定したアプリケーションのテキストボックスに 文字列を自動入力するようなプログラムを 作りたいと思っているのですが、 何について調べればよろしいでしょうか?
>>336 自動入力についての詳しい仕様を書いてくれないと回答しようがありません。
UI Automation?
SendKeysとかそういうのだろ スレ違い
340 :
336 :2010/10/24(日) 22:32:09
>>339 どうやらSendKeysでできそうです。
ありがとうございました。
341 :
デフォルトの名無しさん :2010/10/25(月) 13:55:40
何かのexeファイルあったとき、それが実行されたときにCOMオブジェクトに なるかどうか、実行前に先に知るにはどうにすればよいでしょうか。
342 :
336 :2010/10/25(月) 18:18:00
すみません。
>>341 ですが、自己解決しました。
デストラクタ ~classname(){} の前に何も付かないのが寂しいです!
これでさみしくない /* デストラクタ */ ~classname(){}
静的コンストラクタの前にアクセス修飾子がないのも寂しい。。。
必要がないものに付けるのは蛇足
じゃあjavaみたいにstatic { }でいいな デストラクタも~ { }で
うん
349 :
デフォルトの名無しさん :2010/10/25(月) 21:20:36
C#で、タブ付きMDIってできないの?ぐぐったら、有料コンポーネント使うとかでてきた。 MFCはデフォルトでできるんだけど。
ない そんな大掛かりなUIが必要なソフトならそれくらい自分で作るだろ
LGPLやコマーシャル版なら無料ってのが海外にあったような
352 :
349 :2010/10/25(月) 21:44:47
>>350 初心者でもタブ付きMDIくらい作りたいだろ(´・ω・`)
MVCには、ついてるじゃん。
>>351 探してみますわ。ありがとう。
MVC?
「ドッキングウィンドウ」というキーワードからアプローチするといいかも
海外のサイトを探せば無料の沢山あるよ ライセンスは要確認だけど
C#はVisual Studioと一緒に使うの水晶ですか
C#自体はそうでもないけど.NETがほぼVisualStudio専用
>>356 VisualStudiogが動作する環境なら使わないメリットは
ほとんど無いと思いますが?
必要は発明のなんちょけ
開いている間はとても少ない確立ですがアクセスの可能性があるとします ReadAllTextを使うとします 1MBのファイルを100つ開くのと100MBのファイルを1つ開くのではどちらがパフォーマンス、危険性などに問題がありますか?
わかりません。 アクセスとは何ですか?ファイルを何に使いますか?どういうパフォーマンスが求められているのですか? 何の危険性を心配しているのですか? 具体的に書きましょう。
>>361 アクセス・・・メモ帳で開く、保存するなどの行為とします
ファイルはテキストファイルで、読み込んでstring配列に格納するとします
パフォーマンスというか、どちらの処理の方が早いか、ですね
危険性は、ファイルを他のアプリケーションが編集、保存等をしている最中のため、読み込みに失敗したり例外を吐いたりということです
わかりづらくてすいません;;
迷わず行けよ、行けばわかるさ、とでも言って欲しいのかなw いや真面目に結局何が知りたいのかサッパリ若布
IOなんて例外発生の塊なんだから 1Mのファイルを100個開いていって途中でどうやら使いにくいってなったら その場で流動的に回避する方法しかないんでは(100Mの一つのファイルに落とし込むとか?)
こういうのって具体的にどんなシステムを 作ろうとしているのかで答えが変わってくるから 抽象的な喩え話をされても答えにくいんだよな まあ俺なら、それぞれのファイルが独立していて単体で読み書きできる場合以外は分割しないだろうな
>>349 え?どうゆこと?
C#だけではMIDIアプリは作れないって事?
おれMIDIとかWAVとかの音楽系のアプリめざして勉強始めたばかりなんだけど・・・
誰かおしえてorz
MDIとMIDIを読み違えるでない
368 :
デフォルトの名無しさん :2010/10/26(火) 11:05:35
MDIってウインドウの中にウインドウを持てるやつだろ エクセルとかもそういう構造だし MIDIとは違うけど
あ、ほんとだ・・・ハズ・・・・
間違いついでに教えてくださいwww C#でMIDIやWAVを扱えるアプリのサンプルを紹介してる本やサイト探してます。 分かりやすい日本語サイトとかないですかね? Win32API使ったC++の10年以上前の本なら見つけたんだけど、
371 :
デフォルトの名無しさん :2010/10/26(火) 11:19:45
つい最近ここか相談スレで同じネタあったよ 過去ログ調べてみ
>>371 たぶん見たことあると思う。ロクなレス付かなかったんじゃなかった?
WAVの同期/非同期再生くらいならありこち見かけるけど、ちょっと専門的なのって無いですね。
初めて質問します。よろしくおねがいします。 C#を使い始めて日が浅く調べてもヒットしなかったので教えてください。 タスクトレイ常駐型のプログラムを作成したいのですが、設定ウィンドウをHideやShowで 一時的に見えなくするのではなく、タスクトレイのアイコンからメニュー起動で設定ウィンドウ を生成したい場合どのような方法がありますででしょうか? よろしくおねがいいたします。
374 :
デフォルトの名無しさん :2010/10/26(火) 12:20:40
>>373 隠しウインドウ作ってそいつとメニューを結びつけて
別ウインドウを作るとか
377 :
デフォルトの名無しさん :2010/10/26(火) 13:17:52
>>374 別のフォームを作って、そのフォームはタスクトレイ用でそこから設定ウィンドウを
開ける・・・ということでしょうか?
常駐型なので出来るだけメモリへのロードを抑えたいのですがその別のフォーム
を作る以外にはないでしょうか?作業の内容としてはフォルダ内のファイルを監視
して新規、変更等があれば処理を行うというものです。
仕様するコンポーネントはNotifyIconとFileSystemWatcherを使用する予定です。
379 :
デフォルトの名無しさん :2010/10/26(火) 13:26:10
隠しform一つでいくらもメモリーくわないよw
>>372 初心者のレベルを超えてるからって結論じゃなかったっけ?
で、オープンソース読めってのは妥当な回答だったような。
結局 winapi や directx系使って鳴らす形になるので
C#とかC++とかの言語は関係ないし。
ファイルフォーマットを熟知して解析し、
それで得たデータの意味を熟知し、足し引きして好きな形に扱って出力するだけの話なんだよね。
同期・非同期は準備コードレベルという。
出力先は普通にoutデバイスだったり、
スペクトルアナライザや音ゲーみたいなのだと画面にも出したり。
Yahoo!知恵袋で自分で頑張って作ってどうしても判らない所を質問してる人が居たけど、
そんな姿勢じゃないと難しいと思うよ。
>>379 そうですか><一応業務用に常駐させておくので少しでもメモリ節約しようと
思いまして@w@あと、個人的にどうすればいいのか知りたかったのとw
382 :
デフォルトの名無しさん :2010/10/26(火) 13:37:35
>>380 まあこんなところで説明しきれるほど小さい内容じゃないしなw
>>381 作ってみればいいじゃん
最低限のフォーム表示するアプリ程度ならいくらメモリ消費してるか
調べるのが面倒なくらいの消費量だよw
>>381 適当なサンプル作ったので参考までに
(インデントは全角スペースにしてあるので注意)
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1()); // ←フォームはApplicationContextあたりで管理してやれば無駄なメモリは食わない
//メニュー
ContextMenuStrip cmStrip1 = new ContextMenuStrip();
//好きなメニューにする
// こいつを使えばFormに関係なくタスクトレイを扱える
NotifyIcon ni = new NotifyIcon();
ni.Icon = new Icon("../../NET12.ico"); // パスは好きにしてね(ね)
niIcon.ContextMenuStrip = cmStrip1; // メニューはこのプロパティでできるみたい
ni.DoubleClick += new EventHandler(ni_DoubleClick); // イベント追加
ni.Visible = true; // これしないと見えない
Application.Run();
}
// タスクトレイのアイコンをダブルクリックしたらメッセージダイアログが出ます
static void ni_DoubleClick(object sender, EventArgs e)
{
MessageBox.Show("ok");
}
こんな感じでできるっしょ。
384 :
373 :2010/10/26(火) 13:58:26
ちょっと、コードなしのフォームx2 とコンポーネントだけ配置したアプリを作ってみました。 ビルドして起動してみるとタスクマネージャー上で8,124k使用されており、C++ですべて作り込んだ 同じソフトが2,480kとかなり差がでました。もしかしてC#で作ること自体重くなってしまうのでしょうか? 開発環境がC++(ボーランド)とC#なのですが、そのあたりにも関係あるのでしょうか? ちなみに、少し容量が増えたくらいで〜って思うかもしれませんが、探究心から知りたいのでよろしくおねがいします。 ちなみにC++で作成されたソフトのコードに冗長なところもあり、ロジックの作りなどが古いので 新規作成する経緯があります。(#defineによる文字列置き換えや、グローバル変数を多用しているなど)
>>383 ふむふむ!ありがとうございます。さっそくコードを精査してみて
テストしてみます♪
388 :
デフォルトの名無しさん :2010/10/26(火) 14:10:55
そんなに搭載メモリ少ないのか?
GCですからね
390 :
370 :2010/10/26(火) 14:29:54
>>376 >>377 おあ!C#での解説本あったのか!でも高い!orz
こういうの電子化して欲しいな。
>>380 そうなんですよね。結局、ソース読めるようになれって話で。
でも以外にC#で書かれてるの少ないんだよね。どうしてもC++中心な感じ。
で
>>375 はダウンロードすればC#のソースが見れるのですかね?
英語サイトは全く読む気力が起きないもんで・・・
>>390 右にあるDownloadってでっかいボタン押すだけだろ
この程度もわからないならソース読んでも意味無いかもな
ソースのダウンロード数、なかなかw
C#でWAVの録音・再生、MIDIの送信・受信、SMFの再生プログラム作った ちゃんと動いているよ 以下必要な要件 ・C#の基本が分かっていること ・C++で同様のプログラム作成のスキルがあること ・マーシャリングについてある程度知識があること ワカランことがあったら解説するけど 丸投げ、クレクレ坊はお断り
>>372 Windowsで音を鳴らすにはどうしたらいいかとか、
waveファイルの解析方法などはC#全く関係ないだろ。
>>375 はたまたまC#で書いてあるだけだ。
そこらへんの知識は自分で入手した上で、このWinAPIの関数を
C#で使うにはどうしたらいいかとか、C++のサンプルではこのようになっているが
どうC#に持っていけばいいかとかいうのはこのスレで聞けばいい。
特定の形式に従ってファイルを読み書きするのって、調べてるとどうしても 英語の仕様書に行き当たることが多いと思うけどな。 もちろん仕様書にはC#どころかどの言語のソースコードも載ってないのが普通。
スレ違いだけどzipのパスワードに設定できる最大長をご存知の方は居ます?。 プログラムを作る過程で調べた人がいないかと思いまして。
C++でMIDIプログラム作ったなぁ。 Windows APIバイブルの3巻だっけな。 押入れにまだあるなw
399 :
370 :2010/10/26(火) 18:26:15
>>394 そうなんですよ。お手軽さからC#から入ったんだけど、オーディオMIDI関係って
未だにC++やAPIの比重が高くて困ってるんですよ。
でも
>>376 みたいな本や
>>375 みたいなサンプルがあるとかなり助かります。
サンプルがあれば、多少分からなくても、見よう見まねで先に進めますから。
ただ
>>375 はちょっとパーツが多すぎて、まだ僕には難しすぎますねorz
まあ気長に進めていきますよ。趣味だから。
興味はMIDIのほうにあるんですけどね。MIDI関係の情報って少ないですよね。
400 :
370 :2010/10/26(火) 18:29:22
>>395 もっと具体的な質問が出来るようになったら、そのときはよろしくお願いしますよ。
今はまだ、サンプルの真似や組み合わせすることしか出来ません。
401 :
370 :2010/10/26(火) 18:32:19
興味はいいけど、プログラムチェンジ何番とかコントロールチェンジ何番とかわかってるのかね。
>>401 君は誰?さっそくかるーいナリスマシかね?
ここはそういうところ?めんどくせーなw
面倒だったらソフトウェアで自動化すればいいじゃない!
すでにスクリプト化してるから。2ちゃんに手動で投稿してるのはお前だけ。
なんかそんな小説を昔読んだな 引きこもってるやつがスクリプト化されたBBSとかチャットのせいで、 自分の国が滅んでたの気づかなかったってやつ
SFの古典ネタっぽい感じもするけどね。SFよく知らんが。 PKディックとかにそんなのありそう。 まあデカルトの「我思う故に我あり」だって考えようによってはその手の話だ。
もう3回くらい見てるなその手のは 直近で2年位前か
プログラムがプログラムについて議論するとはなかなか興味深いね
じゃあ話題を変えて うちの妹の話でもしようか
手書きでコントロールを追加しようと思ったのですがModifiersが候補にでてきません。 publicに設定したいのですがどうしいたら良いのでしょうか?。
Modifiersはプロパティじゃないよ フォームの自動生成機能がコントロールをどのアクセシビリティレベルで宣言するかを指定するための項目 だから手動でtextbox1を追加するときはpublic TextBox textbox1; って書けばModifiersをpublicに設定したのと同等になる
(´・ω・`)
(´・ω・`) …
( ´ ・ ω ・ ` )
ライフゲームとかで使うグリッドはe_State[,] cell = new e_State[columns,rows]ってやりますけど、List使うならList<List<e_State>>ですよね? 後で描画することを考えるとList<>使うよりも前者のほうが向いてるんでしょうか?
ライフゲームで使うグリッドなんて工夫のしようがないから2次元配列を直に出してもいいかな ライフゲーム”とか”で使うなら範囲外アクセスを回避したいとかグリッドを結合させたいとか色々要求が別にあるだろうから、それならそれで別に作る
そもそもそういうゲームでグリッドに対してListを使う利点ってあるの? 盤面の大きさ変える必要があるときはnewし直せばいいだけなわけだし。
ちょっと質問 FileSystemWatcherってファイルの監視をTimerで見てるの?それともイベント?
>>420 ReadDirectoryChangesW使ってる
>>421 ありがとうございます。タイマー使うよりは処理は重くなくてよさげっぽいですね。
めっちゃ更新されるとバッファオーバーになるようですが・・・
ReadDirectoryChangesW使ってるようですね
C#で書いたWindows Mobile用のアプリについて聞きたいんですけど、 ここでいいんですかね?
だめですちがいます。
じゃあどこで質問すればいいんですかね?
さっさとここに書けばいいだろ
早く聞けよまだかよ
どうせ煽りしか帰ってこないような気がする。 MSに質問というか報告した方が良さそう。
文字をランダムに入れ替えるプログラムってどうやってつくればいい 「ありがとう」を「がとりうあ」 にする、みたいな
乱数a,bを発生させて、a文字目とb文字目を入れ替える というのを複数回繰り返す
>>431 その方法だと一様に分布しないんじゃないのか
シャッフルという操作だな 「ありがとう」から 範囲が 0〜4 の乱数、で 2 が出たとして「が」を取り出す 「ありとう」から 範囲が 0〜3 の乱数、で 2 が出たとして「と」を取り出す 「ありう」から 範囲が 0〜2 の乱数、で 1 が出たとして「り」を取り出す 「あう」から 範囲が 0〜1 の乱数、で 1 が出たとして「う」を取り出す 「あ」から 「あ」を取り出す で「がとりうあ」
private string scramble(string str) { Random r = new Random(); StringBuilder sb = new StringBuilder(str); for (int i = 0; i < sb.Length; i++) { int j = r.Next(i, sb.Length); char t = sb[i]; sb[i] = sb[j]; sb[j] = t; } return sb.ToString(); }
>>430 こんなのとか?
まあもっと上手い方法が何かありそうな感じもするが....
string ShuffleLeter(string text)
{
var sl = new SortedList<int, char>();
var rnd = new Random();
foreach (char c in text)
{
sl.Add(rnd.Next(), c);
}
return new string(sl.Values.ToArray());
}
順列生成と同じなのでO(n)よりも大きいオーダーで書いてるやつは失格な
そんなマジになるような内容とも思えんが....
ウィンドウズモバイル用アプリってC#で作れるの?
作れるよ
あえてLINQで書くのが俺のジャスティス new string((from c in str let p = new {r = r.Next(), c} orderby p.r select p.c).ToArray());
甘いな return new string((from c in str orderby r.Next() select c).ToArray());
GOM PLAYERで動画をストリーム再生させられる、ストリームサーバーを作ってみたいのですが、 new Socket().SendFile(path);では上手く行きません。 データを送りつけるだけではだめなのでしょうか?。
>>441 それletいらなくない?
return string.Join("", str.OrderBy(_ => r.Next()));
ID、パスワードを送ってんならまずいだろ。
>>444 残念ながらエラーだ
return new string(str.OrderBy(_=>r.Next()).ToArray());
>>445 プライバシーの問題の話をしているなら
ダウンロードページのReport Abuseってところから苦情出せばいいんじゃない?
ところでさっきまではちゃんとダウンロードページ表示されてたのに
今はエラーってでるな
>>447 .NET4でString.Join<T>(String, IEnumerable<T>)とか追加されてる
C#とCってどっちが覚える事少ないですか? C#は名前空間がたくさんありすぎて・・・Cはまだやってないですk
451 :
デフォルトの名無しさん :2010/10/29(金) 11:13:30
>>450 C#が楽だろ
名前空間覚えるの大変ってCだって結局はライブラリとかAPIとか覚えるんだから一緒だよ
C#はオープンなのでその点に不満さえなければ.net系がお勧め
>>450 例えばの話、実用じゃなくて学校の課題的な意味で、
言語でできる最低ラインのこと覚えるだけってなら C 言語は超楽。
機能がないんだもん。
で、目的ベースで、世に出せるようなアプリ作りたいってのなら、
たいていは C# の方が楽。
「C# が使える」って言われる分野だと絶対 C# の方がいい。
常駐型アプリ作成で質問です。 どこのサイトを調べてもメインフォームを非表示にさせて必要な時だけShowするってやり方なのですが、 制御用のクラスAと処理用のクラスB、設定用のフォームをそれぞれ作りMain()で制御用のクラスを生成し 常時使用したいです。終了は任意のタイミングで制御用のクラスを終了させてアプリを閉じるにはどのような 方法がありますか?ちなみに、設定用のフォームは初回起動時に設定するだけがほとんどで後はレジストリ 値から読み込むのでフォーム非表示の方法はさせたくありません。 ちなみに自分が考える方法としてはsleepで任意の時間停止させてFor文でまわす・・・・という方法しか思いつきません でしたorz フォームを非表示にするのであればタスクからコンテキストメニューでClose()すれば済むから楽ですけど・・・
C#2.0ベースで作るのとC#4.0ベースで作るのはどっちが楽ですか?
処理側、普段はどういう挙動してるの? 処理側が while(IsAlive) みたいなループしてるんなら、 終了させたいスレッドで IsAlive 書き換えておしまい。
>>456 処理側は普段は何もしていません。特定のイベント(ファイルの作成、削除、リネーム)が
行われた時のみ制御クラスから呼び出して処理を行います。
なので処理側はループ処理は行いません。
・・・でもよく考えたらSleepとかにしちゃうとタスクバーからのメニュー表示とかに
影響が出そうですが・・・
PS.サービスにしろっていうのは無しでorz使っちゃだめらしいので@w@
458 :
デフォルトの名無しさん :2010/10/29(金) 11:39:09
隠しFormにした方がいろいろ楽じゃなかったけ?
>>それは重々承知しておりますorz どのサイトでもそのように推奨(?)されているので;w; 今回はクライアント側で動作するソフトなのであまり意識しないのですが、今後はサーバー にも常駐ソフトを開発する機会が増えるらしいので少しでも資源の節約を考えないと・・・と 思いましてorz
461 :
454 :2010/10/29(金) 11:46:57
>>458 でした。すいません;;
それとサーバー常駐ならC/C++でしょーが!!って言われるかもですが、
現在までC++で作っていたのですが、社の方針ですべてC#にすることなので
ご理解のほどよろしくおねがいします;w;
>>455 どう考えても新機能使える方が楽。
減ってる機能はない。
>>457 それ、なんかただ単に非同期処理したいだけ?
BackgroundWorker じゃダメなの?
464 :
454 :2010/10/29(金) 11:58:32
>>463 BackgroundWorkerを使用とのことでしたが、処理内容自体は軽く、頻度もそこまである
わけではないのであまり考えていませんでした。
463さんの言われるのは処理ではなく、制御用にご使用されては?ということでしょうか?
>>464 そんなもん、普通に BeginInvoke とか使った非同期処理すりゃいいんじゃないの?
466 :
454 :2010/10/29(金) 12:19:35
>>464 ふむふむ!ちょっとBeginInvokeについて調べてみます><
>>464 ファイルの監視するクラス、又はメソッドをデリゲートに入れて実行させておいて、
呼び出し元ではタスクのコンテキストメニューなどから終了すると。アプリケーションを
停止するという考え方であっていますでしょうか?
>>468 そちらのサンプルの場合は同期で発生するやりかたですでに訪問済みです
ぼくの探しているサンプルは非同期のほうなんです
補足:AquesTalkDa_Createは非同期のときに使う関数です
うるせー
非同期には勝てなかったよ
>>471 コード量が多すぎて僕には難しいです(汗
非同期でこんにちはを発音する程度の本当にシンプルなサンプルがいいのですがそういうサンプルってないですよね?
もう別プロセスで作れば? コマンドライン引数に与えられた文字列を発音するコンソールアプリケーション作って Process.Startで呼べば非同期になる
477 :
デフォルトの名無しさん :2010/10/29(金) 23:38:07
プログラム終了時に特定のコードを実行させる方法はどうやるのでしょうか? 終了はalt+f4や右上の×ボタンを押して終了させたりも含みます
OnClosingのオーバライドも含みます
Main()の最後じゃダメなんか。
O(n) ってなんと発音するの?
オーダー えぬ
王と長島だろ・・・オーエヌ
o(n) ってなんと発音するの?
スモールオーエヌ
小さな巨人
なぼな
”尻の穴を手で隠してる人がこっち向いてる”
子コントロールのMouseEnterイベントを親フォームに転送するには、子コントロールで捕まえて親フォームに投げつけるしかありませんか。 なにかのプロパティを設定したら、親に通知が行くようになるとかありませんか。 具体的には、マウスカーソルをツールウィンドウからメインウィンドウに移動させた際に、フォーカスをメインウィンドウに移したいと思っており、 メインウィンドウでMouseEnterイベントを捕まえたいのですが、メインウィンドウの子コントロールに捕まってしまうので、 何とか簡潔な手段で解決したいです。
>>490 位置関係とやりたいことが今一つよくわからん
とりあえず、子のMouseLeaveから親のMouseEnterを呼ぶ
メインウィンドウとは別に、リストビューを貼りつけたウィンドウがあって、これをツールウィンドウと書いたんですが、
このリストビューからマウスで項目を選び、メインウィンドウの方にマウスカーソルを戻すと、メインウィンドウで作業していた場所に戻るというか…
メインウィンドウのキャプションをクリックすれば、大体そんな感じにはできるんですけど、
マウスカーソルの移動が頻繁になったり大きくなったりして、それは避けたい…とか思ってまして…
>>491 の方法も試してみましたが、ツールウィンドウのMouseLeaveはDock=FillにしたListViewにつかまるし、
ListViewのMouseLeaveは、リストビューのヘッダに移動しただけで発生するので、うまくコントロールできませんでした。
いろいろ考えたんですが、1秒間に数回くらいマウスの位置をポーリングして、判断すればいいのかな、と思えてきました。
>>492 コントロールを再帰的に辿って(コンテナのControlsの中を再帰的にスキャンするってこと)
フォーム上の全部のコントロールのMouseEnter(MouseLeaveじゃない)を受信するように
すれば出来るでしょ。
でも、タイマ使ってポーリングするのが泥臭いけど一番簡単だね。
俺はこの手の処理のが必用な時はそうしちゃう。
外部のアプリを起動させる時、 Process.Start("notepad.exe","test1.txt"); とファイルを開かせた後、今度はtest2.txtを開きたいのですが、新しくnotepadを開くのではなく さっき開いたnotepadでファイルを開きたいのですが方法はありますか?
アプリケーション依存なので、共通的な方法はないです。
メモ帳くらい似たようなの自分で作ればいいのに
498 :
デフォルトの名無しさん :2010/10/30(土) 19:20:16
C#でマイクから「こんにちは」っていったらAの処理を、「こんばんは」っていったらBの処理をする事ってできますか? 音声を認識するのってCじゃないとやはり無理ですかね?
500 :
デフォルトの名無しさん :2010/10/30(土) 19:27:28
クラスライブラリのchmファイルってないですか? 毎回ダイヤルアップ接続するのが面倒くさくて・・・
>>500 Silverlightのドキュメントならchmあるよ
Silverlightはやらないのです。。。すみません。。。 オンラインマニュアルのクラスライブラリがオフラインで見れればいいんです。。。 一つ一つhtmlファイルにダウンロードしかなさそうですよねそうしてみます。。。
Express版は知らんけど、Pro版とかなら、普通にローカル用のヘルプがついてる
MSDNライブラリを丸ごと収録したDVDISOがダウンロードできたはず ダイヤルアップなら無理だろうけどw
506 :
349 :2010/10/30(土) 19:56:10
いいじゃんじゃん。(´・ω・`)
でもローカルよりオンラインコンテンツの検索の方が速いという。
2010のヘルプはDVDISOじゃなくて ヘルプメニューからオフラインに設定してやってダウンロードする形に変わった
VSの次のバージョンくらいで全てのエディションでローカル版のMSDNは無くなりそうだな
そんなわけないでしょ。ありえない。
ネットにつなげない環境、ってのがあるから、 ローカル版はやっぱり残ると思うよ。
String.Internって遅くない? Dictionaryで自分で実装したのと比べたらlock込みでもString.Internの方が遅いんだが
すごい無意味な比較してるな
String.Internってどういう用途で使うの?
インターンするため
これ以上ないほど完璧な解答だな
C#で人口チャットロボを作りたいんですけど どういう仕組みで作るのかどなたかおしえてください
ロボ > トウキョウト ハ 1300 マンニン デス ロボ > カナガワケン ハ 903 マンニン デス ロボ > オオサカフ ハ 880 マンニン デス
そういえばちょっと前にゲームを5日で作ってこいって言われた人は無事完成させられたのだろうか
521 :
517 :2010/10/31(日) 12:39:19
おれ・・・・作ってみたいんです 作りながらコードしてここの先輩方にご指摘頂くのかいいですか? 教えて君じゃなくてコードは自分で調べます!
@ 人間用の普通のオンラインチャットプログラムを作る A 人工無能について調べ、オンラインでなくローカルで会話できるまで作る B @とAを組み合わせる それぞれのキーワードについて自分で調べて、 サンプルがCやC++やJava用だったなら自力でアレンジ、移植する 誰も作るななんて言わないから、作ってみたいならどんどん作ればいいんだよ 物理的なロボット作りたいならハードウェアも勉強してね
523 :
517 :2010/10/31(日) 12:57:29
先生ありがとうございます! 2番を作ります! 俺中1なんで学校終わったら毎日調べて書きます!
いや、ここに書かなくてもいいからw そういうのはブログにでも書いた方がいいと思うよ
とりあえず形態素解析とマルコフ連鎖あたりから調べてみれ
WPFのXAMLにトリガーとかストーリーボードを追加するときってvs2010で手書きするのが普通?それともExpression Blend使うの?
アニメーションはさすがにBlend使わないと無理。 あとトリガーは時代遅れ。Visual State Manager使う。
ちょうど今トリガーの勉強したところだったが、 今度はVisual State Managerの勉強してくる
529 :
デフォルトの名無しさん :2010/10/31(日) 18:46:30
StreamReaderのオブジェクトのディープコピーしたいのです。 サンプルメソッド使用して実行したら、例外が発生し実行できませんでした。 エラーメッセージに「'System.IO.FileStream' はシリアル化可能として設定されていません。」と、ありました。 どうすればシリアル化することができるのでしょうか?
何をしてもシリアル化はできません。
531 :
デフォルトの名無しさん :2010/10/31(日) 19:13:39
>>530 シリアル化できるものとできないものとあるんですねえ〜
ラップしても無理なものは無理です。
Readerをディープコピーして何がどうなるってんだ まさか別々に読み出せるとかトンデモ発想してるわけじゃないだろうが
C#の勉強やりたいのでスレ立てていいですよね?
アイちゃん貼られても知らんぜ俺は
個別レス立てると叩かれるぞw
ここでいいだろ。
特定の配列に文字列が入ってない事をどうすれば表現できるのでしょうか
array.All(a => !(a is string))
!array.OfType<string>().Any()
ありがとうございます
LINQかっこいい >< 俺も勉強する ><
C#5.0が出るのが先かC#4.5が出るのが先かC#4.1が出るのか先か分かる人教えて
なぜ、表記の違いだけなのに気になるかがわからない。 次がでる時期が気になるならわかるけど。
Cωが虫の息なんですが…
マーケティング戦略によっていろいろ変わるしね。
>>545 虫の息っていうかもとから実験用みたいなもんでしょ
コンセプトがLinqで消化されたんで役割は見事に果たせたんではないかと。
548 :
デフォルトの名無しさん :2010/10/31(日) 22:00:06
すいません質問です! C#で作成したプログラムが吐き出したデータを見てるんですが、 時間の値が解読不可能で困ってます;; 634089637900000000 ↓ 2010/5/10/ 1:03 ・・になるみたいなんですが。 シリアル値で変換出来ず。。。 どなたか分かる方いらっしゃいますか?
>>548 基準となる日時があるんじゃないの?
2chのdatのファイルネームも確かUNIXタイムだし
DateTime.Ticksの値
時刻値は 100 ナノ秒単位 (タイマ刻み) で表し、日付は GregorianCalendar 暦の A.D. (西暦紀元) 1 年 1 月 1 日の午前 00:00 からのタイマ刻み数で表します。たとえば、タイマ刻み値
大人気だな。
大人気ないな。
556 :
デフォルトの名無しさん :2010/10/31(日) 22:28:23
>>549-552 納得できました!!ありがとうございます。
ちなみにこの値をプログラムを使用せずに
元の日時へ変換する計算方法なんてあるんでしょうか?
DateTimeクラスのコンストラクタを調べてみろ。
MSDNに書いてるし
559 :
デフォルトの名無しさん :2010/10/31(日) 22:39:20
2038年問題の対応の仕方をご教授お願い嶋sう
>>559 ・基準時間を変える
・桁を増やす
VC++の最近のやつはこの辺の警告でまくりだっけ?
>>556 プログラムを使用せずに?紙と鉛筆?暗算?
気合と根性で足し算すればできるよ。
>0001 年 1 月 1 日午前 00:00:00 以降の経過時間 (100 ナノ秒単位) を表します。
うるう年とか、カレンダー切り替えの辺りを考えると、 手動計算はちょっと厳しいと思う。
気合と根性w
>>546 ひとまずITmediaの入門記事よんでからでなおしてね。
566 :
デフォルトの名無しさん :2010/10/31(日) 23:40:42
根性使い果たしました\(^o^)/ でも調べて理論ははんなりわかったので、妥協しますorz ありがとうございました。
.NETのGUIやイベントやその間の関連はあんまり宣言的じゃないのでそういうのは無理。
>>563 作り慣れてれば感覚的に構造が理解できるけど。
最初は手で繋がりを書いた方が速いと思う。
静的解析は無理だろうけど、 実際にアプリを動かしながらだったらそういう可視化は可能だろうな 案外簡単に作れるかも
う〜〜ん、メッセージキューをトレースしても、キューの連続が見えるだけで。 それが内部のメソッドやクラスと関連させる方法が思いつかないけど。 ソースに手を加えるのか? それが出るほどに手を加えるのなら、その時点で理解していると思われ。
571 :
564 :2010/11/01(月) 00:31:32
どうもです。
>>567 >.NETのGUIやイベントやその間の関連はあんまり宣言的じゃないのでそういうのは無理。
>>569 >静的解析は無理だろうけど、
編集するのはムリだろうな。とは思っていたのですが、表示もムリですか。
マイクロソフト純正(高いのから安いのまで)でもそういう表示の機能は無くて、
サードパーティー製のツールでもそういう表示(多少解析に処理時間がかかっても)は出来ないと。
>実際にアプリを動かしながらだったらそういう可視化は可能だろうな
たしかにイベントハンドラの登録とかコードの中から呼んでますもんね。
どこで呼んでもいいとなればコード全体解析しなければ分からないと。。。
GUIのフォームや関連する部分からイベント飛んでるぐらいだったら分かるんですが、
GUIと全く関係ない直接呼んだら良さそうな内部の処理なのに何段階もイベントで飛ばしてる
ってC#はそもそもそういうもんなんですかね。
コードを検索かけてみてもなんかすごく分かりにくい気がするんですが。
やっぱり、つながりを紙かなんかにコツコツ書いてくしかないんですかね。
>>571 それは「C#がそういうもん」じゃなくて、
そういう書きかたされたってだけのような。
どの言語でもスパゲティにする人はいるわけで。
作り方によるだろ Java知ってるのかしらないけどイベントなんて インターフェイス経由のメソッド呼び出しと同じ
今時、直接イベント直結してるのが不思議 去年、全ての資産はwpfに移行してるからってのもあるけど それでも不思議
複数スレッドで処理を分担するアプリケーションもある、 その時は連携にイベントを使うだろうね。 イベントがあるからスパゲッティーというのは暴言だと思われ。
>>564 みたいな構造ならイベント多用するだろうな
WinFomsが最も得意とする類
スパゲッティになるかどうかは別問題
どこを間違えたって?
>>574 今時WinFormで開発なんてありえねーってこと?
いまいち何いってるのかわからん
>>571 コツコツっていうか、普通のプログラマが書いたコードならイベントハンドラは
それと分かるような名前になってるはずだし、ちょっと気が利く人ならイベントハンドラだけ
regionで括ってあったりするし、そうでなくても自分でそうすればいいんだし。
何より、イベントがどこから参照されているかはIDEで検索可能だし。
そんなに気に病むほどのことでもないよ。
WPFでウィンドウの最大化、最小化を this.WindowState = System.Windows.WindowState.〜; で制御しているんですが、これだと通常右上のボタンを押した時の ウィンドウが縮んだり伸びたりするアニメーションが発生しません。(動作環境はVistaです) 動作に統一感を持たせたいので、出来ればこのアニメーションを 発生させたいのですが、何か方法はないでしょうか。
逆に考えるんだ Vistaのアニメーションをoffにするんだ
うーん、それはちょっと
WinFormsのTextBoxでアクティブウィンドウじゃなくなっても文章選択のハイライトを維持する方法ありますか? 通常ではデスクトップなどをクリックしてアクティブウィンドウじゃなくなるとハイライトが一時的に消えます。
自己解決しました
超巨大なCSVファイルを読み込んでファイル操作(列入れ替えや引用符など)を行って 別フォルダに出力するのですが、TextFieldParser を使うべきかStreamReaderで一行ずつ 拾っていくか迷っています。 CSVが項目100以上で行数が60万件なのでやはりStreamReaderのほうがよいのでしょうか? 基本的にメモリに出来るだけ読み込まないことを前提に考えております。 このほかによい方法などありますでしょうか?
587 :
デフォルトの名無しさん :2010/11/02(火) 10:37:16
思いつくパターン書いてみて実測してみればいいじゃん
StreamReader使っても結局CSVの構文解析は必要になるんでは その点ではTextFieldParserでいいんでないかな でもMS Accessに任せちゃう方がいいと思うけどね CSVをデータベースっぽく使えるはずだし
実測したいのですが、手元にデータがなく現地で即、実施となるので・・・orz CSVの構文についてはなんとかするつもりです@w@ ただ、今回の場合サーバーで実行するので処理速度はそこそこで 基本はメモリを食わない設計にしたいと考えております。 後、蛇足ですが.netは2までですorz
590 :
デフォルトの名無しさん :2010/11/02(火) 10:53:56
>CSVが項目100以上で行数が60万件 データ作ればいいんじゃないの? それこそc#で簡単なファイル出力プログラム書いてしまえば・・・
”列の入れ替え”がソーティングのことを指していて、 ソーティングにO(logN)の実行速度とか要求されたら オフラインアルゴリズムしかないので、メモリがO(N)とかになっちゃう 無難にADO.NETでCSV読ます方法がいいんじゃない?
あれ、列って項目のことか 行と勘違いしていた^p^;
行の入れ替えならそのようにするのがよいと思います。 今回は列の入れ替えのみ考えるので@w@ とりあえず、データを作ってみます@w@もしTextFieldParserが CSVのデータをすべてメモリ内に読み込むようでしたらStreamReaderで 作成しようかと思います。もしTextFieldParserのことを知っておられる方が おりましたらご教授お願いいたいます。
この場合行数は関係ないんじゃね。1行分処理できればあとは同じだろうし。 基本的にTextFieldParserでいいんだろうけど、 妙に融通が効かないこともあるから、不都合があれば自前でやる。 それからAccessというかODBCのテキストドライバはそろそろ非推奨なんじゃね。 アップデートもされてないし。
TextFieldParser parser = new TextFieldParser("text.csv", System.Text.Encoding.GetEncoding("Shift_JIS")); 上記の構文を作成したときに該当CSVファイルをメモリに 読み込ます・・・というわけではないのでしょうか? 単に、ファイルのハンドルを取得するだけならいいのですが
ReadFieldsメソッドで1行づつ処理するから、まとめて読み込むようなことはない。
ふむふむ、そしたらTextFieldParseをメインで考えて作ってみようと思います。 ありがとうございました^-^
2010C#EE オプションのチェック状況の保存 複数ファイルのパス+再生位置などのデータの保存 それぞれどういう風にファイルに書き出すのが最適ですか?
適当にフォーマット自分で決めてXMLで吐けばいいでしょう GUIとデータをきちんと分けて考えていればそんなことで悩む必要は無いはず
XMLですか、どーもー
XMLシリアライザみたいなやつ無かったっけ?
602 :
デフォルトの名無しさん :2010/11/02(火) 14:12:04
あるよ クラス作っておけばそれにあわせて読み書きしてくれるぜ
richTextBoxで、文字を打つとコードエディタのようにコメントマーク〜改行まで 文字色が変わるようにするにはどうしたらいいですか? 下の文章の//以降が緑色になるみたいな感じにしたいのですが。 hogehoge //この行は緑色 hogehoge//ここから緑色
シリアライザも万能じゃなくて
リストの中のリストは書き出せないとかがあるんですよね?
XMLに書き出す場合
>>598 だとどういう形式のクラスを作ればいいんでしょうか?
classA{
name
path
position
}
↑適当ですいません
みたいな感じのクラスをList<>とかにするのがいいのかな?
XMLシリアライズならこれで十分 public class ClassA { public string Name { get; set; } public TimeSpan Position { get; set; } public List<string> Paths { get; set; } public Options Options { get; set; } } クラス内のListもちゃんと展開されるよ
あ、いけねTimeSpanは展開されないんだった。 かわりにintでも使ってくれ
最近c言語を学び始めました 「各入力行から、行のあとのブランクやタグを除き、かつ空白行はすべて削除するようなプログラムをかけ」 という問の答えがわかりません;; putchar、getcharを使うんだと言う事はなんとなくわかるんですが・・・ どなたか優しい方このプログラムの作り方おしえてください
608 :
598 :2010/11/02(火) 15:29:22
>>605 そんなやり方が、すごいなー
ありがとうございます
611 :
デフォルトの名無しさん :2010/11/02(火) 15:34:16
つーかコード書いて試すとかしないのか・・・ シリアライズだって試せばわかるだろうに
612 :
598 :2010/11/02(火) 15:39:22
public class ClassA { public string FullPath { get; set; } public int Position { get; set; } } public class ClassB { public List<ClassA> Movies { get; set; } public Options Options { get; set; } } ファイルごとに再生位置を設定したいので 理想はこんな感じなんですが、ちゃんと展開できますか?
ISerializable実装したらいいんじゃないの?
614 :
598 :2010/11/02(火) 15:46:50
そんな難しいこと言われてもよくわかりません オプションのチェック状況を保存 ファイルのパス+再生位置のリストを保存 これをやりたいだけなんですが スパっと解答できる人いないの?
どこまで人任せなんだよ とりあえずこれで実際にどういうXMLが出力されるか試せるから自分でやってみればいいよ それでもわからなければまた質問に来い string result; List<ClassB> classBListInstance = new List<ClassB>(); // classBListInstanceに値を代入 System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(List<ClassB>)); using (System.IO.StringWriter sw = new System.IO.StringWriter()) { ser.Serialize(sw, classBListInstance); result = sw.ToString(); }
>>613 たしかXmlSerializerとISerializableは無関係のはず
617 :
598 :2010/11/02(火) 15:56:16
>>615 あ、なるほどー
typeofで設計図を参照しろってな感じでやれば
理解してやってくれるのか
今度こそわかった
ありがとう
618 :
デフォルトの名無しさん :2010/11/02(火) 18:58:54
子ウィンドウから親を取得したいんだが。 親から子をShowMessageで呼び出しているのに 子のOwnerがnullになる。 子から親を取得するのはどうすりゃいい? 親からOwnerを書き換えてやっても駄目だった。
619 :
618 :2010/11/02(火) 19:00:09
ShowMessageってなんだ ShowDialogです。
620 :
デフォルトの名無しさん :2010/11/02(火) 19:01:53
>>618 子を作るときに親のインスタンスを渡しておくとか・・・
621 :
620 :2010/11/02(火) 19:03:22
あとthis.parentformとかあったっけ? ちょっと今IDE入れてないマシンからなんで記憶をたどってるだけですまん とりあえずコントロールにせよparentという単語が入ってるやつ調べれば親だよ
622 :
618 :2010/11/02(火) 19:04:58
>>620 子がForm2 親Form1として
Form2 form2 = new Form2();//親から
Form2.Owner = this;
Form2.ShowDialog;
こうしてもnullになる。
実行時にthisはForm2になっているみたい。
623 :
618 :2010/11/02(火) 19:14:22
>>621 ParrentはMDIフォーム用だったきがす
試してみたけどnull
624 :
デフォルトの名無しさん :2010/11/02(火) 19:17:12
>>622 独自にインスタンスを持つようにしてそれ経由でw
ダメだと思うけど、いちお form2.ShowDialog(this); // thisはform1
626 :
618 :2010/11/02(火) 19:42:05
>>624 ナイスヒント
Form2のコンストラクタにForm1を渡すことで成功しました。
>>620 ,625もありがとな
これから始めるなら、WPF?C#? とりあえず、EXELっぽいのを作りたいんだけど
>>627 WPFとC#を比較してどうするんだか。
何もわかってないならExcelとか大層な目標は掲げず、
もっと地に足の着いたとこからどうぞ。
気になるから調べてみた。
Form f = new Form();
f.Shown += (o, s) => MessageBox.Show(f.Owner.ToString());
//f.ShowDialog();
f.ShowDialog(this);
ShowDialog()の引数に呼び出し元を渡さないとOwnerがnullになる。
ShowDialog()では例外が出て、ShowDialog(this)では例外無く実行できる。
>>625 が正解でした
>>628 >>630 答えたくないなら答えなくていいんだけど
ネタぽくされると答える気のあった人にもスルーされちゃんで
暇つぶししたいなら他でやってね
割と的を得ていると思うがね もしかしてWindowsフォームアプリケーションとWPFを比べてる?
Formsはマジで死ねる。 単純な物ならFormsだけど、少しでも複雑になろう物なら一気にWPFが優位になるよな。 あとは軽くなってくれれば文句無いんだが
>>632 2択なのにその他を選ぶなんて試験だと0点だよ
>>633 元々する気がない奴ほどそういうことをいう
WPFとC#の2択って意味がわからんから、何か他の物に例えてくれ
>>636 なんで煽ってんの
会社か学校で嫌なことでもあった?
WPFかWinFormsならわかるけどな ちょっと調べてから来たほうがいいのでは
もうちょっと勉強してからきたほうがよかったんじゃないかな
>>636 よく分かったなw
質問で返して悪いけど、C#じゃなくてWPFからはじめるとしたら、
C#の代わりは何使うんだ?
FlashアニメーションみたいなのをLooseXAMLで作るんだよきっと
VBじゃね?
ヒント WPFは言語じゃありません
ルーティングイベントが無いFormsは不便だろ
今回はこちら側に不備があったようなので改めて質問させて頂きます 簡単なファイラーを作ろうと思うのですが これから始めるとしたらWPFとWinFormsのどちらが良いですか?
C#で使える最も正確なタイマーってどれ?
クソワラタw
>>648 System.Threading.TimerかSystem.Timers.Timer
後者は前者のラッパーなので精度は全く同じ
WPFは少し勉強してみましたが、概念の理解で詰まる データバインド、テンプレート・・・もうこんなややこしいことするなら winformsでいいやってなるんだけど どうしてみなさんはWPFやろうと思ったのか そこら辺の動機を教えてほしい
便利だから
理解できる人にはWPFの方が簡単だから
とりあえずwinformでなんか作ってみれ ある程度規模が大きくなるとデータバインド出来ればなぁとか思うようになるから
例えばどういうときに? ファイラーを作る時もWinformsより楽なの?
動機:そこにWPFがあったから^^
>>657 いくつか作ったけど、WinFormですら
データバインドがよくわからなくて使ってないんだよ
これって、データソースを弄れば勝手にGUIも変更されるってことなんでしょ?
例えばデータグリッドにaddでデータ追加するのと
データバインド使うのと何がどう違うのかよくわからない
データバインドでぐぐっても、確かに楽だっと思えるような例もないし
addでデータ追加しなくていいってこったよ 馬鹿かおめぇ
662 :
618 :2010/11/02(火) 22:00:05
UIの管理とデータの管理を完全に分離できる WinformsではUIとデータを結びつけるプログラムは全部自分で書かなきゃいけないけど、WPFなら不要 追加だけじゃなくて、データに対する更新や変更、データごとの表示の切り替えなんかも自動
>>654 フレームワークの機能ベースで見るから概念多くて詰まるのよ。
GUI アプリケーションに求められてる要件ベースで考えたらあれくらいないとやってらんない。
WPFは直接textBox3.Text = …のようなコードを書かなくて済むだけだよ。 MVVMなんかM-VM間の結び付けコード書きまくり
>>663 それちょっと違うんじゃないですか?
結びつけるコードはWPFでも必要だし、
それが一番ややこしくて詰まるんだけど
winformsならADDだけ書けばいいのに、データバインドのためにnotifyなんちゃらとか
いろいろ書かないといけないし、まあ、一回書いてしまえばもう書かなくていいのと
毎回Addや.Text=をしないといけない差と考えれば楽っぽい気もするけど・・・
あと残念ながらxpなんですよね、スペックはcpuE8400で数年前のモデル
メリットを感じないなら、データバインドやらWPFやら使わなきゃいいだけ。
ちょっとしたユーティリティ作るのにWPFなんていらないよね? 個人で使うのにそんなグラフィカルにする気もないし winformsでやります、てかもうやってて半分ぐらい完成してるw
逆に二度とWinFormsに戻りたくねえけどな
>>669 小規模でも?
例えば画像を仕分けするような単純なお仕事をするソフトでも?
WPFは難しいと思い込んでるだけだろ 手軽にWinFormsと同じように使うこともできるよ
仕分けが何かわからんけど、画像の一覧なんてWPFの超得意分野じゃないか?
GUI上にボタンが二つあって 画像じゃないファイルをボタンを押して仕分ける場合でも WPFのほうが早くて簡単? ちがうでしょ?
なんか奥手の奴が告白しない理由をああだこうだ並べてるみたい。
うぜー
>>670 コレクションに突っ込んでテンプレートをちょっと書いたら画像の一覧表示ができるようになって
コンバータ作ってスライダーをポトペタしてバインディングするだけで、一覧表示した画像の拡大縮小も実装できちゃう。
WPFの方が早くて簡単。
>>673 WPFでもWinFormsでも作業量変わらんだろ…。どこが違うのさ?
677 :
デフォルトの名無しさん :2010/11/02(火) 23:35:41
凝ったUIやる場合はWPF そうじゃければWinForm それだけ
Click+=ナンチャラ とか書けないと思ってる?
例えばさ、ファイル一覧をリストに表示したいってときでも どうしていいかさっぱりわからない ドボンネットみたいなのでWPF対応しているようなサイトないのかな
680 :
デフォルトの名無しさん :2010/11/02(火) 23:43:27
>>677 WPF使った事ないだろ。
凝ったUIやらなくてもバインディングとテンプレートは素晴らしく強力。
WPFの真価はここにある。
VS2010だったら十分デザイナ使えるぞ
>>682 あるよ
でもwinformのころとは明らかに書き方とか変わってるので
覚えてなれるまでが大変
俺は、タスクトレイアプリ以外は、WPFでやるけどさ。 どうしても、Formつかうことあると、負けた!!って思う><
>>679 <ListView ItemsSource="{Binding}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
って書いといてthis.DataContext=Directory.GetFiles(path).Select(s=>new FileInfo(s));
こんな感じかな?
>>686 それそれ、そのラムダ式?
おれラムダ式も知らない初心者だよ?
そこで詰まるんだよ
そんなもんWPF全く関係ないしそういう風に書かないといけないわけでもない
C#初心者じゃねーか!スレ違い! あれ
ITやMSなどのWPFのTIPS一通り読んでさ
書いてあることをやることはできるけど
ちょっと違うことやりたいと思ったらまったくわからない
あ、これ基礎の基礎が書かれているわけじゃないんだって気づいて挫折するんだよ
例えば
>>686 の場合
ファイルパスだけじゃなくて、更新日時やファイルサイズも読み込むとしたら?
listviewじゃなくてdatagridviewだった場合は?ってなると
一体どのようにバインディングすればいいかさっぱり
拡張子で文字色を替える場合XAML? それともXAMLになくてC#で書くの? とか、ドボンでごり押ししてアプリ作ってきた俺には TIPSサイトが少ないことが致命的 MSのあの説明じゃ難しすぎてわけわかめー
694 :
デフォルトの名無しさん :2010/11/03(水) 00:17:40
>>693 まあ理解に時間かかるかもしれないけど
それほど難しい物ではないような気がするけどな・・・
>>691 更新日時・ファイルサイズのプロパティを公開する適当なクラス作ってバインディング。
TIPS一通り読んでもできないなら、WPFやWinFormsの前にC#でのプログラミングに関する知識が決定的に足りてない。
>>690
c#って検索するとき#が消えるんだけど、他に候補はなかったのかな
何の検索? 消える方がおかしい
>>693 最近のもそこの両方とも見ましたけど、さっき言ったように書かれていること以外の
コントロールを使ったりなんかするとどこにバインディングすればいいかがわからないんです
INotifyPropertyChangedとかも、え?これってデリゲート理解してないと無理なんじゃないの?って詰まる
ITのコンバータによるデータ変換のところも
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
これでできますとかいわれても、一体この引数はどこから来たの?なぜこれだといけるの?
そしてこのソースは一体どこに記述するの?
そんなのわかってて当たり前だよって人が書いたものなのでそういう説明が抜けててわからない
他の数多くあるTIPSサイトも同じようにこうすればできるとは書いているが
なぜそれだとできるのか、なぜそれでできるとわかったのかなどが書かれてない
それさえわかれば、応用できるのにって思う
>入門でMSDN読んで理解できたら凄いと思うわ
やっぱりそうですか、こんなのでみんな理解できているのかと思って自暴自棄になった。
>>695 それぼくからすると説明になってませんから・・・
クラス作ってバインディング
いやいや、そのバインディングの仕方がわからないんです
stringやintのバインディングは出来ても
ファイル情報の自作データクラスを一体どうしたら、データグリッドの
各セルに配置できるかさっぱりわからない
winformsだとどぼん見ていれば小規模なユーティリティなら作れますが
何の知識が足りないんだろ
>>686 これもそうだけど、datacontextにfileinfoのインスタンスを渡しているのかな?
なぜ、ListView ItemsSourceにfileinfoのインスタンスを渡せるとわかたのかがわからない
それをするとなぜlistviewに表示されるかもわからない
よくたとえでテレビの内部構造を理解していなくてもチャンネルを変えることができる みたいな例えがありますが、 WPFも、一見内部構造知らなくても操作できますよって感じに見せておいて 内部構造知らないとできないだろってパターンなんだよね
ぜんぜんよんでないな
>>699 WPF関係なくデリゲートとラムダ使えないとC#プログラマーとしてかなり損すると思うよ
Linqの勉強でもしたら?
Convertの引数の意味が分からんのならインターフェイスも復習したほうがいい
>>703 使えないというか使う必要がなかったという感じです
そういう知識が最低限ないとWPFは無理ってことですね
>>702 読みましたが、理解はしていないと思います。
あまりにも難しすぎる。
>>704 使う必要はWinFormsであろうともあるというか、
少し頑張って覚えようとするだけでどれだけ楽になるか。
WinFormsがどうだのWPFがどうだのというよりも、学習する気があまりにもなさすぎる。
WPFはWinformsのように直感的には作れないし Webの情報もの方は圧倒的に不足してる Winformsで満足だと思うなら無理にWPFに移行する必要はないよ 別に馬鹿にしてるわけじゃないけど、今回の話は 四則演算しかできない小学生が微分積分ってなにがすごいの役に立つの? って聞いてる状況ににてると思う
>>700 DataContextに何が入るのかなんてSelectにマウスオーバーすれば一発で分かるだろ…。
ブレークポイントで止めて、実際に何が入っているのか確認もしていない。
INotifyPropertyChangedだってWinFormsの頃から使われてた。
IDEを使えずC#を知らないのに理解できるわけないじゃないか。
最初から全て理解するなんて誰にもできない。誰だって自分が理解できる範囲から少しずつ知識を広げていくもんだ。
サンプルからコピペするだけの状況から抜け出すには、自分で努力するしかない。
・WindowのDataContextにIEnumerable<FileInfo>が入れられる。
・{Binding}は親のDataContextに入ってる物を参照する。
ListViewのItemsSourceは列挙可能なインスタンス(Array,List<T>,IEnumerable<T> ...)を受け取る。
→<ListView ItemsSource="{Binding}">でItemsSourceにWindow.DataContextのIEnumerable<FileInfo>が入る。
・ListView.ItemTemplateはItemsSourceに入っているIEnumerable<FileInfo>から要素(FileInfo)を一つずつ取り出し、自分のDataContextに格納する。
・<TextBlock Text="{Binding Name}" />でDataContextに入っている要素(FileInfo)からプロパティ(Name)の値を取得し、TextBlockに表示する。
厳密に言うと違うとこもあるけど、イメージとしてはこんな感じ。
これはWPFの話じゃないなw
Linqって先につながるものなの? 他の言語でその考えを応用できたりする?
>>709 Linq to Objectsの高階関数でのリスト処理はいまどきの言語なら基本中の基本。
>>705 ラムダぐらいはちょっと覚えてみます
>>706 やっぱりWPFは微積レベルだったんですね
道理でわからないと思った
>>707 そりゃあ、経験豊だからわかるんでしょうがぼくにはまだ無理です
ラムダがわからないので、selectといわれてもよくわかりません
>イメージとしてはこんな感じ
大体そういうことなんだろうなというのはわかりますがが、そういう説明がよくあるTIPSで、ぼくがわからないのは
>要素(FileInfo)を一つずつ取り出し・・・
ItemsSourceがどういうデータを受け取けとれるのかどうやってわかったのかがわからない
fileinfoなんてかなり特殊なデータ構造ですよね?これがそのまま入るなんて想像もできない
一体どこまでのものが入るの?自作のデータクラスもそのまま入るの?入らないの?
なぜ入らないのか?なぜfileinfoだと入るのか?DirectoryInfoではどうなのか?DataGrid.Columnsの場合は?
List<List<T>>の場合は?,Directory<Directory<T>>の場合は?一体どんなものまで取り出せるの?
制限みたいなのはどこを見ればわかるの?
単純にプロパティさえあればなんでもありなの?
だとしたら、プロパティさえあれば何でもいいってどこを見てわかったの?
こういう疑問が湧いてきて、ちょっと違うことしようとすると何をどうしていいかわからない
>>711 それこそItemsSourceには列挙可能なインスタンス(Array,List<T>,IEnumerable<T> ...)ならTにかかわらず"何でも"入る。
で、どうやってそのTを表示するのかっていうのは、もともとTに表示方法が定義してあればその通り表示するし、
今回のようにDataTemplateで定義されてればそれに従う。もしそういうのが一切なければToStringの結果が表示される。
<TextBlock Text="{Binding Name}" />
の部分はTの型のNameっていうプロパティを表示してって意味で、LastAccessTimeとかLengthとかにもできる
713 :
712 :2010/11/03(水) 02:24:07
ついでに俺はこういう知識はエッセンシャルWPFって本を読んで理解した。 この本読めばWPFのイロハは理解できると思う。
>>711 >ItemsSourceがどういうデータを受け取けとれるのかどうやってわかったのかがわからない
ItemsSourceを使う全てのサンプルやTipsでIEnumerable インターフェイスを実装したクラスを指定している。
MSDNにも「IEnumerable インターフェイスを実装するすべてのコレクションを列挙できます。」と書いてある。
http://msdn.microsoft.com/ja-jp/library/ms743643%28VS.80%29.aspx#collections ぐぐれ
>fileinfoなんてかなり特殊なデータ構造ですよね?自作のデータクラスもそのまま入るの?
よくある普通のクラス。自作のクラスもそのまま入る。
IEnumerable<DirectoryInfo>, DataGrid.Columns, List<List<T>>, Directory<Directory<T>>全部入る。
>単純にプロパティさえあればなんでもありなの?どこを見てわかったの?
なんでもあり。プロパティがなくてもあり(ToStringの結果が表示される)。
そもそも"なんでもあり"ではないと書いてる所なんてない。
何でも突っ込んでテンプレートで好きなように表示するのがWPF流。
全部手動でやるWinFormsは単純だが面倒。だからWPFに慣れた人はWinFormsに戻りたくないと言う。
>>711 なんで手で動かしてみようとしないの?
DirectoryInfoでだろうなのかという疑問が浮かんだなら
まずはFileInfoでやってみて、そして次にDirectoryInfoで試せばいいじゃない。
100回、ネットで記事見て本を読んで質問をしてを繰り返すよりも
1回、自分の手で動かして、VisualStudioのデバッガで値を見て、
というのを行ったほうがずっと身に付くと思うんだけど。
理屈は後だっていいじゃない。
手で動かして結果を見てから、理屈を見たほうが納得行くと思うよ?
ちょっと便乗して質問 <ListBox.ItemSource> <Binding Path = "."> <Binding.Converter> 〜 っていうサンプルがあったんだけどPath = "."ってどういう意味?
ここでウダウダ書いてる暇で十分に獲得できただろうにな
>>712-714 なんとなくWPFのきっかけがつかめた気がします
それにしても、まさか全部の質問に答てくれる人がいるとは正直驚きました
深く感謝いたします
>>715 やっぱり力技で覚えていく方がいいんですかね
きっかけなんて「そこにあるから」で十分。 プロジェクト作ってデザイナで、とりあえずメニューだ!と設置して動かしたら Windowのサイズ変えても左上に居座ってて、Stretchが怪しい!とStretchしたら ド真ん中に表示されて・・・ 1日目それで終了。 ああMarginか、とか、StackPanelとかあるのかー、とちょっとだけ調べたのが2日目。 そういう積み重ねでしょーが。 全部理解してから何かを始める人なんて居ないよ。
すごい、できちゃったよDataGridで
しかも
>>686 のようにたった一行のコードを書くだけで・・・
確かに慣れたら楽かもしれない
クソミソ言われた子が頑張って1つのことを成し遂げた姿に感動した
>>686 のDataTemplateに画像を追加して、項目が選択されたときに画像を変更するみたいなことをやりたいんだけど、どうすればいい?
ラムダ式なかったらめんどくさい 昔のC#は匿名メソッドはあったがラムダ式がなかったらしいな みんなめんどくさいものやってたんだな
726 :
724 :2010/11/03(水) 06:15:40
728 :
724 :2010/11/03(水) 06:36:52
>>727 すまん言葉が足りなかった。
画像を変更したいのはListBoxの項目自体の画像です。
ディレクトリを表す項目にフォルダみたいなアイコンをつけて、
選択したらフォルダが開いてるアイコンに変えるみたいなことをしたかった。
DataTemplateの親のプロパティにトリガを設定する方法がわからなかったんだけど、
調べてたら
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True">
ってやればいいことがわかりました。
729 :
722 :2010/11/03(水) 07:08:27
DATAGRIDだけど ・あれから1時間かけてfileinfoのLastWriteTimeの 日/月/年 と逆になっているのを普通にするための方法を調べ解決 それから一時間かけて ・fileinfo.lengthに3桁づつコンマをつける方法を調べ解決 ・そのファイルサイズを右揃えにする方法を調べ中 なぜかカラムヘッダのプロパティウィンドウのテキストの項目に 右揃えできそうなアイコンがあるのにクリックしても無反応 バイトで表示じゃなくてMBで表示するために/1024で割りたいが どこですればいいかわからない fileinfoを直接扱うんじゃなくて、一旦自前のクラスに入れるほうがいいのかな・・・ ・ヘッダをクリックしてソートすると、スクロールバーが勝手に動く(セルの値に合わせているのか?)のを止める方法を調べ中 どうしてこんないらない機能をつけるかなー
ここは日記帳じゃないよ 質問じゃないならブログかツイッターに書けば?
FXの醍醐味ってXBAPのはずだよね XBAP自体そんなに普及しているようには思えないんだけどそんなにWPFって使われているのだろうか?
> FXの醍醐味ってXBAPのはずだよね そんなことないしxbapはもう終息
>>725 ReactiveExtensionいいよ。結構便利
>>686 だが一晩寝たらWPFできる子になってて笑った
この調子で1万人ぐらい開発者増えないかな
>>729 ・割り算用のIValueConverterを自作する
IValueConverterは割り算だけでStringFormatで単位を付けてもいいけど、文字列で返した方が潰しがきくと思う
・ElementStyleでHorizontalAlignmentを変更
〜Style系のプロパティで困ったらSnoopってツールを使うといいかも
<DataGridTextColumn Binding="{Binding Length,Converter={StaticResource ファイルサイズコンバーター}}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="HorizontalAlignment" Value="Right" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
C#でアダプタパターンをやる際に、 D言語のopDotやGo言語の埋込みのように .演算子の右側で指定された名前を、 クラス内で明示的に定義されていなければ クラス内の特定のメンバ構造体に転送するような方法はあるのでしょうか。
IDEにプロパティウインドウってありますけど、あれと同じものを 実装するコントロールってあるんでしょうか? ちなみにVS2008を使用しています。
PropertyGrid
ないね。 DynamicObject 使って動的にやるか、 コード生成系の手段でプロキシクラス生成するか。 Go の埋め込みみたいなの、今から C# に追加するとものすごい混乱しそうだし、今後追加されることもないと思う。 あれは、structural subtyping 持ってないと大して有用でもないし、 C# みたいな nominational subtyping(明示的にインターフェイス継承しないと多態動作できないもの)には不向き。
>>738 ありがとうございました。
確かにインターフェース継承してないとあんまり継承の意味ないですね。
richtextboxのコンテクストメニューって自分で作らないといけないんですか? どこかにtextboxと同じメニューのひな形とかありませんか?
741 :
722 :2010/11/03(水) 16:38:05
>>734 いけました
StaticResourceとして使う方法(インスタンス化?)がわからなくて手間取りました
コンバーターを使うと
102,000k
120k
200,000k
こんな風にソートされるかと思ってたけど
コンバートする前のlong型データでちゃんと計算されるんですね
742 :
722 :2010/11/04(木) 00:36:13
今日1日かけたけどわからなかった DataGridのカラムをクリックしてソートしたときや、セルを選択したときに 水平スクロールバーが勝手に動くのだけど動かないようにする方法ないでしょうか?
この流れみて俺もWPF始めようと思った
俺もWPF暦2週間の入門者。 WPFスレ過疎ってるから来てくれよ (´・ω・`)
745 :
デフォルトの名無しさん :2010/11/04(木) 01:20:36
もうWPFもSLも分ける必要ないんじゃね?
746 :
722 :2010/11/04(木) 01:45:05
向こうのスレなんか怖いんだけど
C#とかVisual Studioのスレ荒らしてたのが SilverlightとWPFに行ってるんじゃない? その分こっちが静かになって昨日の話しもやりやすかった。
WPFはExpression Blendが無いとキツい場面もあるよ。 また一つMSにお布施だな。
とりあえずハッシュしないで素の文字列でやってみたら? なんかわかるかもよ
>>748 グラフィックツールが欲しくなるようなことができるということ。
外観がWinFormsと同じでよければBlendなくてもVSのデザイナで十分作れるよ。
WinFormsでWPFと同じことやろうとしたら自前描画地獄でそれこそXAML手書きなんかより
はるかに面倒。
splitで作成した文字配列をInt型の配列にするためには どのような方法があるのでしょうか?ひとつづつ抜き出す以外の方法を探しております。 (Ex) string a="1,2,5,2,6"; var b = a.split(','); *var bをInt型に変更したいです 思いついているのは↓ var row = new System.Collections.ArrayList(); foreach(string i in a) { row.Add(int.Parse(i)); } 位しか思いつきません・・・.netでなにか用意されていないのでしょうか?よろしくおねがいします。
var b = (from i in a.Split(',') select int.Parse(i)).ToArray();
Array.ConvertAll
なぜC#初心者はArrayListを使いたがるのだろうか
別に使ったっていいじゃん。 あと、元ので何か困るのかいな。
ArrayListって配列にするときにJavaみたいに(int[])row.ToArray(typeof(int))と書くんだっけ 懐かしいな
>>752 Array.ConvertAll(b,
new Converter<string, int>(s=>return int.Parse(s));
IDEで検証してないから動作保証外。
ラムダ式ならnew Converter<string, int>はいらんでしょ 省略が嫌なんだったらConvertAll<string, int>も書くべき もしくはArray.ConvertAll<string, int>(b, int.Parse);でもいいはず
>>753 は拡張メソッドで書いたほうが見やすいかな?
var b = a.Split(',').Select(x => int.Parse(x));
int[]で欲しいなら最後にToArray()
回すだけならIEnumerable<int>のまま
ラムダ式の偉大さが如実に現れる問題だな
762 :
752 :2010/11/04(木) 12:20:47
ほ、、、ほう・・・@w@ラムダ式、、まだそこには手をつけてないですorz もしかしてラムダ式にはバルスとかいう全てDeleteしてしまうメソッドも実装しているのかな・・orz あぁ、目がぁ、目が見えない・・・・
>>762 ラムダ式っつーかLINQわかんないならとりあえずこうやって書いとけ
string a = "1,2,5,2,6";
var row = new List<int>();
foreach (var item in a.Split(',')) {
row.Add(int.Parse(item));
}
ArrayListよりも型を指定できるジェネリックな配列(List<T>)を使った方がいろいろ便利
ラムダ式なんか後でいいからその前にジェネリックを勉強しろ
基本的に
>>752 でいいけど今時ArrayListは使わん
var arraylist = new System.Collections.ArrayList(); var list = new List<int>(); arraylist.Add(1); arraylist.Add(2); list.Add(1); list.Add(2); var a = (int)arraylist[0] + (int)arraylist[1]; var b = list[0] + list[1]; さあ、これをみてジェネリックの素晴らしさを体感するのです
おおおおおお!!!!!!
画面キャプチャするのに CopyFromScreenより軽い方法ってあります? 1600x900くらいのサイズを連続でキャプチャしてると 10fpsでも間に合わなかったりするんですけど
768 :
デフォルトの名無しさん :2010/11/04(木) 14:51:45
そりゃ無理だろ 俺もFlashゲームをやる際の補助ツールとして 画面の部分キャプチャをしやすいツール書いたけど C#だと重すぎて部分的にC++で書いたもんな
769 :
767 :2010/11/04(木) 15:00:30
>>768 返信ありがとうございます。
やっぱりC#.NETだけで大画面を高速にキャプチャは無理ですか・・・。
C/C++とかDirectX覚える機会があったらまた頑張ってみます。
CopyFromScreen自体は内部的にBitBlt使ってるから高速だと思う。 多分キャプチャしたビットマップをファイルに出力するのに時間くってるんじゃね?
771 :
767 :2010/11/04(木) 15:58:19
>>770 @画面キャプチャ
AキャプチャしたビットマップをListに出力
B別スレッド1でMemoryStreamのリストにJPEGに変換保存(Encoderクラスは使用してません)、元のビットマップは破棄
C別スレッド2で1秒間隔でMemoryStreamのリストを見に行って、JPEGがあったら保存
(BCをしないとメモリが足りなくなってしまうので)
っていうのをやってたんで、ABCを切ってキャプチャしてみたところ
キャプチャしてない状態で100fps弱
キャプチャしている状態で20fps弱まで出ました
単純計算でキャプチャに40ms、出力に50ms秒強かかってる事になりますね・・・。
画面の一部が変化し次第キャプチャっていう事をやっているんで
その変化を監視するのに10msほどかかってます
C#始めたばかりなので軽い処理にするためには、っていうノウハウが無いので
実際このアルゴリズムが一番速いのかどうかも分かってない状態です・・・
NT 6.xになってからGDIの存在意義が無くなったことを悲しく思う
>>771 画面が変化したことだけを検出したいなら、
byte[] prev; //前回キャプチャした画像
byte[] next; //今回キャプチャした画像
int sum = 0;
for (int i = 0; i < prev.Length; i++)
{
sum += Math.Abs(prev[i] - next[i]);
}
//sum > 0なら変化した
とかやれば速くなるんでない?
後は、監視する領域を極力小さくするか
774 :
773 :2010/11/04(木) 17:50:34
32bitRGB、もしくは画面サイズが4の倍数とかであるなら、 byte[]じゃなくてint[]とかlong[]にコピーして差分取った方が速いかも。 あるいは、unsafeを使うか、あきらめてC/C++を使うか。
775 :
デフォルトの名無しさん :2010/11/04(木) 17:52:14
>>773 描画系のAPIをフックした方が早いんじゃないの?
>>772 それだけCPUの速度が上がったって事でしょ
PCI-Eになったし
大昔あったHDDのPIO転送みたいな考え方
本当はマルチタスクOSでは禁じ手なんだけどね
どうでもいいけどそれってバスマスタかDMAの間違いじゃないのか。 PIOて
>>773 private int GetHashCode(byte[] bytes) {
int r = 0;
for (int y = 0; y < _capSize.Height; y += 4) {
for (int x = (y % 2) * 2; x < _capSize.Width; x += 4) {
int i = (y * _capSize.Width + x) * 3;
r ^= bytes[i] * i + (bytes[i + 1] * x + bytes[i + 2] * y * 256) * 256;
}
}
return r;
}
高速化が目的なら細かい変化はある程度無視するのもありかもね
>>777 バスマスタとDMAはマルチタスクOSでは禁じ手とはならないだろ
780 :
デフォルトの名無しさん :2010/11/05(金) 04:30:38
ボタンなどのコントロールを配置したパネルをいくつ配置したいのですが、 その配置数の数だけ_Click等を用意するのは無駄かと思うのですが、 プログラムからパネルをコピーして利用することなどはできませんか?
「ボタンなどのコントロールを配置したパネル」をユーザーコントロールにして それをいくつか作るのはどうでしょうか。 同じようなボタンが多いならイベントハンドラは同じ物を指定して senderのNameとかで振り分けなんてのも。
投稿する前に文章を読み返すことをおすすめする。 つまり複数のコントロールを1個にまとめたパーツを何個か配置したいんだけど、 コピーして貼り付けるとそれぞれにイベントやらなんやらを割り当てなくちゃいけなくて面倒だから なんかうまい方法教えろってことでおk? もしそうならユーザーコントロールってのを使いなされ。
>senderのNameとかで振り分けなんてのも その手があったか
784 :
767 :2010/11/05(金) 05:05:16
>>773 >>778 返事が遅くなってしまいました。サンプルコードありがとうございます。
やっぱりみなさん凄いですね・・・。この短時間でビットマップの差異を導き出すアルゴリズム組めるなんて
監視にかかる時間をもっと縮められれば、もう少し高いfpsでキャプチャし続けられるかもしれないので
そっちのアルゴリズム責めてみます。
ありがとうございます。
>>784 ためしにちょっとつくってみたんだがなかなか速度上がらんかったわ
まあそれでも少しは効果があったものをあげとくと
別スレッド2をタイマー動作じゃなくて、AutoResetEvent使ってリストに追加したらすぐに処理できるようにする
キャプチャー用の画像やデータを保持するbyte[]なんかは予め用意しておいて作業中に大規模なメモリの割当が発生しないようにする
こんなところ
786 :
767 :2010/11/05(金) 06:34:23
>>785 貴重な情報ありがとうございます!
たまーに一気にメモリが食われる時があったのはいちいち頻繁に呼び出す関数内にローカルで
byte[]とかを定義してたからかもしれません。見落としていました。
ありがとうございます!
787 :
デフォルトの名無しさん :2010/11/05(金) 07:27:24
画像の差分チェックなんてそれこそGPGPUの新しい使い方として やろうとしてることなのにw そんなのをMPUでやるなんて無謀だろw
お前GPGPUって言いたいだけちゃうんかw
それなりに動いてれば十分だろ たかが画面のキャプチャのために激しく環境依存するのか
”GPGPUの新しい使い方なのにMPUでやるなんて無謀” この論理は破綻している
MDBを参照するのはOLE DBで可能なのですが、MDBを作成するには やはりCOMとしてADOXなどを使わなければ難しいのでしょうか?
空のDBをリソースに入れておいてコピーとか
>>781 ,782
すみません ユーザコントロールなど調べてみたのですが
どのように行えばいいのかがわかりませんでした。
解説のページなどはないでしょうか?
794 :
デフォルトの名無しさん :2010/11/05(金) 22:32:59
DAOで。
webclientのDownloadDataでページをダウンロード、その後UTF8でGetStringしたが、ソースが取得できない
byte配列にデータは入っているようなのですが、GetStringすると文字化けしたっぽい文字が2文字ほど
なぜなのでしょうか?
WebClient webClient = new WebClient();
byte[] a=webClient.DownloadData("
http://g.e-hentai.org/g/286017/330e7c37ff/ ");
textBox1.Text = System.Text.Encoding.UTF8.GetString(a);
まぁサイトも晒すとこうなってるんですが。。。
googleとかはちゃんとソースが取れます
797 :
デフォルトの名無しさん :2010/11/06(土) 00:28:06
サイトの文字コードとか確認してる?
BOMが変とか?
>>797 すいません書き忘れました
IEの表示で見てみるとUnicode(UTF-8)でした
UnicodeでGetStringも試しましたが駄目でした
IEと同じオプションあわせたら? というか、DownloadDataだっけ? stringとかなかったか? 余談だけどwcはレスポンスコード吐かないから今ひとつ使いにくい…
(同人誌) [毒ペッパー(しいなかずき)] AIDO 〜性処理人形〜
デリゲートがわかりにくいのは昔はこうだったがと説明されているところ これが最近デリゲートを勉強し出した人には非常にわかりにくい 昔のデリゲートを知っている人なら簡単になったなってことだけど 今からの人は昔のデリゲートのやり方も覚えて今のやり方も覚えなきゃ わからないような説明がされている よく、CやC++ではこうだったがという説明もあるがこれも 初心者にとったら混乱するだけ
例えば、最近の電話の説明をする場合 昔はダイヤル式だったけど、今はボタン式になっているんだよ 便利でしょ? といわれても、電話がそもそも何をするものなのかわからない人にとっては まったく説明になってない 他の場所にいる人と通話するには、電話局に信号を送るために ボタンを押すだけでいいよ と説明してくれた方がわかりやすい
逆に電話が何者かわかっている人に 他の場所にいる人と通話するには、電話局に信号を送るために ボタンを押すだけでいいよ と説明してもちゃんと伝わる 昔話を例えに出して説明するのはやめてほしい
わからないぞおれには
デリケートなゾーンにはデリゲート
またこいつか
バリケードなゾーンには?
育毛剤に脱毛剤
日本語がわからないとは
日本語のデリゲートの説明読んで理解できなかった馬鹿が何か言いたいようです。
煽りたくて仕方が無いようだな 俺みたいな奴にムキになるなんてお前もその程度なんだな
このスレ、ID出してくれよ
Linqの質問です。 whereの条件であるObjectがnullだったら含めたくなく、 null意外だったらObjectをキャストしてメンバーの値で比較したいのですがやり方がわかりません・・・。 whereで先にobject != nullとしても、後の条件のキャストも評価されてNullReferenceExceptionが投げられてしまいます。
sequence.Where(obj => obj != null).Cast<TResult>()
>>803 >デリゲートがわかりにくいのは昔はこうだったがと説明されているところ
たぶん関数ポインタのことだろうな。
関数ポインタがわかる人にとってはそういう説明でデリゲートが何か一発で理解できるからしかたない。
その喩え話で言うと、携帯電話を初めて見る人に、これは電話ですって説明してる感じ。
そもそも関数ポインタってそんなに分かりにくい概念じゃないし、
デリゲートの説明だって関数ポインタがでてくるのは最初の概要だけで
そのあとは知らなくても理解出来るように書いてあるだろ。
知らない単語が出た瞬間に思考停止する類の人間なんだろ。
それともあれか? 2.0から代入するときnewが要らなくなったり、匿名メソッドが追加されたり、 3.0からラムダ式が追加されたことに対して? 確かにそれは紛らわしいけど、C#のソースコードを読むためには全部理解する必要があるしなぁ
>>817 >whereで先にobject != nullとしても、後の条件のキャストも評価されてNullReferenceExceptionが投げられてしまいます。
そんなことってありえるの?
>>818 >>823 ごめんなさい。
null判定の書き方を間違ってました。
先の条件が成立しなければ後のキャストは評価されませんでした。
>>822 全部理解って、2.0以前のデリゲートの表記から全部覚えていかないと
いきなりラムダ式のデリゲート表記は理解できないってこと?
C++でソフト作るにはアセンブラ理解してないと無理みたいな感じ?
>>825 デリゲートの表記は今も昔も1つしかない
delegate int Del(int x);
デリゲートとして扱えるものは
名前付きメソッドと匿名メソッドとラムダ式
int method (int x){ return x + 1; }
Del d1 = method;
Del d2 = delegate(int x) { return x + 1; };
Del d3 = x => x + 1;
2.0からは
Del d = new Del(someMethod);
じゃなくて
Del d = someMethod;
ってかけるようになった
まとめるとこれだけ
ラムダ式があれば匿名メソッドは必要ないかもしれないが
どの書き方もいまだに有効で、サンプルコードを読む際には覚えておく必要がある
あほなの?
>>825 前の時も思ったけどなんもわかってないくせに適当なこと言うのやめろよ
自分じゃまともなこと書いてるつもりかもしれないけど的外れ過ぎてまじ笑えない
830 :
デフォルトの名無しさん :2010/11/06(土) 08:37:52
label1からlabel10までの10個のラベルがあるのですが、 このラベルの値(label.Text)を配列に代入したいと考えています。 配列に代入するにはどのようなコードを書けばいいでしょうか?
>>796 System.Net.WebClient wc = new System.Net.WebClient();
wc.Encoding = Encoding.UTF8;
832 :
デフォルトの名無しさん :2010/11/06(土) 08:39:26
label1〜10はデザイナーで作るの?
string[] texts = new string[10]; texts[0] = label1.text; texts[1] = label2.text; texts[2] = label3.text; ... こういう事じゃないの?
まぁ長生きしろな
ラベル作成時にnameに固有冠を付けておいてコントロールからnameを引っ張ってきて マッチ判別で配列に放り込めばできるだろうけど、そういう書き方自体がどうなのかと思う。
labelを配列にしたひw そこだけコードで書いちゃえyp!
labelが大量にあるなら動的に追加、そうでないからlabelのコントロール群を手書きで作るのが良いかも
public struct hoge { public string test; } public hoge[] foo; foo = new hoge[7]; for ( int i = 0; i <= 10; i++ ) { foo[i] = new hoge(); } このような構造体を作成し、xmlにシリアライズして保存すると <hoge> <test>var</test> </hoge> <hoge> <test>baz</test> </hoge> この用に保存されています。 これをデシリアライズして読み込みを行おうとすると {"XML ドキュメント (2,2) でエラーが発生しました。"} というエラーが起きてしまいます。 これは、同じ名前のプロパティが複数あるのが原因になるのでしょうか? また、その場合はどのようにすればよいでしょうか?
842 :
デフォルトの名無しさん :2010/11/06(土) 09:34:21
XMLの読み書きは結構柔軟に読んでくれるだけどなあ・・・ そんな部分的じゃなく全ソース公開できない?
たしかにそれだけじゃ判断できんな どのテクノロジを使ってシリアライズしたかぐらいは書いてくれ
>>842 XMLを原因と考えず他の部分も調べてみます。
全ソースはそこそこおおきいので、もうすこし調べて動かなければ張らせていただきます。
>>843 using System.Xml.Serialization;
を利用しています。
シリアライズする際の型が間違っておりました。 御手数をおかけいたしました
>>847 でもそれだとパネルとかに配置されたラベルは拾えないよな
849 :
デフォルトの名無しさん :2010/11/06(土) 11:18:38
親コントロールから検索かけることもできたはずだけど まあどうせならFormの起動の段階で動的にボタンを作って 管理した方がいいだろうね なんせ自分は何があるか知ってるんだし
>動的にボタンを作って 動的にラベルを作って
FlowLayoutPanelですが、微妙に右にちょっとずれるんですが、 普通のパネルのようにぴたっとくっつける方法ってありますか?
動的にラベルを作るって、デザイナー使わずに手打ちするってこと? そんなことしたらレイアウトの修正が激しく面倒なことになりそうだが
853 :
デフォルトの名無しさん :2010/11/06(土) 12:28:13
854 :
デフォルトの名無しさん :2010/11/06(土) 12:29:25
>>852 そうか?
labelだからある程度規則的に並べるだろうし
規則性がないのなら座標用のデータを配列にでもいれて
動的にlabalを作るときにそれを代入すればいいだけちゃうの?
>>851 どっかでこの関数を呼べばぴったりくっつくよ
private void PittariLayout(FlowLayoutPanel panel) {
foreach (Control item in panel.Controls) {
item.Margin = new Padding(0);
}
}
ぴったりれいあうと
>>854 labelは他のコントロールの説明のために配置されることが多いよね
そうしたときに対象のコントロールとラベルを別々に管理しなきゃいけないのはめんどいと思うよ。
例えばテキストボックスの左側にラベルが置いてあって、このラベルの文字列を変える場合、
テキストボックスの座標はどうやって計算する?
WPFでGridとGridColumnでautoでも使おうかな
859 :
デフォルトの名無しさん :2010/11/06(土) 13:08:41
>>857 その辺は自分で考えろよw
そんなマルチに面倒みきれねーよw
>>859 あ、別に俺は質問者じゃないよ
ただデザイナ使わずに配置するの推奨みたいな書き方してたから絡んでみただけです
>>860 デザイナーで楽したいか
ラベルの列挙も楽したいか
じゃないの?
>>858 WPFならDataTemplateだろ
コレクションを置くコード必要なし
ラベルをパネル内の中央に寄せたいんですが、そういうプロパティってあるんでしょうか?
>>864 水平方向のAnchorを設定しなきゃOK
label1.Dock = System.Windows.Forms.DockStyle.Fill; label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; label1.AutoSize = false; これで中央に配置されるよ
>>861 デザイナーで楽して、
プログラムで列挙する。
これが一番
列挙用の関数なんてすぐ作れるし
Win32APIを呼び出すときの型の宣言なんですけど、 MMRESULTに対応するC#の型は何になるのでしょうか? 私の見てるページがよく使われる型しか載ってないようなのでわかりませんでした。 あと、この型変換?専門用語でなんていうんですか? 用語知らないとMSDNで探せなかったので。
869 :
796 :2010/11/06(土) 15:05:19
どうもできないんでとりあえずは
>>802 で代用します
お騒がせしてすいませんでした
typedef 型名 でググってけば型がなんだろうが大元が見つかるよ マーシャリング
871 :
デフォルトの名無しさん :2010/11/06(土) 15:22:21
MDIの子フォームをブラウザにしたいんだけど、 ネットみててクリックすると自動的に新しいウィンドウが開いてそれに表示される見たいのって デフォルトでそうなる?
>>826 ありがとうございます。やっぱり基礎から全部覚えなきゃいけないのか。
ラムダ式のデリゲートいくらみても理解できないわけだ
コードが短くなると
呼び出し側と呼び出される側という考え方って必要なの?って思えてくる
結局メソッドを変数みたいに扱うだけってことらしいが
じゃあ、直接呼び出さないのはなぜ?って考えた場合
親子関係にある子クラスから親クラスのメソッドを実行させるために必要だったんですね
でも、まんま親クラスを子クラスにプロパティで渡せばいいだけに思えるけど
その方が 親クラス.method()という感じになってどのクラスのどのメソッドを呼び出しているかわかりやすいし
でも、これだと長くなるからってことでデリゲートなんでしょ?
でも、直接呼び出すようにしたら、親クラスのメソッド名や内容を変更した場合 子クラスの呼び出し方も変えなくてはいけないから やっぱりデリゲートを中継したほうが、クラス間の依存関係が弱まって 変更しやすくなるからいいのか・・・
Threadクラスのコンストラクタが得体の知れない特定の型を引数に取るようになってたら困るだろ?
876 :
868 :2010/11/06(土) 16:16:31
>>870 >>872 ありがとうございます・・・・が、そのキーワードでぐぐって出てきたページや、
紹介のページみましたが・・・理解できませんでしたorz
[DllImport("winmm.dll")]
private extern static・・・
てパターンじゃないんですね?また出直します。
>>876 ちゃんと見ろ。public static enum MMRESULT : uintってあるだろ。
879 :
868 :2010/11/06(土) 16:30:37
でわ、お言葉に甘えて、
MMRESULT midiInGetDevCaps(
UINT uDeviceID,
LPMIDIINCAPS lpMidiInCaps,
UINT cbMidiInCaps
);
というAPIの関数をC#で使いたいのですが、2つ解らないところがあって、
1つは最初の質問の型宣言。
もうひとつは、lpMidiInCapsを格納する構造体をどうすればいいのか?
ただの変数でいいのか?ってところで躓いてます。
>>878 それが何を言ってるのか解らない。
なんでwin32apiってわざわざ調べて宣言しないと使えないようになってんの? ライブラリで用意しといてくれればいいのに
ほとんどはラップされて何らかのクラスで提供されてるよ されてないのは言語的に相性が悪いかニッチな奴
>>882 フリーのMIDI関係のクラスって、何処かにあるんでしょうか?
>>884 おお、あるんだなぁ!ありがとうございます。
Dockプロパティをセットすると、Controlls..addをしたコントロールが上に着ちゃうんだけど 下にする方法ってある?
Dock.Topね
Dock.Bottom
コントロールをまとめて扱いたいなら。 そういう機能を持つIExtenderProvider実装コンポーネントにするのがおすすめ。
>>882 ふじゅううううううううううううううううううううううう
>>881 「エクスプローラと同じ挙動のフォルダツリー作って」とか簡単に言われると泣きたくなる。
そういうときのためC++/CLIがあるんだろうけどさ。
895 :
868 :2010/11/07(日) 10:14:32
>>880 御礼が遅くなりました。ありがとうございます。
引数で構造体を渡すDllは、構造体の宣言も必要だから複雑なんですね・・・
一晩色々勉強しましたがわかりませんでした。orz
もっと勉強してきます。
ところでPINVOKEのアドインソフトはVS2010EEでも使えるのでしょうか?
トップページの記述では2005までしか対応してないようですが。
理論が解らなくてもツールでプログラムさえ組めたらいいかなとも思うので・・・(^^;;
>>895 複雑とか言うなアホ。
めんどくせえってだけだろ。
そもそもEEでアドイン使えるの?
使えないな コードジェネレータとか使いたいのに使えない
2010はExpressEditionは無くなったの?
あるよ
あった でもultimateにしよう
new { ファイル = "エロエロ女子高生.avi", パス = "D:\\エットなフォルダ" } これって略されているんですよね? これは略さないとどういう感じになるんですか? 文法というか構文というのかそれがわからないです
厳密に同じものは書けないはず
入力された値が数値以外の時メッセージボックスを表示させたいんですがどういうコードを書けばいいんでしょうか
double d; if(Double.TryParse("数値か判定する文字列",out d)){ // メッセージ }
それ数値の時じゃね?
>>902 それは匿名型の話だね
そういう記述をするとまずコンパイラが自動的に次のようなクラスを生成する
internal sealed class _AnonymouseType0<Tファイル, Tパス> {
private readonly Tファイル ファイル_field;
private readonly Tパス パス_field;
public _AnonymouseType0(Tファイル ファイル, Tパス パス){
this.ファイル_field = ファイル;
this.パス_field = パス;
}
public Tファイル ファイル{ get{ return this.ファイル_field; } }
public Tパス パス{ get{ return this.パス_field; } }
}
そしてnew { ファイル = "aaa", パス = "bbb" } は
new _AnonymouseType0<string, string>("aaa", "bbb");
に置換される
つまり匿名型は変更不可能なクラスの定義とコンストラクタの呼び出しを代行してくれるってわけ
>>905 ifの条件に否定付け忘れてる
ありがとうございました
自作の短いプログラムがアンチウィルスにトロイだって言われるんだけど… どこがウィルスっぽいとかわかる? static void Main(string[] args) { string str; bool flg = false; do { flg = false; foreach (Process p in Process.GetProcesses()) { if (p.ProcessName=="dv") { SetThreadExecutionState(ExecutionState.SystemRequired |ExecutionState.DisplayRequired | ExecutionState.Continuous); flg = true; Console.WriteLine(p.ProcessName); break; } } if (flg == false) { SetThreadExecutionState(ExecutionState.Continuous); Console.WriteLine("dv not found"); } str = Console.ReadLine(); } while (str != "q"); } [DllImport("kernel32.dll")] extern static ExecutionState SetThreadExecutionState(ExecutionState esFlags);
public enum ExecutionState : uint { Null = 0, SystemRequired = 1, DisplayRequired = 2, Continuous = 0x80000000, }
>>910 ウィルス対策ソフトは端的にバイナリのパターンを見てるだけで、
何をやってるかなんて意味的な解析はしてないと思うから、
ソースの一部なんか貼っても無意味では?
ヒューリスティックス評価無視ですか 今じゃ搭載してないウィルス対策ソフト探すほうが至難だけど
何も問題ないように見える
そのソフトの会社に聞いてみた方が早いんでね?
うちの AntiVir もお怒りだ ちなみに、 >[DllImport("kernel32.dll")] >extern static bool Beep(uint dwFreq, uint dwDuration); とか >[DllImport("user32.dll")] >extern static int MessageBeep(uint uType); を追加してやったら(呼び出しは無し)、ビルドも実行も問題なく出来た
質問です。 comboBoxをItemの表示・選択専用にして、入力できないようにするプロパティってどれですか?
VS2010EEで質問なんですけど、 コントロールをダブルクリックするとプリセットされたイベントハンドラが自動生成されますが、 プリセット以外のイベントをハンドラにしたいときは、手書き修正しかないのでしょうか?
ComboBoxStyle.DropDownList
プロパティウィンドウでイベント表示しろ
元気があってよろしい。 月曜日が来た・・・。
>>916 どうもです。
こっちのアンチウイルスもAntiVirなんですが…誤爆かな?
ところでBeepを追加したらいいというのはどういう考えで出てきたものなのか
非常に興味があるんですが。
バイナリを手っ取り早く変えるって発想だと思う 今日からまた学校か……
>>924 ちげーよw
kernel32.dll使うと大抵のセキュリティソフトは反応する
ウィルスバスター2011反応なし(´・ω・`)ショボーン 喜んでいいのかどうなのか
クラックdllでビープ音がなるのはそのためか
textboxやrichtextboxに"\"ではなくてバックスラッシュを入力できるように したいのですがどうすればいいですか?
そこだけフォントをsystemに変えるとか?
文字コードは同じだもんね
両方入れたいときは? キーボードの入力で右上のと右下のって区別できるんだっけ?
932 :
928 :2010/11/08(月) 10:28:32
あれ? Font fnt = new Font("System",11,FontStyle.Regular); textBox1.Font = fnt; にしてもなぜか"\"になってしまいます。
Consolas
>>933 あ、有り難うございます。お騒がせしました。
一応、UnicodeではU+00A5に円記号が割り振られてるけどな 書式指定でc指定したらこっちが使われるようになってるはず
C#で聞くことではないのですが、現在開発環境がC#なので参考に教えてください。 現在、フォーム上のボタンを押すと処理が実行されるのですが、その際にテキストボックスや その他のフォーム上に入力がされているか確認を取った後に実行するように入力チェックを 行っております。 (Ex) if(string.IsNullOrEmpty(this.TextBox.Text)) { MessageBox.Show("フォームに入力がされていません"); this.Button.Enabled = true; } などのようにしています。メッセージの違いは3パターンほどでそれ以外の処理(ボタンのEnabledをtrueにする) は共通しております。それをまとめるには別のメソッドにするか、例外として投げて処理するかを考えております。 もし、実行ボタン押下時の入力チェックをする場合ほかにどのような処理方法があるのでしょうか? よろしくお願い致します。
分け方なんて色々あるから、とりあえず一つ GUIにアプリケーションの知識を入れ込まないようにするなら、 チェックする機能とチェック後にGUIの状態を変える機能に分けちゃう。 たとえば、 ・GUIから入力の正誤をチェックするためのイベント ・GUIの状態を初期化(または必要な部分だけ変える)ためのメソッド GUIは高度な描画機械って割り切っちゃって、その機械を扱う別の機械を作る
モデルがGUIを使っちゃダメでしょ。逆。 GUIの方からモデルにアクセスしてモデルの状態を変更したり モデルの状態が変更された時のイベントを受け取ったりするんだよ
GUIとモデルを分けるのって一見2度手間みたいに思うけど モデル側からするとデータを手元に常に置けるのは安心だしわかり易いし GUIが何をするかなんて関係ないって考えで作ると後々楽なんだよね とりあえず、コンソールアプリを作ることがおすすめ
これは笑った まずお前の実力を示すことかけよ
>>940 これは笑った
まずお前の実力を示すことかけよ
>>941 コンソールアプリ作ってきたら示してやるよ
>>938 動けばいいんでないの?
MVCでもPACでも
> GUIの方からモデルにアクセスしてモデルの状態を変更
これが GUIから入力の正誤をチェックするためのイベント
> モデルの状態が変更された時のイベントを受け取ったりする
GUIにデータの扱い方を入れ始めるとぐちゃぐちゃになるから嫌だな
時々やっちゃうけど。
データバインドの様な広く一般的に使われる(標準ライブラリに入っている)方法なら許されるけど、
オレオレ仕様のデータバインド()は許されない。
まあ動けばいいんだから、動くように書けばいいんだよね。
ちょっと気になったんだけど >例外として投げて処理するか これってMSDNかなんかでやるなって書いてあった気がする
946 :
デフォルトの名無しさん :2010/11/09(火) 10:46:29
ArduinoとC#と通信を行っています。 SerialPortコンポーネントを用いてArduinoボードからのデータを DataReceivedイベントを用いて受信しています。 データの受信は問題なく行われているのですが、 データ受信に大きく遅延が発生してしまいます。 Arduinoボードの可変抵抗の値をC#側に送っているのですが、 可変抵抗をひねってから、C#側に受信されるまで、数秒掛ってしまいます。 おそらくデータ受信が追い付いていないのが原因かと思いますが、 どのような対策を行えばよろしいでしょうか? 何かアドバイスなどありましたら、ご教授していただけると幸いです。 よろしくお願いいたします。
ボード側のデータ送信が追いついてない可能性はない? 確かに数秒ってのは異常だと思うんだけど 1バイトでイベント発生するようにしてもやっぱ1文字目の受信まで数秒かかったりする?
List<int> 型のリストをstring[]に変換するにはどのようにすればよいでしょうか? var test = new List<int>(); string strJoin =string.Join(",",test.To.String().ToArray()); ではうまくいかないので・・・;w;
949 :
デフォルトの名無しさん :2010/11/09(火) 12:13:42
Listの総数をcountだっけ?で調べてstring[]を作成 ループ作ってListの項目を先頭から見ていってstring[]へセットしていく
>>948 test.Select(i=>i.ToString()).ToArray();
てことかな
>>949 自分もその方法を思いついたのですが、ほかになにか用意されていないかと思いまして・・・
ConvertAllなるものを使えばよさげですが、、いまいち使い方が・・・orz
>>950 それで試してみましたが、Selectっていうのがありませんでしたorz
書式指定なしのToString()でよければ単純にこれでできそうな。 string strJoin =string.Join(",",test);
string.Join の第二引数がstring[]なのでList<int>だと通らないです;w;
>>953 Join<T>(String, IEnumerable<T>)が使えるのは.NET4からだった
ループ回すとか無いわ Enumerable拡張メソッド使おうぜ
こちらの環境は.NET2までなので使えないですね;w;
>>949 さんの考えを踏襲すると・・・
var test1 = new List<int>;
var test = new List<string>();
foreach(var i in test1)
{
test.Add(i.ToString());
}
Pro.sortIndex_string = string.Join(",",test.ToArray());
になるのかなぁ・・?
>>951 >それで試してみましたが、Selectっていうのがありませんでしたorz
SelectやToArray()を使う場合は
using System.Linq;
が必要。それでコンパイルが通るはずだけど。
958 :
デフォルトの名無しさん :2010/11/09(火) 12:31:40
>>956 えw
ループ使うにしてもそれはないわw
むむむ@w@
>>956 さん
もしループしようならどの様にしますか?
後学のためにサンプルお願いいたします><
>>957 さっそく、してみます><また報告します
.NETは3.5でなく2.0でいいの?それだとLinqも使えないね。
LINQはMSDNだと3.5からでしたorz
2.0なら何でvarとか使ってんの よくバージョン確認したほうがいいんじゃね
あと、質問ですが、ConvertAllではできないのでしょうか? 使い方がMSDNみてもよくわからないので・・・orz もし参考になるサイトなどありましたらよろしくおねがいいたします。
ん、2.0だとvar使えませんか? 使えるので使っているのですが・・・
値を変換するのは全部SelectメソッドでOK
C#2.0/.NET 2.0の範囲なら String.Join(",", test.ConvertAll<string>(delegate(int _) { return _.ToString(); }).ToArray()); かな
>>966 C#3.0を使えるなら
String.Join(",", test.ConvertAll(_ => _.ToString()).ToArray());
>>967 通りました♪ありがとうございます。
>>966 はむずかしそうなので、今度検証してみます;w;
VSの2008か2010で対象フレームワークを.NET2.0にして使ってるのか。
>>967 横からだけど、_ってどういう役目があるんだっけ?
C# アンダースコアでググッても引っかからない
ただの変数。 他の言語でラムダ式の引数に使われるので、その習慣を持ち込んだだけ。
なるほど
横道それるけど、例えばscalaだと _ を使えば2段目のように短縮表記できる。 f.filter(i => i < 5) f.filter(_ < 5)
ぱっと見てわからないとかまたC時代の悪習をやるのかよ・・・
ラムダ式は一般的だぞ
>>973 scalaは_に意味を持たせているわけね。
記号を使った記法はググりにくいから困るw
ループを露に書く方がよっぽどパッと見てわからないと思うけどな 低レベルになるほどわかりやすいんだったら制御文はbrfalse(flag, label)だけでいいことになる
ラムダ式での_って引数としてとるけど使わない場合に書くやつだと思ってた scalaからの流れだったんだ LINQは.NET3.5からだけどラムダ式とか型推論はC#3.0からだから使えるんだ
Perlも$_が暗黙の変数だな
そのうち、メソッドやプロパティなどの省略形を定義する構文が出そうだな。
そうすりゃ、
>>973 を、
f.<5
まで省略できる可能性がある。
ラムダ式なんてやめてほしいわ 女子高生の略語みたい ナウいとか思っちゃってるの?
>>982 λ計算が考案されたのは1930年代、現実のプログラミング言語(Lisp)の形で
導入されたのは1950年代
無名関数やらクロージャやらは、要するに大昔からあるもので、
今だってPerlだのJavaScriptだのRubyだのPythonだの、そこらの言語で
当たり前に使えるごくごくありふれた代物だよ
今更ナウいも糞もないだろう
型宣言しっかりして頭ガチガチにされたのに 今更ラムダ思考に切り替えられるわけないだろ
986 :
946 :2010/11/09(火) 18:51:13
>947 TeraTermなどのソフトで通信した場合は、リアルタイムに値が変化しています。 C#のSerialPortを用いるとデータが送られてくるまで時間がかかってしまいます。 デフォルト設定でSerialPortコンポーネントを使っています。 初回のデータ取得は問題ないのですが、 見た感じ、データがどんどん溜まって遅延が発生しているようにも見えます。
このアンチラムダ野郎はWPFスレのあいつ
>>986 SerialPortは何度も使ってるけど、人間が目視で分かるほどの遅延はありえない。
君のコードの側の問題だろうね。
それと、どんなデータを受信してるのか知らないけど、
普通はDataReceivedイベントなんか使わない。
ちょっと考えれば分かると思うけど、そんなの使ったらシステムが受信データを
バッファリングしてくれてる意味が台無しじゃん。
>>985 あれか、わざわざ厳密な型名と一緒に宣言しないと型がわからない人なんだよ
次建ててくるよ
と意気込んでみたものの規制されてたでござる 誰か頼む
たまに、ラムダ、ランダム、ガンダム、やんばダム、ランバラル、の区別がつかない時がある。
ラベンダー
ランバダ、ダイバダッダ、段田男
ガンダムシードとランダムシード
>>979 F#では_は使わないに近い感じだし、
.NET系では_は「使わない場合」とすべきだと思うねえ
Scalaだと暗黙な引数になるけどさ
F#ではパターンマッチングのワイルドカードで使ってるからってのもあるね。 あと演算子が必ず先頭に来るから、たいていはカリー化で対応できる。
2ゲットずさー
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。