ふらっとC#,C♯,C#(初心者用) Part77
CやC++のような関数ポインタ使った関数の実行コードを、 C#の匿名メソッド→delegate→ラムダ式にだんだん置き換えていき、 コードがどんどん短くなっていくのを記録していた動画があったはずなんだが、見つからない…。 誰か上記のような動画知ってる人いませんか?
TabControlコントロール下のタブをD&Dで動かせるようにしたいんですが、どのようにすればできるでしょうか?
>>4 なんだろ、ありそうなのは、Tech EdのBOFか、INETA コミュニティ Open Dayとかかな。
Form1のtabControlのTabPageのテキストをXMLシリアライザで保存しようと思ったんですが XMLシリアライザでForm1クラスのオブジェクトを指定したら、InvalidOperationExceptionを吐いてしまいました これは余計なものが入っているからエラーが出るんですか? どのようにすればtabPageのテキストを保存することができるでしょうか・・・?
8 :
デフォルトの名無しさん :2011/07/09(土) 11:01:35.19
>>7 標準コントロールはたぶん全部できない
XMLシリアライザで保存する際に使うクラスは全部がパブリックじゃないとダメなんじゃなかったっけ?
なのでやるとすれば保存用の専用クラスを作って、保存の前に値をコピーしてから保存
戻す際はその逆を行う
質問です。 System.IO.Path.GetTempPath() で得られるパスは完全に自由に使っても 大丈夫なパスということでいいんですよね?
完全に自由に使う という意味がイマイチわからないけど ユーザーのテンポラリフォルダだからファイル作成/削除はしていいんじゃない 自分が作ったファイル以外をいじるのはお行儀よくないけど
>>10 深い意味は無いです。
安心して使います。ありがとうございました。
>>8 ありがとうございます。パブリック限定だったら使えないです・・・
タブのインスタンスをprivateなListクラスで管理していて、プロパティでインスタンス毎渡してしまってるので
なんかいい方法ないですか?
>>12 >>8 の言うように専用のクラスを作るか、シリアライズやめて自分で読み書き
コレクションの状態を保存するんじゃなくて、コレクションの背後にあるデータを保存する
C#って何で生まれたんですか?
C#のおとーさんとおかーさんが布団の上で魚のように跳ね回ったから
J++やMS謹製JAVAにケチつけられたから
契約書のカンマの位置が問題だったのだ 結果的にC#が誕生して良かったが
そんなフェチるような動画なのかな.... 一辺見たらもう十分じゃないか? いや人の趣味にケチつけるつもりは別にないけどさ
どこの誤爆だ
ほんと、今のJavaの惨状を見ると、 当時のSUNがあほなおかげでC#が生まれてほんとよかった。
以前ここで質問したものです フォームに円を書いて、それをクリックしたらイベントを発生するサンプルを頂いたのですが そのコードをまたみたいのですがどなたかご存知の方いませんか?
みみずん検索などで過去ログ探してください
25 :
23 :2011/07/10(日) 11:01:38.16
書きもれました 円の部分のみクリックした場合にイベントが発生する質問です 過去スレを消してしまいコードがみれません
過去ログな 過去のスレ消せるなら俺も消したい
27 :
23 :2011/07/10(日) 11:04:50.17
すいません bin\Debugのところにコードとっといてありました お騒がせしました
>>28 Oracleに潰されかけてるパクロイドがなんだって?
>>13 ありがとうございます。XMLシリアライザを使うのやめて自分でファイル書きだすことにしました
>>5 も自分なんですが、やっぱりTabControl継承して自分でそれを実装したクラス作るしか無いですか?
31 :
デフォルトの名無しさん :2011/07/10(日) 13:12:20.68
>>30 多分TabContro継承じゃなくて、panelからフルスクラッチになるんじゃ
CodeProjectでも漁って似たような物探した方が速いと思うよ
TabControlをAllowDropにして、TabPageのMouseDownでDoDragDropするくらいじゃねえの タブとタブの間にターゲットを示す線引いたりとかは中を弄らないと駄目だろうけど
>>28 何?
GoogleにJavaがらみの係争に勝って欲しいってこと?
それおtも、AndroidはJavaで書いたら遅くてやってらんねーぜってこと?
そんな一行レス馬鹿に質問したって聞くに値する回答が返って来たことなんかないだろ つ とかやってる馬鹿と一緒で根拠も自信もないのに口だけ挟みたい卑しい野郎なんだか
どうしたの突然 癇に障った?
APIスレにメトロノームが来てるぞ
そう(無関心)
39 :
デフォルトの名無しさん :2011/07/10(日) 23:55:48.99
MyClass my1 = new MyClass; MyClass my2; my2 = my1; とするとmy1はmy2への参照になりますよね? (my1の変更がmy2にも影響する) 単純にコピーして、それぞれ独立にするにはどうしたらいいでしょうか?
40 :
デフォルトの名無しさん :2011/07/10(日) 23:57:00.17
クローン
どのくらいのコピーかによる インスタンスが独立していればいいのか インスタンスの所持するフィールドも独立していなければならないのか インスタンスの所持するフィールドが所持するフィールドも独立していなければならないのか
「C# ディープコピー」でググレ あと参照・・・ま、いっか
やりたいのはディープコピーでした。調べてみます。
>>42 すいません。気になって0721できません。教えてください
変更可能な他のクラスのオブジェクトへの参照を持ってないなら public MyClass DeepClone() { return MemberwiseClone(); } だけでおk そうでない場合は参照先も複製する必要がある(できないかも) ディープコピーで調べるとIClonableを実装するサンプルが出てくると思うけど 今は事実上Obsoleteなので実装しないように
ディープコピー用のメソッドを用意するよりも、コンストラクタに 自身のインスタンスを渡してそれを元に初期化するようにしたほうがいいかも いわゆるコピーコンストラクタ メソッドにしてしまうと派生クラス作るときに必ずそのメソッドを オーバーライドしてディープコピーをサポートしないといけなくなってしまう MSも最近はICloneableやめてそっちに方針転換した(XElementなど)
めんどくせぇからメモリストリームにコピって元に復元すればいいんだよwww
48 :
デフォルトの名無しさん :2011/07/11(月) 12:10:00.02
>>47 それだと全部publicにしないとできないよね
>>45 それもうちとkwsk教えてくださいな。
概念で説明されても「イミフ・・・orz」なのが初心者。
コピーコンストラクタでぐぐったけどC++の用語ですか?
C++全然分からないもんで。
>いわゆるコピーコンストラクタ という用法が間違ってるんじゃね
間違ってても分からないのが初心者なもんで
class MyClass { public int A { get; set; } public string B { get; set; } public object C { get; set; } public MyClass() { } public MyClass(MyClass instance) { A = instance.A; B = instance.B; C = instance.C; } } ごく単純にこういう話だろ この方法は子供以下の参照型フィールドをCloneする方法がないけど Cloneはデリケートだから許可されてるオブジェクト以外ではしてはいけないと考えるべきか
>>53 へぇ、そういう自分自身を引数にしたコンストラクタを追加するんだ。
ちょっとまだよく分からないから、実験してくる。
とりあえず、ありがとうございました。
CのObjectは参照コピーになるわけで・・・
で?
>>53 をClone方式でコピーするとすると
public virtual MyClass Clone() { MyClass obj = new MyClass(); obj.A = this.A; 略; return obj; }
こんな感じのメソッドを定義する。これだけなら特に問題はないが、問題はMyClassを継承したクラス(MyClass2)を作ったとき。
MyClass2 obj = new MyClass2(); MyClass2 clone = (MyClass2)obj.Clone();
これはエラーになる。obj.CloneはMyClassのインスタンスを返すからMyClass2にキャストできない。
期待する動作にするためにはMyClass2はMyClass1をオーバーライドする必要がある。で、
public override MyClass Clone { MyClass2 obj = (MyClass2)base.Clone(); obj.D = this.D/*追加したプロパティ*/; return obj; }
こうしたいんだけど、上と同じ理由でエラーになる。なのでMyClass2のCloneは
MyClassが持ってるデータのコピーもMyClassに頼らず自分で実装しないといけない。
そんなことをしてしまうと、後でMyClassにプロパティが追加されたりしたときに破綻する。
コンストラクタを使うならこんなことにはならない。
58 :
57 :2011/07/11(月) 22:01:15.81
訂正 MyClass2はMyClass1をオーバーライドする必要がある →MyClass2はMyClassのCloneメソッドをオーバーライドする必要がある
その問題があるから、CloneではnewせずにMemberwiseCloneで 浅いコピーのオブジェクトを作るのが常套。 そのあと深いコピーの必要なメンバーを個別にコピーしてゆく。
ごめん正直延々ちょっとズレた話をしているようにしか思えん。 なんかCの配列とポインタの区別がついてない人に、その一番肝心な区別の理解を スキップしたまま一生懸命配列のコピー方法を説明してる感じ。
ある自作のクラスでNullを代入したときの処理を実装するにはどうすればよいでしょうか C++で代入演算子のオーバーロードのようなことをしたい感じです
できません 昔のVBみたいにnull代入でオブジェクト破棄みたいなことがしたいなら IDisposable実装してusing
63 :
デフォルトの名無しさん :2011/07/11(月) 23:38:16.89
MyClass my_cls_obj = new MyClass(); List<MyClass> list = new List<MyClass>(); for (int i = 0; i < 20; i++) { my_cls_obj.value = i; list.Add(my_cls_obj); my_cls_obj = new MyClass(); } という処理を書いた場合、listの各要素のvalueには異なって値が入りますが、 なぜですか? my_cls_obj = new MyClass(); を書かない場合は、同じ値になります。 my_cls_obj = new MyClass();をした時どういったことが起きているのですか?
ポインタが分かればわかるよ。 とあるmy_cls_objが参照を保持する変数なんだよ。 List<MyClass>も参照の配列を保持するオブジェクトなんだよ。 途中でnewを挟まないと参照で保持してるものをいじってるだけだから複数の参照が指してる、インスタンスのひとつが変更される。 あ”ずい”・・・。
65 :
30 :2011/07/12(火) 01:03:04.82
>>31 なるほど。でもクラス継承というのをほとんどやってなかったので
TabControlクラス継承して、自分で新しいUserTabControlクラスを作って実装することってかなり難しいですか?
66 :
デフォルトの名無しさん :2011/07/12(火) 01:38:24.67
以下のようなイベントをクラス内で定義してあります。 public delegate void DataRecievedHandler(object sender, DataRecieveEventArgs e); public event DataRecievedHandler DataRecieved; protected virtual void OnDataRecieved(DataRecieveEventArgs e) { if (DataRecieved != null) { DataRecieved(this, e); } } このクラスはDisposeを実装していています。 Disposeが呼ばれるときに DataRecievedをクリアしたりNULLにしたりする処理を 書かなくてもよいものなのでしょうか? よろしくお願いします。 基本使う側がイベントの関連付けを切るものだとおもってはいるので今のところ何もやってはいませんが・・・
無問題
69 :
デフォルトの名無しさん :2011/07/12(火) 14:29:45.54
71 :
デフォルトの名無しさん :2011/07/12(火) 14:47:15.77
>>69 バージョンアップで値を引き継がない欠陥があるから
フォームの位置記憶程度にしか使っていないからどうでも良かったりする
>>71 バージョンアップでも値引き継いだと思うけど?4.0でクリックワンスだけど。
フォントにもう・・・
Shownイベントにすると一瞬表示されるけど消えるね まあbmpを作ってそこへ描画したあとpictureBoxへ渡したほうが早そう
78 :
デフォルトの名無しさん :2011/07/12(火) 18:54:54.72
Uを押した時にメッセージボックスを出して、離した時にもメッセージボックスをだしたいです。 KeyUpのほうが動きません。 KeyDownのほうは動きます。 KeyUpもKeyDownもVC#の右下のフォームのプロパティでイベントの項目からダブルクリックで登録してあります こうやっても動かないという事でしょうか? private void listBox1_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyData) { case Keys.U: MessageBox.Show("押しました"); break; default: break; } } private void Form1_KeyUp(object sender, KeyEventArgs e) { switch (e.KeyData) { case Keys.U: MessageBox.Show("離しました"); break; default: break; } }
>>74-76 ありがとうございます
コードをじっくり読んで勉強したいと思います
80 :
デフォルトの名無しさん :2011/07/12(火) 19:12:56.19
>>78 おい
片方はListBoxだけどもう一つはFormになってるぞ
それでいいのか?
ご指摘ありがとうございます。 2ちゃんにコピペするときにみすりました。 listBox1のではなくForm1です。 private void Form1_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyData) { case Keys.U: MessageBox.Show("押しました"); break; default: break; } } private void Form1_KeyUp(object sender, KeyEventArgs e) { switch (e.KeyData) { case Keys.U: MessageBox.Show("離しました"); break; default: break; } }
自己解決しました。 KeyPreviewをtrueにしたら動きました。 でもfalseの時はKeyDownは動いたのに何故KeyUpだけ動かないのか不思議です。
WindowsMediaPlayer wmp = new WindowsMediaPlayer(); double a = wmp.currentMedia.duration; MessageBox.Show(a.ToString()); 動画の再生時間を取得したいのですが エラー「オブジェクト参照がオブジェクト インスタンスに設定されていません。」と出て強制終了します どなたかご教示お願いいたします
落ち着いて考えようよ 対象の動画を指定しないで何がしたいの?
動画については動画再生後に実行しています MessageBox.Show(this.axWindowsMediaPlayer1.currentMedia.durationString);と書いてもダメでした
自己解決しました イベントでしっかり再生中かどうか判断したら取れました
その段階ではcurrentMediaがまだ設定されてないんだろうな としか分からん
>>71 一応、ApplicationSettingsBase.Upgrade()てのがあるんだから、欠陥ではないだろうよ。
listboxにフォルダ内の動画のパスを表示して選択してエンター押すとフォーム内のwindowsmediaplayerで動画を再生しますが 動画を読み込むときにCPUが100%になります 原因は何故でしょうか?
splitcontainerを3パネルにして使いたいのですがどのように細工したらよいですか?
>>89 CPUが遅いかどっかで読み続けてるか糞でかい動画を読み込んでいるか
>>90 「splitcontainer 3分割」でググれ
一番上に詳しく描いてある
>>91 GesPlayerで同じ動画を読み込んでもCPUは40〜50%まででした
再生方法は以下のようになってます
this.axWindowsMediaPlayer1.close();
this.BeginInvoke(
(MethodInvoker)(
() =>
{
this.axWindowsMediaPlayer1.URL = "動画ファイルのURL";
this.axWindowsMediaPlayer1.Ctlcontrols.play();
}
)
);
比較対象にするならWMPに決まってるだろ…
フォームに直接AxWindowsMediaPlayerを貼りつけて、URLにファイル名コピるだけなら100%行くことなかった つーかデフォで読み込んだら再生されるからPlay()いらないし
C#って何で冪乗演算子がないんですかね?
281 名前:デフォルトの名無しさん[sage] 投稿日:2011/07/10(日) 01:34:12.36 マはえてして何故なのかどうしてなのか追及する奴が多いから かといってMSに聞けよ知るかボケがとはコラムに書けんし 適当にお茶を濁さざるを得ない このスレでもたまにいるだろ 言語設計上の思想は開発者に聞けやごるあっていいたくなる質問がさ
>>95 Math.Powを使えってことかの
演算子として^を必ず使わなきゃいけない理由とかあるんだろうか?
orと被るなら**とかで良いのにね
10進BASICでもやってろハゲ
ここに知ってる奴がいればめっけもんじゃん。 一番気楽だし。 知らなきゃ答えなければ良い。なんでさも答えるのが義務であるかのような事いってんの。
MCIで動画再生するほうが軽いですか?
>>99 例だから気にすんな
ただ単に^が既に使われてるってだけだし
著者の心情を書きなさい←明らかな文系脳
>>95 需要が少ないからに決まってんだろ。
数式処理とかやってるような職の方ならともかく、そういう人が全体の何割いるか。
そしてそういう人が使うのは汎用言語じゃなくて Mathematica とか Matlab。
一般にも、2乗くらいは使うけど、3乗以上を、高校の演習以来使ったことある?
よく使うんだけど
どういう分野にお勤め?
身の上に心配あるから参上っす
球の体積だっけ? 数学の先生の頭がはげてた遠い記憶がよみがえった 確か金の太祖に似てたからヌルハチというあだ名だったっけ(遠い目
案外、そんな演算子導入するとBASICみたいでかっこ悪いから、なんて理由だったり。 まあ実際は、乗数が実数だったりする場合を考えるとSystem.Mathに言語が依存するのは よくないとか、そういう考え方なのかな。
フォルダ選択ダイアログでキャンセルしたときに例外が発生します 動対応したらよいでしょうか?
Windows Media Playerを埋め込むと重いんですけどこんなものなんでしょうか?
そいつぁあヘビーだ
そんなものなんじゃないですかね
>>114 よ、一体誰の許可を得て俺にレスしておるのだ
ずぶのど素人は引っ込んでおれ
私が許可した 責任は私が取ろう
いやいや、俺が俺が
>>109 アルゴリズムとか精度とか、何を標準にするか迷うしね。
119 :
デフォルトの名無しさん :2011/07/13(水) 22:02:45.65
>>111 Directshow.netを使ったら?
>>110 if文使って例外が発生しないようにするか、例外処理を書くしかないでしょう?
ソースを書いてくれれば親切な人が教えてくれるかもしれません
自分も質問なんですが、グループボックスの中に3つラジオボタンがあってどれが選択されているか取得する場合
if文使ってCheckedプロパティ見てやってるんですけどそれだとラジオボタン増やすたびにソース増えが読み辛くなるので
いい方法ないでしょうか?
つ配列
つ とかやってる馬鹿参上
if("a" == s){ return true; }else{ return false; } とやるのと if("a" == s){ return true; } return false; とやるのはどちらがよいでしょうか?
return "a" == s; が正解
return s == "a";
>>120 groupBox.Controls.OfType<RadioButton>().Where(x => x.Checked);
でどうよ
>>123 return ("a" == s);
っていうか、Cじゃないんだから"a" == sとか止めれ
ディレクトリ一覧を取得して、listviewに入れたいのですがエラーが出てしまいます エラー 1 'System.Windows.Forms.ListView.ColumnHeaderCollection.AddRange(System.Windows.Forms.ColumnHeader[])' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。 エラー 2 引数 1: 'System.Collections.Generic.IEnumerable<string>' から 'System.Windows.Forms.ColumnHeader[]' に変換できません ColumnHeader[] dir = Directory.EnumerateDirectories("C:\\test"); this.listView1.Columns.AddRange(dir);
なんでColumnsにAddRangeしてるんだ
>エラー 2 引数 1: 'System.Collections.Generic.IEnumerable<string>' から 'System.Windows.Forms.ColumnHeader[]' に変換できません 代わりに System.Collections.Generic.IEnumerable<string> から System.Windows.Forms.ColumnHeader[] に変換してやればいいんじゃね?
Itemsに追加したいんじゃないの?
知りませんよそんなもの
Itemsを使うと良かったんですね listboxみたいに表示したかったんですがなんかItemsを利用したいと思います
>>123 途中returnの是非ということならケースバイケース
処理AとBが対等ならif (条件) { A; } else { B; }
AがBに対して例外的なケースなら if (条件) { A; return; } B;
というふうに考えるのが一般的だと思う
ぐぐってみたらColumnHeaderConverterっていうのがあるみたいなのですがマニュアル見ても使い方がよくわからずorz
137 :
120 :2011/07/14(木) 00:32:47.85
>>126 groupBox.Controls〜の以降のOfType〜のやつってなんですか?ジェネリックスってやつですか?
初めて見たのでよくわからないです
拡張メソッドとかEnumerableとかLINQとかラムダ式とかそういうナウなやつ
this.listView1.Items.Add("test"); this.listView1.Items.Add("test"); this.listView1.Items.Add("test"); this.listView1.Items.Add("test"); でlistviewに追加して実行するとき、listviewの中の項目を選択したときに 選択した列の背景が変わりますが、文字列の部分しか変わりません listboxみたいに行全体の背景を変えるようにできませんか?
今時の若者はWPFで書くのがナウいぜ
初心者には無理なう
アホなう
>>139 OnDrawItemをoverrideしてFillRectangleで描く
>>143 ありがとうございます調べてみます
string[] a = new string[] { "aa", "bb", "cc" };
this.listView1.Items.AddRange(a);
とAddRangeで一気に追加したいのですがエラーになります
string[] a = new string[] { "aa", "bb", "cc" };
foreach (string f in a)
{
this.listView1.Items.Add(f);
}
だとエラーになりません
助けてください
カラムまたがっていいなら listView1.FullRowSelect = true; とかでどう?
>>138 ラムダ式はたまにイベントハンドラで使うことがあるのでわかりますが、このWhereメソッド?
これは一体どういうものなんでしょうか?どうやって値を受け取ればいいんでしょうか?
147 :
デフォルトの名無しさん :2011/07/14(木) 11:07:52.48
>>147 ありがとうございます
いま試してみます
カラムの幅をListViewの幅と同じにしてみ
>>146 IEnumerable 受け取って、条件を満たす要素だけを取り出す IEnumerable を返すメソッド。
LINQ の基本。
SQL でいう、
select * from list where 条件
SplitContainerを上下に分割して、上と下にListboxを入れてそれぞれDock:Fillに指定した場合 分割境界線が太くなるのと、IsSplitterFixed:Falseに設定しても移動できないのはバグですか?
>分割境界線が太くなるのと これってListboxの挙動の関係じゃないの? Listboxって確か書く項目の高さx表示個数できっちりきまるんじゃなかったっけ?
>書く項目 各項目
そういうふうにもできるし 自由な高さにもできる
156 :
デフォルトの名無しさん :2011/07/14(木) 13:04:14.64
>>155 自由にできるのは知らなかった
デフォルトでは項目の高さx項目数で表示の高さが決まるようになってるよね
>>152 お試しで捨てプロジェクト作ってFormに直接ListBoxをFillで貼り付けて
Formの高さをいろいろいじってみ
切りのいい高さだと余白なくぴったりくっつくけど中途半端な高さだと
余白ができてるから
たぶんSplitContainerの分割線が太くみえるのはListBoxの余白でそうみえるだけ
ListBox.IntegralHeightじゃ駄目?
>>157 あなたは神です!!!!!!!!!!!!
やっぱりListViewは難しいですね listBoxで作り直します
>>147 すげぇ面倒見いいやつとかいわれないか?
いいことじゃないか、まさに初心者用スレにふさわしい だがどの程度の質問をされるかにもよるからな
string[] d = Directory.GetDirectories("C:\\test\\aaa"); これでaaaフォルダの中にあるフォルダだけを取得する方法ってございませんか? for (int i=0; i<d.Length; i++) { d[i] = Path.GetFileName(d[i]); } 取得した内容をlistboxに追加するときPath.GetFileNameを書いて for (int i = 0; i < d.Length; i++) { listBox1.Items.Add(Path.GetFileName(d)); } とやってフォルダ名のみにして追加してるのですが効率が悪いのでaddRangeで一括で追加したのです
書き直します string[] d = Directory.GetDirectories("C:\\test\\aaa"); これでaaaフォルダの中にあるフォルダだけを取得する方法ってございませんか? 現状は取得した内容をlistboxに追加するときPath.GetFileNameを書いて for (int i = 0; i < d.Length; i++) { listBox1.Items.Add(Path.GetFileName(d)); } とやってフォルダ名のみにして追加してるのですが効率が悪いのでaddRangeで一括で追加したのです
再描画で遅くなるって話なら別の手があるぞ?
BeginUpdateとEndUpdateの中でAddする方法でしょうか? どうしてもAddだと遅くなってしまいまして
>>164 まず
>>165 の言うとおりだけども。
var d = Directory.GetDirectories("C:\\test\\aaa").Select(x => Path.GetFileName(x));
じゃダメなの?
遅くなるって計測した上でいってんの?
>>167 ありがとうございます
var d = Directory.GetDirectories("C:\\test\\aaa").Select(x => Path.GetFileName(x));
listBox1.Items.Clear();
listBox1.Items.AddRange(d);
と書き直したら、AddRangeの行でエラーが2つでてしまいました
エラー 1 'System.Windows.Forms.ListBox.ObjectCollection.AddRange(System.Windows.Forms.ListBox.ObjectCollection)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。
エラー 2 引数 1: 'System.Collections.Generic.IEnumerable<string>' から 'System.Windows.Forms.ListBox.ObjectCollection' に変換できません
ためになるな。
>>168 ありがとうございます
速度についてはstopwatchで計測させていただきました
Addで追加するとAddRangeの3倍の時間がかかってしまいます
string[] d = Directory.GetDirectories(@"C:\"); List<string> d2 = new List<string>(); for (int i = 0; i < d.Length; i++) { d2.Add(Path.GetFileName(d[i])); } listBox1.Items.AddRange(d2.ToArray());
LINQきめぇ
>>169 試しに
listBox1.Items.AddRange(d.ToArray<string>());
とかやってみたら
d.ToArray() だけでいいか
あるメソッドが文字列を返します もし文字列が空ならreturn falseで抜けて,文字列が空でなければ変数aに代入したいと思います 以下のように書いた場合、Axc()は2回実行されていることになりますか? Axc()の処理が結構重いことをさせるので1回しか実行させたくないのですが 空でなかった場合には変数に代入して、空だったらreturn false;にする方法ってございませんか? if ("" == Axc()){ return false; }else{ string a = Axc(); }
string s = Axc(); if ("" == s){ return false; }else{ string a = s; }
こんなことで質問すんなよ
!
帳票印刷をXPSファイルにやってるのですが、 文字の幅を短くしてある領域に納める処理に、 ScaleTransform()を使って横方向だけ縮小しているのですが、 どうも、アンチエイリアス後にScale処理されているようで この処理をした文字だけがアンチエイリアスがされてない感じの ギザギザ文字になってしまいます。 なにか対策ないでしょうか。
XPSってなんぞ? なにやら便利そうだな
>>183 プリンタに「Microsoft XPS Document Writer」
ってない?
その領域に合わせたフォントを作るべきで 縮小がそうなるのはしょうがないんじゃ?
186 :
182 :2011/07/14(木) 18:01:02.35
ありがとうございます。 どうも.NetのFontオブジェクトでは縦横比を変えれない仕様らしく、 変形は全てTransformでやるべき、という姿勢だとどこかで見かけました。 縦横比を変更したFontオブジェクトを作ることってできるのでしょか。 XPSはMicrosoft XPS Document Writerでやってます。 ちょっと工夫しまして、GUI無しでXPSファイルに書きだした後、 XPSビューアで開き、それをプレビューとして使用してます。 また印刷はそのXPSビューアがGUI提供してくれてるのでキレイに処理できます。
listBoxが3つあります public void MsgBox1() {MessageBox.Show(listBox1.Text);} public void MsgBox2() {MessageBox.Show(listBox2.Text);} public void MsgBox3() {MessageBox.Show(listBox3.Text);} という風にやるよりは public void MsgBox(string selectbox) {MessageBox.Show(selectbox.Text);} として書いて MsgBox("listBox2");みたいに出来ればよいのですが、これだとエラーが出て出来ませんでした 同じコードは一つのメソッドにまとめたいのですが方法ございませんか?
引数というものを勉強しろ
C#の初心者ならともかくプログラミングの初心者はあっちいってくれ
フードプロセッサーに機械のパーツを入れようとしてる みたいなイメージだな
まず本読めよ 型とか全然理解してないだろ public void ShowListBoxMessage( ListBox selectbox ) { MessageBox.Show( selectbox.Text ); } ShowListBoxMessage( listBox2 ); でもこんな糞メソッド作らないでいいよ
型って良く知りませんでした 何故これは作ってはならないのですか?
MessageBoxを呼び出す程度ならベタで書いてもいいんじゃないの?ってだけ まあ別にやってもかまわんけどね
そうでしたか listbox2って渡しちゃうとこれ重くなったりするののが理由なのかなと思ってしまいました ありがとうございます
>>186 LOGFONTでもうまくいかんねー
ScaleTransformしたあとに
TextRenderingHintでTextRenderingHint.AntiAliasいれたら
一応かかったけど、図形としてだろうかこれ
196 :
182 :2011/07/14(木) 18:47:03.52
>>195 おお、試してくれてるのですか。感謝です。
試してみます。
197 :
182 :2011/07/14(木) 18:57:14.60
>>195 私のところではかかってませんでした。
思うに、それは、スケールする前のアンチエイリアスよって出来た
ドットが残ってるだけではないでしょうか?
その場合は、XPSビューアなどで縮小するとやっぱりギザギザになります。
解像度に応じて、リアルタイムにアンチエイリアスがかかってほしいですが、
スケールするとならなくなってしまいます。
4.0のままでいいんじゃない?
恐らく、参照設定の中でエラーになってるのを消すのと、 usingでエラーになってるのを消せばいいはず
エラーと警告は違う
203 :
デフォルトの名無しさん :2011/07/14(木) 19:53:40.20
>>202 4.0で作るっていうか使う部品によって2.0互換のコードになるんじゃなかったっけ?
.netのバージョンでどこまでサポートとかあるはずだし
素朴な疑問なんだけど4.0と3.5と2.0が入っている比率ってどのくらいなんだろう
>>202 >4.0をインストールさせるページ
…VisualStudio入れた時点で、自動的に入って来ないか?
>>204 普通にwinをうpでーとしてれば4.0になってるっちゃ
Windows8は4が入る?
>>207 Win7出たのが2009年10月(9月)で、
4.0出たのが2010年4月だからなー。そりゃ無茶ってモンよ。
>>206 Windows Update だけだと、Client Profileしか入って来なくね?
>>203 >>205 >>206 ホームページで自分の作ったソフトを公開するときに4.0のインストールの仕方をどうやって教えていいのか分からず、2.0の解説のあったページを参考に2.0にしたいと思ってました
なるべくたくさんの人にインストールしてもらいたいので2.0ならいいのかなと思って2.0を選ばせていただきました
ClientProfile軽いからなw 50MBちょっとだから、昨今の回線事情なら直ぐに入れられる 後はまあ、Silverlightを検討するのもアリだが
そうですね ぼくは今日から4.0布教のために4.0で作ることを決意しました
214 :
デフォルトの名無しさん :2011/07/14(木) 21:43:40.98
CSharp Language Specification.doc タイトルC# 言語仕様 作成者AraceliJ 会社名BGS Spain 作成日時2010年1月28日 14:38:00 更新日時2010年4月3日 5:16:34 更新者xiuyan.liu 改訂671 編集時間2927 分 いまのところ、コレが最新?
ここ1年は3.5にしておくのが無難だと思っておる。
216 :
デフォルトの名無しさん :2011/07/14(木) 21:50:10.73
4.0に手を出すのはWPFとかSilverLigthあたりをやる人くらいじゃね?
UI以外にも、dynamicとかCOM interopの強化とか MEFとかTPLとかPLINQとかいろいろ付いてるぞ
VBなら3.5→4.0で大分使い勝手が向上してるんだけどね
GetDirectoriesでSystem Volume Informationにアクセスすると強制終了してしまいます 隠しフォルダ?システムフォルダ?っていうのでしょうか?エクスプローラでは表示されてないようなこのフォルダみたいなフォルダの場合 はGetDirectoriesでアクセスしないように処理の前に判定したいのですが以下のように書いてもちゃんと動作しませんでした どなたかアドバイスお願いいたします if (FileAttributes.System != di.Attributes) { return false; } string[] dir = Directory.GetDirectories("フォルダ名");
220 :
デフォルトの名無しさん :2011/07/14(木) 22:25:24.69
OSは何?
Vistaです
コードミス if (FileAttributes.System == di.Attributes) { return false; } string[] dir = Directory.GetDirectories("フォルダ名"); でダメでした
string[] h = new string[] {"aaa","bbb","ccc","","ddd","eee",""}; という配列があって 空の要素を削除して string[] h = new string[] {"aaa","bbb","ccc","ddd","eee"}; という風につめたい場合のforを使わないでやる方法ございませんか?
h.Where(x => 0 < x.Length).ToArray()
スマート厨とパフォーマンス厨の決闘になりそうだな
厨厨タコかいな、まで読んだ。
>>225 すいません書いてみたのですがエラーになります
エラー 1 'System.Array' に 'where' の定義が含まれておらず、型 'System.Array' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
3000ギルですが購入しますか?
一回エラーメッセージ自力で解決できるまで頑張った方がいい 本当に
PHPだとエラーみてもマニュアル見て解決できるのですが C#はエラーの内容がレベル高すぎて難しいですね
usingでlinqを追加したら動きました ただ、実行しても空の部分が残りました
235 :
219 :2011/07/14(木) 23:52:53.01
Directory.GetDirectories()で取得するとき、隠しファイル属性は除外する方法はございませんか?
ありません 自分で属性確認するしか
C#クソだな
>>234 元の配列が変わるわけじゃなくて、抽出結果を返す
239 :
デフォルトの名無しさん :2011/07/15(金) 00:02:57.90
すいません、教えてください。 FC2ブログにデータをPOSTしてブログを投稿したいのです。 ログインまではできておりますがPOST先のURLはどうやって調べればよいでしょうか? また、ここに投げればよいというURLがあれば教えてください。
mail欄が空白だとマルチなのかなと思ってしまう
>>235 DirectoryInfo.EnumerateFileSystemInfosかGetDirectories使えば
>>239 そんなもんFC2に聞いて下さい
FC2のサポセンじゃないんですよ
>>243 ありがとうございます。
C#で投稿しようと現在つくってます。
PHPつかえば楽らしいんですがクライアントツールで作成したいと四苦八苦してまして。。
>>242 なるほど。サービスを提供する会社に問い合わせないとわからないシロモノなのでしたか。
ありがとうございます。
245 :
デフォルトの名無しさん :2011/07/15(金) 00:33:49.76
postボタンを押したときに何を送るかwiresharkで調べればいいだけじゃあ
コボラーとPHPerは他所に出てくるな
>>236 さんは出来ないと教えていただきましたが
>>241 さんのはどちらも取得できるものは同じですがそれらを使ってどのように除外するのですか?
249 :
219 :2011/07/15(金) 01:28:31.36
>>244 FirebugとかChromeの開発者ツールで、HTTPリクエストが見れるから
ボタンを押した時のそれっぽいのを見つけてあとは眺めて頑張れ
Firefoxは、5.0以上ならFirebugじゃなくてもいいし IE9でも、F12キー押下で出るDeveloperToolsにネットワークキャプチャ追加されたぜよ
フォルダ列挙厨はListBox厨と同一人物だろ? 基本的なところを本を読むなどして身につけた方がいいと 何度言わせたら
XPSを独自で出力するライブラリみたいなのは無いでしょうか? 修正とかしたいんですが・・・ 拡張子ZIPに変えて中身をテキストエディタで直でいじれとか言うのはなしでお願いします。
WPF使う というかXPSはWPFのための印刷技術
>>254 情報ありがとうございます。
WPFで調べてやってみます!
staticは最後の手段
クラスごとにファイルを分けた場合とか new クラス クラス.メソッド ってやらなくて住むじゃないですかstaticだと それともクラスは分けずにForm1.csに極力メソッドを作成したほうがいいってことですか?
ワラタ
あったまわるーw 他の趣味みつけたほうがいいね
しっくりこないんでstatic使うんですね 勘弁してください
何だ説明できないのか
適材適所を知らんのか 最初から使っちゃいけないとか決めつけるアホに用事は無い 考えてから発言しろよ 骨髄反射野郎
IQが20違うと説明するだけ無駄だしね
例えば、インスタンスのフィールドに全く依存しないメソッドをインスタンスメソッドにすべきだろうか
そんな心配ご無用ですよ。ちゃんといい給料もらって こうして2ちゃんもしてますしね。
癌なのは静的フィールドであって、静的メソッドは別に害ないわけだけども、
>>259 はダメだろ、フィールド含め、全部静的にしそう。
工程表甘めに造って納期前にPG・デバッグできちゃったんで 1週間くらいヒマなんです。 勘弁してください。
他の言語だとstaticのほうがパフォーマンスいいのにC#だと効率悪いってどういうことすか
UserControlを作成していますが、OpenFileDialogのようにフォームに設置せず 実行時には表示されないタイプを作りたいと考えています。 このようなUserContorolの作り方をご存じでしたら教えてください。 System.ComponentModel.DesignerAttribute あたりが怪しいと思ったのですが…
C#で温度を測る方法を教えてください
CPUの温度です
C:\\2010\\\07 というパスがあり、このパスをC:\\2010\\07に直してくれる機能ってありませんか?
>>276 というパスがあり…って言うけど、それパスとして成立してないじゃん
エスケープの個数が変
非エスケープ時に C:\2010\\07 ならエスケープ時は C:\\2010\\\\07 だろ
それならPath.GetFullPathが使える
static使ったらどうしてダメなのか知るには、 やってみればいいよ。全てをその信念で構築する。 そうするとダメな理由が分かる。 みんなそうやって学んできたんだ。
あっ、あの、私のstaticになってくださいっ!
>>277 GetFullPathいいですね!
パスを直してくれるんですね
助かりました
>>272 Form上に表示するUIがないもんならControlとかUserControlじゃなくてComponentから派生する
>>275 ,282
返信ありがとうございます。
配布用コントロールの作成を考えておりまして、デザイン時にはフォームに張り付けず
実行時には表示されないOpenFileDialogのような形にしたいのです。
先ほどから検索してますがよい解決方法見つかりません
>>257 staticがメモリを食うってそんなに気を使うことか?
無視できるレベルだと思うが。
フィールドはあまり使わないが、メソッドはよく使ってるけどなぁ。
というか広いスコープは悪なんだよ グローバル変数はgotoみたいなもの。
はじゃなくてや
pureな関数(静的フィールドに触れない静的メソッド)はいいのよ、別に。 けど、「しっくりこない」な人はたぶん、静的フィールド書き換えるステートフルな静的メソッド書く。 言語的に pure 指定できるようにして欲しいくらい。
単なる使い分けの問題だな。おかしな使い方をすれば便利な道具も役に立たなくなる
まあ、言語構文に組み込まれることで、使い方の指標になったりはするしね。 Disposeパターンがまさにそうだけど、usingのあるC#は割と平和。 他の言語だと、訓練されてない人がDisposeをfinallyの外に書くっていうバグが日常茶飯事。 「pure指定」が欲しいってのはそういうこと。
性的フィールドなんてか聞けるものちゃうだろ基本的に それだったらめんどくさくてもインスタンスつくってその中だけで処理するわ
292 :
291 :2011/07/15(金) 15:32:16.81
×性的フィールドなんてか聞けるものちゃうだろ ○静的フィールドなんてそうそう書き換えるものちゃうだろ だった 金曜日だから浮かれてるのかな
>>291 Form1からForm2のフィールドを使いたいんです
→ Form1を静的に置いておけばいいんですね!
なやり取りとかざらにあるわけだけども。
副作用の問題はstaticでなくても存在してるけどねw
あと メインのWindowはどこからでも参照するからシングルトンにするといいと思いませんか?どうですか? ってのも最近居た気が
296 :
デフォルトの名無しさん :2011/07/15(金) 15:35:11.46
>性的フィールド はあはあ・・
staticにしていいのはutilクラスくらいなもん
静的変数や静的メソッドや静的クラスは分かるけど、静的フィールドってなんなの? わかりやすくおしえてけろ
Int32.MinValueが静的フィールド
C#ではメソッドとプロパティは大して変わらん
>>298 OOP用語だとメンバー変数のことをフィールドって言う。
C#も、仕様書とかMSDNとか見てるとフィールドって読んでるはず。
>>300 プロパティは基本的にバッキングフィールドの存在が前提になるから、
ここでいう、「グローバルと一緒じゃん」(広域的な状態持つのあまり良くない)という意味では、
静的プロパティは静的フィールドと大差ない。
readonly で immutable なものならそんなに問題ないけども。
お前ら何で争ってるか分からなくなってきただろw
性的かそうでないかだ
>>301 理解できたサンクス!
後もう一つ知りたいんだけど、静的メソッドから静的なメンバ変数にアクセスするのはだめなことなの?
ぜんぜん駄目じゃないよ 言語仕様にあるんだから使っていいんだよ ふらっとスレで静的フィールドは使うなって教えるのはいいけど 他のスレでそんなこと言ったら馬鹿にされるよ
質問があります。 VCで作成した関数をDLL化してC#で呼び出したいと考えています。 Cの関数の内部ではmallocでメモリを確保して、そのポインタ(double**)を返値としています。 C#でこのポインタをunsafe内でdouble**で取得しています。 返値のポインタをC#から開放することは可能でしょうか?
dllが確保したメモリはdllに解放させたほうがよくない?
freeを呼び出す関数も作成しておけばいいんだよ
一瞬
>>305 のアンカが
>>304 にかかっている様に見えて吹きかけた
あぶなかったじゃねぇか ちくしょう
>>305 静的フィールドは最小限な方がいいってだけ。
いわゆるシングルトン、アプリの寿命と同じで、アプリ中ただ1つだけ存在するオブジェクトのために使うのが一般的。
そんなオブジェクトは大量にはないはず。
静的フィールド書き換えるような静的メソッドと、そうでない静的メソッドは性質が全然違う。
後者は、同じ引数与えたら常に同じ結果になるんでテストしやすい。
ほとんどの場合、後者で事足りるはず。
312 :
307 :2011/07/15(金) 17:44:05.17
>308,309 なるほど、わかりました。 ありがとうございます。
一番いいのはC#側でdouble配列を確保して 関数にポインタとして渡して書き込んでもらうことだが
まずはdll側で何をやってdoubleの巨大な?エリアを渡すのかだな
C#で作られたソフトってあんまり公開されてないですか? Vector見てもC#で作られたソフトが見当たりませんでした
VectorにはC++で作成していると書かれたソフトもBASICもHSPもPHPもJavaもないよ
NET Frameworkが必要と書いてあるものの半分程度がC#製だろう 半分ってのはTIOBEのスコアがC#6%、VB5%であることからの想像だけど
F#で作られたソフトってあるんかな
IronJSとか…?
switch(e.KeyData) { case Keys.A: //メッセージボックスで日付を表示する処理 break; case Keys.B: // ファイルに日付を書き込む処理 break; default: break; } この時、summaryには何て書けばよいのでしょうか?
とりあえず、あなたが書いておいて欲しいと思うことを書けばいいんじゃないですか
>>320 そういう処理だけ書いたメソッドの<summary>Docコメントにってこと?
キーバインディング。とか書いときゃいいんじゃないかな。
/// <summary> /// (´・ω・`)しらんがな /// </summary>
ちゃんとcref識別子の書き方とか説明してやれよ 俺は知らんけど
最近、ママに聞いたらいいのにって質問が多くね?
Q:最近、ママに聞いたらいいのにって質問が多くね? A:ママに聞けば?
すごいですね家族そろってプログラミングやってるなんて
すごい○○ですね家族そろってプログラミングやってるなんて
すごい○○ですね家族そろって○○○○やってるなんて
try〜catchって使いすぎたらまずいものですか?
まずいって何が? アプリが問題なく使えればいいよ まれにループの中で例外が発生しまくって糞遅くなったりすることもないこともないけど そんなの完全にコーディングのミスだからそのときに直せばいいだけのこと
tryのスコープを通過するだけなら全く問題ない catchを通過すると例外ハンドラの動きで数百倍遅くなる
一般論として例外による制御フローを書くなとは言う 乱暴な例を挙げるとこういうの int[] vars = { 0, 1, 2, 3 }; try { for (int i = 0; ; i++) { Console.WriteLine(vars[i]); } } catch (ArgumentOutOfRangeException) { Console.WriteLine("ループ終了"); }
例外処理ってC++とかで非Exceptionを投げても遅いの?
C++の話はC++スレでやってくれるか?
文字通り例外的状況なんだから遅いとかどうでもいいんだよ そんなこと気にしないといけない状況なら例外なんて使うのが間違ってる
そりゃごもっとも
catchを5つぐらい使ってたので問題ありそうでしたらそのときに修正したいと思います
最初の頃は例外処理を条件分岐に使ってたなぁ
デッドロックのリトライとかどうするん?
>>340 止むを得ない所は止むを得ないでしょうよ
staticの「方が」いいって言われたら、何が何でも全部staticにしちゃうタイプ?
今C#始めてからだいぶ理解して中級者くらいにはなったと思うんですが、Linqが難しすぎて覚えられません SQLなんて囓ったことありません。どうすればいいですか?
>>330 まずくはないけど、普通にやってると.NETだと利用頻度低め(Java比)のはず。
>>334 当然遅い。
正しくデストラクターを呼ばなきゃいけないC++の方がむしろ面倒。
>>342 そんなこと言ってたらScalaもRubyもPythonも無理だぞ。
SQLというか、RDBだけじゃなくて、どんなストレージ使うにしても
いまどきああいうデータ処理は必須。
try~finallyは楽
>>342 SQLはそんなに意識しなくていい。
Linq to Sql/Entitiesでなければ、あまり関係ない話。
その上でどうやって覚えていけばいいか、というと、どうすれば近道かな?
XMLを処理することが多いなら、Linq to Xmlから入っていくといい。
DOMやXmlReaderよりは遥かに楽なので、自然と覚えていけるはず。
そうでないなら、foreachで書いたものをLinq to Objectsに直してみていっては?
ループで書いたものが、どうLINQに直せるのかを体で覚えていけばいい。
>>342 クエリ式やSQLは後回しでいいからまずyieldとラムダ式を覚える
その上でWhereとSelectを自分で作ってみれば完璧
使いたくなったら使えばいいと思う
Gridをモニターに描画させないでGrid内のコントロールを含めた描画イメージを裏でスクリーンショットを撮るにはどうすればいいんですか?
GridからVisualBrushを生成する DrawingVisual作ってRenderOpenしてDrawingContextにVisualBrushでDrawRectangleする RenderTargetBitmapを生成してDrawingContextをRenderする RenderTargetBitmapを保存するなりなんなりする たぶんこれでおk
>>353 Cookieが足りない
一度HTMLをgetしてセッション作ってもらわないとログインできないね
どのブラウザ使ってんのかは知らんけど、最近のはF12で開発者ツールが出たりするから内容確認してみな
あとPOSTデータにも不足があるけど使ってんのかは不明
>alf 1
>imageField.x 65
>imageField.y 20
>passwd unko
>userId hoge
>>354 >imageField.x 65
>imageField.y 20
ieHTTPheadersでログインを見てみたら、x=73、y=17でした。
動的に変わるのかな?
あと、data作ったあとはこんな感じです
CookieContainer cc = new CookieContainer();
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = data.Length;
req.CookieContainer = cc;
Stream reqStream = req.GetRequestStream();
reqStream.Write(data, 0, data.Length);
reqStream.Close();
WebResponse res = req.GetResponse();
Stream resStream = res.GetResponseStream();
Encoding encoder = Encoding.GetEncoding("SJIS");
StreamReader sr = new StreamReader(resStream, encoder);
string result = sr.ReadToEnd();
sr.Close();
resStream.Close();
IDとパスワードくれたら作るよ
>>355 だからHttpWebRequestは2つ必要なんだって
>>357 把握しました。
ところで
>imageField.x 65
>imageField.y 20
この2つって、htmlソースには特にINPUTとして書かれていないのですが、
なんなのでしょうか?
imageField普通にあるじゃん
エクスプローラでフォルダをめぐっていいって、上の階層に戻るときはBackSpaceを押しますが 戻ったときに、フォルダの選択位置が記憶されてます ListBoxにフォルダ一覧を表示しててエンターで選択されてるフォルダにアクセスして、BackSpaceで上の階層に戻りたいのですが どうやって記憶させればよいのでしょうか?
履歴を前方と後方の分を2つスタックに持っておいて 戻る/進むのときは片方のスタックからPopしたものもう片方にPushする Enterキー等で進んだときは前方のスタックを空にする 履歴オブジェクトごとに選択状態を保持するようにする
タイマーでの処理で lock掛けてるんですが、 タイマー間隔より時間がかかる処理で溜まっちゃうので ちょっと待ったらあきらめるlockとかないですか? それとも盛大に間違えているでしょうか。
その「ちょっと」をどう定義するかは、あなた次第だ。 まー、ビジーループになってるようなら、中断処理仕込んどけばOK。
>それとも盛大に間違えているでしょうか。 うん lockで排他できるのは別スレッド >ちょっと待ったらあきらめる どのスレッドで待つのさ
>>362 C:\からスタートして
C:\aにいったら、配列にC:\aを保存
C:\a\b\にいったら、配列にC:\a\bを保存
C:\a\b\cにいったら、配列にC:\a\b\cを保存
C:\a\b\cでBackSpace押したら、配列のC:\a\bをセット?
っていう感じでよいでしょうか?
あ、でもPerlやPython,Ruby,PHPみたいにあとから配列の数って変えられないから無理か
>>365 タイマーのイベントでlockってやると待ってるのがたまってくのかなと。
タイマーを止めて、最後に再開すればいいんでしょうか。
>>366 例えば、構造体をつくってそれに現在のセッティングを書きこんでスタックにプッシュする。
バックスペースをおしたら、スタックからさっきの設定を拾ってきてスタックからポップする。
それだけじゃないかな??
>>367 イベントがマルチスレッドなんて誰が言ったんだ?
>>366 List<T>かStack<T>を使う
>>367 全く意味がわからない
タイマと言っても数種類あるしスレッド使ってるのかどうかもこっちは知らない
何をlockしてるのかも知らない
>>369 System.Timers.Timer で、 イベント処理事体を
lock (lockObj) {} で囲んでます。
>>371 スタックの操作だぜ?データとアルゴリズムをしらんのか!?Orz
373 :
デフォルトの名無しさん :2011/07/16(土) 13:24:39.54
>>371 あくまで概念的な物だよ
イメージとしてはキャラクターの頭が付いたラムネ入れる装置とか
リボルバーじゃない銃のカートリッジ
375 :
デフォルトの名無しさん :2011/07/16(土) 13:27:54.82
>>376 自分の見た限りでのタイマー処理のサンプルがどれもこれもこうなっていたからです。
ファイル読んだり書いたりしていて、同時に実行されないということは必要です。
まだ終わってないから今回の処理は無しみたいなのが安全に出来ればいいのですが。
System.Timers.Timerなら確かにロックは必要 一連のファイルの読み書きをアトミックにやりたいということならロックの時間がどうしても長くなるのも仕方ない Timer使うよりも専用のスレッドを常時動かして自分で時間測りながら一つづつ処理したほうが簡単じゃね
System.Timers.Timer >Elapsed イベントは、ThreadPool スレッドで発生します。Elapsed イベントの処理が Interval よりも長びくと、 >別の ThreadPool スレッドで同じイベントが再発生する場合があります。このため、イベント ハンドラは再入可能 >であることが必要です。 複数のThreadPoolのスレッドがlockでブロックされつづけてると システム的にもパフォーマンス悪化の原因になりそうだしね
ちょっと聞いた感じではタイマーを使う必要性は何もなさそうに聞こえるね。 っていうか、こういう人がコピペグラマなんだなw
>>380 プログラマーなどというのはおこがましいレベルのものです。
タイマー使わないとすると、sleepぐらいしか思い浮かびません。
きっと、素人考えで楽しようとしてかえって苦労してるんだろうと思います。
みなさまありがとうございました。参考にさせていただきます。
タイマ使うんだったらこうすればいいのかな private volatile bool busy; lock (lockobj2) { if (busy) return; } lock (lockobj2) { lock(lockobj) { busy = true; 処理; busy = false; } }
ぇ?
384 :
382 :2011/07/16(土) 14:19:25.54
すまん if (busy) return;のところでロックしたら全く意味ないな でもその行を抜けた直後にbusyがtrueになる可能性があるのか めんどくさ
ロックできなかったらやめるだけだったらこれでいいか if (Monitor.TryEnter(lockObj)) { try { 処理 } finally { Monitor.Exit(lockObj); } }
フォームアプリケーションだったら、Application.Idolにイベント食わせるっていう手もあるけどね。フォームかどうかもわからない。
ほぼ常にファイルの読み書きが行われてるってことなんだろ? そんなことApplication.IdleとかWinFormsのタイマとかでやったらUI固まるよ
そんなタイトな処理やるんだったら、ロックかけて構造体かなんかにスナップショットとって、 ロック解除しつつ、その構造体をファイルに書きこめばいいような気がする。 もしかして、俺、むちゃくちゃ言ってるかな??Orz
oh miss spell...
>>388 処理を飛ばしていいのかどうかによる
飛ばしてはいけないなら
>>388 のように順番にキューに入れて処理すればいいし
適当に飛ばしていいんだったらスレッドタイマで
>>385 が簡単だと思う
まあ、そんな概念的な話されても、初心者にはチンプンカンプンだわなwww これ以上、上級者のオナニー合戦見るのも疲れるんで、どっかでやってくれ。
コピペグラマ参上!、まで読んだ。
C++で自作したネイティブDLLを、C#から呼ぼうとしたらどのようにしたらいいのですか?
ネイティブDLLってC限定じゃなかったっけ? C++だとクラスがあるし、特殊なDLLしか作れないでしょ?
P/Invoke か プラットフォーム呼び出し でググってやってみてよ
別にそうでもない 単純な関数ならDllImportで普通に呼べる
398 :
394 :2011/07/16(土) 18:42:58.66
>>395 すいません、Cの方です。
計算だけをCにやらせて、結果をC#に戻すという流れです。
もしくはDEFファイルでちゃんと名前指定してエクスポートしてやれば
C++の名前そのままでエクスポートしてても 修飾名調べてDllImport側でEntryPoint指定すれば一応
C#でDLLを作って秀丸のマクロから使いたいのですが方法ございませんか?
403 :
デフォルトの名無しさん :2011/07/16(土) 20:05:43.75
>>398 自作のDLLならC++/CLIが一番楽だと思うよ
>>402 C++/CLI
>>394 の場合はC++/CLI使わなくても別に手間じゃないので
気持ち悪いものを持ち込むよりも普通にCのDLL作ったほうがいいと思うけど
逆の場合はC++/CLIでないとしんどい
逆P/InvokeとかCLRホスティングとか方法はあるがお勧めしない
>>405 あーもうBackSpaceで戻ったときだけを考えろ
BackSpace押した時のパスを覚えといて
一階層上に行った後にそれを選択するようにしろ
string str = "scan sitemimasita"; 文字列の最後がsitaまたはdesuで終わっているか調べたいのですが どのようにして調べるのでしょうか?
EndsWithで
EndsWithなんて便利な物を使うと堕落する LengthとSubstringでやりなさい
むしろ後学のために正規表現で
むしろforで
む(以下略
>>413 むらむらしちゃらめええええええええ><
でも実際
>>408 みたいなこと聞く奴には
LengthとSubstring使ってEndsWith相当のメソッド作りなさいという課題を出したくなるな
>>415 宿題ですか?w
他人にやらせようとしてw
"scan sitemimasita".Skip("scan sitemimasita".Length - "sita".Length).SequenceEqual("sita")
418 :
デフォルトの名無しさん :2011/07/16(土) 22:39:13.21
>>405 単純に上のディレクトリに戻るなら
string 新しいフォルダ = System.Io.Path.GetDirectoryName(今のフォルダ);
でOK
テキストボックス上で矢印キーを押しても他のコントロールにフォーカスが移ることはありませんが ボタンや自作コントロール上で矢印キーを押すと他のコントロールにフォーカスが移ります これをテキストボックスみたいにフォーカスを固定させるにはどうすればいいのでしょうか?
>>419 OnKeyPressまたはKeyPressイベントで、カーソルキーだったらHandled = true;
でいけるんじゃない?
>>420 さっそく試してみましたが
カーソルキーはKeyPressイベントに捕捉されないことが判明しました
フォーカスロスト時のイベントってあったっけ? そのときに何が原因でそうなったかわかればキャンセルすればいいだけのような肝するけど
派生クラス作ってIsInputKeyを処理するのがいちばん正しい作法
>>418 これでやりたいことに近づいてきました
が、しかし
MessageBox.Show(Path.GetDirectoryName("C:\\aaa\\bbb"));
と
MessageBox.Show(Path.GetDirectoryName("C:\\aaa\\bbb\\"));
の結果が異なってしまいます。
結果としてはどちらの場合でもC:\\aaaと表示させるにはどうしたらよいでしょうか?
末尾にパス区切り文字がついていたら取り除く ついてなかったらそのまま、というのを間に挟む
427 :
デフォルトの名無しさん :2011/07/17(日) 00:17:48.10
>>424 使えそうなイベント調べてたけど
PreviewKeyDown
なら矢印キーであってもイベント来るな
パス区切り文字はOSによって違うぞ。
429 :
デフォルトの名無しさん :2011/07/17(日) 00:28:09.53
bindingListのメソッドにはSort()ってないんですね? これってバインドされたdataGridView側でソートしろってコンセプトなんですかね? で、dataGridViewでソートしたらList側のデータは並び変わってるのですか? 表示上、ソートされただけですか?
元になるIListがソート可能かどうか分からないから BindingList自体はソートできないようにしてるってだけ データソースがIBindingListでSupportsSortingがfalse返すなら DataGridViewでもソートできないよ デフォルトでは
>>426 string str = "C:\\aaa\\bbb\\";
str.TrimEnd("\\");
どうもTrimというのは文字を消すものであって、文字列ではないみたいなのですが
\\のように文字列を消す場合は何を使えばよいでしょうか?
自己解決です substringでできました
ここまでで小生の作ったファイルとフォルダをリストボックスに表示するコードをこちらで公開したら アドバイスもらえますか?
もちろん
>>425 GetDirectoryName使う前にパスの最後に??があるかチェックしてあったら取り除けばいいんじゃないの。
フォルダの移動部分だけのプログラムです
フォームにlistboxを1個置いただけです
ここで教えていただいてここまでいけました
ifがたくさん入ってて無駄なコードが多い感じなのですが、ここをこうしたほうがいいとかいろいろアドバイスお願いします
http://ideone.com/vshzr >>436 ありがとうございます
コードにしてみました
あ、stopwatchは速度計るために入れてて消し忘れました すいません
どの言語やってたの? いろいろ気持ち悪いけど、まあいいか
やってきたのはHSPです
ミス HSPとPHPです
まずこれ if (0 < this.listBox1.Items.Count) { this.listBox1.SelectedIndex = 0; } システムドライブすら存在しない状況が論理的にありえるのか
それただ単純に1つ目の項目を選択したいからじゃないのか?
GetLogicalDrivesの部分はifいらないだろ
将来複雑になること考えて"\\"より@"\"を使うといいよ
Pathを連結する時はPath.Combine
if(true == this.path.EndsWith("\\")) ↓ if(this.path.EndsWith("\\"))
EnumerateDirectories使うならToArrayしないでそのままforeachで回したほうが レスポンスが良くなるかも
今更ながらイデオン便利だな
"" = とか 0 > とかやめろよキモイ
>>449 ちょっと見た感じListBoxのTagを使う必然性が何もないような気がするんだけど...
あとプログラムと関係ないけど、BS(bull shitじゃない)で上の階層に行くっていう エクスプローラのちょっと奇妙な仕様ってXPまでじゃなかったっけか
>>452 フィールドに入れたければ勝手にしろよ
その辺は好きにしな
馬鹿っぽい口調
馬鹿っぽい口調
大事なことですか?
質問者のコードをフルボッコにすると思ったら回答者同士の叩き合いキタコレwwwwwwwwww
>>453 え?
vistaでも7でも、普通に行けるが。。。
(両方持ってる)
普通にBSで上移動するな どーでもいいけどね
そうだっけか。 Vista以降は上じゃなくて一つ前のディレクトリに戻る仕様になった気がしたんだけど記憶違いか申し訳ない。
>>461 あ、そうか
[戻る]と同じか[上へ]と同じかって事ね
それなら[戻る]と同じだよ
xpも[戻る]と同じだと思ってた
[上へ]は[↑]だったはず。滅多に使わないけど
「.」と「..」入れるんじゃダメか、、、だめか
アドバイスを元に書き直してコード量が減りました ありがとうございます
意味がないから。 わざわざ読みにくくしてる。
意味がないと思う根拠は?
え? 意味があるのか? そんなものがひとつも出てないから 意味がある。の反対で意味が無いになるんだけど。
>>467 左辺がbool型の変数でなければ代入が発生してもboolじゃないから弾かれるだけ
まあ自然な人間の思考で考えれば、 「カウントが0より大きいなら」と考えるので if (this.listBox1.Items.Count > 0) こっちが正解。 0がカウントより少ないならなんて言わない
CだかHSPだか知らんが、ifの左辺に定数入れろとか老害に言われたんでしょ あまり突っ込んでやるなよ
小さい方を左にする流儀もあるよ その流儀で0<ならいいんだけど、定数を比較演算子の左にする流儀は個人的には嫌い
if(index < 0 || this.Count <= index) throw new IndexOutOfRangeException(); じゃいかんのか?
以上未満のifなら0<=n && n<10かな
・空文字チェックは "" と比較しないでLength == 0 をみる ・ this.path = this.path.Substring(0, this.path.Length - 2); なんで2文字削ってるの? C:\だったらさらにおかしくなる
\を削るならTrim(new []{ '\\' })かな
いや、空文字"列"チェックはstring.IsNullOrEmptyだろ
まあ左側に定数やリテラルを置くのは、普通は変数の値が区間内かどうか検査する時ぐらいだね。 >・空文字チェックは "" と比較しないでLength == 0 をみる さすがにこの突っ込みは同意しかねるな
>>477 それ
str != null && str.Length != 0;
と等価
定数が出てくるかどうかにかかわらず不等号の向きはなるべく<に揃えたほうが 読みやすいと俺は思うけど好みの問題 でも「定数と比較するときは常に左に定数を置くこと」だけは許せない
>>449 は偉いな
他は叩かれるのが怖くてリファクタリングできないチキン
もっと褒めて
よしよし死ね
調子に乗るな(´・ω・`)
==と=を間違えて if(hoge = 0)とか書いてもコンパイル通っちゃう、if(0 = hoge)ならコケる みたいな言語では定数を左に、みたいな話を読んだけど C#じゃ読みにくいだけだよな
そうだな。 あとif文の括弧の中はbool判定なのに、 if (hoge == true) とかも冗長だな
WPFだとbool?返されたりするんで==true結構使うけどね
つかわねー bool?ならnul結合使うわ
if(window.DialogResult ?? false) { // hogehoge }
>>486 不等号だと向きを気にするのは分かるけど、等号ならどっちに何があってもいいと思うけどな。
プログラムは意図がそのままコードに反映されてる方が 読みやすいと思う。 だから逆になってると右から左に読んでる気分になる
SplitContainerでスクロールバーが出た場合、これをマウスのホイールでスクロールさせたいのですが 検索すると_MouseWheelって名前のイベントを見かけるのですが、僕のVC#2010Expressの右下のプロパティのイベントのところにそのような名前のものがありません マウスホイールのイベントと、スクロールバーの値を設定・取得の方法をご教示お願いします
.NETのフォームにはShowWindow(hWnd, SW_RESTORE)に相当する機能ってないのかな?
this.WindowState = FormWindowState.Normal;
499 :
498 :2011/07/17(日) 19:13:54.84
バグがあった > if (NextIndex < mHistory.Count - 1) は、 if (NextIndex < mHistory.Count) でないとまずいな
バグがあった > if (NextIndex < mHistory.Count - 1) は、 if (NextIndex < mHistory.Count) でないとまずいな
連投失礼...
基本的に変数が左、定数が右。 if(a < 0) if(a > 0) ただし、範囲指定の場合は小さい順に書く if(0 < a && a < 10) 本当ならif( 0 < a < 10 ) と書きたいんだけどな。
ちょくちょく使うならintの拡張メソッドでBetween的なのを作る
if (hoge == true) この形の場合、hogeの単語が実際にどういう名前かで決める。 hogeがisXXXとかhasXXXとか名前からして明らかに trueかfalseかが入ると分かっている場合には if(isXXX) のように書く。 それは英語的に比較的自然な文章だから。 ただし、hogeがflagやvalueやhogeのように true/falseが入っているのか分かりにくい場合は if(flag == true) のように書く。 if(flag)なんて書くとnullが入っていないという意味なのか 正の整数の意味なのか、(言語によっては)文字列がある場合なのか 意図が分かりにくい。 if(hoge)の形式はhogeがオブジェクトである場合のみに限定して使用する。
C#の場合は条件式にboolしか入らないから不要
>>504 どこから湧いてきたのか知らないけど、見当違いな書き込みを長々とお疲れ
そもそも条件式に整数やポインタや文字列が使えるような言語なら一般に==trueじゃダメだろ C#やJavaのように==trueで正しく条件判断できる言語を使ってるってことは つまり真と偽の2値限定のbool型を持ってて条件式にはboolしか入らないってことだから ==trueは不要
何の言語を念頭に書いてんだこれ? オブジェクトって言ってるからC++かPHPか
ついでに 意図が分かりにくいなら変数名から修正すべきだろう flagとかbunkiとかhanteiとか付けたら職場から蹴り出すよ
goto *hata
正直言うと気持ちは分からんでもないけどね。 俺も初心者の時には、if(hoge)よりif(hoge == true)の方がなんか分かりやすいように 感じられた時期があった。
bool?の判定でnull合体演算子使えって言ってたやつは本気だったのかねえ
>>510 null許容型はif条件式の中に直接書けないよ
nullable.Valueにするかnull結合演算子使わないと
>エラー 1 型 'bool?' を 'bool' に暗黙的に変換できません。明示的な変換が存在します。(cast が不足していないかどうかを確認してください)
あなた、本当に使ったこと、あるの?
null合体演算子は n ?? false; の時 n == null ? false : (n.HasValue ? n.Value : false); と等価だから、使わないってことは、これとは意味の等しくない書き方してるってことだな。
>>504 はCやC++で==1とか書いてるんだろうか
スタイルや好みの問題じゃなくて完全に間違いだよ
せっかく俺はスルーしたのに
>>520 より「Null許容型のリフト」の方が説明としてはいいんじゃないか
>>519 それもちょっと言い掛かりっぽいと思うけど....
Cのifは実質機械語のjump if zeroだからC#みたいなbool型がある言語とは自ずから違う
504は後半の例が悪いわ
>>523 じゃあ if (a==true) と if (a)の結果が同じであるケースを前提にしてるってことね?
ならnull許容型を持ち出すのはおかしいし==trueいらないじゃん
例が悪すぎる
前半もどうかな。 bool型にisとかcanとか付いてないと if(hoge)と書こうがif(hoge == true)と書こうが 結局「分岐に入るのはどっち?」ってことに
>>525 何が言いたいのか分からんけど、俺はCを引き合いに出すのは
言い掛かりっぽいと言っただけで、他意はない。
24時間表記のデジタル時計が作りたいのですが時間を表示する所まで出来ました 秒がカウントされていく毎にlabelの文字列を変えるにはどうやるのでしょうか? using System; using System.Windows.Forms; namespace Timer { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.label1.Text = DateTime.Now.ToLongTimeString(); } } }
最終的にはメトロノームが作りたいならそう言ってくれ
>>529 VisualStudioのツールボックスにあるタイマー使えば
>>529 System.Windows.Timerで0.1秒間隔くらいで更新すればいい
>>529 何らかの方法で時間変数を更新して、Labelに突っ込む。
更新するには、コンポーネントのタイマーを使うか、Idleをつかうがよろし。
htmlDocumetにニコ動とかのログイン後のページを読み込ませたいです。 WebBrowser wb1 = new WebBrowser(); HtmlDocument doc = wb1.Document; このdocにhtmldocumetを流し込みたいのですが、やり方を教えてください
秒の間隔ならそんな更新間隔細かくなくていいんじゃない
WebBrowserでログインする方法が知りたいのか?
ありがとうございます
System.Timersが精度としては良いらしいのでこれを使ってやってみました
http://www.atmarkit.co.jp/fdotnet/dotnettips/374timerstimer/timerstimer.htmlの通りにやったのですが エラーがたくさん出てしまいました
間違っている箇所がございましたらご指摘お願いします
using System;
using System.Windows.Forms;
using System.Timers;
namespace Timer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Run()
{
Timer timer = new Timer();
timer.Elapsed += new ElapsedEventHandler(DijitalTimer);
timer.Interval = 1000;
timer.AutoReset = true;
timer.Enabled = true;
}
private void DijitalTimer(){this.label1.Text = DateTime.Now.ToLongTimeString();}
private void Form1_Load(object sender, EventArgs e){TimersTimerTest ttt = new TimersTimerTest();ttt.Run();} }}
>>537 それでもいいですし、webclientとか使って最終的にhtmlDocumetに
ログイン後のページのhtmlソースが入れられればおkです
>>539 面倒くさいから書いてしまうけど
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.Url.AbsoluteUri.Equals("
https://secure.nicovideo.jp/secure/login_form "))
{
webBrowser1.Document.GetElementById("mail").InnerText = "メール";
webBrowser1.Document.GetElementById("password").InnerText = "パスワード";
webBrowser1.Document.Forms[0].InvokeMember("submit");
}
}
って書いてログイン画面開くと、勝手にログインしてトップページに移るから、その時にDocument見ればいいはず
まあ工夫してみて
>>538 DateTime使ってるんだからタイマの精度なんてどうでもいい
どうせUIスレッドで動かさなきゃいけないんだからWinFormsのタイマでいい
いくらぴったり一秒間隔でイベントが発生したとしても、
時刻が1秒進むタイミングと描画タイミングは合わないから1秒より短い間隔で更新する
WinFormsのタイマでやってみました ちょっと疑問が出ました フォームにtimerを置いて右下のプロパティでEnabledはtrueでIntervalは100にデフォルトで設定されていたのに イベントでTickを登録したのに 実行しても動きません Form1_LoadでEnabledとIntervalを書くと動いたんですけど 何で右下のプロパティで設定されているのに、コードで書かないと動かないのでしょうか?
>>541 すいません、webbrowser使わない方法ってありますか?
webbrowserコントロールはなるべく使いたくありません。
現状、単にstringでhtmlソースは取得できているため、
それをhtmldocumentに変換したいのが目的です。
WebBrowser wb1 = new WebBrowser();
wb1.DocumentText = 取得したstring
としたら、スクリプトエラーで怒られました
>>545 DocumentTextプロパティは〜?
547 :
デフォルトの名無しさん :2011/07/17(日) 23:09:10.39
>>545 そりゃ独自で取得したhtmlを内部で渡せばパスが変わるはずだからなあ
html内部のjsなどの入手先などのアドレスが絶対アドレスになってなければ失敗するんじゃね?
>>545 一旦Stringにしてしまうと必要なデータが抜けてしまうから無理だと思ったほうがいい
HtmlDocumentじゃねえと駄目なのか?
XMLじゃ駄目か?
>>548 後で中身を解析したいのです。
stringでも正規表現とか駆使すればできなくもないのですが、
HtmlDocumetの方が簡単かなと思いまして。
550 :
デフォルトの名無しさん :2011/07/17(日) 23:15:58.77
WebBrowserを嫌う理由がよくわからんが別に表示してなくても普通に使えるんだから DOMを使いたいのならプログラム内部でWebBrowserのインスタンス作って ナビゲートだけやってもらえばいいだけだと思うけど
>>549 XMLじゃ駄目なのかって聞いてんだけどな、俺は
HTMLはXMLじゃなくてSGML
HTMLはタグ閉じなかったりとか割りとルール無用だからな
555 :
デフォルトの名無しさん :2011/07/17(日) 23:39:10.03
>>549 ファイルとして書き出して、そのファイルをwebbrowserによみこませたらどうだ?
質問と回答が噛み合ってないと思うのは俺だけだろうか
557 :
デフォルトの名無しさん :2011/07/17(日) 23:47:49.37
質問者のやりたいことがよくわからないのも大きいかと
解析ってのがどういうものなのか教えてもらった方がいいな
所謂スクレイピングがやりたいならSGMLReader使ってHTMLをXMLに変換してLinq to Xmlが簡単だし軽量。
SGMLReaderはGPLじゃなかったらいいのに
配るようなもの作ってから言えよ その頃にはディスアセンブルガーって言いだすと予言してやろう
562 :
デフォルトの名無しさん :2011/07/18(月) 01:50:05.02
ゲームの乱数調整について質問してもいいですか?
私はいいと思いますがみなさんはどうでしょう?
経験則だが質問していいですか?って質問するやつはだいたいのーたりん
構造体のコレクションを生成したんですけど C#ではコレクション中の構造体のパラメータは参照するだけで代入出来ないのでしょうか? 何故か定数扱いされてしまって代入出来ませんでした 何か特別なアクセス方法が存在したりしますか?elementAtやrefは試したのですが出来ませんでした
>>565 List<Point> list = new List<Point>();
list.Add(new Point(0, 0));
list[0].X = 1; //構造体は値型だからこれは無理
list[0] = new Point(1, 0); // 構造体ごと代入すればOK
プログラミングで、aが3以上6以下の場合どう表記すればよいでしょうか? 3<=a<=6 、a>=3 a<=6 などやってみましたがうまくいきません。 a>=3だけとかならうまくいきます。
570 :
デフォルトの名無しさん :2011/07/18(月) 08:27:40.22
>>563 お願いします
>>564 マジでのーたりんなんです
パワフルプロ野球スレでcupsを256にすれば天才選手(低確率で出る初期能力が強い選手)が出ると聞きました
乱数のことはよくわからないんですがそのcupsという項目があって
それを256に合わせればいいという認識でよろしいんでしょうか
それがあってるとして、
乱数は数値化しないとそれにあわせることはできないのでしょうか
もしくは数字だけが分かっていればなんとかなるものですか?
>>570 日本語でおk
そしてそれは市販製品をクラックしようとしているってことですか?
Labelに現在の時刻が23:18として表示されているとします 翌日の2:18にメッセージボックスを表示させたいのですが どうやって判定したら良いでしょうか?
>>572 情報が少なすぎてアレだけど、3時間後にアラームを鳴らしたいの?
それとも固定で2時18分に鳴らすの?
前者ならタイマーで、後者ならシステム日時で判断できる。
>>570 謙遜で言ってると思ったらマジでのーたりんだったでござる
>>566 なるほど
それ専用のコンストラクタが必要になるんですか
やってみます
ありがとうございました
>>573 固定で鳴らしたいです
ただ、日にちの情報はなく、時刻だけで行う方法はございませんか?
その前に本当に構造体が必要なプログラムを書いてるのかが疑問だけどな
ようはアナログの目覚まし時計と同等のものを作りたいのです
一秒間隔に現在の時刻が2:18か確認する。 2:18ならアラームを鳴らす。 もう鳴らしたよフラグをたてる 2:19になったらもう鳴らしたよフラグを落とす 完成
フラグとか止めてw そんなものはエッジ(変わり目)を検出するようにすりゃいんだよ
これはタイマーの精度でずれて2:18を通り越してしまう恐れを感じているのですが このように作ってもOKでしょうか?
と思いましたが秒も表示したいので厳しいですね・・・
アナログの目覚まし時計って 設定した時刻よりもずれてなるだろ?
>>577 いえ、恐らくclassを使った方がスムーズに書けたと思います
今までCを使っていて今回始めて#を使ったのでCと同じノリで使っていたら…といった感じです
一秒間隔に確認とかアホだろw CPUの無駄。 鳴らしたい時間にタイマー仕込めばいいだけ。
そして本体の時刻がずれてるのに気がついて 修正したら間違った時刻にアラームが鳴ると。
>>586 そこにこだわるんなら1分前に起動して1秒間隔でチェックするって感じでいいだろ
DataGridViewのソースをBindingList<T>で作ると表示されますが、ただのList<T>だと ヘッダは表示されるけどデータは表示できません。 BindingListを使わずにListで表示させたいのですが方法が分かりません。 Tは独自に作った、プロパティを複数持ったClassです。
>>584 Win32API呼び出して構造体が必要って場合じゃ無い以外
まず使わない方がいい
C#での構造体のメリット、デメリットをわかってないと百害あって一利なし
>>589 まずは状況を明確にするために、BindingList<T>の使用が不可能な理由を述べよ
バインド後にリスト弄ってる? IBindingListかDataTableじゃないとリストの変更は反映されないだろ
>>589 IBindingListインターフェイスを持ったコレクションでないと変更を検出しない
List<T>は持ってない
またはList<T>変更するたびに毎回DataSourceに代入しなおせば一応表示されるはずだ
その度にDataGridViewの初期化処理が走って馬鹿らしいけどな
>>593 代入だけで表示されましたっけ?
ちょっと試してきます。
>>593 代入って、dataGridView1.DataSource = list;
ってことですよね?データは表示されないです。
Buttonのイベントハンドラの中に書いたんですけど。
最初の代入だけ表示するのですね。 2回目以降は初期化処理が走らないようで、代入しても変わりません。 refleshって初期化処理じゃないんですか?駄目でした。
同じListを入れてないか? newした新しいList入れてみ
諦めてBindingList使うんだな
>>597 ああ、ListもNewしないと駄目なのか・・・
色々むずkじゃしいなあ。ありがとございました。
そんなアホな 一度null入れるとか他にも方法はありそうなもんだが
>>600 あ、本当だ!Null代入したら初期化されて、編集後のデータ表示されました。
これが一番簡単でいいですね。ありがとうございました。
NewとかNullとかこいつVBerだな
null 参照 (Visual Basic では Nothing)
VB6er
>>571 わかりにくくてすいません
低確率で出る選手を出すためにゲームの乱数を調整(解析?)したいです
スレ違いだと思いますが、乱数を見る事が出来る方法とか解析する方法があったら教えてほしいです
>>574 すいません...
607 :
605 :2011/07/18(月) 18:55:42.54
>>606 スレ違いだと理解しているなら出てけクソガキ
>>605 1回目にpsdをpngに変換したあとpngが開きっぱなしになってんだろ
>>608 どっちかっていうとあんたの方がよほどガキっぽい
どっちもどっちはより悪い方の味方
スレのルールを弁えたガキなら大歓迎よ。 ウェルカム。
>>610 無理に中立派を装わなくていいから失せろ
パワフルプロ野球のことは無視するとして 質問は >乱数は数値化しないとそれにあわせることはできないのでしょうか >もしくは数字だけが分かっていればなんとかなるものですか? だな 質問としても意味が不明瞭だし 少なくともC#とは関係ないからスレ違い。 終了。
つか何故このスレを選んだ?
616 :
605 :2011/07/18(月) 19:30:43.60
>>616 ファイルからImageクラスのインスタンスを作成すると
そのインスタンスが破棄されるかDisposeされるまで閉じられない
で、こうする
using(var src = Image.FromFile("hoge.png")){
pictureBox1.Image = src.Clone();
}
>>616 コード見てないから違うかもだけど
Image.FromFile()で開いてるImageオブジェクトをDisposeしないといけないんじゃないかな
>>613 中立じゃなくて、あんたの方がガキっぽいと言ってるんだけど。
しかし、本当に幼稚だな。
>>619 失せろって単語理解できる?
他の言い方にした方がいいか?
死ね
ガキに絡むガキもスレには要らないです
>>620 まあ君が独りよがりなガキだってことは理解した。
夏だNe!
季節で人格は変わらないけどね 春夏秋冬いつでも幼稚な奴は幼稚。
お前も通年アホに絡んでるのか?ヒマしてるなあ
>>625 そうあきらめず、せめて秋には大人になってくれ
628 :
605 :2011/07/18(月) 20:05:12.32
>>618 button4を押したらDisposeするのを書いてみましたらProgram.csのApplication.Run(new Form1());でエラーになってしまいます(Program.csは編集してないのに)
http://ideone.com/Xw15U >>617 using・・・を書いてみたのですがpictureBox1.Image = src.Clone();の部分でエラーが出てしまいました
エラー 1 型 'object' を 'System.Drawing.Image' に暗黙的に変換できません。明示的な変換が存在します。(cast が不足していないかどうかを確認してください)
http://ideone.com/Qvdk6
すまーん キャスト書いてなかったな 自分で書き足してくれ
実行時エラーとコンパイルエラーくらいの区別はつけようや
631 :
605 :2011/07/18(月) 21:20:34.78
using (System.Drawing.Image src = Image.FromFile(temp)) { pictureBox1.Image = src.Clone(); } こんな感じだと思ったんですがヒントおねがいします;;
キャスト!キャストだよ! キャストキャストキャストキャストキャスト
クズ共しかいないなこのスレ
自演半端じゃねえなw
636 :
605 :2011/07/18(月) 21:31:45.47
(image)src.Clone();ってやったら出来ました (型名)コードっていうのがキャストってことですかね?勉強になりました
637 :
605 :2011/07/18(月) 21:43:09.56
638 :
605 :2011/07/18(月) 21:46:29.34
imgをdisposeしてないからだ
640 :
605 :2011/07/18(月) 22:03:33.10
private void printPsd(string url) { MagickNet.Magick.Init(); String fileName = url; String temp = System.IO.Path.GetTempPath() + System.IO.Path.GetFileNameWithoutExtension(fileName) + ".png"; MagickNet.Image img = new MagickNet.Image(fileName); img.Write(temp); using (var src = Image.FromFile(temp)) { pictureBox1.Image = (Image)src.Clone(); } MagickNet.Magick.Term(); img.Dispose(); } とメソッドの最後にDisposeをやってみましたが同じエラーが出ます 書くところは間違ってますか?
using (MagickNet.Image img = new MagickNet.Image(fileName)) { img.Write(temp); } MagickNet.Magick.Term(); using (var src = Image.FromFile(temp)) { pictureBox1.Image = (Image)src.Clone(); } こうじゃないの
こんなクソマイナーなライブラリの質問に何でお前ら答えられるの? 俺みたいに趣味グラマには全然無理
>>640 MagickNet知らんしコードもよく読んでないので適当。
恐らく、Image.Write(path)メソッドは、pathで指定したファイルが既に存在する場合は
例外を吐く(つまり勝手に上書きしない)仕様なんだろう。
上書きしたいのなら、File.Deleteとかで先に削除すべし。
>>642 ImageMagicのラッパーだからマイナーって程マイナーってわけでも
一時ファイル名を取得したほうがいいのでは? System.IO.Path.GetTempFileName() とか
646 :
605 :2011/07/18(月) 22:50:21.85
>>641 ありがとうございます
解決に結びつきました
using (MagickNet.Image img = new MagickNet.Image(fileName))
{
img.Write(temp);
MagickNet.Magick.Term();
using (var src = Image.FromFile(temp))
{
pictureBox1.Image = (Image)src.Clone();
}
}
pictureBox1.ImageLocation = temp;
でいけました。これで表示したあとに、手動で生成されたファイルを消しても消えました
(いままでのはプログラムを閉じるまで消えませんでした)
一応
>>605 の質問としては解決できましたが
何故最後にImageLocationで設定しないと画像が表示されないのかがわかりません
pictureBox1.Image = (Image)src.Clone();の部分はpictureBoxに画像を表示する処理ではないのでしょうか?
ImageLocation使うならImageプロパティ要らないんじゃない?
pictureboxにα付きのビットマップを表示したいんですけどどうやったら出来ますか? bitmapのコンストラクタにファイル読み込みはあるんですけど それを使うとピクセルフォーマットが設定出来なくなってしまいます 逆にピクセルフォーマットを指定出来るコンストラクタを使うと α値の無いビットマップを作ってしまいます 最初からα値0のピクセルデータで初期化出来れば問題無いんですけど 何かいい解決方法は無いでしょうか?
ビットマップって3種類意味があって
Bitmapクラス(System.Drawing.Bitmap)
Bitmapデータ(System.Drawing.Bitmapが内部で持ってるDevice Independent Bitmapデータ)
Bitmapファイル(*.bmpのファイル)
全部違う
どれがどれだ
・アルファ値がついたビットマップ画像の読み込み
http://www.ipentec.com/document/document.aspx?page=csharp-32bit-argb-bitmap-load アルファ値がついたビットマップって仕様にはない(32bitの場合ピクセルの上位1ビットは0固定になっている)ので
無視されても本来は仕方ない
対応謳ってるソフトが仕様を無視してアルファ書き込んでるだけ
一応データとしては読み込まれているので、上記URLのようにBitmapData.Scan0からコピーすることはできる
素直にpng使うべきだがね
× アルファ値がついたビットマップって仕様にはない(32bitの場合ピクセルの上位1ビットは0固定になっている)ので ○ アルファ値がついたビットマップファイルって仕様にはない(32bitの場合ピクセルの上位1バイトは0固定になっている)ので Device Independent Bitmapや、それをラップするBitmapクラスはアルファ値にもちろん対応しています
アルファ値ってなんぞ?
なんですか、だろ
>>652 透明度。
RGBA
赤、緑、青、透明度で色を表す時に使う
GDI+は対応してないみたいね Windowsのリソース(shell32.dllとかの)にはそういうbmpが含まれてるけど
>>648 あの、ちょっと試してみたいのでそのαつきのビットマップっでどうやって作れますか?
もしくはどこかで素材で配布されてましたら教えてください
透明度ってことは背景があると透けるんぞ?
もしよろしければ素材をアップロードしていただけませんか? GIMPのダウンロードサイズが大きくて7〜8時間はダウンロードに時間がかかってしまいまして。。。
丸投げか?w
どこに上げたらいい?
Paint.NETにプラグインでいいだろ
>>662 どうもありがとうございます
アナログ回線だと大きなファイルはキツくてw
その程度でキツかったらWindowsUpdateなんてできんだろ
splitContainerのpanel2にpictureBoxを置いて画像を表示してます panel2にautoscrollをtrue、pictureBoxのDockをFill、SizeModeをCenterImageにしたとき 大きな画像を表示してるときはスクロールバーが出ません pictureBoxのDockをNoneにしたらスクロールバーは出ますが画像がセンターによりません どなたかアドバイスよろしくお願いいたします
そりゃそうだろ 聞きたいことは、スクロールバーが出ないサイズの 画像の時にセンター表示したい、ということ?
>>649 恐らくクラスのBitmapだとおもいます
コンストラクタが12個あるモノです
>素直にpng使うべきだがね
png上で書き込みが出来ればそれでもいいんですけど
最終的に読み込んだ画像上に線を引けるようにしたいんです
お伺いしたい事は、スクロールバーが出るサイズの画像をセンター表示してもスクロールバーもちゃんと表示される方法でございます
>>668 Bitmap.Save()でpngファイルにエクスポートできるっしょ
>>669 PictureBoxのサイズが可変じゃないとPanelに
スクロールバーが出ないだろ?
Normal表示のまま、パネルの中心が
ピクチャーボックスの中心になるように
ずらせばいいと思うけど。
ってNormalじゃだめか。AutoSizeだな 中心位置はサイズからわかるっしょ
673 :
デフォルトの名無しさん :2011/07/19(火) 13:07:48.72
DockをFillにして、WindowsApiでスクロールバー位置を調整するしかないでしょ
とりあえず横だけセンターに持っていきたいのでこうやってみたのですが 画像によって右のほうがスペースが広くなったり左のほうが広くなったりしてしまいます pictureBoxWidth = this.pictureBox1.Size.Width; splitContainerPanel2Width = this.splitContainer1.Panel2.Width; pictureBox1.Location = new Point((pictureBoxWidth - splitContainerPanel2Width)/2, 0); WindowsApiは難しくて検索してみましたが自分には難しいです
追記 ↑ AutoSizeのときです
Location は0,0のままで panelのHorizontalScrollを替えるんじゃないのか?
原因が分かりました 画像が読み込まれる前にコードが実行されてしまうのでWidthを正しく取得できてないのが原因でした ここからは何とかできそうです ありがとうございます
int[] ia = {0,1,2,3,4,5,6,7,8,9} に対して、並べ替えが ia = {5,6,7,8,9,4,3,2,1,0} となるようなLINQの書き方を教えてください。
謎だ
では移動します
この手の質問は定番の釣りネタになってるの?
685 :
デフォルトの名無しさん :2011/07/19(火) 22:38:41.60
>>682 タイミングの問題
LoadイベントやShownイベントあたりだとそのコードを実行したあと
pictureBoxを表示するコードが走って実質折角描画した
データがクリアされてる状態になってる
pictureBoxにClickイベントとか用意してそこにLoadイベントに貼ってある
コードを移植すればたぶん問題なく表示されるはず
OnPaint以外で描画すんな Invalidateの引数によってはOnPaint前にバックグラウンド塗りつぶしが入るんだから
dobonさんのところは割とそのまま動くサンプルが多かったような気がしたけど、
>>682 のサンプルはちょっと妙だな。
メソッドの中身しか書いてないし、何でCreateGraphicsなんか使ってるんだろ
Buttonを押すと実行するようにしたら動きました 取得したフォント名をlistboxに代入して、項目が切り替わったときにフォントをpictureBoxに表示するように書き換えてみたいと思うのですが listboxへの代入は以下のコードでできましたが System.Drawing.Text.InstalledFontCollection ifc = new System.Drawing.Text.InstalledFontCollection(); FontFamily[] ffs = ifc.Families; foreach (FontFamily ff in ffs) { listBox1.Items.Add(ff.Name); } AddRangeで一気に代入する場合、 System.Drawing.Text.InstalledFontCollection ifc = new System.Drawing.Text.InstalledFontCollection(); FontFamily[] ffs = ifc.Families; listBox1.Items.AddRange(ffs); だと余計な文字列まで含まれてしまいます ff.NameのようにNameの部分だけを代入したいのですがforやforeachで別の変数にff.Nameを代入してAddRangeするよりもスマートな書き方はございませんか?
OnPaintじゃなくてPaintイベントじゃねえのと横槍 OnPaintは継承しないと駄目っしょ
692 :
デフォルトの名無しさん :2011/07/19(火) 23:35:10.54
>>690 Form自身ののOnPaintってのが有ってのう
でも実際問題としてフォームに直接Graphicsで文字を描画するなんてまずやらないと思う
>>691 まあ無難なやり方だとBitmapをプログラム内部で作って
そこへ描画、描画が終わったBitmapをpictureBoxに設定とかするほうがいいよ
Paintが〜CreateGraphicsが〜って流れはちょっと前にもあったよな
696 :
デフォルトの名無しさん :2011/07/20(水) 00:24:08.60
>>695 このスレか前スレの終わりの方じゃないかな?
だから定番の釣りネタなのかと思った
>>682 は追記でLoadとかShownなどで実行すると〜
みたいな注意書きを入れておいて欲しいな
確か前もそこをネタに同じ質問になったような気がする
697 :
デフォルトの名無しさん :2011/07/20(水) 00:24:52.50
俺が覚えてたのは「ボタンの上に円を描きたい」って感じのだから
>>73 は違うなあ
まあ定番ではあるんだろう
>>698 それも対応したので覚えてる
当たり判定つけてってやつだろw
ゲームなんかだとフレームバッファーに描画して表示する
っていうのが普通なのでそれに近い感じのコードにして欲しいんだよな
winform関連のコントロールのGraphicsを直接さわるんじゃなくて
dataGridViewに直接columnを設定して、直接データをaddした場合は、 ヘッダをクリックすると▲印が出てsortできますが、 データのプロパティクラスからList<T>を作って、 datasourseでdataGridViewに入れた場合、ヘッダに▲印が出ません。 これはクラスの作り方で何か足りないのでしょうか? 上のほうでIcomparableの実装が何とか、ってあったけどよく分からなかったです。関係無いかな?
データソースにバインディングする場合、データソースがIBindingListを実装してて かつSupportsSortingがtrueを返さないとソートできない。 BindingList<T>の派生クラス作ってソート系のprotectedメンバ実装するのが比較的手軽
フォントの質問をしたものです 画像にフォントを指定して文字を出力する方法以外にもリッチテキストでフォントを表示する方法もあることを知り Paintのほうは難しいので、リッチテキストのほうで表示できてからやりたいと思います listboxにはフォント名が表示されてて、選択したフォントをリッチテキストの文字列に適用して表示させたいのですが 以下のようにして表示させることはできました が、listboxのフォントスタイルまで変わってしまいました リッチテキストのフォントスタイルだけ変更したいのですがアドバイスお願いいたします private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { Size = new Size(350, 200); FontFamily ff = new FontFamily(this.listBox1.Text); Font fnt = new Font(ff, 12, FontStyle.Bold | FontStyle.Italic); Font = fnt; this.richTextBox1.Text = "ABCD1234"; fnt.Dispose(); }
> Font = fnt; リッチテキストボックスのフォントだけ変えたいのなら リッチテキストボックスのFontに設定しようよ
ありがとうございます できました
>Font = fnt; これは this.Font = fnt; のことだからねー formのクラス内でこう記述すると親フォームのフォントが設定されるのねー Fontプロパティはアンビエント・プロパティだから、 個別に設定されていないと親コントロールの値が使われるのねー
ありがとうございます こうかいて目的の動作ができました richTextBox1.Font = new Font( listBox1.Text, richTextBox1.SelectionFont.Size, richTextBox1.SelectionFont.Style | FontStyle.Underline ); richTextBox1.Text = "ABCD1234"; richTextBox1.Font.Dispose();
10秒間隔で処理を実行する方法ってございませんか? メソッドAAAを実行したら、AAA内の処理が終わらなくても10秒後にはAAAを実行したいのです
>>809 普通に Timer でいけない?
けども、10秒間隔で、10秒以上かかる処理を定常的にやると最終的にCPUがパンクするような。
AAAの実行時間にばらつきがあって、10秒超える場合もあるってこと?
809に期待
最近なんかこういう質問が多いね〜 マルチスレッド(聞いたことあるっしょ?)という言葉をわきにおいておくと、 あるプログラム(内のスレッド)が同時に実行できるのは一つの処理だけなの。 ふつうはAAAの処理が終わらないと、もう一個AAAを開始することすらできないの。 そこんとこよろしく。 >メソッドAAAを実行したら、AAA内の処理が終わらなくても10秒後にはAAAを実行したい この場合はスレッドを複数用意するなどして実行しないといけないの。 そうすると、いろいろ面倒なことが起きてくるの。 プログラム(プロセス) − スレッドの関係も勉強しようね。 プロセスはぶっちゃけていうとプログラムね。なんちゃら.exe。 スレッドは基本となる実行単位で、プロセスの中に少なくとも1つあるの。
System.Threading.Timerでできるけど処理の中身についてかなり注意が必要
>>709 みたいな質問してるようじゃ確実にぶっ壊れるので
マルチスレッドについてきちんと勉強するか、嫌なら同時に実行しなくて済む方法を考えたほうがいい
714 :
デフォルトの名無しさん :2011/07/20(水) 22:41:16.06
それは実行時の話なのかそれともアプリ製作時の話なのか
アプリ製作時の話です。(実行時なんてオイラのオツムじゃ土台からして無理っす)
どっちも無理なくせにwww
うぐぅ
手作業もしくは画像を貼る
最終的にどういうものにしたいかがさっぱりわからんので ただ固定でラベル設置して数式を表示するだけなら そういう方法でもいいけどさ
単純に表示させたいだけならTeX式を要求してGoogle先生に画像にしてもらう
単に数式の画像を作るなら、Microsoft Mathematicsがお手軽かもね。 MS製フリーソフトだけどよく出来てる。 全然使いこなせてないけど
独り人海戦術で一文字ずつラベル並べてましたが、MathTypeでメタファイル画像を事前に作って貼り付けるようにしてみます。
724 :
デフォルトの名無しさん :2011/07/20(水) 23:13:07.52
winformで独自にやるならpath使ってやった方がいいだろうな
pathとかありえん やるなら普通に文字を組み合わせる
やるなら普通に文字を・・・ギャル文字?
WordもTexもフォント使って数式描いてるけど
あらフォントw ゴメン我慢出来んかった。
しっかり睡眠とれよ
730 :
707 :2011/07/21(木) 10:23:16.19
>>708 Graphicsを使うのですね、ありがとうございました。
きょうはオナニーの日だからな
俺が質問しないと過疎るねここ
気のせいだ。
ソフト作りたいんですが、何を作ればいいんですか? 何か世の中に必要なソフトを教えてください
菅直人暗殺ソフト
OCRオナシャス!
OCRはGoogleDocsとEvernoteで間に合ってる
>>735 ExpressionBlend Express
名前がくどいな
目が見えない人が多いので音だけで出来るサウンドノベル以外の新しいジャンルと手法を使ったゲームなんかどうだろう 失明予備軍かなり多いし、精神的にもうれしいかもしれない あと、最近すごい速度で脳波コントローラーが進化してるから早めにサイコミュを各ジャンルのソフトに組み込んだ再開発を始めてみるとか あと、楽器を録音して音を出すんじゃなくてGPUを使った物理演算で素材から気温湿度空間すべてを計算したカスタマイズ可能なバイオリンソフトとか作るのはどうだろうか あと、検索エンジンで画像はあるけど音が無いからmp3、midiとかのネットワークエクスプローラとかどうかな リンクから延々と検索していって音素材のあるページの一覧を作るソフトとかどうかな。結果はP2Pで共有すれば現実的かな あとなんだろ、株取引の自動化で、起動させとけば儲かるソフトのコンテストを早稲田大学でやってなかったっけ 全銘柄を同時に条件判断して売り買いするソフト、確か一番安定して利益が出るソフト作った人は1億円の賞金が出てたはず
うるさい
>>744 MathMLの表示ってIEで出来たっけ?
やった事無いから詳しい人に任せるわ
746 :
デフォルトの名無しさん :2011/07/22(金) 01:09:17.97
その前に海外サイトとか探せばそのくらいのライブラリなら 公開されてそうだけど 俺は必要ないけど定期的に出てくるネタなので ある分野の人にとっては必要な物だろうし
Win7じゃなくてもMicrosoft Mathematicsが使えるんだけどね。
>>722 >>746 そのくらいとか簡単に言ってくれて泣ける。
っていうか、基本、人様のコードは使いたくないとか使えない人の方が多いと思うんだけどどうかね
じゃあがんばってTeXだっけ?ああいう汎用フォーマットにあわせた 文字列突っ込んだら画像出力してくれるライブラリを自分で作るか 上でもでてるグーグルのWebAPI使う
TeXも中身はただのフォント
昨日からただのフォントとか言ってる奴、ちょっと頭悪くないか?w もちろん「ただのフォント」に違いないけど、それを奇麗にレイアウトする 手間を考えてるのか?
そりゃそうだがフォント使わずにパスで描いても楽にはならんだろうw パスで描けと言うのに対してただのフォントだと言ったんだよ 749は別人
>>751 いやpathの人です
スケールとかいろいろできるので便利かなあと
フォントもパスだしスケールもできるけど
初心者用ってもウブなハートの持ち主用じゃぁ無い
コントロールを継承した独自コントロールのデザインを デザイナから変更することは出来ますか?
756 :
デフォルトの名無しさん :2011/07/22(金) 16:24:22.68
>>742 GPUを使った物理演算で素材から気温湿度空間すべてを計算したカスタマイズ可能なメトロノームだろ
>>735 ハッキング対策用にダミーのシステムをサーバーとして稼働させておけるようなのを希望
技術はあっても心理トリックを抜けられるかどうかはまた別次元だから
おとりシステムは簡単に侵入できるようにして、ダミーのデータを詰め込んでおけるような奴がいい
>>735 人工知能とか面白いかも
名前は……そうだな、スカイネットってかっこよくね?
>>735 とりあえずWindows8用にSilverlightでマルチタッチ対応の既存ソフト作りなおしでもしてろ
MSマーケットできるみたいだし、今あるソフトは指で操作するにはコントロールが小さすぎる
まずベクター見てタブレットPC用に欲しいソフトを参考にUIを作り直して、来年のWindows8と同時に目標100ソフト上げられるように準備しろ
録画してあるTV・ラジオをすべて音声認識しておいて単語からファイルと発言時間の候補だすソフトってもうあったっけ?
GPSを使ったソフトはまだまだこれからですよ
764 :
デフォルトの名無しさん :2011/07/23(土) 01:05:08.24
巨大なbyte配列に対して論理演算を行った結果が欲しいのですが、1バイトずつやるしか無いのでしょうか? Array.Copyみたいな感じでArray.XorCopyとかやりたいのですが
普通にループで回しても.NETは十分速いけどもし遅いなら fixedでint*にして4バイトずつ処理するのが速いんじゃね それでもダメならCでSSE
DirectX
プログラミングを全く作った事がない初心者です。 今独習C#を読んでいます。 プログラムのノウハウのようなものを学ぶにはどうしたらいいでしょうか?
CodeComplete読んできて 上下ね
>>767 読むよりも書くほうが大事。書いてればそのうち身につくよ。(ノウハウ含めて)
本読んでわかったつもりの人は、逆に頭が固くてダメだね。
やることなくなったなーと思ったら他の言語に手を出すといい 読めるコードは多い方が便利だ ことアルゴリズムにおいて、C言語の実装ならあるのですが〜ってパターンの質問はありがち だいたいテメーで移植しろと返される
>>772 そこまでじゃないですけど、訳あって5月からC,C++、JAVAの入門書も読んでいます。
C#で落ち着くつもりです。Unityでゲーム作るのに必要なんですよ。
>>772 そりゃそうだ
一つ言語覚えたら、他の言語覚える敷居が大分低くなるし、何より、移植はプログラミングの良い練習になる
親心と言う奴やね
C#だいたい覚えたら、JavaよりもHaskellとかF#、もしくはLispみたいな関数型を勉強した方がいい刺激になると思う。
刺激にはなっても役には立たない
>>775 それはまだ早いと言うか、最初にhaskellの方が良いんだが、すでにC#で始めてるしな。。。
移植に関数型言語は共通点無さ過ぎ
C#でオブジェクト指向までしっかり身につけたのちに、サンプルコードの多いC辺りを覚えて移植作業でプログラミングに慣れてからhaskellかな
実用とかより、コーディングスタイルとか抽象的な考え方は見習うところが多い言語だよ。haskellは
随分俺の見解とは違うな。 俺は移植なんて退屈な猿仕事の要素が多いと思うし、 言語なんて必要になった時点で覚えれば十分かと。 必用になってから勉強するのでは遅いことを優先的に習得する方が、まあ要領はいい。 お勉強フェチ(別に揶揄する意図はないよ)な人なら効率なんてどうでもいいんだろうけど、 俺みたいな勉強嫌いは無駄なことに時間使いたくない
ダメな人が語る「見解」も 世の中にはある。
無駄かどうかを知る為には知ってないといけないじゃないか。 ものすごく無駄な事してて、勉強した方が楽だったって事は多いだろ?
必要になったら覚えるってのは、答えを目の前にしてお預け食らうようなもんで、 モチベーションが下がるぜ 社畜仕事ならモチベーションに限らずやらなきゃならない訳だから関係ないけどね 別に揶揄する意図はないぞっと
C→C#への移植は、勉強になるよ。 どういったクラスにまとめるか考えるには最適なモデル。
Form1に全部ぶち込むから自作クラスとか気にしたことないな
Cから移植する時は大体ハンドルに対してメソッドくっ付けるパターンだから機械的にできそうな気もする
>>783 猛者発見
おれそういうの嫌いじゃないぜ
>>781 そんなのは野心でも向上心でもない
上昇志向って言うんだよ
分かるか?
若い奴は勘違いしてるの多いぞ
>>786 何がいいたいのかよく分からんけど、結構じゃないの>上昇志向。
それがあればこそ人は努力するわけで、そこを否定しては何も始まらんと思うよ。
俺なんか全然そういうのないから尊敬しちゃうよマジで。
本当に何言いたいのか分からんな 初めから電波飛ばしてるから仕方ないけど
「社畜仕事」に反応したんだよ。 社畜だから。
781も一言余計なんだよ 知らん言語のコードを移植するためにその言語覚えるとか、モチベーション下がるよね で止めておけば良かった それだけなら誰も否定せん
一応言っておくけど、778=787≠786。
>>786 は何が言いたいのか分からないけど、その点は
>>781 も同じ。
上昇志向と向上心の親クラスは何だろう?野心は何かの派生?
オブジェクト脳は危険まで読んだ
親クラスの属性でも見てみたいもんだ。
オブジェクト脳ってイベントが発生するまで動かないのか?
答えるのが楽しくなっちゃう質問ないかな
ジェネリックデリゲートを実務で使った例を教えてください。
EventHandler<T>
RPGのアイテムのリストを作るのにはどうしたらいいの?
>>798 >>797 の回答かい?
業務内容やその必要性について語って欲しいな。
class Item{}
byte[]に個数を格納するドラクエ仕様とか如何? indexはアイテムの種類 未使用アイテムなんか仕込んどくと楽しいYO
今やってる案件でPredicate<T>使いまくってるわ
なんて読むの?
Predicate<T>はオワコン
Func<T, bool> 使って出来るんで不要と言えば不要だけど、Whereとかの引数がPredicateなのよねぇ。
いや、Whereとかの引数がまさに Func<T, bool> だから不要かと。
あれ? 引数名が pred なだけなんだっけ?
Predicate<T>使ってんのはList<T>とかだな
その頃はFuncがなかったからねえ。
ファイルの検索条件に使っただけだから、Whereのシグネチャとかどうでもいいんだけどね
811 :
デフォルトの名無しさん :2011/07/25(月) 23:01:56.19
Dictionary を使っていて if(dic.ContainsKey(key)){ Foo(dic[key]) } みたいに書くこと多いんですが、これだと 2回 Dictionary を検索することになって 無駄な気がするんですが、1回ですます方法ないですか?
TryGetValue
object value = ((IDictionary)dic)[key]; ただし、null値とキー無しは区別できないので注意
TryGetValue に +1
普通にTryGetValue使えばいいと思うけど、IDictionaryって別にnullを返す仕様じゃないよな?
うん、無いと思う。 実装次第、かつ、Dictionaryクラスはそういう実装じゃない。
818 :
デフォルトの名無しさん :2011/07/26(火) 02:47:52.30
パンツ
for (int x = 0 ; x < bmp.Width ; x++) if (bmp.GetPixcel(x,y) != Color.Transparent) return y; と Boolean isBlank = true; for (int x = 0 ; x < bmp.Width ; x++) isBlank = isBlank && bmp.GetPixcel(x,y) == Color.Transparent; if (!isBlank) return y; とどっちが処理に時間かかるかな?
820 :
デフォルトの名無しさん :2011/07/27(水) 18:31:06.96
C#の勉強をしてみようと思います。C++とJavaは経験がありますが、 C#≒Javaという認識で大丈夫ですか?
821 :
デフォルトの名無しさん :2011/07/27(水) 18:36:24.43
>>819 処理時間の大半がbmp.GetPixcel(x,y)だろうから
どっちでも大して変わらんだろ
>>820 その認識ではダメですが、導入はスムースに行くと思います。
C++やJavaがカバーしていない、C# 3.0以降の関数型言語っぽい要素が、
いまやC#の重要な特色の一つなので、Javaとは別の物という認識をもってそのへんも学習してけばいいかと。
>C++とJavaは経験がありますが
これならいきなり書けると思う。
VC++のインテリセンスとわかりやすいサイトいくつか
ブックマークあればかなりいける
新しく追加された部分は
>>822 の言うとおり
それ用に勉強した方がよいとは思うが。
824 :
デフォルトの名無しさん :2011/07/27(水) 18:45:48.82
>>820 C# 1.0 ≒ Java 4くらい?
C# 2.0 ≒ Java 6くらい
C# 3.0以降はJavaとか比べたら失礼。
>>819 処理時間を気にするならGetPixelやめてBitmap.LockBitsを使いなさい
数桁速くなります
>>826 そういう言えばそういうのもあったな。
でも一番処理に時間がかかってるというか、負荷がかかってる要因は
explorerが生成したpngのサムネイルやらを集めに行くのが原因だったorz
OSを不安定にしてまでサムネイル作るなよ…
>>825 確かになー。。。
何時の間にかjavaの方がc#の機能を追いかける側になってるし
正直C#2.0に追いつけるかもちょっと怪しい
C#から始めたから今更Javaなんてやりたくないっすわ
C#3.0 以降は楽すぎだよな。 他の環境での開発が辛い。。。
もうなんか、老人ホーム並みに数日おきに誰かが同じようなことを何度も何度も言ってるなw 100回ぐらい同じような話を読んだ気がする
新陳代謝激しいのはイイだろ
public class hoge { public List<hoge> Children { get; set; } } のような階層構造のクラスで、親から子は問題なくたどれますが 子から親をたどりたい場合はどうするのが一般的でしょうか
>>834 コンストラクタで親のインスタンス貰うようにすればいいんじゃないの?
インスタンスを持ってないクラス=最上位
とか決めてさ
>>835 ありがとうございます、それでやってみます
838 :
代理レス :2011/07/28(木) 16:32:57.72
>>838 そういうときはさ、いきなり答えを求めないで
imgは正しく入ってるか?とか前もってチェックすることあるでしょ
そして、いきなりaiファイル使うんじゃなくて、別の
読めることがわかってる形式の画像で試してみるとかさ。
MagickNetでaiファイルが扱えるかは調べた?
2008-01-01 6.3.7-9 Cristy <quetzlzacatenango@image...> Use explicit format specifier to render transparent Adobe Illustrator files (i.e. convert ai:image.ai image.png). MagickNet1.03のリリース日時 2007.04.13 はっきり言ってImageMagickの.NET用ラッパーは 更新してないのが多くて使い物にならん
わろた
842 :
デフォルトの名無しさん :2011/07/28(木) 17:56:16.78
GUIのプログラムを作るのはC#が簡単なのかな。
試しにImageMagickでai読ましてみたが、 Ghostscriptインストールしてないと読めないんだな。 両方入れたらやっと読めたわ
>>842 何と比較してるか知らんが、楽だよ
自分の比較対象はC++/java/Rubyだけど、C#の方が楽だった
実行速度とGUIで楽出来るバランスはdelphiのが上なんだけど、入門書少ないし、フリーじゃないので、シェアウェア開発とかじゃないと勧めにくい
(starterでも少額ならお金稼ぎに使っておkというライセンス)
つーかDelphiは…
あの当時とは出来ることも求められることもグレードアップしてるからなぁ。 同列に並べられても。 てか、.NETはDelphiの正当後継者的立ち位置なわけだけど。
>>844 .netのDelphiでもまだそうなのか?てっきりもうDelphiの時代は終わったと思ってた。
var
fstrm: System.IO.FileStream;
とか、すでにDelphiじゃないやい…
そもそもC#の中の人達はDelphiの中の人達とほとんど同じだったでしょ 今は知らんけど
Delphiって言語だったのか?
Pascal、というには拡張されすぎてる感だし、 実際今はObject PascalではなくDelphi言語としているらしいね。
そうなのか
Delphiは打たれる
C#3.0でお気に入りの機能ってなんですか?
全部だ。 3.0は全てが夢ある機能なのよねぇ。
>>852 はダジャレだぞ。
気付いても笑えないけどな。
寒いオヤジギャグだからスルーしてるだけってのに気付けよ
理解できなくてくやしいです
List<T>のTを、参照型のクラスで定義した場合と、値型の構造体にした場合、 インデックスで連続的に{get;set;}するとき、速度的には差が出ますか? あとMSDNの解説で、値型のとき、要素が500以上でボックス化云々て書いてますが、、 何かパフォーマンス上、考慮しなければならないそうだけど、具体的によく分かりません。 どなたか初心者にも判るように教えてください。
初心者ならそんなこと気にしなくていい
構造体は自分で定義する物じゃない と覚えておけば取り敢えず中級者ぐらいまではおk
ジェネリックでよくTって表現されているのはテンプレートのTが由来ってこと?
T→Type
自分で定義した構造体はList<T>には使えないということ?
そのくらい試してから質問できませんか?
できるのか、できないのかくらい偉業ですむのに・・・ じゃあ、構造体の作り方を勉強してきます。
基本的に受け渡しは常に参照型の方が速いと思ってればいいよ 特にソートとか使うなら参照型の方がずっと効率が良くなる コピーのコストがボックス化のコストを上回るような巨大な構造体なら ボックス化してList<object>に入れた方が速いんだろうけど そんな状況ではそもそも構造体じゃなくてクラスを使うべき というかわかんないなら常にクラスでいいよ
C#の構造体は=演算子を介すとメンバをちょっと半端にディープコピーするのでコピーコストからは逃げられん。
代入は通常のシャローコピーだろ 比較の方の=演算子は変な動作するけど
List<T>のadd()って内部的に参照型として使われるんでねーの
いちいちボックス化とかどこのJavaだよ それでパフォーマンスが落ちるのが嫌だからジェネリック導入したんだぞ
意外と細かい仕事してるね List<T> ... 型 T で値型が使用される場合、コンパイラはその値型のために List(Of T) クラスの実装を生成します。 つまり、List(Of T) オブジェクトのリスト要素は、その要素が使用できるまでボックス化する必要はありません。 約 500 のリスト要素が作成されると、ボックス化しないリスト要素が保存されたメモリは、そのクラス実装を生成するために 使用されたメモリよりも大きくなります。 あとC#やってJava戻るとインタフェースやらの扱いがわけわからなくなる struct S : IHoge { public int v; } List<IHoge> list_s = ..; new_S.v = 0; list_s[0] = new_S; new_S.v = 100; ってやったとき,list_s[0].v は 0ってことでいいの?
>>872 読みにくい。
おまけに意味不明。new_Sって何?
ボックス化された値は二度と変更できない。イミュータブルなオブジェクトになると考えればいい。 そもそもインターフェイスにフィールドは定義できない。 値型をインターフェイスにキャストするとその時点でボックス化が行われるので、 値型を使うことによるパフォーマンス上のメリットも全く無くなる。(元々無い場合が多いが)
875 :
874 :2011/07/30(土) 17:21:43.54
訂正 イミュータブルなオブジェクトになる->イミュータブルなクラスにラップされる
でもIEnumerator<T>って値型で実装されることが多いよね
foreachはIEnumerator<T>もIEnumerable<T>も関係ないからな。 ダックタイピングってやつ。メソッドの名前と引数の数があってりゃforeachできるよ。
なんか全然かみ合ってないレスが続いてるけど、 今日は統合失調気味の奴が多いのかなw
マジカルバナナを楽しんでいるんだろう。
IEnumeratorを値型で実装したかったから、ボックス化を避けるために
>>877 みたいな変な仕様になったんだよ
ちなみにyieldで生成されるイテレータが構造体ではなくクラスなのは、
自動生成された型をクラスの外に見せるわけにはいかないので、GetEnumeratorで
IEnumerator<T>にボックス化して返さざるを得ず、構造体の意味がないから
>>873 返信ありがとう
でも理解できないことは別に報告いらないです
>>881 報告してるんじゃなくて、はっきり言えばお前は馬鹿だって言ってるんだけど....
なんで無理して構造体使おうとするんだろうな プロパティのみのクラスを作ったらダメとでも思ってるんだろうか
そういうことを教えてくれる書籍が皆無だからじゃない?なんかいい本ない?
お前の世界は書籍がすべてなのかっていう
>>885 トピックス的には、とりあえず Effective C# でいいんじゃない?
初心者を言い訳にしたら終わりだわ 逃げを打つ道具じゃないでしょうよ
いいのよ〜初心者は。 変数の初期化の仕方から、命名の方法、なぜこんなキーワードがあるのとか、構造体があるのとか、どっちの方がパフォーマンスがいいのとか、シングルトンにすれば便利ですよねとか、何でも聞いていいんですよ。 なんたって初心者様ですからね。 初心者様がいてこそのこのスレです。
オススメの書籍、オススメの命名法、オススメのパターン、オススメのフレームワーク、オススメのDB、オススメのエディタ、オススメの
>>890 「どんなにくだらないC#プログラミングに関する発言でも」
だ
初心者を名乗ることはC#に関係ない
そんな根性無しにどんな罵倒をかけようがスレのルール違反じゃねえ
死ぬまで続けるといい。 静かになる。
>>893 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
都合のいいとこだけ抜粋せずに全部読めやボケ。日本語も読めんのかこの馬鹿は
どうやらこのスレの初心者が居るようで
C/C++では、引数の数を減らしたり、関連するパラメータを一括して扱うために構造体を使う。 運用は、構造体そのものを伝えるのではなく、アドレスを指定するのが一般的。 C#では、同様の目的にクラスを使う。C#の構造体は、値型インスタンスを大量に必要とする場合などに限られる。 C クラスが無いので構造体一択 C++ プロパティだけなら構造体、メソッドも必要ならクラスにする C# プロパティ・メソッドの有無に関わらずクラスの利用が一般的 Win32APIをC#から使う場合、パラメータを格納する構造体をクラスとして再定義する手法も良く使われる。
>C#の構造体は、値型インスタンスを大量に必要とする場合などに限られる。 「C#の構造体」=「値型」なので意味不明
文脈からして「C++の構造体」に対して、値型であることを強調したかったんだろ。 俺は普通にそう読んだが、中国人には解らないかもな。
ボタンを押されたときにサイズをと背景色を変化させるようにしたんですが 低スペックのPCだと若干チラツキが発生してしまうのはどうしたらよいでしょう SuspendLayout/ResumeLayoutを試してみても効果が感じられず 他に何か改善策はあるでしょうか?
何のサイズ? ちらつくということは、同じ場所に複数の書き込みがあるわけで
902 :
デフォルトの名無しさん :2011/07/31(日) 12:29:45.99
>>900 OSがわからんけどXPまでのOSでWinFormはそのちらつきって完全に回避は無理じゃなかったっけ?
>>900 バッファ(メモリ上に作ったビットマップ)に一度描画してから表示させては?
描画最中は表示されないからチラつき抑えられると思うけど
継承して自前描画してダブルバッファオンでどうでしょう
905 :
デフォルトの名無しさん :2011/07/31(日) 13:03:46.13
DataGridViewにダブルバッファプロパティをtrueに設定すると、 カラムサイズ変更時に変更位置を示すグリッド線が表示されなくなるのですが、 表示したい場合はどこで描画処理を実装すれば良いのでしょう。
スレ違いかもしれんが、ちょっとご相談 これから.net始める人にVB.NETとC#どちら勧めるべき? 個人的にはC#を進めた方がいいのかなって感じてる もろもろC#の方が優遇されているように感じるんだよね おまえらの意見を参考にさせてもらえたら嬉しい
無難を求めるならC#。 お勉強マニアなら両方。
レスさんきゅ 立て続けに質問で悪い C#のどんなところが無難で、VB.NETのどんなところが無難ではない? 「無難を求めるならC#」 この言葉は感覚的にすごく俺の中でもしっくりくる でもなぜしっくりくるのかが分かってない・・・
VB.NETはVB6などを使ってた人たちへの救済策 新しく覚えるような言語ではない
>>906 優遇で言うと、そりゃ明らかにC#の方が優遇されてる。
世界的に見たら仕様人口も圧倒的にC#。
日本はなぜかVB大国って言われてるけど、それもVB.NETじゃなくてVB6なレガシー残ってるだけ。
その日本でも、最近ついにVB.NET系よりC#の方が本が売れるようになったという話も聞く。
なるほど VB.NETにはやっぱりそういった側面もあるのかな MSから 「.NetはじめるならVB.NETとC#どっち?」 みたいな選定の基準になるような情報とかアドバイスが出てれば助かるのに・・・
>>908 基本的にVB.NETはVB6からの移行や、VBAやってる人向け。
で、それは、プログラミングのプロじゃなくて、業務のプロ。
プログラマーが覚えるものじゃない。
それもかなり偏見入ってると思うけどね
>>911 例えばWP7での開発用テンプレートもVB.NETは後回しになってたり(今はどちらでも開発できるけどね)
MS自体もまずはC#を優先、あとで一応VB.NETという感じだからねえ。
言語機能的にはそこまで大きな差はないけど
構文がC#のほうが綺麗なので(特に最近多用されるラムダ式周りがVB.NETはキツい)
どちらも触ったことない状態でC# or VB.NET を選択するなら、どう考えてもC#。
色々な情報が聞けてホントありがたい C#は純粋なOOPの思想から生まれたプログラミング 一方、VB.NETは6.0以前のエンジニアの移行も考慮された準OOP的なプログラミング 現在MSがメインストリームとして捉えているのはC# なんて感覚だったけどあながち間違っていないかな
2008のころ、VB.NETはもう作らないとMSが言ったけどブーイングがひどくてしぶしぶ作ったとか
917 :
デフォルトの名無しさん :2011/07/31(日) 13:45:44.45
今の.NETのトレンドは純OOPから離れる方向性なんで、その意味ではVB.NETのほうがOOP的だな
> 純OOPから離れる方向性 どういうこと?
>>916 そんな話聞いたことないぞ。
っていうか、VBには旧VBとか非C系言語からのマイグレーション用という他に
競争原理の導入っていうMS内部の事情もあるから、それはありえない。
>>916 まぁこれはC#信者による都市伝説レベルの作り話だろうね
921 :
914 :2011/07/31(日) 13:50:16.87
>>915 いや、どっちもOOPですよ。
VB.NETはVB6.0と似てるけど全然異なるから。
機能も大体同様。
純OOPから離れる?かはともかく、関数型言語的な機能もC#と同様に追加されているし、
今はC#チームとVB.NETチームも半分統合したらしいので、今後もそんな差は出てこないはず。
(実際、次のバージョンに入るらしい非同期構文はC#版とVB.NET版、両方のCTPが公開されてる)
将来的にもVB.NETがなくなることもない。
だから、もし仮にVB.NETのソースコードの見た目のほうが好きだ!
というのなら、VB.NETはを選んでも大丈夫ではありますね。
.net1.0や2.0時代にはここで言われているようなC#の優遇性や VB.NETがレガシーPGからのマイグレーション用にすぎない という考え方もあったのかもしれないけど 今となってはもう本当に方言の違い程度の差しかないと 考えていいみたいだね C#スレで聞いてるからどうしてもC#に偏った意見が多くなるのは 当然かもしれないけど C#≧VB.NET どのような観点から見てもこの構造には間違いないかな 例えばこれが逆になったりすることはまずないように思う
3.5のC#とVBの格差はヤバいぞ
VBはC#とほとんど同じように使えるから、当然C#使える人から見たら 方言の違い程度にしか感じないんだろうけど、逆は結構違うぞ? 良し悪しを抜きにすればVBの方が圧倒的に高機能
VB9はラムダ式に条件分岐が入れられないんだぞ?
{ }で済むのがENDなんちゃらと書かないといけないのがVBの面倒なところ
>>926 アプリケーションフレームワークとかの事を言ってるのかもしれんが、
それは言いすぎw
VBの方が便利な部分もあるのは事実だけど、個人的にはunsafeとvolatileを
使えないのが痛い。
VBはObjectにボックス化されたDecimalをいきなりIntegerにキャストできるんだぞ? On Error Gotoが使えるんだぞ? どこにいてもフォーム取ってこられるんだぞ?
End FunctionならまだいいけどRemoveHandler, AddressOfとかもう嫌がらせの域だろ
要は一長一短といったところなのかな 逆に言うと、VB.NETを使った方がよいシチュエーションってどんな時だろう たとえばVB6.0以前のエンジニアが多い時くらい?
>>931 AddHandler、RemoveHandler、ジェネリックテンプレートの(of T)は確かにくどい。
あと謎のキーワードOverloadsも
AddressOfは、VB10から不要になったような気がした
>>934 VBにはそんな明るくないので正確かは分からないけど
ラムダ式が微妙だったりメソッドチェーンでアンダーバーだらけになったり
yield returnがなかったり(それはVB2010でもないんだっけ、次には入るそうだけど)
だったかな?
かわりにクエリ構文がC#よりもパワフルだったり、XMLリテラルがあったり、だったっけ。
>>935 どんな格差があるか具体的に言って欲しいなぁ
これじゃ無知なエンジニアに根拠なしにVB.NETは糞って
イメージを植え付けたいだけの釣り発言でしょ?
VB2010でyield導入って中止になったんだ。知らなかった。 実装が面倒なのはわかるけど、MSはVBでインフラ書く奴はいないと思ってるのか?
>>939 なんだかレスが周りくどいな
で、君はどっちが優れていると言いたいの?
>>916 2008の頃に言ったセリフだと、「VBチーム、C#チームに統合します」じゃね?
差を縮めて行きますっていう。
まあ、縮まってないところもあるんだけども。XMLリテラルとか。
>>933 >>922 ってそんなに重要なことか?
なんか重箱の隅をつついてつまらないことで責め立ててるようにしか見えないが
yieldなんてなくてもどうにでもなるでしょ ここでVBがいい!C#がいい!って言ってるのは所詮慣れの問題 重要なのはマイクロソフトがどちらに体重を乗せているかってこと それは現状ではC#の方ですね、てだけの話
>>944 フレームワークや基本的なライブラリ作るには重要だよ
LINQの実装がどれだけyieldに依存してるか
2.0がでた頃は誰得な感じだったが今となってみるとMS自身が欲しかったんだろうな
>>944-945 あった方が確実にいい。
いちいちIEnumerable実装するのは面倒。
俺はVBに同情的な方だけどないのは手抜きとしか思えない。
949 :
デフォルトの名無しさん :2011/07/31(日) 14:51:53.31
ああVB.netってことか どうでもいいや
IEnumeratorじゃないと列挙途中の変更とかに対応できなくね?
競争原理うんぬんは分かった ただいつだってユーザーは思ってる 一つにまとめてくれ と それを踏まえたうえでの競争原理を有意義に活かしてほしい
今、C#とVBって同じチームで作ってるから競争原理とか働かないよ。 yield も次のバージョンで入るんじゃなかったっけ?
良くも悪くもMS自信が使っているというのが大きいわな MSが欲しいと思った機能がすぐにC#に追加され、 それをVBユーザーが欲しがったらVBにも追加される
みんなVB.netのことを馬鹿にするけど、これだってすぐれた点はあるんだ! たとえば多重ループからの一括break…… 他なんかあったっけ?
>>954 次期バージョンの話だけど、ラムダ式内でYield使える。
メリットないと思ってるけど、VBにしかない機能ってので言うと、
XMLリテラル、Withステートメント、WithEvents、Handles。
あと、VBの場合匿名クラスがmutableなんじゃなかったっけ。 (C#のはimmutable。そうしとかないと、ToDictionaryとかで辞書のキーになったときにヤバい。)
こう答えでたんだから、そんなき力いれないでもさ。
C#勉強してて、モチベーションが上がらないときはどうしてる? Linq、イテレーター辺りを勉強してるんだけど、どうもモチベーションが上がらない アプリをつくろうと思っても、長続きしない・・・
>>958 C#は手段であり。目的ではない。わかるな?
強制されているのでなければ止めればいい
まとめるとVB脳の恐怖ということで>all
>>958 泡姫にマットでスリスリしてもらって、首筋をナデナデしてもらう。
これで心機一転、月曜から水曜辺りまではモチベーションが持続する。
>>961 そういうのがいちばん「○○脳の恐怖」っぽい。
>>958 それが君にとってアウェーだからだ。
もうちょっと手の届きやすいところから始めるといいと思うよ。
VB.NETで書くのは別に文句言わないけどせめてOption Strict Onにはしてくれ
電脳の恐怖--サイバーガール--って書いたらなんかB級映画くさい
電脳 子 射る ?
ボクサッチー
アプリでどうしてもHTMLで出力したいんですけど、StreamWriterクラスのWriteLineメソッド使って一行づつ出力してるんですけど ソースが汚くなりがちで・・・ちょっと困ってます 他には一回変数に入れて、 string html = @"<!DOCTYPE html> <html> 〜省略〜 </html>"; みたいな感じにすると、出力されたファイルのソースを見ると左がものすごくあいてしまいます・・・ どうにかプログラムのソースも出力ファイルされたファイルのソースも綺麗にする方法ないですか?
974 :
デフォルトの名無しさん :2011/08/02(火) 06:10:40.39
>>972 C#じゃないけど、そういう処理はPowerShellに頼ったりしてる。
C#でやるならテンプレートエンジン探してくるのがいいと思うけども。
あと、そのコードで左側がものすごく空く理由が分からない。
@"以降の行、全部左に寄せりゃいいんじゃない?
ソースコードをよく見ればわかるよ @はソースにを書かれてるのをそっくりそのまま文字列にする もちろんインデントも例外じゃない
素直に+で連結すればいいのに。 コンパイル時に連結されるから、パフォーマンスヒットは無いぞ。
>>972 標準ならT4テンプレート。
前処理されたテキストテンプレートという項目があるから、多分、それが用途に適してると思う。
出力の見た目を気にするならT4はクソ面倒だよ 明示的にインデント入れたりしてたら結局コードで出力するより手間かかる
非同期的にWeb上から文字列をダウンロードしたいので System.Net.WebClient.DownloadStringAsynceメソッドを使ったんですが、ダウンロードしてきたものをどうやって受ければいいのかわかりません DownloadStringメソッドならstring型の変数で受けれたんですが・・・どうやって受け取ればいいですか?
>>980 そのメソッドの引数にデリゲートを受け取る引数ってなかったっけ?
もしくはWebClientにイベント。 詳しい使い方はMSDN見るとわかるよ。
あと、WebClientって古いから使うなとか何とかなかったっけ?
別のやつが古くてWebClient仕えって話だったかも知れないけど。
982 :
デフォルトの名無しさん :2011/08/02(火) 22:08:47.98
>ダウンロードが完了すると、DownloadStringCompleted イベントが発生します。アプリケーションは、このイベントを処理して通知を受け取る必要があります。ダウンロードされた文字列は、Result プロパティで使用できます。
client.DownloadStringCompleted += (sender, e) => { text = e.Result; }; client.DownloadStringAsync(uri);
え!WebClientが非推奨? ちょっとその情報どこよ。
>>981 ResponseHeaderから文字コードを判定してデコードしてくれないのが嫌って言ってる人ならいた。
だからHttpWebRequest生で使うとかわけのわからないことおっしゃってたけど、
それならWebClientでも別にできるのに。
やっぱ
>>980 みたいなレス見るにつけ、C# 5.0早く来て―って思う。
名前付き Mutex を使っていたんですが、 すでにほかのプロセスで、その名前の Mutex が所有されているかどうかだけ、 自分で所有権を得ることなく調べる方法はありませんか? おそらく Mutex 以外を使えということになると思っているのですが、 何を使ったらいいのかまで教えていただけると幸いです。
if(m.WaitOne(0, false)) { m.ReleaseMutex(); } これじゃ駄目なのかよ
989 :
987 :2011/08/03(水) 03:24:20.43
かなりタイミングがシビアなのですが、 m.WaitOne(0, false) から m.ReleaseMutex() の間に別のプロセスの WaitOne(0, false) が実行される可能性は考えなくてもよいのでしょうか? たしかに、言われてみれば、そのような状況になるのは、かなり考えにくいとは思うのですが…
m1.WaitOne(); if (m2.WaitOne(0, false)) { m2.ReleaseMutex(); } m1.ReleaseMutex(); そんなもの2段ロックすれば良いだけだと思うけど
それはそうと、次スレは準備しなくてもいいのかね?
992 :
987 :2011/08/03(水) 03:41:00.06
>>990 なるほど、おっしゃるとおりです。
ありがとうございました!!
じゃあ立てます
おつ
うめ
998
999
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。