ふらっとC#,C♯,C#(初心者用) Part53
終わり
質問者には丁寧に教えてくれるけど その後回答者同士が共食いを始めるのですが どうしたらいいのでしょうか
諦めましょう 回答が付いたのだから、それでいいじゃないですか その後で戦争が起きたとしても気を揉む事はありません
比率としては 質問、捕捉を含めて4レス 回答、重複を含めて3レス そのあとのいざこざ、だいたい100〜200レス ってところか。 スレッドを1000まで使い切っても、まともな質問は数個しかない計算だな
罵りあいに費やした時間:プライスレス
人気あるな
10 :
デフォルトの名無しさん :2010/01/10(日) 13:15:37
ノートパソコンでは一般的なFnキーと組み合わせたキーのイベントを 取得する方法はないのでしょうか?
お前ら…
実は…
俺の・・・
自演
ではなく・・・
あたし女だけど・・・
明日…
あたし成人式…
List<T>には最大いくつまで登録できますか?
Int32.MaxValue個
その前にOutOfMemory来ないかしら
Int64.MaxValue っぽいけど、その前にメモリ不足になるんじゃね?
いやList<T>はインデックスがInt32だから
LongCount ってのもあるよ。
ないよそんなもん 拡張メソッドでEnumerable.LongCountがあるけど列挙して数えるだけだから絶対にInt32.MaxValueは超えない
ないね
ないアルヨ。
>>33 もうそういうのいいから
暇ならテレビでも見てなさい
>>34 間違ったことを書き込んだからって、顔真っ赤にしなくてもいいのに。
俺の目はごまかせないぜ
#region ゴミレス
このスレにはおっさんしかいません。
#endregion
#if false
#pragma
[Obsolete("もうだめぽ")]
while(true){ kuso = "クソスレ"; printf("このスレは{0}",kuso"); }
コンパイル通らねーよw
DataGridViewでデータベースに接続し自動的に内容を表示するようにしたのですが そこに処理を一つ割り込ませたいのですがどこで挿入の処理がされているのでしょうか?
49 :
デフォルトの名無しさん :2010/01/11(月) 01:35:03
C#でスクリーンのある位置のpixelの色を取得する方法で、 Bitmap bmp = new Bitmap(_width, _height); Graphics g = Graphics.FromImage(bmp); g.CopyFromScreen(new Point(_left, _top), new Point(0, 0), bmp.Size); _width _height は切り取りたいサイズ _left _top 画面上の切り取り開始位置 あとはBitmap のGetPixelで指定すればOK? というのがありました。これで、カーソルの位置の場合は、 g.CopyFromScreen(Cursor.Position.X, Cursor.Position.Y, 0, 0, bmp.Size); となると思います。 これで、WPFの場合にはどうしたらよいんでしょう? というのは、Cursor.PositionはFormなので、変更しないとだめなのです。
form_loadedとか?
>>49 vbやformsのクラスを呼びたいときには参照を追加する
>>49 Mouse.GetPostion(・・・);
>>50 ああ、そういうことではなくって
データのチェックをかけてから表示させたいのですが
表示ようにデータの追加を行ってる間にした方がいいだろうと思って
テーブルアダプタなんかを見てみたんですがどこでやってるのかわからずに・・・。
どうにも困っていまして、先達に教えを請いたいのですがよろしいでしょうか? XP版VS2005のC#で、スレッドを使用して、USB機器(読み取り機)にアクセスするプログラムを作成しています。 フォームからスレッドを呼び出し、スレッド上でループして、機器にアクセスできたらポートを開けて内容を読み取るということをしています。 機器が差された際にアクセスするのはできました。 ですが、機器を引っこ抜かれると、スレッドが飛んでしまうようなのです。 抜いた後、Debugモードで確認すると、ループ内のブレイクポイントには引っかかりません。 引っこ抜いたときに、exceptやfinallyも通っていないようです。 何度抜き差ししても読み取りに行けるプログラムを作ろうと思っているのですが、 スレッドが終わったことを、フォーム側で知ることはできるのでしょうか? どうかお教え願います。
>>54 ありがとうございます、読ませていただきました。
残念ながら、機器へのアクセスは、専用のDLLを介してやらなければならず、
通常のシリアルポートコンポーネントは使用できません。
(ポートへのアクセスも専用DLLのメソッドを使用しています)
根本的な解決にはならないけど BackgroundWorkerなら死んだ事が OnRunWorkerCompletedイベントでわかるかなとか思った
>>56 ありがとうございます。
BackgroundWorkerは試していませんでしたので、やってみようと思います。
>>53 確かにスレッドが死んでることは確認した?
>>55 そのDLLを使って機器の接続状態を監視するしかないような気がする
DLLというのは.NETのアセンブリなのかWin32DLLなのか COMなのか、そのくらいは書こうよ。 それより例外を捕捉できないというのはどういう状態なんだろう? 気になるな。
>>59 ついでにお前の行動も監視できたら便利だなw
なんだろうこのキチガイは・・・。
別スレッドの例外はAppDomain.UnhandledExceptionで捕まえられる できれば別のAppDomain作ってDLLはその中でロードして動かすようにしたほうが安全かも
65 :
デフォルトの名無しさん :2010/01/11(月) 11:54:58
プログラム組むのって楽しいのに時々嫌な気分になるよね まあ大体はアホな人があほな要求するからなんだけど
どうしようもないな・・・
C#ブリブリ・・・。
ショートカットキーからショートカットマークの無い元のアイコンを 取得したりするにはどうすればいいんでしょうか? 実行ファイルに埋め込まれてる物もあればシステムリソースで 持ってる物もあるようですし
DLLをEXEでラップしてexeをwaitすればいいと思う
へー。
72 :
デフォルトの名無しさん :2010/01/11(月) 13:36:12
プログラムのログを記録するのに、AプログラムとBプログラムの両方に、 File.AppendAllText("log.txt", log内容); と書いてあります。 AとBが同時に書こうとすると、ロックされていて書けないのですが、その場合、しばらく待って書くのには、どうしたらよいですか? try{ File.AppendAllText("log.txt", log内容); } catch{ Thread.Sleep(2000); File.AppendAllText("log.txt", log内容); } とか?
数回リトライするようにすればいいんじゃね?
mutexを使えばいいんじゃないか
lock(lockobject) { } とか書けよ。例外ループしてどうする
クライアントならTraceSource使うべき Traceクラスでも自動で排他制御してくれるけど
log4netってあんまり使われてない?
lockじゃ他のプロセスとの排他はできないんじゃ
log4ってマルチスレッドに対応してるの?Javaのは対応してないけど。
単一プロセスでしかlockできないならどうやって同時アクセスするの?
え?
イベントログでも使ったら
>>81 FILE_SHARE_READ
FILE_SHARE_WRITE
FILE_SHARE_DELETE
>>76 みたいな質問を半分しか読まない奴も死んでくれ
基本的に1レス前しか見ない。脳髄で反応する。
脳髄って普通に脳と同義なんだが、おまえは何言ってるんだ?
ワロタ
>>87 普段脳味噌使ってない人なんだろ、たぶん。
せめて脊髄にして欲しかったな
最近C#でプログラム始めたばかりなんだけど、動的配列にstructを入れると、 メンバを書き換えられなくなる原理がよくわからない こんなことしなきゃいいんだろうけど、理屈がわからなくてなんか気持ち悪い 参照型/値型、参照渡し/値渡しが動的配列でどうなってるか理解できないからだと思うけど public struct Sample1 { public string name; } static void Main(string[] args){ List<Sample1> SampList1 = new List<Sample1>(); Sample1 Samp1 = new Sample1(); SampList1.Add(Samp1); SampList1[0].name = "ゆきお"; }←ここでエラー 変数ではないためList<Sample1>.this[int]の戻り値を変更できません。 ────────────────────────────── public class Sample1 { public string name; } static void Main(string[] args){ List<Sample1> SampList1 = new List<Sample1>(); Sample1 Samp1 = new Sample1(); SampList1.Add(Samp1); SampList1[0].name = "ゆきお"; }← class+コレクションならコンパイル通る ────────────────────────────── public struct Sample1 { public string name; } static void Main(string[] args){ sample1[] SampList1 = new Sample1[1]; Sample1 Samp1 = new Sample1(); SampList1[0] = Samp1; SampList1[0].name = "ゆきお"; }← struct + 静的配列ならコンパイル通る あと、動的配列の中身を別の動的配列にコピーしたい場合、 動的配列2 = 動的配列1; でコピーした場合と、 Addメソッド使って、で要素を一つずつコピーした場合とで、 後でRemoveAtなんかでコピー先の要素を削除した時に 前者はコピー元の要素も削除され、後者はコピー元は影響無しの原理もよくわかってない 今ぐぐって調べてるけど、あまりに基本的過ぎる話のせいか初心者向けの解説無くて
クラスにすればおk
SampList1[0] = new Sample1() { name = "ゆきお"};
>>91 値型と参照型、配列の添え字によるアクセスとインデクサによるアクセスの違い
値型の配列にList<T>のインデクサ使ってアクセスすると
list[0] の段階で実体がコピーされてしまうので、想定されている内部の構造体にアクセスできないのでエラーになる
参照型の場合は実体がコピーされないので問題ない
そもそも、それは配列なのか?
indexerの場合エラーにしてくれるんだね。 プロパティだとエラーにならないから、 hoge.Size.X = 100; // Size structのSizeプロパティ で変化しない、なんでってことになる。
自分でインデクサ書いてみればわかる
hoge.Size = new Size(128,256); これ地味に嫌
structは危険だな。
structは"ゆきお"とはうまくやっていけないんだよ
101 :
デフォルトの名無しさん :2010/01/11(月) 16:53:23
自分で書くクラスの中でstruct使うならいいけど クラスの外とやり取りする場合は使わない方がいいかもね〜
人の名前入れるような型は構造体ではなくクラスにするよな というか無条件にクラスでおk 構造体を使うのはメモリの仕組みをよく理解した上でパフォーマンスを出したいときだけ
>>92 は
Listとか配列の機能についてこう思ってるのかな
int[] x=new int[10];
int age=100;
x[0]=age;
x[0]=500;
ってやったらageが500になっちゃうとか思ってるのかな?
class の場合は List に参照が、struct の場合は実体が形式上は保存されているということがわかれば、出来ない理由がわかる。 このあたりは、C++なら -> と . で区別されるんだけどね。
>>96 それ間違ってる。
それがエラーにならないのはXがフィールドじゃなくてプロパティだから。インデクサかプロパティかは関係ない。
Xがフィールドならその代入に意味がないことはコンパイラにとって明らかだけど,
プロパティは実装を変えられるから必ずしも意味がないとは限らない。
106 :
デフォルトの名無しさん :2010/01/11(月) 17:19:50
構造体の中身がstringじゃなくintとかだとどうなんだろ
一部だけフィールドを書き換えるようなものはクラスにする フィールドを一括で書き換えるようなのを構造体にする
109 :
デフォルトの名無しさん :2010/01/11(月) 20:05:06
パネルAにグループボックスBを置き、 Bの上に ○男 ○女 という2つのラジオボタンC、Dを配置します。(C、DはともにTabStop = true) そして、次の手順を行ったとき、 @ AのEnableをfalseにする。 A CのCheckedをfalseにする。 B DのCheckedをfalseにする。 C AのEnableをtrueにする。 ラジオボタンC、Dにタブが遷移しなくなります。 どうしてもC、Dのどちらもチェックがない状態で、AのEnableをtrueに戻したいのです。 どうすれば解決できるでしょうか。 よろしくお願いします。
ラジオボタンでやるなよ。
111 :
デフォルトの名無しさん :2010/01/11(月) 20:20:23
>>110 さん
そんなことおっしゃらずに…(>_<)。
全てのラジオボタンのCheckedを外した状態で、
そのコンテナのEnabledをtrueにしたときに、Tabが当たらないようです。
思いがけない個所でつまずいてしまいました。
解決方法を教えてください(>_<)。
ラジオボタンはどれかにチェックする、ってのが正しい使い方だから、 変な使い方して変な結果になってもしょうがないだろ。
ラジオボタンはニュートラルな状態を想定したUIじゃないから、 「常に1つだけが選択されている」状態から外れるのは良くない この場合は未選択、未設定などの選択肢を用意するのが正道
クリックしたはずのボタンがfalseにされたらフォーカスがいかない仕様かな 一応リストボックスで簡単に代用できるはずだけど、 「仕様書にラジオボタンでって書いてあるから」とかいうケースなんだろうなぁ 俺にはわからんな
>>109 テストがめんどいからそのサンプルプロジェクトをうpしてくれたら
考えてみるよ
どのタイミングでAのEnabledをTrueにすんの?
パネルとか関係なくラジオボタンを全クリアするとその時点で発動するみたいだよ
どれも選択されてないラジオボタンがおかしいなんて変なこといわないでくれ。 コンテナのEnabledをtrueにしたあと、 falseになってる radioButtonのTabStopを Trueに戻すだけやん。
ちょっと考えれば当たり前のことではあるが、CheckedとTabStopは連動してる
いや。おかしいだろ。
おかしいですね
おかしくないアルヨ
つまりチェックされてる唯一のラジオボタンのみがtabstopを得る資格があるということか なるほどね
>>123 あなたのバカがうつってしまいました(>_<)。
126 :
デフォルトの名無しさん :2010/01/11(月) 21:39:52
その自演つまんない
ラジオボタンをクリックしてもラジオが聞けません
(#^ω^)
130 :
デフォルトの名無しさん :2010/01/11(月) 23:23:24
IEのアドレスを表示する枠の小さなアイコンをドラッグして textBoxで受けて、URLを取得したいと思いました。 private void textBox_DragDrop(object sender, DragEventArgs e){ string[] dragArray = (string[])e.Data.GetData(DataFormats.FileDrop, false); //以下処理。 } としています。 これで、ショートカットなどのファイルは受けて処理できるのですが、 IEから直接だと、ポインタが禁止状態になってドラッグできません。 一度デスクトップなどにショートカットを作ればいいのですが、 二度手間でなんかスマートでありません。 なにが足りないんでしょう?
一番肝心なところを以下省略てw ふざけてるのかな
132 :
デフォルトの名無しさん :2010/01/11(月) 23:43:29
AddRsv2
133 :
デフォルトの名無しさん :2010/01/11(月) 23:45:17
>>130 IDropTargetを実装すればいい
135 :
デフォルトの名無しさん :2010/01/12(火) 00:03:24
なんか態度が気にくわないから教えない
137 :
デフォルトの名無しさん :2010/01/12(火) 00:14:47
Form1からForm2を開いたとき、 Form2でForm2のみを閉じるときはClose(); Form2でForm2とForm1を閉じるときはApplication.Exit(); ですが、WPFの場合には、どうしたらよいですか? WPFには、Application.Exit();がないみたいです。 かといって、Close();だと、Window1が残ってしまうのです。 よろしくアドバイスをお願いします。
>>130 なんか俺が知らない問題でもあるのかと思って試してみたけど、
普通にUnicodeTextでURL受け取れたけど・・・。
むしろ一体何を悩んでいるの?
>>137 Application.Current.Shutdown() が使えそうなかんじ。
>>137 こんなコード書いてたわ
if (this.Owner.IsVisible) this.Owner.Close();
141 :
デフォルトの名無しさん :2010/01/12(火) 00:48:34
早速ありがとうございます。
>>139 Application.Current.Shutdown();
で解決しました。
ありがとうございました。
>>140 Window1がVisibleでないことがあるので、
if (!this.Owner.IsVisible) this.Owner.Close():
this.Owner.Close():
の両方を試しました。
どちらもエラーが出てだめでした。
でもこれも必要になることもあるかと思うので、感謝します。
ありがとうございました。
みなさんほんとうにありがとうございます。
プロセスメモリスキャンを行いたいと思っています。 比較回数が60万回ぐらいあるので高速でないとだめなのですが、 現状はかなり低速です。 作りこみ方なのですが、まずReadProcessMemoryを行って、byte配列でメモリ情報を取得した後、 検索文字列をstring配列で分解し、Convert.ToInt32で文字列を10進数に直した後、 メモリ情報とこの10進数変換した値とを比較して、一つずつデータを比較しています。 高速化の方法が何かあれば教えてください。
アセンブラ使え
144 :
デフォルトの名無しさん :2010/01/12(火) 10:59:50
>>142 負荷のかかりそうなところだけVC++で書くとか
そういう問題か
文字列検索のアルゴリズムが使えるのではないかと
147 :
デフォルトの名無しさん :2010/01/12(火) 11:02:21
.netでやってる人にいきなりアセンブラはあれかと
string _text とか、変数の先頭にアンダーバーを付けている場合があるけど、なにか決まりでもあるのですか?
決まりというわけではないと思うが、プライベート変数に対してアンダーバーを先頭につけてると思う。 パブリックメンバ(プロパティ)を内部変数で保持する時に、この内部変数にアンダーバーを先頭につけて内部変数名にする といった感じかと思われる。 string _text; public string Text { get{return _text;} set{_text = value;} }
150 :
デフォルトの名無しさん :2010/01/12(火) 12:32:53
「バッキングフィールド」というやつだな 人によって ・フィールドはcamelCaseに、プロパティはPascalCaseにする ・フィールドのプレフィックスに"_"を付ける ・フィールドのプレフィックスに"m_"を付ける とかいろんな作法があるらしいよ
151 :
148 :2010/01/12(火) 12:38:24
そうですか。俺はいつもmyTextとか書いているけど、そっちの方がいいのかな(´・ω・`)
153 :
デフォルトの名無しさん :2010/01/12(火) 12:52:03
>>151 人にもよるし仕事でやるなら命名ルールとかあるから
個人で書いてるなら自分の好みでいいんじゃない?
>>148 付けてる人曰く、フィールドに直接アクセスせず
必ずプロパティ経由でアクセスしていることを明示的にする為だそうな。
変数名の後ろにアンダースコア付ける人もまれにいるし
嗜好の問題だと思う。
俺はこんな感じのスニペット作ってるので"_Hoge" public $type$ $property$ { get { return _$property$; } set { if(value == _$property$) return; _$property$ = value; $end$ } } private $type$ _$property$; あと、使っているアドインのリファクタリングで自動実装のプロパティに バッキングフィールドを作成するとプレフィックスに"_"が付いたような
俺は先頭にアンダーバー付ける派、理由はそうしてる人が多そうだから
プロパティ RegionSize、フィールド regionSizeはVBで同じコードを書いたときに区別がつかない。 _regionSize はC++(C++/CLI)で不都合があると思われている。 (正確にはメンバーなので _xxxでも問題ないらしい) m_regionSizeは ハンガリアン記法が一時期過剰に嫌われていたあおりで排除された。 regionSize_ はなんか気持ち悪い などなど、結局好きにしろってことだな。 MSDNのネーミング規約をみてもprivateメンバのネーミングについては特に記述は無い。
158 :
デフォルトの名無しさん :2010/01/12(火) 15:24:51
最下段のソースを改変して、自分の環境に合わせてlame.exeのパスを
C:\Program Files\mp3\LAME\lame.exeに。コマンドラインのオプションを
lame.exe -t -q 0 -b 80 --resample 44100にしたいと思っています。そこで1行目を
#define LAME_EXE "C:\\Program Files\\mp3\\LAME\\lame.exe"
に。8行目を
strcat(cmd, " -t -q 0 -b 80 --resample 44100");
に替えてみたのですが、「音声の変換に失敗しました」とエラーが出て失敗してしまいます
C++はサッパリちゃんなので、どなたか御教示いただけませんでしょうか。宜しくお願いします
ttp://anonymousriver.hp.infoseek.co.jp/lame_wrapper/lame_wrapper.c
スレタイ良く見ろ
フィールドメンバはmyText メソッド内で使うときは必ずthis.をつけてます
163 :
デフォルトの名無しさん :2010/01/12(火) 15:30:39
らめぇぇぇ
以下のコードでフォームがタイトルバー(?)以外応答しなくなりました。 メモリ関連かと思いましたが、OutOfMemoryException が投げられていないようで、catch() できていません。 VSで追おうにもフォームを強制終了させなければVSごと応答しなくなってしまいます。 filesizeには正しい値が入っていることを確認済みです。 原因として何が考えられるのでしょうか? try{ Data = new byte[ filesize ]; }catch( Exception e ){ System.Windows.Forms.MessageBox.Show( e.Message ); }
filesizeいくら?
166 :
164 :2010/01/12(火) 17:27:48
168 :
164 :2010/01/12(火) 17:53:14
>>167 他とはnewが原因ではないということでしょうか?
new の所にブレークポイント貼って止まったらステップ実行して戻ってこないのを確認したようには見えないな
OutOfMemoryException というのも思い込みじゃない?
172 :
164 :2010/01/12(火) 18:19:12
>>169 ありがとうございます。
今から読んでみます。
>>170 System.Diagnostics.Debug.WriteLine() を1行毎に置いてみるだけでは不足でしょうか?
ブレークポイントは使用してもしなくても同じ動作でした。
>>171 msdnのページにはメモリが不足している場合は
OutOfMemoryException が投げられると書かれているように思えたのですが・・・。
念のため catch( OutOfMemoryException e ) にしても同じでした。
173 :
デフォルトの名無しさん :2010/01/12(火) 18:20:48
デバックモードで牛歩チェックすればいいんでないの?
>>173 最終的にはそうするほうが質問するより早いよね。
まあデバッグのやりかたがよくわかってないみたいだからしょうがないけど。
new byte[]自体に問題があると思ってるならむいてないからやめちゃいなよ、本気で。 コードのどの部分にどれくらい信用性があるか見切れないとずっと初心者だよ
>>172 そりゃステップ実行しなきゃ
new しているメソッドを呼ぶ所で無限ループしている可能性が一番高いんだし
177 :
164 :2010/01/12(火) 18:40:43
>>169 ,175
メモリ破壊を疑ってみます。
アドバイスありがとうございました。
>>173 ,174,176
蛇足ですが、ステップ実行でのデバッグは既にやっています。
なぜそこがおかしいと考えているのかも書いてくれないと コード断片だけじゃわからんよ
こういうのは本人ががんばるしかないよ コードまるまるうpでもしないかぎり
情報小出しにするし、問題なさそうな部分しか晒さないし、 本人もどこが問題なのかまるでわかってないからそうなるんだろうね。
181 :
133 :2010/01/12(火) 19:50:28
>>133 ですが、引き続きよろしくお願いします。
でもC#って普通にマネージドコード書いてるだけなら メモリ破壊なんてしないよね? 俺はC#よくしらないけど。
こういうタイプは愚痴を聞いてもらいたいだけで解決したいとは思ってない。
女々しい性格w でも男でもたしかに時々いるんだよねそういう奴。 潜在的なカマなんじゃなかろうか
>>133 俺ならそのソースをそのまま使いたいからVC++でOCXでラップして
C#のフォームに貼り付けて使う。
>>182 無反応状態ならへんなループ書けば簡単に起こるよ。イベントを相互で呼び出したり。
ろすあいめよむつこいそえひわやよみあぬすくうたさゆきつぬりわのけつちそへまのゆみかめさためねわあへこうなくひぬやえいやうをわらなたすわほれおしひまきつはゆし ほへかせもゆらあてみいももやせれあかなそてまうえしちみきるねんすれぬはわええろみひよのみゆけふてわをすはゆんかりなていたんまむいなのきやむあへてうやけのもせ よこひえるへゆさてこれれもつこわしくためををけたきふをせきうしうつへとひはらうかまんそらまてしわやはくちねるろせつふねれたおねえめこさふやほもふなしひこくへ ひちのみせみえくせちんなりむわをそむさゆゆとぬけたきりにたぬちせりねしそそふゆろききまみめはわをししさむしりはけめたせえきにけわんすわけわもめすぬほへふもそ ささすぬつくちんにえはむもしひえきゆくそゆけんらきいなみとはねはひむとぬくうせをにちまもおわみむんてしそつまほおけよつはをまはてしのゆのれりなたへこえたやけ よむらほとむくいいけやかてうむみもふのふりてふれへちててろさむはねえなりうふくみいきほんうほすさるりやたろあぬゆぬまなとるれてんゆなやそりゆるるさめやましら くえねはぬゆわをねけけせにもまみつよのそもるこすへちそろわふなうらろえぬらりともかましまはほゆをよいせはてをりやらまぬゆまめうてれここんさんやりといゆけほよ ゆわちゆさきえみやもるくたぬしれしあますてつたりゆなはもれらさもにしにせそうんたこなんかるねくやよつわらやなけねたわかまそえとろたこひまるほきあけせとろやち まふたくえふさとむほにこけれせいきねみんろたしあさへうはんよわくみまみいおえやをこきふましさゆをひさとつせのややいいなさもまするろほみわつるくへはろいれふて ろよんにぬつたえああわにせこれんめねくにえへつえまつきんむてわりふしまほにねやとしひめすせはおぬふほをさまおひゆさのてめしはこりたやきらそわけりこのみやはせ ゆとあそはにられらきよよぬぬくれふなふく
764281988531068976109496233791003419912346483347694415701297353114808192171311 417270647911119398265877604356756653123239986604218419768938626949738275501606 250320279301219198504796337841703744565641089982079039822177715017280875762921 057416400473083550075370509783174000446911225548032194128521645465162060951565 465539130164284060857508075643775901923995506341285317135921431113613959430498 401092565883457642005006729253822255363882264271281485272488386576889292587462 034663116263550263907540695891208175920042901182186966988109777962571572279088 098824838689381074918874626395429671349459675554401020594390741055133327652177 916107370918077618827263534853795819183817031310666404692558655752953871909739 922308545867381013839042726659736597888333618343364296802843665358183095852232 524792904298334494082199910777728527604800325044053124189211216769583009939665 382415272620598635193623786056286678336830450451457798866769513975698838956157 500859844509114898746975909367002410509598251731996664710909939208235501175358 533359286168541726824048105222941777016070857553763714208138350176891267309534 126422704270860505796207867552357491802427279788547040757837112344669692603954 613568171977230441868555998330410833172587146793247145430301387348954641737295 442451669467358278339882174689974936849305680534733392815526848883783849336795 502986777750956369827069343593144744177219535459187655066510571129154921408484 240871393287000887611974516472461568354937796545942896362781471627759900733947 887663189980838964697636103389678358036579247197495243642929621467962130722651 890212762790675915951219992004860515531718599196876803531499929279908178725031 149996634085896860472469559106037201700690844166080101523052967409237991968529 522987224293105273761742101630321548376319086339334250810372161485643630138856 956965948525898718857542924106686361050970380091893179616277234488708165914328
コピペ君、まで読んだ。
int* なんか使っちゃったりすると64bitで動作しなくなったりするの?
そんなことはない 逆に,P/Invokeでポインタ(またはIntPtr)として宣言するべきところにint使っちゃうと動作しなくなる
>>133 VC2008EEで.hと.cppをプロジェクトに入れただけでコンパイルできたよ。
>>130 カーソルアイコンが禁止状態のままの場合、
DragEnterやDragOverでe.Effectを設定してないのが原因だろう
DataFormats.FileDropを含まないデータが来てるんじゃないか
DragEnterのe.Data.GetFormatsでどんな形式のデータが来てるか確認すれ
>>133 tlbimpにRsvData.dll突っ込めばなんとかなりそう?
197 :
133 :2010/01/12(火) 23:00:09
凄い無理やりなんですが、 IEpgRsv rsv = (IEpgRsv)(new EpgRsvClass()); なんてことができちゃいました。 サンプルコードとは違う感じですが、とりあえず動作も確認できたので よしということにしちゃいます。 色々ありがとうございました。
無理矢理というか、.NETでCOMラッパを扱うのならごく普通 ついでに言うとnew IEpgRsv()だけでもいいはず
えー つまんね
その時教えないで後から知ってたと言うのなら俺にでもできるがな
201 :
133 :2010/01/12(火) 23:29:12
>>198 やってみました。
IEpgRsv rsv = new IEpgRsv();
抽象クラスまたはインターフェイス 'RsvDataLib.IEpgRsv' のインスタンスを作成できません。
bool型ってintにキャストできないの? trueを1に、falseを0と同値にしたいんだけど。
そういう真似を出来ないようにわざわざキャストできなくしてあります
>>201 ありゃ、CoClassもってなかったのね ごめん
>>202 うんキャストは無理
Convert.ToInt32でも使えば
trueは1じゃなくて0以外と定義するのが普通だよ CLRの内部表現もそうなってる
ゼロが発見されてなかったら大変な事になっていたな。インド人に感謝するよ(´・ω・`)
インド人 = right;
ザンギュラ乙
C#のList<T>ってC++の vector<T>と基本的に同じ?
うん
うーん
ううん。。。
う、うん
うんうん(´・ω・`)もきゅもきゅ
215 :
デフォルトの名無しさん :2010/01/13(水) 11:43:32
うんじゃなくてハイでしょ!
ハッシュテーブルについて語り尽くそうぜ!!
C#にはハッシュテーブルは存在しない でもDictionaryならあるから別に困らない。
つ System.Collections.Hashtable
220 :
デフォルトの名無しさん :2010/01/13(水) 14:41:54
AxWebBrowser もしくは WebBrowserを使ってHTML表示をさせているのですが ブラウザによくあるCTRL+ホイールでページサイズを切り替えるには どうすればいいのでしょうか?
>>220 Microsoft.ShDocVw.dllを参照追加。
フォームのコンストラクタに以下のコードを追加。
int r = 100;
const int OLECMDID_OPTICAL_ZOOM = 63;
this.MouseWheel += new MouseEventHandler((s, e) =>
{
if (this.webBrowser1.Document == null) return;
r += e.Delta / 120 * 25;
object or = r;
object z = Type.Missing;
((IWebBrowser2)this.webBrowser1.ActiveXInstance).ExecWB((OLECMDID)OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref or, ref z);
});
CTLキー押しながらではないが、ホイールを押しながらで拡大縮小する。
WebBrowserにフォーカスがあるときに対応しようとすると面倒だな HTMLDocumentEvents2_Event.onmousewheel辺りになるかね
223 :
220 :2010/01/13(水) 16:32:13
オブジェクト指向ってめんどくさいね C言語だったらたとえばスクリーンの任意の座標に文字を表示するのは 最初からそういうメソッドがあるDLLなりヘッダファイルなりがあれば write("Hello",30,50); 一行でできるのに C#だったら String s="Hello"; Label l =new Label(); l.Text=s; l.Positon=new Position(30,50); l.Show(); こんな五行もかかないといけない 生産性を犠牲にしてわかりやすくしてるのかね?
C#でそういうメソッドがあれば同じじゃん
こんなバカ初めて見た
なにこれ・・・ C言語だとTalk(Taro); だったのが C#だと Taro.Talk();になってるだけじゃねーか! ()の中に書くか.の前に書くかの違いってそんなに重要なのかねぇ
>>224 C#からでもDLLでも呼べるだろ。
C言語で作ったDLLであってもね。
class A{ int x; } なクラスがあったとして Mainの中で A a=new A(); ってやったら aはヒープにあるの? xはint型だからスタックにあるの? どっち?
>>227 String s="Hello";
Label l =new Label();
l.Text=s;
l.Positon=new Position(30,50);
l.Show();
これをC#でも一つのメソッドにまとめてクラスなりDLLから
呼び出せるってのを理解していないと思われ。プログラムの
基本すら怪しい。
Aの実体がヒープに確保される xは値型なので実体はヒープに確保されず、直接Aの実体の中に用意される で、Aの実体への参照がローカル変数aで、これはスタックに確保される
234 :
232 :2010/01/13(水) 19:16:46
ネタだよ
>>227 ポリモーフィズムを理解すればなぜそう書くかわかる
ぶざけ、、、
自分で作ったユーザーコントロールにイベントを送りたいんだけど、どうすればいいでしょう(´・ω・`)
イベントを送るってどういう意味なんだw
イベントの実装方法が分からない。 イベントハンドラーの追加の方法が分からない。 IDEのプロパティタブからイベントハンドラーを追加できるようにしたい。 こんなところか、どれだろうね〜
まだ?(´・ω・`)
>>237 呼び出し側なら、他の既存コントロールと同じやり方でいいだろ。
イベントのインターフェースを実装してやればいいだけだけどデリゲートがわからないなら諦めたほうが早い
C#初心者用の鉄板参考書は何でしょう 動物の表紙?
Effective C# ……、いや、なんでもない。
初心者っていってもいろいろあるだろ プログラミング経験の有無 プログラミング自体に興味があるのか,それとも作りたいモノがあって手段として覚えるのか
立ち読みすればわかるけどクックブックは初心者向けの章がごっそり削られてるから初心者は買わないほうがいい
つ 金魚
イマイチ情報が古い感じが否めない
プログラミング言語に古くならない教科書なんてあったっけ? そういえば、プログラミング言語に死語という概念はあるのかな… (スレ違いすまん)
陳腐化するってのはあるねぇ
SICPは長寿だろ
EffectiveC#はいちど立ち読みしてみたい 近くの本屋に置かないかな
EffectiveC#は目次みる限りじゃ読んでみたくなるような内容ではあるよね。 たださすがに今更感がただよう感じも。1.0時代の話だし。
ジェネリックって内部はどういう仕組みになってるの?
コンパイル時にチェックしてるだけじゃないの?
>>255 MSIL レベルでいうと、専用命令持ってる。
JIT レベルでいうと、参照型は全部コード共有。
要するに、GenericType<object> と同じコードになる。
キャストが不要な分効率がいい。
値型の場合はそれぞれ専用コードが作られるらしい。
258 :
デフォルトの名無しさん :2010/01/14(木) 06:59:11
こういうデータを管理するのに適したクラスとかありますか? 大見出し1 小見出し1-1 小見出し1-2 大見出し2 小見出し2-1 小見出し2-2 ・・・・ 小見出し2-9 大見出し、小見出しともに最大項目数は可変です できれば小見出しに関連した文字列などを管理できるともっとうれしいです
規格名は忘れたが、MS WordとかOOoで使われているやつとか>XML
ListだのDictionaryだの自作のクラスだの組み合わせて普通に作っちゃってもいいと思うけどね。 DOMやXMLは汎用的だけど本当にそれだけのデータ保持するんだとしたら巨大すぎる。
263 :
258 :2010/01/14(木) 10:35:30
やはりXMLなどを利用することになりますよね 内部的な管理だけならArrayListでやったほうがいいのでしょうか?
提示されたデータ構造だけ考えるとわりとシンプルだし、 どう使うかによるけどメソッド含めて自作でも大した手間にはならないと思う。 ただ、XMLだと構造拡張したりテキストに落しこんだり検索したりってのに 標準化された多彩な方法が使えるってメリットは大きいよね。 まあどのみち一番外側は自作のクラスでラップするんだろうし どっちもためしてみるってのがいいんじゃない?
いいんじゃない?
>>258 いいんじゃね?
ArrayListは配列要素はobject型なんで、
それよListなどの型指定できるヤツのほうがプログラミングしやすい(インテリセンスでるから)
今はジェネリックを使わない積極的な理由はないもんな。
むしろ、非ジェネリック版使うのは非推奨だからなぁ。 あれはあくまで互換性のためだけに残ってる。
JSONもあり
JSONってどっちかっていうとメッセージ交換用のプロトコルみたいなもんで 内部で積極的に使用する必要って無い気がするんだけど
言ってみただけ
許す
許さない
ようこそ許さん
来る、来ない、帰らない、帰る♪
絶対にだ
VC#はVisual Basic.netよりインテリセンスがやや使いづらいな。 Visual C++に比べればはるかにマシだけど。 インテリセンスをVB.netみたいに細かく調整できないのかな?
慣れだと思うけどね。
VBはインテリセンスのために生まれてきた言語だし。
>VB.netみたいに細かく調整 ??? なんか勘違いしてるんじゃないの
VSってエクスプレスエディションしか使ったことがないんですが 有料のバージョンにすれば、エクリプスのようにリファクタリングの機能が増えますか?
エクリプスつかったことないからわからん
リファクタリングできるけど Eclipse 程多機能ではない。 名前の変更とかメソッドシグネチャの変更とかインターフェイスの抽出とかは余裕でできる。
有料のバージョンだと何か良いことあるの?(´・ω・`)
難読化できる→モバイル開発できる→テスト環境がうんぬん
2010のテストツールは結構面白い
有料版はプラグインが使用できる リファクタリングできる モバイル開発ができる Office 開発ができる 統合された単体テストができる などなど
288 :
デフォルトの名無しさん :2010/01/14(木) 22:24:50
オレの場合、standerdだとプラグインでankSVNが使えるのが大きい やっちまったときに戻せるからね Blend 2の付録として手に入れたけど、合計15000円程度と安かったし
>>281 C#はそれなり。VBは名前の変更くらい。
Eclipseは機能試してるだけで2日くらい経過した記憶がある
>>288 そうなんだよな。
EEだとIDEからバージョン管理出来ないから結構さぼりがちになっちゃう。
ロジクールの10ボタンマウスとかあるが Formのマウスクリックイベントとかで特殊ボタンの検出ってできるの? どうやればできる?
>>293 MouseEventArgsだと5ボタンまでだもんなぁ。
.NETじゃ無理なんじゃない?
>>293 どうせマウスのユーリティーでホットキーや特定のプログラムをショートカットで起動するのに割り当てたりするから、
純粋なマウス入力として使う事自体があまりないよ。
マウスホイールを回した時と、ホイールクリックに反応できれば十分。
そもそもマウスドライバレベルで他の動作に置き換えられるんじゃないかなぁ… 可能性があるとしたらDirectInput?
俺がマウスの設計者なら、単純にキーボードとマウスの複合デバイスにするけどね。 そうなら余分なキーは、キーイベントで拾えるんじゃないのか。
Listview内にdouble型の数値ばかりが入った列があります。
これをソートしたいのですが、どうすれば良いでしょうか?
ttp://dobon.net/vb/dotnet/control/lvitemsort.html の下のほうにある部分を参考にしたのですが
case ComparerMode.Integer:
result = int.Parse(itemx.SubItems[_column].Text) -
int.Parse(itemy.SubItems[_column].Text);
break;
でエラーが出ます。
エラーが出ます、で思考停止せずにエラーの内容ぐらい読もうぜ 取り敢えずなんでdoubleが入ってるのにintでParseしてるんだ?
そんな物つかうソフトを誰が使う?
>>298 ソートしたいんだったらArray.Sort使ったら?
C#で、フォームでクリックしたらとかフォームでEnterキーが押されたら とかあるけど ディスプレイのフォーム以外の場所でもクリックしたら〜とかってUse32.dll使用なしでできる?
>>299 入力文字列の形式が正しくありません
ってエラーでで当然なんですが、とりあえず
Doubleで比較したい場合はどういう記述をすればよいでしょうか?
本当に分からんのか?
>>301 ListViewのソートなんだから迂遠だろそれ
>>302 無関係なところのクリックとなるとマネージじゃ無理だな
WH_MOUSE_LLとかRawInputとかDirectInput使う必要がある
変数名を動的につけることはできますか? 例えば1_1.csv 1_2.csv … n_n.csv内のデータを読み込み、それぞれ配列に収めたいとき、 配列名をarray1_1 array1_2 …といったふうに付けていきたい。という要望です
//文字列をdouble型に変換 double d = double.Parse("100.1");
>>306 その動的につけた変数名の変数、
いったいどうやって使うおつもり?w
ジャグ配列
>>306 そんなことする必要全く無いじゃないか。
ファイル名と付属データをペアリングしたstructを用意して、DirectoryかListに放りこめば十分。
>>313 なんでやねん
if double.parse(x) > double.parse(y) {
result 1;
} else if () {
resule -1;
}
とかしていけばええやん
>>313 ,314
>ListViewのListViewItemSorterプロパティに、並べ方を定義したIComparerインターフェイスを実装したクラスのインスタンスを設定します。
なお、IComparerによる並び替えについては、「コレクション(または配列)内の要素を方法を指定して並び替える(または検索する)」でも説明しています。
って書いてるじゃねーか。
やめろ 初心者なんだからお前らが想像も付かない所で躓いてるもんなんだよ マウスを動かすと机から落ちてしまいます みたいな
Double.CompareTo()でいいだろ。
全部教えるとそいつはそれ以上育たなくなる、自分で考えないとってテレビで農家のおじさんが言ってたよ
農業界なんて先細り真っ只中だから そういう考え方はハズレだったのだろうな
C#でDLLの作成をしようと試みています。 DLLはアプリケーションのプラグインで、プラグインは本体から登録された各dllに対し、 グローバル関数が呼ばれるような仕様になっているのですが、 (例えばplugin.dllのInit()を呼び出す、といったような形になっている) C#はグローバル関数をサポートしていないため、どのように受ければよいのかが分かりません。 C#のみでこのような呼び出しに対応する方法はあるでしょうか。それともラッパーをC++等の他の言語で書いて、 経由するしかないでしょうか。
後者YES C++/CLIでも使った方が楽じゃねえかと思う
>>320 リフレクションで呼び出すか、プラグインinterfaceのDLLを準備する。
プラグイン側がC#で呼び出すほうは違うのかな?
なら
>>322 はなしで。
グローバル関数って言ってるからLoadLibrary+GetProcAddressだろう 注意しておくとグローバル関数にするだけじゃ駄目な エクスポートしないと
>>321 ありがとうございます。C#の勉強も兼ねているので、ちょっと泥臭いことも含めて色々試して見ます。
>>322-333 リフレクション云々が分からずぐぐってみてましたが、DLL側で属性の定義をしておくと
C#のDLLを呼び出す場合にアセンブリ情報を使って条件分岐等出来るということなのでしょうか。
また別で調べてみます。どうもありがとうございました。
泥臭いも何も、ネイティブからLoadLibraryで呼び出される類のプラグインはC#のみだと作成できないぞ
327 :
デフォルトの名無しさん :2010/01/15(金) 03:04:54
コンテナをいくつか配置して、その中に動的にボタンなどを入れ込む場合 プログラム全体としてうまく管理する方法はないでしょうか? クリックイベントはコンテナ単位で共通にした上で ボタンなどを動的に作る際の名前(Name)に 記号+識別番号A+識別番号Bを文字列化しています。 ただこの方式だとクリックイベントを処理する際にNameから 元の番号を切り出して・・とあまりスマートではないので よろしくお願いします。
もう少し目的を具体的に書けよ うまく管理したいって何を ボタンごとに情報を持たせたいとかそれだけならButton.Tagに何か入れとけ
共通のイベントハンドラから、どのボタンが押されたのかを識別する為に 名前から特定の文字列を抜き出して識別する現状の方法以上にいい方法があるか …ってこと?
>>325 ちょっとひねればプラグインのサポートはそんなに難しくないよ。
まず、プラグインの雛形となるinterfaceやenumを定義した基本となる情報を入れたDLL(A)を作成する。
それを元にプラグインのDLL(B)を作成する。
アプリ本体は(A)に参照設定を持っておいて、(B)をリフレクションで読み込む。
(B)のコードはinterface越しに扱えばいい。
派生コントロール作ってsenderから独自プロパティ参照して云々するのが オブジェクト指向的にはあってるんじゃないの 「コード書くのがめんどくせぇ」っていうなら今の方法がいちばんだからそのままにしとけ
だね。
333 :
デフォルトの名無しさん :2010/01/15(金) 03:29:23
ああ・・中途半端な状態で・・・orz
>>328 >Button.Tagに何か入れとけ
確かにこれもいいですね
何のギャグだよ それインストールすりゃはいってる
formにlistboxをFillで貼り付けてウインドウサイズを変更すると きっちり張り付くわけじゃないんですね たぶんlistboxのアイテムの高さの関係で制御してるんでしょうけど・・
逆P/Invokeっていう冗談みたいなものがあったな ildasmで逆コンパイルしてILを直接編集しろとか MS公式のドキュメントに普通に書いてあって目を疑った
treeViewの.SelectedNode.CollapseとSelectedNode.Expandで クリックのたびに開いたり閉じたりしたいのですが現在どちら かという情報を取得する方法はありますか?
341 :
340 :2010/01/15(金) 11:50:55
もう一点 同じくtreeViewのFullRowSelect = trueの際に幅全体をクリック判定が おきるようにする方法はありますか?
・・・・・・ treeViewの.SelectedNode.CollapseとSelectedNode.Expandで クリックのたびに開いたり閉じたりしたいのですが現在どちら かという情報を取得する方法はありますか?
345 :
340 :2010/01/15(金) 15:27:09
TreeViewのオーナードロー関連もやってて返答遅くなったら変な流れに・・・
>>342 ありがとうございます。
>>344 それは私じゃないです
プログラム板ってIDないから困るw
>>343 Toggleっていう切り替え用があるのを知らなかったので
そういうプロパティなどがあると思っての質問なのでその辺の質問は忘れてください。
いや、そういうプロパティもあるから
あるある
スレから出てけとか何様? ここはお前のスレじゃないっつーの
そういうお前のスレか?
文句があるなら出てけ!
WebBrowserコントロールのUserAgentを取得する方法は ないでしょうか?
352 :
● :2010/01/15(金) 16:58:42
>>348-350 俺が立てたスレだから俺のスレということで一つ。
もう解決してるし、
>>345 は344が偽者だって言ってるし、目くじら立てる必要性ないじゃない。
353 :
デフォルトの名無しさん :2010/01/15(金) 17:02:04
なんか5年前に比べてC#を叩くアホはいないくなったな C#人口が増えたのかな?
取得できました。
C (34243 プロジェクト) C# (11838 プロジェクト) C++ (37428 プロジェクト) Java (46958 プロジェクト) C#,追いついてきました
356 :
デフォルトの名無しさん :2010/01/15(金) 17:10:17
胸が熱くなってくるな
無料のすごい開発環境が手に入るから初心者がふえたんじゃねーの。 Visual C#てに入れたら Ruby(笑)とかPHP(笑)とかあまりにもゴミすぎて洋梨だわ。
360 :
デフォルトの名無しさん :2010/01/15(金) 17:45:00
>>358 ありがとうございます。
そういえばコードを書いてるとどうしてもformにあれこれ増えてしまいますが
どう対処してますか?
クラス分けとか頑張ってますがformに貼り付けたイベントハンドラとかごっそり増えるし
361 :
デフォルトの名無しさん :2010/01/15(金) 17:46:26
>そういえばコードを書いてるとどうしてもformにあれこれ増えてしまいますが >どう対処してますか? >クラス分けとか頑張ってますがformに貼り付けたイベントハンドラとかごっそり増えるし あ、この部分はスレのみなさんにという意味です
イベントハンドらはformが持つべきものなんだからどれだけ増えてもいいよ 中にコードだらだらと書いてないならおkでしょ
自分で書いたコードのクラス分けは、プログラム作っている時は全部、同じクラスで作って、完成後、じっくりと別クラス化していく( ・ω・)y─┛〜〜
そうだな
365 :
デフォルトの名無しさん :2010/01/15(金) 19:08:13
フォームは機能毎にユーザーコントロール化してクラス分けするな 後はコントロールの数を出来るだけ減らす(無関係な機能の共用は避けるが)ことか
366 :
デフォルトの名無しさん :2010/01/15(金) 19:08:54
ですね
C言語だとカーニハンとリッチーのC本がバイブルみたいになってるけど C#はそういうバイブルみたいな、これだけは絶対もっとけみたいな本ないの?
368 :
デフォルトの名無しさん :2010/01/15(金) 19:24:33
ないんじゃないの というかいらないでしょ 不便だな〜と思ったらAPIたたけばいいんだし それこそVB6のころのAPI使うイメージとさほどかわらないし ネットで十分、この辺のスレもあるし
K&Rに相当するものだったらmsdn読んどけでいいんじゃないかなぁ。 昔と違って言語仕様なんかは普通にネットで読めるからな。 もっと普遍的な設計方法とかそっちの方の必読本の方が多いんじゃない?
動物シリーズを枕がわりに買っとけばいいんじゃないの?
いいかも
オライリー本は無駄に揃えたくなる
head なんとか買っちゃった・・・
374 :
デフォルトの名無しさん :2010/01/15(金) 20:04:07
Visual Basic PowerPackとか・・・
Click Onceでインストールすれば終わりじゃないのか。
SP1だけでいいよ〜。 ネットワークインストールの場合、どっち使っても最新になってしまったような記憶が。
>>374 VirtualPCに素のWindowsを入れて試せばよろし。
MSのサイトからのダウンロード時間なんて回線によっても
時間帯によっても全然変わってくるんだから議論する意味なんて殆どない。
わざわざ人に質問するより自分で実験した方が早いような内容だな。
なんだかんだいってもイイ奴が多いな
このスレの8割は真人間によって構成されてますから
残りの2割がスレの8割を書き込んでるからあんまり意味ないけどな。
フヒヒ
まあ個人プログラマーの8割が個人らしいからな(´・ω・`)
387 :
デフォルトの名無しさん :2010/01/15(金) 23:46:13
>>386 事前に英語版をインストールしなきゃいけないかもよ。
(´・ω・`) ぷぅ〜
くっせえ
>>336 遅ればせながらありがとうございました。
そういうものだったとは素で知りませんでした…。
391 :
デフォルトの名無しさん :2010/01/16(土) 00:53:54
皆さんは、アプリケーションを作成する際、 システムエラー(Catch時)の情報をどのように表示させてますか? エラーコードを振って、メッセージボックスに表示させたりしてる?
メッセージボックス自体には回復方法を載せといて 詳細ボタンを押すとエラーコードと補助情報が出るようにしてる 回復方法っていってもアプリ再起動してくださいとかそんなんぐらいになっちゃうけど・・・
var 変数って使ってますか? 全然慣れないんだけど
暗黙型付けのvarなのか匿名型のvarなのか
var x=10; var n = new { name = "abc"}; 上のvarと下のvarは違うvar
本当は慣れてるのに質問しました。ニッコリ
398 :
デフォルトの名無しさん :2010/01/16(土) 09:05:50
まーあんまり関係ないんだろうけどさ System.Environment.SpecialFolder とくるのに System.IO.Directory とかさ・・・
10 と new { name = "abc"} が違うのであって、 var の役割は同じだろ。
>>398 Windowsの世界では フォルダ ⊃ ディレクトリ なので
401 :
デフォルトの名無しさん :2010/01/16(土) 09:44:04
>>400 なるほど
Cになれちゃってるとふとあれfreeや後始末は・・・とか
エラーチェック・・・とか
ゲシュタルト崩壊っていうんでしたっけ?
あまりにも楽できるので時々変な感覚になる
エラーチェックは別になくなったわけじゃないけど 下位で発生したエラーを一々上位に上げなくても勝手にあがってくのはほんと楽でいいよね
ふーん
というかエラーを知らせたところで、ほとんどの場合、ユーザーは対処のしようが無いわけだから出さなくても良いんだよ( ・ω・)y─┛〜〜
> C言語だとカーニハンとリッチーのC本がバイブルみたいになってるけど さすがに、今は駄目なソースのバイブルですよ
406 :
デフォルトの名無しさん :2010/01/16(土) 13:01:07
エラー忘却ですかどこかのシステムみたいですね 俺もいろいろ忘却したいです と与太話は置いといて ArrayListに自作classを登録してるんですがキャストを省略できるような 方法ってありますか?
> ArrayListに自作classを登録してるんですがキャストを省略できるような > 方法ってありますか? 2.0以降ならList<>使え。 1.1以前ならCollectionBase継承して自分でカスタムコレクション作れ。
>>408 作ってあげなさい
( ・ω・)y─┛〜〜
いまさら2.0以前を使ってる人なんているの?
古い教科書読んでるとかじゃないのかね
412 :
デフォルトの名無しさん :2010/01/16(土) 13:14:23
>>407-410 たぶん2.0以降だと思います。
(VC#2008EEを最近入れて.netのバージョンまで意識してなかった
LIST<>ですか
ArrayListと比べて速度はどうなんでしょ
早い。
キャストしなくて済むようになるから速度上るよ。 気になるなら1000個ぐらい何か読み書きするサンプルでも作って時間測ってみるといい。
415 :
デフォルトの名無しさん :2010/01/16(土) 14:02:23
時間空いたら速度確認してみます>ListとArray もし多少遅くてもキャストを書かなくていいのが精神的にいいです
そもそもexpress使ってる奴がそんな速度を気にする プログラムなんか作ってんのか?10000程度リストに ぶち込んでも速度なんて体感じゃ変わらんだろ。
Excelのマクロが.netに対応して VBだけじゃなくC#にも対応してくれないかなぁ
つVSTO
420 :
デフォルトの名無しさん :2010/01/16(土) 14:29:20
すみません、プロジェクトの組み方の方法論としてまだわかっていない ことがあるのですが、よろしくお願いします! コンポーネントやユーザーコントロールなどを作成するプロジェクトで、 それを複数作成してアプリケーションで使う場合、各コンポーネントや ユーザーコントロールが共通に使っている下位の要素として、 Windows.Forms とか そのほか自分で作成した共通用のクラスとかがある 場合、作成しようとしている複数のコンポーネントやコントロールは できるだけ一つのプロジェクトにまとめてしまう方が出来上がった全体 でのメモリー使用量は節約されるでしょうか? 現在は各コンポーネントやコントロールがばらばらのプロジェクトで 別々に作成されていましたが、各プロジェクトは共通に使っている下位 のクラスが結構ありました。アドバイスをお願いします。
一つのプロジェクト内でソリューションでわければいいんじゃ・・・
>>420 そもそもその質問では開発環境の使用メモリを言ってるのか、
開発したプログラムの使用メモリを言ってるのかの区別がつかないんだが?
そりゃ重複は少ない方がいいのは当たり前だけど 依存関係を複雑にしすぎるとかえって扱いにくくなるので しょうもないユーティリティはプロジェクト別にその場で書いたほうがいいよ
windowsXP で .NetFramework2.0用のソースをビルドしようとすると、 指定された実行可能タスクの場所 "c:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe" が無効です。 (MSB6004) というエラーが出ます。実際このフォルダに、「csc.exe」は見つかりませんでした。 .NetFramework2.0 のフォルダには、あります。 一体なぜ、入っていないのでしょうか。どのうような対応をすればよいのでしょうか。 これ以前にも、V2.0のフォルダにも入っていなかったことがあり、インストーラで修復を行ったところ、 csc.exeが現れたことがありました。今回も、v3.5に対して、修復を行いましたが、変化なく、存在しないままです。
最終的に出来上がるのののこといってるなら誤差じゃないのかね
Visual Studioなんてクソ環境つかってられるか!
>>424 Client Profile入れてるとか
じゃあなに使うのさ
メモ帳…かな…
メモ帳って…あの最強開発ツールか…
そういう時期ってあるよね。IDEなんて使ってられっかって言いたくなる時期。
IDEを嫌がる奴って雑魚だよなw
インテリはインテリセンスなんて使わない(キリッ
そもそもインテリはプログラマーなんかにならないし( ・ω・)y─┛〜〜
結局Unixのhacker達だってemacsっていう『IDE』を使ってるわけで。 標準外の開発環境を自分の意志で選んだなら、いちいち人に質問しないで全部自分で解決しろと。
>>438 emacsはIDEじゃねーよ一緒にすんなタコ
使ったことないなら聞いたような口聞くなボケ
viエディター使えるようになっておかないと、Xウインドウが立ち上がらない時困るぞ、っと上司に言われたこと覚えているよ。
443 :
デフォルトの名無しさん :2010/01/16(土) 17:09:06
>>367 C:\Program Files\Microsoft Visual Studio 9.0\VC#\Specifications\1041\CSharp Language Specification.doc
割とマジで
そんなファイルなかった。 C:\Program Files\Microsoft Visual Studio 9.0\VC#\ ここまであったが VC#フォルダにCSharpProjectsとSnippetsとVCSPackages しかなかった!
うちのには入ってた VS2008 Pro SP1適用済み
Hello, world紹介してCollectionによるStackクラスを説明したら、 もういきなりコマンドラインでコンパイルしてアセンブリ説明が始まる。 さすがは公式!(褒め言葉)
言語仕様なんかコンパイラ作る人が理解できればいいだけだから
共有されるユーティリティ類をまとめて一つのプロジェクト(dll)にすればいいだけ。 メモリ使用量はそりゃ細かく言えば全部一つの方が少なくて済む(事が多い)が 気にするやつがあほなレベル(巨大なアプリならまた話は別だが)。
大体、今時のGB級のメモリ積んでる環境では誤差レベル
そんなにメモリとか処理速度のこと気にしたいならTopCoderにでも参加しようぜ
>>441 vt100(もしくは互換品)使えないときはスクリーンエディットできないし、
/usrがマウントできないときのために、最低限edは使えるようになって
おくのが、管理者としては必須。
テレタイプやカードパンチャーも もいっか
>>453 おじいちゃん、お口臭い( ・ω・)y─┛〜〜
そうか、じゃあポリデント!
某社のプロジェクトでは1クラス1DLLなんて凄まじいこと してたな。理由は最小限の影響でDLL入れ替えるためだと。
それが決まりならば特筆する事は無い
相互参照できないな
そこで .netmodule ですよ。 使ってるところは見たことが無いけど
マルチモジュールアセンブリって個別にモジュールだけ入れ替えられたっけ? リンクし直さないといけなかったような
フォームの表示・非表示で通知領域のアイコンを右クリックしたときに 表示されるコンテキストメニューを変えたいのですが、 Win+Dで見えなくなったフォームの状態を取得することって出来るのでしょうか? this.Visibleはtrue、this.WindowStateはWindowState.Normalで、 this.Locationを見ても普通に非表示前と同じ位置なんです。
出来る気がする
おれの環境で試してみたら、Locationが全然違う値になったけどな。
stringって参照型だと思ってたんだけど 以下のコードが上手くいかない どうしてでしょうか class Test { public static void Main() { string str = "入ってない"; change(str); Console.WriteLine(str); } static void change(string str) { str = "入った"; } }
stringクラスの説明読めばいいよ
stringは使う側から見ると値型みたいに見える参照型 change(str); の時点では "入ってない"の参照先が渡されてるけど str = "入った"とした時点で change()内のstrの参照先が変更されて新たに作られた"入った"を参照するようにされるから 参照元の引数にしたstrの方には影響が無い
>>464 参照情報を値渡ししてるんだからそういう挙動で当たり前。
>>466 string だからとか関係なく、すべての参照型で同じ挙動になるよ。
参照型がコピーされるんじゃなくて 参照型に入ってる参照がコピーされてる string str = "入ってない"; のstrと change(string str) のstrは同じ参照が入った参照型だが、同じ参照型ではない 参照型ゲシュタルト崩壊
ニホンゴムズカシイネ
そらそうよ
Cに置き換えたほうが「ポインタ変数に入ってるアドレスがコピーされてる」となってわかりやすいな(言葉的に) ちなみに参照型を参照渡ししたいなら以下のようにする class Test { public static void Main() { string str = "入ってない"; change(ref str); Console.WriteLine(str); } static void change(ref string str) { str = "入った"; } }
>>468 Listとか引数で渡しても元Listの要素の削除や追加とかできるぜ
464のコードだと値とか参照とか関係なく 変わるな。 strのかわりにstructなのをいれようがclassをいれようが・・・
476 :
デフォルトの名無しさん :2010/01/17(日) 01:28:05
str = "入った"; ↑ つまりこれがstringの新しいインスタンス生成になってるってことだよな
うん。 Person p1=new Person(); Person p2=p1; p2.name = "ビルゲイツ" だとp1.nameも変わるけど p2=new Person(); p2.name = "ビルゲイツ"; だったらかわらんしょ。 .nameとか入ってるから違う話になるけど。
474には呆れる
>>91 にもあったけど参照関係はしっかり理解してないと混乱するな
>>474 そんなの参照を渡してんだから当たり前だろ。
>str = "入った";
って、実際は
>str = new String("入った")
なんだよ。
だから
>>464 のコードをListで書き直すなら
>list = new List();
になる。
これで元リストの要素に追加削除できると思う?
思うんなら思ってても別にいいけど外で喋るなよ。
恥ずかしいから。
>>480 もうちょっと落ち着いて、自分が書いたことを見直して。
つまりstringが他の参照型と違う点は、new string()てしなくても インスタンス生成ができるってことでいいのかな?
参照型の混乱は変数という概念が出てくるときに必ず言われる 変数は「箱」ですっていうイメージが強すぎるのかね。 int x=10; xという名前の箱に10が入ってる!?みたいな?
484 :
464 :2010/01/17(日) 01:44:32
changeの中でstrが指すものを書き換えてると勘違いしてた strの参照先を変えてるだけだよな、そりゃそうだ ありがとう
>>482 ちょっと違うな
string s = "あいうえお";
string t = "あいうえお";
this.Text = Object.ReferenceEquals(s, t).ToString();
通常の参照型だとふつうに考えたら
"あいうえお"はメモリのどっかに確保され
また別の場所に"あいうえお"が確保され(二つの場所に"あいうえお")
があるように見える。
しかしこれはひとつの領域を参照してるのでtrueになる。
>>485 stringは参照型なのに比較の時は参照比較じゃなくて値比較になると思った
あと string s="あいうえお"; string t="あいうえ"; string u="あいうえ"+"お"; これは参照もsとuはおなじ だがu=t+"お"とやるとuは"あいうえお"という文字列だが参照は異なる こんな風にややこしいから注意 string u="あいうえ"+"お"; string u=t+"お";//t="あいうえ" この二つ違うので注意
stringの仕様はややこしいんだな
この話題も定期的に出るような気がする 参照型は通常同じ文字列を比較しても参照するアドレスが違うので falseになるのが使い勝手悪いからという理由でC#は値比較で設計されたはず
491 :
486 :2010/01/17(日) 01:58:22
>>485 は参照元比較の話だったから話が違ったようだ スマン
あえて文字列を生成したいならこうだね。 string x = new string( new char [] {'a', 'b', 'c'} ); 文字リテラルの代入はILレベルで専用命令がある。 考え方としては代入時にstringが生成されるというより、 あらかじめ生成済みのオブジェクトがはじめからそこにあると考えたほうが正しいと思う。 ldstr "abc"
>>490 最近FC#始めたばかりなのでこうゆう話題は勉強になる。
よく悩むのは参照関係だしね。
494 :
デフォルトの名無しさん :2010/01/17(日) 08:17:35
System.Environment.・・・・ というシステムに関する情報を持ってるクラスがありますが 自作プログラムの共通情報を持たせたい場合はどのように記述すればいいのでしょうか?
495 :
デフォルトの名無しさん :2010/01/17(日) 08:50:28
自己解決しそうです
496 :
デフォルトの名無しさん :2010/01/17(日) 09:03:50
してません IDほしい・・・
static classを自分で定義するかアプリケーション設定でもいい
498 :
デフォルトの名無しさん :2010/01/17(日) 09:46:36
それ自体が悪いとは言わないけどシングルトンというかグローバル変数だよねそれ
レジストリに情報書くのはどうよ
とりあえずdobonくらい見ろよ
502 :
デフォルトの名無しさん :2010/01/17(日) 10:42:22
Settingsというのもあるけど
海外の(英語の)サイトでもいいんでC#の入門用WEBページってない? マイクロソフトのページは単なるデータ集で入門向けじゃないね。
C#プログラミングって net Frame Work SDKっていうのとテキストエディタだけあればとりあえず始められるの?
Hello world! 止まりなら
506 :
デフォルトの名無しさん :2010/01/17(日) 11:32:33
.NETが一切入っていないPCに、 ClickOnceから、 .NET CLIENT PROFILE をインストールしてもらい、併せてVisual Basic Power Pack 1.2 もインストールしてもらおうとしたら、 Visual Basic Power Pack 1.2は.NET2.0がなきゃだめです。 と言われてしまいました。 ClientProfileは、.NET2.0も含んでいるわけではないのですか? うまくいかなくて困っています。助けてください。
>>504 うん。ま、でも、無難にExpress使っとけ。
509 :
デフォルトの名無しさん :2010/01/17(日) 11:47:35
フルセット…ということは、 CilentProfileのコンパクト版インストール要件を満たさない場合は、 フルセットがインストールされることになり、 その3.5SP1フルセットにはVisual Basic Power Packsがないため、 結局、Visual Basic Power Packs を別途インストールする必要があるってことですか?
510 :
デフォルトの名無しさん :2010/01/17(日) 11:53:09
>>503 入門っていわれてもなあ・・・
プログラム経験ある?
最新のVC#2008について書かれたサイトすくないからなあ
511 :
デフォルトの名無しさん :2010/01/17(日) 12:03:02
VB PowerPackがフルセットの.NET 3.5SP1を必要とするなら、 そのとおりだね。
HelloWorld!がとまらない
while(true){ MessageBox.Show("こんにちはこんにちは"); } oh!
515 :
デフォルトの名無しさん :2010/01/17(日) 13:49:13
・.net未インストール ・VB PowerPacks1.2 が必要 ・インストールするアプリケーションは.net3.5sp1で作成 のとき、どうすれば最も効率よく、web上からインストールしてもらえるでしょう…。
Web上からも何も普通にインストーラー作成すればいいだけじゃねーのか? つーか、仕事に関するサポートなんてここでするものじゃないです。 金払ってマイクロソフトに聞け
孫プロセスが起動されたかどうかを監視し、その標準出力を得る方法はありますか? 携帯動画変換君のようなプログラムを作っています 子プロセスのウインドウを表示したくないので、子プロセスのウインドウを非表示にし 標準出力と標準エラーをProcess.BeginOutputReadLine他を使って横取りして起動しています。 起動したい子プロセスに、さらに子プロセスを起動するものがあり この孫プロセスに対しても同様の処理をさせたいのですが可能なのでしょうか? Processクラスには孫プロセスの起動を監視できそうなものがありませんし 親子関係を調べられそうなものもありません。 ちなみに問題の子プロセスは具体的にはTSConverterで ソースがあるので無理ならば子プロセスの起動部分を書き直そうと思っています
子プロセスのウィンドウ作らなきゃいいんじゃねーの?とか 子プロセスで動かしてるのは自分で書いたプログラムなら 子プロセスから子プロセスを起動した時にイベント起こして親プロセスにわたせばいいんじゃねーの? 可能なのでしょうか?っていうなら試してみればいいじゃない
うん。
プロセスの監視というより、標準入出力のハンドルを伝播するだけの話かな? コンソール系のアプリなら標準でそうなってると思うが、 Windowアプリは知らないな。
うん
ううん
こ
。
なんでマルチポストするの?
booooooooooooooooooooleeeeeeeeeeeeeeeeeeeeeeeennnnnnn
C#で次のクラスを使用してブラウザを起動し、 終了させるにはどうすれば良いでしょか? ※現在は、IEのプロセスを無理Killする事によりIEを無理やり終了させていますが、 Explorerが何か変な挙動をし始めるので ブラウザの「 × 」ボタンをクリックした時と同じく正常に終了させたいと思います。 SHDocVw.InternetExplorer かなりショボイ質問かもしれませんが宜しくお願いします。
Quit
exit
終
tabキーとかでコードを後ろにやることなんつーんだっけ? static void Main(){ int x; //ここにある空白 for(x=0;;x++){ Func(); //ここにもっと空白がある←これなに? } }
そうだ!インデントだ!ありがとう
(^ω^;)
(^o^;)
まあ年取るとよく物忘れするからなでもひどすぎると脳こうそくの疑いがあるから気をつけろよ
IMEに頼り切ってて小学校で習う漢字を忘れるみたいな
(゚Д゚≡゚Д゚)
おじいちゃんおくちくさーい
仮想デスクトップを実現するアプリ入ってるとか
うん。
webBrowserコントロールのキャッシュの場所をIEと別に変えられないのかなぁ?
>>543 461へのレスですか?
環境はWinXPでC#3.5です。
仮想とかそのたぐいのモノは入れていません。
547 :
デフォルトの名無しさん :2010/01/17(日) 21:14:29
>>545 どこかで見かけたけどユーザーエージェント関連はレジストリいじらないと駄目みたい
System.Text.RegularExpressions.MatchCollection のmatchArrayに対して↓のようにジェネリックメソッドを使う時 Array.ForEach(matchArray, delegate(Match matchStr) { ...... }); この場合に出る、型引数を明示的に指定しろというエラーに対して どのように書き換えたらよいのでしょうか?よろしくお願いします。
>>538 インテリセンスに頼り切ってて自分で作ったクラスの構造を忘れる
551 :
デフォルトの名無しさん :2010/01/17(日) 21:35:08
ユーザーエージェントじゃなくキャッシュの場所を変更したいんですけど・・・
553 :
デフォルトの名無しさん :2010/01/17(日) 21:37:18
>>549 型引数を明示的に指定したらいいんじゃね?
>>549 そもそもArray.ForEachの第一引数はT[]だから、配列じゃないMatchCollectionは渡せないけど
>>549 引数の型があってないから型引数を指定しても無駄
556 :
549 :2010/01/17(日) 22:31:12
すみません勘違いしてました。ご指摘ありがとうございました。
たった6秒…どんな魔法を使った?
説明書を読んだのよ
560 :
デフォルトの名無しさん :2010/01/18(月) 03:02:57
何が6秒?ねぇ何が6秒?
562 :
デフォルトの名無しさん :2010/01/18(月) 03:07:52
4時間と6秒じゃなくて?6秒? 何が6秒?
おじいちゃん眼科行ったほうがいいよ
www
565 :
デフォルトの名無しさん :2010/01/18(月) 07:04:55
C#(.NET Framework 3.5 SP1)にて、 Windowsフォームアプリケーションを作成しました。 知人にはClick Onceよりダウンロードしてもらいました。 インストールサイト上からまとめてインストールしてもらったコンポーネントは、 ・Windowsインストーラー3.1 ・.NET Framework 3.5 SP1 ・Visual Basic Power Packs 1.2 の3点です。 友人のPCはWindowsXPのSP2で、.NET Frameworkは入っていませんでした。 そして、インストールをしてもらったのですが、 アンインストールができないんです。 コントロールパネルで削除のボタンを押しても、1秒ほどウェイトがかかりますが何も起きません。 このような場合、原因として何が考えられるでしょうか。 また、削除する方法としてどのような手段がありますでしょうか。 よろしくお願いいたします。
ClickOnceもVB power packも使わないほうがいい
友達ならインスコ情報だけ消してもらえばいいだろ。それならぐぐればいくらでも情報あるだろ。
569 :
デフォルトの名無しさん :2010/01/18(月) 08:22:18
ふと、友達のためと思って自作PCを組んだときのトラウマが蘇った・・・ 良かれと思ったのにたまたま変なことになって、 しかも友達はそれほど知識がないので対処できない->壊した不良品持ってきた 扱いになって大変だったことがあったなあ(遠い目 ソフトなんかは適当なダミーサイト作って遠まわしに xxというツールがあるよ〜 と責任をネット経由でうやむやにすればよかったのにね WebBrowserで開いたページの中身はDocumentで見ればいいんだろうけど 中の細かい要素はどうやれば調べられるんだろ
MonoDeveloperでイベントハンドラの補完ってdelegateを補完してくれるんだね おもしろい
WindowsUpdate で入った.NETFramework3.5 にはcsc.exe は入っていないのでしょうか。 だとしたら、それを入れるためには、 あらためて、.NETFramework3.5 をインストールする必要があるのでしょうか。 教えてください。
>>572 それはただ.netのプログラムを動かすためのものだから入っていない。
初心者はVisual C# expressをインストールすれば他は何も必要ない。
574 :
デフォルトの名無しさん :2010/01/18(月) 13:40:03
既存のソフトによってはウインドウの中のコントロールを分離して 別ウインドウにしたりできる物がありますがあれを実現するのは面倒なんでしょうか?
575 :
デフォルトの名無しさん :2010/01/18(月) 13:47:43
例外のエレガントなというか、トレンドを教えてください。 いま、ある処理のなかで例外が発生したら、それをキャッチして、且つ それがどこで起きたかもしりたいので、こんな風に書いてます。 try{ 処理1 } catch(Exception ex){ MessageBox.Show(this, "例外1:" + ex.ToString(), "エラー"); return; } try{ 処理2 } catch(Exception ex){ 処理1の片付け(Closeとか。。) MessageBox.Show(this, "例外2:" + ex.ToString(), "エラー"); return; } この処理を全体を関数にして、別の処理から呼び出すように改造するとします。 すると、呼び出し側でも try{ foo();} catch(Exception ex) { MessageBox.Show(this,"例外3:"...}って書くのが、ポリシー的に正しいかな?って思ってます。 でもそうするとメッセージボックスが一杯出てウザイじゃないですか? そこでド単純に、例外を補足する度に、「どこそこのコードでこんな例外を補足したよ」って情報をくっつけながら 再送していって、一番上でメッセージボックスを出したいとか思うわけですよ。 そこで疑問なのですが、 ・そもそもこういう例外の雪だるま式の再送ってトレンドとしてどうなの? ・やるとしたら実際どうやって情報をくっつけて再送するの??(サンプルコードくれくれで申し訳ないのですが・・・) です。よろしくお願いします。m(_ _)m
何もしなくてもどこのメソッドで発生してどこ辿って補足されたかは 何もせんでも記録されてるから全部のメソッドでキャッチなんてしなくていいよ。 雪だるま式のを使う場合は・・・ 内部で発生する例外の粒度が細かすぎる場合によく使われる。 たとえば、複数のWebサイトにアクセスして何か処理する大きめのクラスがあったとして、 HTTPエラー503発生なんて例外をそのまんま上に揚げられても意味不明だから もうちょっと意味のわかりやすい自作の例外でラップしたりする。 例) ログイン失敗例外 - 理由として内部にHTTPエラーの例外を持っておくとか。 ちなみにラップの仕方は Exception クラスのコンストラクタに例外を引数に取るのがあるから それ使って new すりゃいい。 Javaだと一般的だけどC#だと今一なやりかたらしいけどね。
>>575 簡単に実現したいなら、メソッドの最後に
throw new Exception(エラーメッセージの結合文)
みたいなのやればいいんじゃ?
>>575 通常は受け取った例外は再送しない。
アプリの通常の動作で発送しうるエラーなら通常のエラーとしての対処を行う。
致命的な不具合ならそのままアプリを終了させる。
基本的には例外処理中にMessageBox.Showのようなハードコーディングなコードは書かない。開発中ならいいけど。
エクセルのセルのようなインターフェースを利用したいのですがそういったコントロールはありますか? 調べてみたところDataGridViewが近いようなのですが もしもっと良いものがあれば教えて下さい。
>>575 あとメッセージボックスがいっぱい出るの意味がわからん。
そういうソース書いてるからじゃん。
あと、情報くっつけるもなにも例外オブジェクトをToString()すれば
どこのクラスの何行目で何が起きたか全部表示されるけど?
>>579 2次元にテキストを並べたいだけなら調べた通り、DataGridView。
ちなみに、マス目の一つ一つをセルっていうのだから
セルに近しいのはテキストボックスであり
シートに近いUIは?ってきくべきかなぁ。
582 :
575 :2010/01/18(月) 14:16:56
みなさん、たくさんのレスありがとうございます。 なるほど、ディフォルトで雪だるまになってくれている訳ですね。。 でも、なんかの用途では必要そうになるかもしれないので、 再送の方法を教えていただいたみなさんに感謝します。 ありがとうございました。
>>581 ありがとうございます。
確かにおっしゃるとおり、探していたのはシートにあたるものですね。次から気をつけます。
584 :
デフォルトの名無しさん :2010/01/18(月) 14:22:14
エクセルのセルか・・・ DataGridViewはどうか知らんが、昔やってたのは同じようなグリッドコントロールのセルの座標に あわせてテキストボックス乗っけてそっちにフォーカス移して入力させて終わったらグリッドコントロールに反映とか やってたなVC#2005EEあたりの話だけど
DataGridViewって高機能だけど難しいよな( ・ω・)y─┛〜〜
DataGridViewは入力も可能
587 :
デフォルトの名無しさん :2010/01/18(月) 14:52:40
>>586 そうだっけ
.netって難読化してないとほんとにリバースエンジニアリングできるんだなorz
昔作ったツールの実行ファイルしかなかったが復元できちゃったよ
.net2.0のころってDataGridViewってなかったんだっけ?
ListView+TextBoxでエクセルもどきやってたわ
.net1.1のころは無かった
589 :
デフォルトの名無しさん :2010/01/18(月) 15:21:37
マルチスレッドで、あるスレッドから別のスレッドに「スレッドを抜けろ!」って通知したいので 手っ取り早く、int 型の値を共有して、0ならスレッドループを抜けるようにしたいので,次のようにやってみました。 int end_flag = 1; mThread = new Thread(new StartThread(new MyThreadClass(ref end_flag))); mThread.Start(); end_flag = 0; mThread.Join(); class MyThreadClass { int endFlag; public MyThreadClass(ref int end_flag_ref) { endFlag;= end_flag_ref; //ここでこのクラスに、渡されたend_flagのアドレスを保持しているつもり } public void Run() { whileendFlag;!= 0){処理} //メインスレッドがend_flagを0にしたら抜けさせてるつもり } } ってやってみたんですけど、end_flagを0に落としても、MyThreadClassのRunのwhileでのendFlagは1のままでした。 ずばり、 ・MyThreadClass.endFlagにend_flagのアドレスを見させるにはどうすればいいの? ref int endFlag;と宣言してみたのですが、文法上許されないようだし。。 よろしくおねがいします
volatile
>>589 public void Stop()
{
//スレッドとめるメンバ関数
}
mThread.Stop();
とか?
MyThreadClass.endFlagはただのintだからアドレス保持も糞もない
>>591 なるほど、それが.NETの思想なのですね。それに従います。
スレッドに関しては。
でもそもそもintの参照を保持する事ってできないのでしょうか?
>>592 するとintの参照を保持する事はできないって事ですか?
>>589 MyThreadClassの初期化の仕方が間違えてる。
Stopかけたい段階でMyThreadClassのend_flagを書き換えないと。
intは値型なのでrefで渡そうが、endFlag;= end_flag_ref;の行では値をコピーしてるだけ。
って、この代入演算子なんかおかしくね?
>>592 いや、インスタンスのメンバとしてint型の変数を持ってるなら、
それは暗黙的にvolatile変数としてマルチスレッド間で使えるはずだよ。
参照って、そもそもendFlagは参照じゃないじゃないか。 クラスのvolatileなメンバにしてインスタンスを渡してそれみたらどうよ
>>594 いろいろ変なソースで済みません。代入演算子に;が入ってしまいました(;_;)
>>595 volatileってC++の奴と同じ動作ですか?
すると単純にアドレスは渡っているけどレジスタに入っているからみれてないとかそう言う意味合いでvolatileをつけるべきという事ですか?
597 :
デフォルトの名無しさん :2010/01/18(月) 15:49:01
>>572-573 パスが設定されてないだけでcsc.exeはあるはずだけど?
この辺確認してみて
c:\WINDOWS\Microsoft.NET\Framework\v3.5
c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
>>598 はず?あいまいだな( ・ω・)y─┛〜〜
顔文字うぜー
はずって確定だろ。 後から消してなきゃあるってことだ
CodeDomやデシリアライズでcsc.exeがウラで動くから、 v2.0***\csc.exeは実行環境化でも必須なのは間違いない。 3.5配下のcsc.exeはちっと自身がなかった。
>>589 >endFlag = end_flag_ref
end_flag_refが参照経由で書き換わっても、endFlagへの代入は一回きり。
604 :
589 :2010/01/18(月) 16:08:38
volatileをMyThreadClassのend_flagとかにつけてみましたけどダメのようです。
Mainスレッド側のクラスの(いままで書いてなかったけどForm1です。)実体の側にvolatileをつけてみたけど、
今度はコンパイルエラーになりますた。(refキーワードをつけて渡そうとするとコンパイルエラーになるようですね。)
結局、intのような組み込み型は値型であり、どうやってもアドレスを渡すことはできないよ!ってことでしょうか?
(関数で渡したときは、渡された関数の中で書き込むことはできるけど、
参照として変数に保持できないので、後から本体のほうに値を書き込むような事はできないんですかねぇ。
へんなの。)
ちなみにint をやめてMyRefIntというクラスを作ってこれで置き換えてやってみたらできました。(あたりまえか。。)
まぁ・・クラスを作ればできるんだからいいかな。。
>>603 そうみたいですね。
大変勉強になりました。ありがとうございます。
今後の設計のインプットとしてキモに命じておきます。
>>604 >MyThreadClassの初期化の仕方が間違えてる。
>Stopかけたい段階でMyThreadClassのend_flagを書き換えないと。
これやったかい?
当然参照越しに書き換えるんじゃなくて直接メンバを書き換えるようなメソッドを用意して、親スレッドから呼び出すんだよ。
つーか頭悪すぎだろw
607 :
デフォルトの名無しさん :2010/01/18(月) 16:21:38
>>604 public MyThreadClass(ref int end_flag_ref)
{
endFlag;= end_flag_ref; //ここでこのクラスに、渡されたend_flagのアドレスを保持しているつもり
}
参照渡ししてるけどコンストラクタの中は値をコピーしてるんじゃないの?
だからForm1で値を変更しようがかわらないと
正直おすすめしない裏技。 int hoge = 0; TypedReference tref = __makeref(hoge); __refvalue(tref, int) = 5; Console.WriteLine(hoge);
609 :
デフォルトの名無しさん :2010/01/18(月) 16:22:43
>>606 まあ、スレッドはめんどくさいところなんで
頭悪いと思った部分はスレッド関係ないけどね
611 :
デフォルトの名無しさん :2010/01/18(月) 16:27:54
C#でintの参照を持てるのかどうかしらんけど(Cでいうint形ポインタのようなの) それができないのなら参照型にしちゃえばいいだけだろ class State { public int endFlag; //本当はpublicじゃない方がいいかも } って作って class MyThreadClass { int endFlag; ではなく class MyThreadClass { State st; とか
”手っ取り早く値型”の部分がそもそもの問題の始まり コスト的に参照型使ったって問題ないでしょこれ
>>612 要するにできないってことじゃん?
言語の能力としてできない。
いや、だからThreadに渡した環境用クラスのインスタンスのメンバとして int型の変数を持たせてそれを書き換えれば何も問題ないわけだけど?
要はオブジェクト指向脳じゃないってことだよ
ガタガタ言わないでBackgroundWorkerを使ってろよ。 キャンセルの機構もちゃんとあるぞ。
いずれにしても、そんなOOP無視した糞設計はやめれ
618 :
デフォルトの名無しさん :2010/01/18(月) 16:41:02
C++経験者みたいなので結局のところ参照関連の勘違いでしょ
できないならできないでいいんですよ。 「int型(を含む組み込み型)の参照を保持する事はできない」 ってことだけが知りたい。
620 :
デフォルトの名無しさん :2010/01/18(月) 16:43:14
.netの中ではどうしてるかよくわからんが.net以前だとvolatileついた場合レジスタには行かなくて キャッシュまでは行ってることもあるんかな? アクセス遅くてもメインメモリ上?
621 :
デフォルトの名無しさん :2010/01/18(月) 16:45:23
>>619 というか参照型で渡そうがスレッドとして使うクラスの中では値型で宣言してる
以上は値のコピーが行われただけだと思うよ
値型と参照型っていろんな所で問題を起こすなあ・・・ unsafeとfixedなんか使っちゃだめだよ
>>621 そりゃわかるんですけど、それもなんかへんだよな。。
普通に考えたら型があわないってコンパイルエラーになるべきのような。
624 :
デフォルトの名無しさん :2010/01/18(月) 16:54:35
>>623 そもそもint*のような物あったっけ?
参照渡しはできても値型の参照保持機能というか
>>624 それを聞きたかったんですけど、結論としては無いようですね。
(裏技はあるようです。)
>>623 なんで?
C++だって
class Hoge {
int x;
public :
void set(int& i) { this->x = i; }
};
ってできるっしょ
もちろんxはただの値で、呼び出し元でsetに渡したのを後で変更しようがxは変更されない
627 :
デフォルトの名無しさん :2010/01/18(月) 17:00:48
ああint[] で 1個だけ確保すれば一応参照型にできるな
629 :
デフォルトの名無しさん :2010/01/18(月) 17:16:42
道具があれこれやってくれるのも良し悪しだな
System.Runtime.CompilerServices.StrongBox<T>というのもある
C#ってデリゲートとイベントってなんのためにあるの? オーバーライドの意味なくなるじゃん。 反オブジェクトしこー?
いちいちアダプタ実装してリスナに突っ込むのが面倒くさかったからじゃないの JAヴぁから移動してきた俺は今思えばそう感じる
Javaのイベント部分は無駄にコード書いてる気がしてならなかったしな。
だがdynamic、テメーはだめだ
まだdynamicは未知数だし分からんよ 誰か面白い使い方を考えてくれるかも
名前の通りOOPの移譲(デリゲーション)をスマートに実装するためにあるんでねえの
>>635 手軽に試せるところだと、ExpandoObjectと組み合わせると面白いよ
dynamicの使用例 static void Main() { dynamic o = new ExpandoObject(); foreach (DictionaryEntry ev in Environment.GetEnvironmentVariables()) ((IDictionary<string, object>) o).Add((string) ev.Key, ev.Value); ((IDictionary<string, object>) o).Add("Hello", (Action) (() => Console.WriteLine("Hello world !")) ); Test(o); } static void Test(dynamic o) { Console.WriteLine(o.Path); Console.WriteLine(o.PROCESSOR_IDENTIFIER); Console.WriteLine(o.NUMBER_OF_PROCESSORS); o.Hello(); }
プロパティの自動実装って意味あるの? public int Hoge { get; set; } が public int Hoge; より良い点ってなんかある?
プロパティである事。
プロパティだと変化に強いらしい
C#でもポインタつかえるよ。 unsafeなら。 一応はね。
644 :
デフォルトの名無しさん :2010/01/18(月) 21:23:14
C#でマルコフ連鎖で人工無脳を作りたいのです。 RubyやPythonのコードはけっこうあるのですが、 C#のコードってありませんか?
ない
>>640 オブジェクト指向は変数は絶対にpublicにしちゃだめ
いついかなる場合でもゲッター、セッターを使うことが正しいと考えている人と一緒に
プログラムを作ることになった場合に役に立つ。
変化に強いって具体的にはどういうこっちゃ フィールドだとインターフェイスに使えないのは分かる
649 :
640 :2010/01/18(月) 21:30:10
>>642 それはゲッターセッターを真面目に実装してる場合でしょう。
>>647 なるほど、納得w
>>648 ゲッターセッターにデバッグ用のコード埋めとけばアクセスを監視できるからと理解している。
フィールドにしたけど後で気が変わって処理を加えたくなってプロパティにした場合 そのコードを利用する側にもリコンパイルが必要になる 最初から最後までプロパティなら利用する側にはリコンパイルは必要ない
たとえばプロパティAに関する内部の処理を別のクラスHogeに移譲したくなったとき, 今までは単に A { get { return a; } } としていたのを A { get { hoge.GetA(); } に変えるだけで済む クラス外からの見た目は変わらない}
>>650 public int Hoge;
これを
private int hoge;
public int {get{return hoge;} set{hoge = value;}}
に書き換えるだけじゃないの?
この変更でもリコンパイルいるの?
たとえソースコードを全く改変しなくてもリコンパイルっていうの? 同じソースなのにコンパイル結果が違うってよくわからん。
それならはじめから public int Hoge; って書いたら setter と getter が作られるようにすりゃいいのにね。 どうせ普通のフィールド使おうとしたらギャーギャーいわれるんだし。
自動プロパティ使えよ フィールドとプロパティは内部的には全く別の種類のもので全く互換性はない C#ではたまたま字面上同じように見えるだけ
>>653 呼び出す方は見た目一緒でもやってること変るからしかたない。
int Hoge; を
int Hoge { get; set; } にするってことは
xxxx.Hoge = 1; の代入文を
xxxx.setHoge(1); のメソッド呼び出しに置きかえるわけだから
コンパイル結果が変わる。
プロパティはメソッド呼び出しを代入文と同じように書けるシンタックスシュガーなだけだもんな。
リリースビルドの時、最適化がかかってるんじゃにの?
フィールドにはrefやoutが使えるけどプロパティには使えない a.b.c = 1; でbが値型のフィールドなら,プロパティに変えるとコンパイルエラー バインディングとかでリフレクションが絡んできたときも問題が出る
662 :
デフォルトの名無しさん :2010/01/18(月) 21:42:55
>>645 ないんですか…。
じゃ、作るとして、文章を単語に分けたあと(ここまではできてる)、それを配列にいれるんですか?
Rubyだとこう書くらしいんだけど、これをC#だとどう書けばいいんですかね〜?
# マルコフ連鎖で要約
t1 = data[0]['head']
t2 = data[0]['middle']
new_text = t1 + t2
while true
_a = Array.new
data.each do |hash|
_a.push hash if hash['head'] == t1 && hash['middle'] == t2
end
break if _a.size == 0
num = rand(_a.size) # 乱数で次の文節を決定する
new_text = new_text + _a[num]['end']
break if _a[num]['end'] == "EOS"
t1 = _a[num]['middle']
t2 = _a[num]['end']
end
http://d.hatena.ne.jp/zariganitosh/20090628/1246186477
プログラム1.cs と ライブラリ1.dll があったとする。 ライブラリ1でHogeっていうただのint型の変数があって プログラム1で Hoge=3;(Hogeは単なる変数) とかいうコードがあったとする。 これで、あとでライブラリ1.dllのHogeをプロパティになおす必要が生じると 単にDLLを再配布するだけじゃなくプログラム1のほうもコンパイルしなおす必要がある ちょっとめんどくさくね? そんだけ。
get; set; のみのやつってインライン展開されたりすんのかなぁ? 逆アセンブルすりゃわかるんだろうけど面倒。
されない NGenやJITコンパイルの段階でインライン展開されることはある
プリパティは便利に使ってるぞ、めんどくさいから使わないなんて、なんてもったいないことを。
>>666 なるほど、じゃあ使う側がメソッド呼び出しであることは保証されてるわけね。
普通に考えればそれもそうか。そうならないんだったらプロパティの意味ないもんね。
コンパイル必要云々もあるけどフィールドは実装、プロパティはインターフェースってことだろう(概念的に publicフィールドは構造体なら許されてもいい気がするんだけど まあ一貫性がないから駄目なんだろうね
自動プロパティは変数と同じ位置で宣言するべき? 他のプロパティの位置と揃えるべき?
FxCopではプロパティ扱い
673 :
672 :2010/01/18(月) 21:56:43
訂正 StyleCopの間違い
どうでもいい func( int x ){ } とするか func(int x) { } とするかの違いくらいどうでもいい
ベテランの人で、使い分けてる人けっこういるよね どう考えてもゲッター実装する必要ないとこではpublicにしてたり。 俺は怒られるのが嫌だから思考停止して必ずプロパティにするけど そこでなぜフィールド公開しちゃダメなの?って聞かれても答えられないこと多いな
「保守性が下がるから」のひとことなんだけどね。 その場限りの安いコード書いてるうちは全部ひーるどでおkなんだけど
>>670 MS でもパブリックフィールドは Xna Framework あたりで使ってはいる
最適化がへちょいから。
まぁけど普通はそんなもの使う構造体はバインディング対象になりやすい
のでプロパティにしといたほうがいいと思うよ。一貫性ってより
678 :
672 :2010/01/18(月) 22:04:38
>>677 それは
>>661 のようにa.b.c = 1ってやりたいからだよ
bがプロパティだと余計なコピーが入る
最適化の余地はないので仕方ない
お母さんにダメって言われたからフィールドはpublicにしません。
通常はインスタンスフィールドを公開する理由なんて無いんだから、 何も考えずにプロパティにしておけば問題ないと思うがね 違反する理由が無ければガイドラインに従っておけばいい
>>681 それは「クラスライブラリ開発者向けの」ガイドラインだからちょっと話が別だ
クラスライブラリではクラスのインターフェイスを絶対に変えられないからな
(;^ω^)
そうだなぁ。 たとえばstringのフィールドがあったとして、使う時には前後の空白をカットして使いたい。 trimして代入して…ってコードを全部に書く手間を考えると、プロパティにしとけば天国だ。 コンパイルしなおすから関係ない? まあそうだね。
それは良くない使い方だぞ ループの中で使われたりすると死ねる クラスを使う側はプロパティの実装は軽いことを期待する ガイドライン参照
ちゃんとキャッシュしませう!
>>685 それが唯一の欠点かもな。
現場じゃ糞プログラマばっかだし。
いちいち使う側でキャッシュする必要があるようじゃプロパティの意味がないだろ 何のためにフィールドのように見せてるのかわからん MSのガイドラインでは「クラスの利用者はお客様」が基本です
処理してから代入するか、代入してから処理するか、量は同じだよ。 「処理済みのデータは再処理するだけ無駄!」はそりゃ理屈だけど それをチェックするのとバグ要因を考えると意味があるとは思えないなぁ
しかし、まかない料理ってものもあるわけで
691 :
デフォルトの名無しさん :2010/01/18(月) 22:39:01
え?良くない使い方だったのか ゲッターセッターだけのプロパティなんて意味ないのが多いと思ってたけど むしろその方が良かったのね
おいおい
>>689 処理済みのデータは再処理するだけ無駄なんだから
量は同じでないんじゃないの?
俺の多くのプロパティーはgetだけが多い。 値設定はクラス内のメソッド処理がほとんどだ。 これだけでも、プロパティの価値は高い。
public string Name{ get;set; } このように自動プロパティを記述しても abstract または extern に指定されていないため、本体を宣言する必要があります。 と表示されてしまい、コンパイルが通りません。サンプルでは問題なく通るはずなのですが… abstract または externに指定せず利用する方法はないのでしょうか?
VS2008(C#3.0)を使う
public string Name{ get;set; } このように自動プロパティを記述しても abstract または extern に指定されていないため、本体を宣言する必要があります。 と表示されてしまい、コンパイルが通りません。サンプルでは問題なく通るはずなのですが… abstract または externに指定せず利用する方法はないのでしょうか?
>696 なるほど、そういうことですか…ありがとうございます。 2005(製品版)を使わざるを得ない状況なので、自分で設定することにします。
セッターゲッターは裏でネットとかDBにアクセスしたくなるから困る。
>>698 VS2005に付属のものです。
多重投稿失礼しました。
セッターゲッターの中身でネットアクセスしてサーバーDB参照なんだろ。 信じられんがなw
DataGridViewの最も左側(カーソル行に*が表示される列)の行にテキストを表示したり、 またはこの列を非表示にするということはできないのでしょうか?
>>703 ゲットでDBからselect、セットでDBにupdateとかバカならやる
>>649 むしろさぁ
>ゲッターセッターにデバッグ用のコード埋めとけばアクセスを監視できるからと理解している。
こう言うのってもう、コンパイラの機能にしたほうがよくね?
そもそも変数を誰が使っているか?とか、そういうのって開発ツールの機能でいいんじゃ。。
>>704 ですが、RowHeaderVisible = false; で解決しました。
スレ汚し失礼しました。
信じられないかもしれないけど メソッドをなんでもかんでもプロパティにしたがる奴は実在する。 初心者のころはなおさら。
VB6時代のCrystalReportの印刷開始の命令が obj.Active = 1 (なんとSet Onlyのプロパティ) だった。 あれ見て以来、CrystalReportは避けることにしてたな。
でもMS謹製のコンポーネントもそんな調子だったでしょ。 MSCommとか見てみ
713 :
デフォルトの名無しさん :2010/01/19(火) 01:15:25
>>713 そこから、してはいけないことは読み取れるけど、したくなる理由にはならんな
716 :
デフォルトの名無しさん :2010/01/19(火) 01:29:18
WinFormってWPFでいうとこのMVVMのようなガイドラインってあるの?
>>711 どこの国のWPFだよ。つかいまのライブラリで列挙体使ってないのなんてあるのか?
>>713 そこの日本語がイマイチよくわからなかったんだけど
配列返す時はメソッドでクローンコピー作ってプロパティで返しなさいって言ってるのですか?
719 :
デフォルトの名無しさん :2010/01/19(火) 03:23:36
すいませんDAOパターンについて質問です DTO、DAOクラスを作って、DAOクラスの中ではセレクト結果をDataTableもしくはDataReader的な ものに保持しているとします。 この結果をDTOにコピーするロジックはどこに記述するのでしょうか?? ↓自分で考えたのは… 1.DTO、DAOを実際に使用しているメインクラス DAOがDataTableを返してきて、それをDTOにメインクラスが自分でコピーして使う 2.DAOクラスの中 DAOにクエリとDTOを渡すと、DTOに結果をコピーして返してくれる 自分なりに一番良いと思ったのは2.で、ただし条件として、DAOがどんな形のDTOにも データコピーできるように(ジェネリックか何かで)しておかないと、 DTOのクラスが追加(例えば新しいテーブルが追加されるなど)される度に DAOの中の処理も新しいDTO用のロジックを追加しないと駄目なので、 せっかくDAOパターンにしてアクセス部分を切り離してるのに、DTOとの 結合が強くなってしまうのではないかという点です。 基礎的な部分かと思いますが、よろしくお願いします。
720 :
デフォルトの名無しさん :2010/01/19(火) 06:49:22
Windowsフォームアプリケーションを作成しています。 その中で、ソフトの使用期限をレンタルサーバー(ewinds)内のSQLサーバーで定数で持ち、期限を過ぎたら自動で利用できないようにしたいと思っています。 ただ、現在日付としてDatetime.Todayを使用すると、ユーザーがPCの日付を過去日にしてしまえば、すり抜けられてしまいます。 どのようにして、偽装できない現在日付を取得することができるのでしょうか。 DBへのアクセスは、接続文字列を介して直接C#内でSQL文を発行しています。 よろしくお願いします。
サーバー側の日付で判定すればいい。
>>720 NTPサーバーからHTTPで取得するのが簡単
逆コンパイルされて追跡されるとかDNS書き換えて代理サーバーでうんぬんとか別のユーザーのデータをリクエストするとか いろいろ考えたほうがいいんじゃないの
724 :
デフォルトの名無しさん :2010/01/19(火) 09:45:26
判定をnopで潰されておしまい
アプリが、自分がインストールされたファルダーの場所を知るにはどうしたらよいのでしょうか?
ファルダーは判らないんじゃない?ファルダーは。
インストールフォルダに何か書き込むのは厳禁だよ
>>726 そうですか。分からないんですか(´・ω・`)
>>727 設定ファイルとか保存したいんですが(´・ω・`)
2010年にもなってUAC怒らせるような時代遅れなアプリケーション作らせないでくれよほんと頼むよ
UAC切ってない環境でそれやったら、 UACで警告出るうえに、実際に書きこまれる場所はユーザーごとに別になっちゃうよ
XP使ってりゃ関係ない
ファイルはマイドキュメントに保存すべき
だから何?
何でもありません
コレクションクラス作成用のCollection<T>とKeyedCollection<T1,T2>はあるけど HashSetに対応する奴は無いの?
ごめん勘違いしてた
質問です! 1+1の答えを教えて下さい! C#オタには難しい質問をしてしまいごめんなさい(>_<)
そういえば前から気になってたんだけど 最近の話でいいんだが WPFとかSilverLightとかXAML系て結構業務アプリに使われてる? そろそろ事務系だけでもWPFとかに移行してみたいんだが・・・・
使ってるよin俺の部屋
744 :
デフォルトの名無しさん :2010/01/19(火) 14:18:16
WPFまでくるとHTMLでアプリ書いてるのとかわらないよね・・・
インタラクティブなWPFプログラムでデキるオトコを演出! みたいな 女性誌っぽいコピー
747 :
デフォルトの名無しさん :2010/01/19(火) 14:34:45
WPF・・・向かった先は紙芝居エロゲ用スクリプトと同等か・・・
呼んだ? WPFは今のところゲームで使う予定はないな。Formsで十分。 ウィンドウの内側を自由に使えれば、ウィンドウの外側についてはあまり奇をてらう必要がないから。 WPFの描画機能とDirect3Dの組み合わせの可能性は研究しておいた方がいいとは思ってる。 WPFは現状それ自体が重いので、わざわざ利用する利点が感じられない。
749 :
デフォルトの名無しさん :2010/01/19(火) 14:55:04
c#で多重継承ぽいことをやるにはどうすればいいのでしょうか? たとえばTabcontrolにTabPageとListViewを継承したクラスを追加とか
自己解決しました
シャーロックForms
自作クラスのプロパティと別クラスのインスタンスを結びつけて辞書的に運用するにはどうすればいいでしょうか? いくつかのプロパティを持たせたデータ保持用のクラスのプロパティを変更すると 予め登録したイベントハンドラが呼び出され、プロパティごとに結びつけたToolStripMenuItemのEnabledやCheckedを変更するような仕組みです。 それぞれの変更を結びつけるコードを記述するしかないんでしょうか?
そりゃあそうだろう
754 :
デフォルトの名無しさん :2010/01/19(火) 15:10:12
>>752 デザインパターンの
ブリッジ、アダプタ、ストラテジ、テンプレートメソッド
あたりを読めば、おのずと実装方法見えてくると思う。
MenuとToolStrip系はバインディングが省略されてるからねー
756 :
デフォルトの名無しさん :2010/01/19(火) 15:22:31
>>754 具体的にはどんな感じの設計になるでしょうか。
>>755 どちらかというと問題はそちら側ではなく、データクラスがイベントハンドラを呼び出す際に
プロパティ同士を区別してデータのセットとして保持しておく方法がC#にはないような気がするんです。
(C++におけるメンバ変数のポインタがない)
どうでもいいけど749が言ってるのは多重継承とは言わないと思うんだよ TabControl(TabPageのコレクションを持つ)にTabPage追加して、 TabPage(Controlのコンテナを持つ)にListView追加してるだけじゃね
759 :
デフォルトの名無しさん :2010/01/19(火) 15:28:40
>>758 今やっているのがTabPageを継承したクラスのコンストラクタの中で
ListViewをnewして設定を行った後TabPageに追加してます。
761 :
デフォルトの名無しさん :2010/01/19(火) 15:33:46
>>760 追加するだけだとこれでもいいのですが
ListViewのイベントハンドラ関連の処理を
ベースになってFormで行いたい場合が
イマイチよくわからないので・・・・
できれば自前クラスでいきなりTabPage+ListView
として動いてくれればいいなあと思いまして
TabPage継承したクラスにListViewのイベントハンドラ弄るeventアクセサ用意しておけばいいのでは。 正直TabPage継承する構造って好かないけど。
カスタムコントロール作るとか
好き嫌いの激しい子達だね君らは…。
765 :
デフォルトの名無しさん :2010/01/19(火) 15:49:05
>>762 なるほど
>正直TabPage継承する構造って好かないけど。
問題になりますかね・・・勉強中なのでどういうのがいいのかさっぱりなんです
TabControlを継承するクラス内部で・・・というパターンも考えたのですが
どういうのが一番いいのか・・・
>>734 やめて。txtとかpdfとか文書関係のだけ入れときたいのに
勝手に設定用フォルダ作られると迷惑だ。
VSは入れたら即刻保存場所変える
AppDataでいいじゃない
でも最近のソフトはマイドキュメントに自分のフォルダ作って そこに保存するようになってるよね
>>766 マイドキュメントはシステムの復元による復元対象外
770 :
デフォルトの名無しさん :2010/01/19(火) 16:37:41
>>763 こういうのもあるんですね
ちょっといろいろいじっててコメント遅くなりました
何でUACは実行パスにファイル作るの嫌がるの?
実行パスってかProgram Filesみたいな管理フォルダに、だろ マルチユーザ環境にあたって不都合だったりいろいろ
そりゃーセキュリティ的にはあっちゃこっちゃアクセス出来るのはよろしくないが UACはそれでもなんかうざいよね
> UACはそれでもなんかうざいよね いや全然?
>>769 ユーザーデータを入れるんだから当然でないの?
設定はAppData内に入れてほしい。
776 :
デフォルトの名無しさん :2010/01/19(火) 17:06:22
asp.netで公開されているURLを叩くと サーバー側のローカルネットワークの LinuxのApacheで公開されているPHPが実行されて 結果をクライアントに返すみたいなことってできますか? iisがプロキシになるみたいな。
>>776 実際出来るかどうかわからんが、ASP.NETでページを作成し、
内部ではWebClientなどでPHPのURLを叩いて結果を取得し、
それをResponseに書き出すとか?
普通にできるだろ
でっきるっかなでっきるっかなはてはてほほー
はてはてふふーだと思ってた。
さてさて、だろw スキャットの部分はフフーもホホーも両方ある
アホばっかだな お前らみたいなのがルパンザサーンだと思い込んでるクチだな
ルパンドフード だろ
ゆとりのネタにマジレスするのもあれだけど ルパンルパーンだから
wwwwwwwwwwwww
/| \_WW/ |WWWWWW/ ≫ ≪ ≫ 何が可笑しい!! ≪ ≫ ≪ /MMMMMMMMM、\
ボタンやメニューとかのコントロールのNameが分かっている時、これからそのコントロールについているイベントハンドラの関数名は取得できないでしょうか?
789 :
デフォルトの名無しさん :2010/01/20(水) 12:49:49
form ↓ formEx->formExA ↓ formExB formExのコンストラクタに対して何か渡したいときどうすればいいのでしょうか?
base(なにか)のこと?
formEx(HOGE hoge) { } これの解決ですね・・・
C#でメモリブロックをコピーするにはどうしたらよいですか? 例えば、独自のプロトコルをしゃべろうと思っていて、 受信したストリームのデータを解析して、ペイロードを取り出し、 ペイロードをバイト配列に保持する作業を担当するスレッドがある。 そのスレッドがため込んだデータを、取り出したい。 すると呼び出し側は自分でバイト配列を用意して、ここにコピーしてね?っていうメソッドを呼び出す てシナリオを考えてますたとえば↓こんなメソッドがあるので、それを呼ぶ。 GiveMeTheRecvData(int giveMeThisSize, byte[] copyHere) で、実際コピーするのはどうやんの? どたんじゅんに言えばC++のmemmove
Marshal.Copyじゃね
return resultbyte.Clone();
ごめん、アンマネージは関係ないのか Buffer.BlockCopy
こわくて踏めない
800 :
デフォルトの名無しさん :2010/01/20(水) 15:46:44
PrimeにてMVVMを勉強中です。 Modelの初期化部に以下のようなコードがありました。 this.container.RegisterType<IDiggService, DiggService>(new ContainerControlledLifetimeManager()); これはどういう意味なのでしょうか?
>>798 結構面白いな。
>>799 URLを指定すると
選択したブラウザのスクリーンショットが表示されるというものだった。
BrowserShotsとC#に何の関係があるんだ
さあね
>>800 DIコンテナってやつでしょ
MVVMなんかに手を出すんだったらそれくらい自分でわからないレベルでは厳しいよ
806 :
デフォルトの名無しさん :2010/01/20(水) 21:34:33
>>805 DIコンテナはわかるがそれぞれのクラスの振る舞いがよくわからん。
調べてもわからん。
日本人でうまく説明してる人もいないしお手上げじゃ!
そこでNOVAですよ
808 :
デフォルトの名無しさん :2010/01/20(水) 21:41:52
MVVMって何か楽になってるんだか苦しんでるんだかよくわからんところがあるよな。
初心者にわかりやすくMVVMを解説してください
初心者にはわかりにくいのがMVVM
文字が読みにくいよ。
WPF向けに特化したMVC 片っぱしからバインドしまくる
やさしい人がキター! でもわからない専門用語が一緒にキター! MVCって何ですか?
>>814 MVC知らないのも終わってるけど
分からない単語が出てきて脊椎反射で聞き返すのはもっと終わってる
せめてググって1日くらい調べてからこいよ
残念なことにそれが許されてるスレだから 気持ちはわかるが、スルーするしかない。
UI(View)とデータ(Model)は分離したい。できればお互いを意識しないようにしたい。 でもViewとModelだけで互いに依存しないように作るのは非常に難しいというか無理。 だから間にControllerを挟んで仲介させる。 さらに,WPFの持つ強力なバインディング機能を利用してControllerとViewの間を徹底的に切り離したのが Model-View-ViewModel。
818 :
817 :2010/01/21(木) 00:19:27
すまんControllerとViewを切り離したというのは不適切だな ControllerのViewへの依存を取り除いた
ViewはControllerを意識するけど逆はない。 ControllerはModelを意識するけど逆はない。 なのでView(Controller)の実装はController(Model)に依存するってな感じでおk?
たぶんググった方が良いと思う(うざいからとかじゃなく) 丁寧に纏めてあるとこ読んだ方がいいよ。 1レス程度でわかったつもりになっちゃうのはあかんて。
C#ウホッ
817さんありがとう よくわかりました
823 :
デフォルトの名無しさん :2010/01/21(木) 01:14:23
815は出入り禁止な
この手のプログラム書くときには知ってなきゃならないことがたくさんあると思うんだが 完成するまでそれ全部教えてやるのか? 824は2ちゃんに命かけてるんだな。えらい。
キタ━━━━(Д゚(○=(゚∀゚)=○)Д゚)━━━━━!!!
偉いも何もそういうスレだし。 場違いなんだよお前さんが。
832 :
デフォルトの名無しさん :2010/01/21(木) 08:33:08
また相談スレの連中が荒らしてるのか?
ばれた?w
835 :
デフォルトの名無しさん :2010/01/21(木) 15:21:39
GPLv2って無料配布だとOKだっけ?
C#と何の関係があるんだよ!!!!!!!!!!!!!!11111111111111
837 :
デフォルトの名無しさん :2010/01/21(木) 15:36:09
いや他所で公開されてたソースをちょっと改造して公開しようかと
GPLスレでやれ
839 :
デフォルトの名無しさん :2010/01/21(木) 15:43:10
ごめんね835-839は俺の自演なんだ
自分のレスにあえて批判的なレスをつけて 同情して教えてくれる人を誘うパターンねw オレもよくやるわ。だいたい失敗するけど。
下手糞め
MatchPumpデザインパターンですね。
>>840 知ったか風に書いて書き込みを煽るのが一番効果的
自演で批判した方のレスが むしろ皆の心を掴んじゃった時は目も当てれない。
845 :
デフォルトの名無しさん :2010/01/21(木) 17:47:40
>>817 ViewModelって、
public xxx AAA{ get{ return .....; } }
みたいなのだけが大量にあるクラスっていう認識でいいの?
考えるんじゃない 感じるんだ
C++みたく関数定義と実装を別に場所に書けないの? class xxx { public xxx() public yyy() } xxx::xxx() { } xxx::yyy() { } みたいな。 関数定義と実装が一緒だと見づらい。
848 :
デフォルトの名無しさん :2010/01/21(木) 17:54:58
>>845 Javaサーブレットの登場の時はMVCモデルってのはよく聞いたな
表示とちょっとした入力は受け付ける、でもメインの処理は鯖側にやらせる
850 :
デフォルトの名無しさん :2010/01/21(木) 18:03:40
親Formx1と子Formx数個で情報のやり取りをする場合は どうすればいいでしょうか?
インスタンスさえ最初に渡してしまえばどうにでもなるべ
>849 (*^^*)ありがとん♪
めんどくさかったらシングルトンでも書いてそこにデータ全部押し込めばいい
staticでいいよ
staticは簡単だがコンストラクタが書けん
857 :
デフォルトの名無しさん :2010/01/21(木) 19:20:28
またはじまったか。
FormのLoadの際にSystem.Diagnostics.Process.GetProcessesByNameで 自分が立ち上がる際に自分を含めて何個いるか確認してるんですが Idをみると問題ないのですがHandleでみると自分が起動した時と その後で起動した別のやつでは数字がかわることがあります。 Formが起動しきるまではHandle固定されない物なんでしょうか?
860 :
デフォルトの名無しさん :2010/01/21(木) 20:16:20
至って正常な動作に見える とりえあず、MSDNでProcess.Handleのところ全部読め
>>859 コンソールアプリでなくWindowsアプリを選択しLoadではなくShownで確認してみ
自己解決しましたと言うのが遅くなってゴメンナサイです
許さんよ
許す
お礼言ってるだけいいだろ ほとんどの奴は聞きっ放しなんだから
よくねえよ?
適当に言ってるだけだからほっとけよ
型変換やメッセージの出し方など、基本的なものから載っているサイトや本ってありますか? できれば逆引き的な感じがいいです。 「C#逆引きハンドブック」っていうのを買ったのですが、基本的なことがあまり載ってなくて困っています。 Delphiを多少かじっていたのでいけるかと思っていましたが無謀でした よろしくお願いします
バカですね。
>>869 の望むようにすると……
3. クラス
3.1 クラスを作成する
3.2. クラスを継承する
3.3. インターフェイスを実装する
普通に章立てした教科書じゃんw
そろそろ自己解決しましたといってもいですかぁ?
msdnは結構優秀だからもっと使ったらいいと思うんだが・・・
ボランティアが書いてるのもあるんだからプログラミングガイド読んでやれよな
C#のSocketってひでーな
877 :
デフォルトの名無しさん :2010/01/22(金) 01:48:32
例えばどこら辺?
教えねーよ
ピッチャービビってる、ヘイヘイヘイww
ビビってる、ヘイw
>>877 受信してコールバックされる度にまた次のコールバック仕掛けなきゃいけないとか
882 :
デフォルトの名無しさん :2010/01/22(金) 02:26:27
なるほど
AsyncCallback使わないから気にしたことなかったな
>>883 いやぁ、なんの問題もありません。動けば問題なしです。
>>884 C#のソケットもいろいろライブラリがあるようですね。
今は、どれを使うのがトレンドなんですか?
変数は全部、publicでいいよね?(´・ω・`)
いいよ、好きにしな(´・ω・`)
だめ、だめだめお(´・ω・`)
>>883 ですよね。と軽く聞き流しときゃいいんだよ。
バカやボケ老人は適応しようという気すらないんだから。
過去のレス見ていると質問するのがこわい
ですよね。 をNGワード登録っと
で す よ ね 。
ですよ。
でよすね。
ならば正規表現NGEx
でしたよね。
desuyone.
次のように文字列の中に数字が2つ、タブで区切られて入っていて、それを2つのバッファに別々に代入したい場合、 一番簡単な方法はなんでしょうか? string line = "123\0.555"
Split
無理
やっぱりSplitですか。やってみます
List<RecFile> recFilesで、 クラスRecFileにFullNameというstringのプロパティであるとき、 recFilesに含まれている全てのオブジェクトのFullNameの文字列配列を作りたい場合 .NET3.5で一番簡潔に変換するには↓で合っていますか? recFiles.ConvertAll<string>(item => item.FullName).ToArray()
うん
ConvertAllじゃなくてSelectでよくね
3.5だしなぁ。
recFiles.Select(item => item.FullName).ToArray() ありがとうございます。こうですね
プログラムがおかしいんです。何でしょう?(´・ω・`)
正しく書いていないからです。
何ででしょうね。書き手を交換すれば改善するかもしれません
こ
918 :
デフォルトの名無しさん :2010/01/22(金) 17:19:14
プログラムは作った様に動くが、思った通りに動くとは限らない
恋愛と一緒だな。 俺童貞だけど。
全然違うし別にうまいことも言えてない
なんかレベルの低いスレだな。。 C#って小学校でも教えるようになったのか?
ファイルからデータ取り出してコレクションに入れて整理するプログラム書いてたら、 最終的にList<List<List<Data>>>なListができてウゲェってなったけど、 コレクションの多重ネストってあり?
923 :
デフォルトの名無しさん :2010/01/22(金) 18:45:13
>>922 それが気にいらないならDATAが何か知らんけど
テキストデータにできるならXMLにやらせるとかで
もいいんじゃね?
>>923 CSVファイルって書くつもりがファイルにしてしまった。
Dataはstringやintのプロパティが入ったシンプルなクラスで、
種類ごとにリストに分けて、そのリストをさらにリストでまとめてってな感じで、
比較などを順番に行う。
とりあえず動くからこのままでもいいかな。
コレクションの多重ネストはまずい方法なのかなーと少し不安になったので聞いてみた。
ブラウザコントロールでJavaScriptのオブジェクトにアクセスするにはどうしたらいいでしょうか? JavaScriptの値をForm要素にコピーしてSubmitのイベントをブラウザコントロールでフックして Document要素から読み出す・・・ これで正しいでしょうか?
そもそも、JavaScriptのオブジェクトって何を想定してるの? var hoge; ←こういうやつ?
>>926 スレタイを大きな声を出してよんでみよう!
どうやら頭のおかしい人が住み着いてるみたい。
>>924 Listを内包するクラスでラップするってのも読みやすくする上ではありかなとは思う。
種類ごとのリスト、みたいに何のリストかは決ってるわけだし。
>>927 は直前しか読んでなかったってわけかwww
どういう風にマップされるんだろね。
たしかSerializerはJSONに対応してたからデシリアライズしろってことなのかね。
なんという手軽さ・・・ メインメソッドの中に Application.Run(new Form()); とやるだけでWindowsのGUIアプリケーションができてしまった。 未完成である「Formクラス」に、ボタンクリックイベントとかちょっとした改良を加えるだけで すばらしいプログラムができあがる。 チカラ これがOOPの「力」か・・・
>この規則による警告は抑制しないでください。 >理解しやすく使いやすい構文でジェネリック型を指定することで、 >習得に必要な時間が短縮され、新しいライブラリの採用率が向上します。 ってことは自分で使うぶんにはいいような気がする 採用って…
OOP関係ねえよ
そりゃクラスライブラリのプロパティでList<List<List<Data>>>とか出てきたら即刻ゴミ箱行きだ
それは確かに作った方もおとなしく使う方もノイローゼだな
943 :
デフォルトの名無しさん :2010/01/23(土) 00:29:34
C#の切り上げ処理でつまづいています。 1047619.014 という数字の小数を切り上げても1047619のままになるはずですが、 切り捨てたい桁の数字が0の場合にCellingをしたら、1047620になります。 このように端数処理したい桁が0の場合を含め、切り上げ処理はどのようにするのが良いのでしょうか
Ceiling(Floor(x*10)/10)
>1047619.014 >という数字の小数を切り上げても1047619のままになるはず おいギャグで言ってるのか? ”切り上げ”で辞書引けよ
>>943 切り上げたいのか切り捨てたいのかどっちだよ
質問とは直接関係ないけど,桁を意識するならfloatやdoubleじゃなくてdecimal使った方がいいよ 浮動小数点じゃダメだとは言わないけどちゃんとした知識がないと結構難しい
>>943 がやりたいことは
小数点1位を切上げ
じゃないかな
949 :
デフォルトの名無しさん :2010/01/23(土) 00:48:18
>>943 です。
1047619.014の、小数第一位を切り上げたいんです。
言葉不足で申し訳ありませんでした。
単純にcellingすると、1047620になってしまいます。
どうすればよいでしょうか。
10倍してceilingして10分の1すりゃいいじゃん。
>>944 で良いんじゃないの?それか、0.9を足して整数化するとか
954 :
デフォルトの名無しさん :2010/01/23(土) 02:17:42
あるソース(プロジェクト)を解読しているのですが分からないことがあります。 Hogeっていうクラスがあります。 HogeクラスはSageというメソッドは持っていないはずですが、 int[] i = hoge.Sage(); というように、持ってないはずのメソッドを呼んでいます。 で、このメソッドの定義をみてみると、 public static partial class Utility { public static unsafe int[] Sage(this Hoge hoge) { 〜略 } } というように静的クラスでなにやら定義されています。 引数にthisがあったりして、はじめて見た謎の書き方です。 こんな感じで、継承なしで元のクラスを拡張してるってことなんでしょうか? 調べたいのですが、こういう方法に名前とかついてますでしょうか?
拡張メソッド
教えて下さってどうもありがとうございました。
いやいや( ^ω^)おっお
おはいよーございます
>>943 が求めているのは、さしずめ零捨一入と言ったところか
>>944 >>952 負の数を考慮するなら切り上げ/切り捨て/四捨五入は、
特に断りが無ければ、絶対値に対して行われる
因みに、Ceiling/Floorは天井関数/床関数なので注意
960 :
デフォルトの名無しさん :2010/01/23(土) 09:36:53
【C# 、.NET Framework,Windowsインストーラー】 .NET Framework3.5 SP1 がインストールできない事象について PCに.NET Framework 3.5 SP1などを、ClickOnceからインストールしようとしたときにエラーが出ました。 <インストールしようとしたコンポーネント> ・Windowsインストーラー3.1 ・.NET Framework 3.5 SP1 ・Windowsフォームアプリケーション(C#) <パソコンの概要> ・OS:Windows XP SP3 ・既にあった.NET Framework 1.1 <エラー内容> 「Windowsインストーラーサービスにアクセスできませんでした。これは、Windowsをセーフモードで実行している場合、またはWindowsインストーラーが正しくインストールされていない場合に発生することがあります。サポートの担当者に問い合わせてください。」 Windowsインストーラーに問題があるのか、.NET側に問題があるのか分かりません。 解決策を教えていただけないでしょうか。 よろしくお願いいたします。
「Windowsインストーラーサービスにアクセスできませんでした」でぐぐるくらいの知恵はつけようよ
マインスイーパーのような、スコア表示を読み取ってテキストとして表示させたいのですが、 どのようにすればいいでしょう・・・
そのくらいなら、GetPixelみたいので色を取得して判断できそうだな。
できるだろ。あらかじめ、0〜9のそのサイズの画像を用意しておいて、 比較してもいいし。 ただ、汎用的に、ってことだと、画像認識技術が必要だろうね。
なるほど、書体とかは統一されているので、画像用意して比較っての試してみようと思います。 比較ってのは1pxずつずらしていくしかないんですかね・・・
そんな簡単にできると思えんけどw 普通に考えて個人の手に負える仕事じゃない
この間画像が同じかどうかの比較をするために作った拡張メソッド 文字ならこんな大袈裟なことしなくてもいいと思うけど /// <summary> /// 違うBitmapが同じかどうか瞬時に判断できるようにBitmapのMD5ハッシュを計算する /// 16進32桁(128ビット=16バイト)の文字列を返す /// </summary> /// <param name="bmp"></param> /// <returns></returns> public static string GetMD5Hash(this Bitmap bmp) { BitmapData bitmapData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat); int bytes = bitmapData.Stride * bmp.Height; byte[] bmpData = new byte[bytes]; Marshal.Copy(bitmapData.Scan0, bmpData, 0, bytes); bmp.UnlockBits(bitmapData); MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider(); byte[] md5Data = md5Hasher.ComputeHash(bmpData); StringBuilder sb = new StringBuilder(); for (int i = 0; i < md5Data.Length; i++) { sb.Append(md5Data[i].ToString("x2")); } return sb.ToString(); }
書体は決まってるんだから簡単な画像認識じゃん。
>>967 OCR処理しようってんじゃなくて、
あらかじめ表示されるであろうパターンを用意しておいて比べるだけだよ
どんなフォントで表示されるのか決まっていないんであれば無理だけど
なるほど、ハッシュですか・・・ 同じ大きさで数字単位に切り取り、 景色統一してそのメソッドに放り込んでみます!
半透明で単純に比較できないんなら 輝度がある一定値を越えるかどうかでON/OFFを判断するって手もある それを全ての文字パターンに対して同じかどうかピクセル毎に比較して、 違うピクセルの数が一番少ないのがそこの文字と解釈するとか
いろいろ考えるのがプログラミングの楽しみだと思うんだけどな。
ニューラルネットワーク使えばいける Captcha 解析 か何かでググれ
すぐ下にこんなのもあった /// <summary> /// Bitmap内で指定された色だけ抜き出す。 /// 指定された色の場所とそれ以外の色の場所で2色だけに書き換える /// </summary> /// <param name="bmp"></param> /// <param name="extractColor">判定する色</param> /// <param name="hitColor">extractColorだった場合に設定する色</param> /// <param name="blankColor">extractColorでなかった場合に設定する色</param> public static void ExtractColor(this Bitmap bmp, int extractColor, int hitColor, int blankColor) { BitmapData bitmapData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); int intcnt = bitmapData.Stride / 4 * bmp.Height; int[] colorData = new int[intcnt]; Marshal.Copy(bitmapData.Scan0, colorData, 0, intcnt); for (int i = 0; i < intcnt; i++) { if (colorData[i] == extractColor) colorData[i] = hitColor; else colorData[i] = blankColor; } Marshal.Copy(colorData, 0, bitmapData.Scan0, intcnt); bmp.UnlockBits(bitmapData); }
>>964 プロテクト甘いならねこまんま等でアドレス調べて
メモリを直接読んじゃうのが一番簡単だと思う
977 :
デフォルトの名無しさん :2010/01/23(土) 16:57:25
>>976 だねえ
キャプチャ負荷だなんだかんだで画像解析してたら大変なことになる
ただメモリ直接読むのはバージョン変わったりしたときに動かなくなる可能性あるからなぁ。 画面読み取りも似たようなもんではあるけど。
ネットゲームなのでそれは出来ないです、マインスイーパーだと以前やったのですが・・・
980 :
デフォルトの名無しさん :2010/01/23(土) 17:32:22
ネトゲならその情報もパケットで送られてくるなら パケットキャプチャでごにょごにょって手もあるな
>>979 出来ないと思ってるだけでは?
そのネトゲの名前は何?
nProtect導入済みのゲームでもメモリ値って閲覧出来ますか? パケット系も出来そうですが、とりあえずbmpの画像処理のほうやってます;
nProtectだろうがなんだろうが どんな方法を使ってもメモリ閲覧を絶対に不可能にするなんてことは不可能。
OSによるメモリ保護で読めなくするって方法はあるけど? Windowsではどうなってるのかはしらんけど。
極論だけど、その気になればH/Wレベルで直接ビットパターンを読み取ることもできるわけだ
極論すぎて話にならんがな
オライリーの本かったが何これ!糞本じゃん! もう買わん!プンスカ
オライリーの本は人を選ぶ お前は選ばれなかっただけだ
正確に言うと オライリーの本は日本語バージョンは糞本 amazonとかで洋書買え
アマゾンの★くらい見てから買えよ
アマゾンの★はまったく役に立たない。 ★が多くてもゴミな本もあるし ★が少なくても良い本もある。 ちゃんと用語の解説してるにもかかわらず、適当に読んでいる人が 「説明もなしにいきなり知らない用語がでてきた!意味不明でわかりにくい本だ!★2つ!」 なんつーレヴューも珍しくない。
人によって評価が違うのは当たり前なのだが。
それは変だろう。文芸作品じゃないんだから。
というか、
>>992 の言ってることが読めてないんじゃないの?w
確かに多いよ。読み手側の問題を本(著者)の著者のせいにしてるだけの批評。
正反対になんでも誉めればいいと思ってるとしか思えない奴の書いたレビューも多い。
版が違うだけで評価が全然違うとか多すぎて笑える。
とにかく、アマゾンのレビューは明らかな糞本をふるい落とすぐらいの効用しかないね。
当たり前の事を長々とまぁ・・・
先にこっちを埋めようぜ。
998
秋はエホエホ、ああこりゃこりゃ梅
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。