184 :
デフォルトの名無しさん :
2007/07/09(月) 11:21:03 質問です。 DataGrid1に金額という列があり、その列の合計をDataGrid2の合計という列に 集計させたいのですが、どのようにやればいいでしょうか? MSDNのDataColumn.Expression プロパティなどを参考にしているのですが いまいち理解できませんでした・・・・ 。
185 :
184 :2007/07/09(月) 11:21:39
private System.Windows.Forms.DataGrid dataGrid1 = new DataGrid(); DataSet ds = new DataSet("出荷明細"); DataTable dt; private System.Windows.Forms.DataGrid dataGrid2 = new DataGrid(); DataSet ds2 = new DataSet("合計金額"); DataTable dt2; DataColumn dc; public Form1() { InitializeComponent(); dt = ds.Tables.Add("出荷明細"); dc = new DataColumn("金額",typeof(int)); dt.Columns.Add(dc); Controls.Add(dataGrid1); dataGrid1.DataSource = ds.Tables["出荷明細"]; dt2 = ds2.Tables.Add("合計金額"); dc = new DataColumn("合計",typeof(int)); Controls.Add(dataGrid2); dt2.Columns.Add(dc2); dataGrid2.DataSource = ds2.Tables["合計金額"]; }
シールクラスのシールを外す裏技ってないですか?
187 :
184 :2007/07/09(月) 11:24:38
private void botton1_Click(object sender, System.EventArgs e) { DataRow dr; dr = dt.NewRow(); dr["金額"] = Convert.ToInt32(Kingaku.Text); dt.Rows.Add(dr); DataRow dr2; dr2 = dt2.NewRow(); dr2["合計"] = (なんて書いたら良いでしょうか?); dt2.Rows.Add(dr2); } 上記のようにコーティングしています。間違っている部分も多々あると思いますが なにとぞよろしくお願いします
>>184 またお前か
もう来るなって言ったはずだぞ
189 :
184 :2007/07/09(月) 11:44:08
ここに書き込むのは自分、初めてなのですが・・・・
以前のDataGridバカとは違うはずだけど、
>>61 と同一人物だと思ってたわ
学校の課題か何かなんだろうか
191 :
184 :2007/07/09(月) 12:02:24
学校ではないのですが、会社の課題なのです。 1から初めて自分で調べて課題を解いて行けという感じなのですが ネットで調べたり、手元にある本だけじゃ限界があり、ここに質問させて いただきました。
リレーション設定できるカラムなさそうだし、Exspressionじゃ解決できないよね
というわけで、ループ処理で合計金額出せばいいだけなんだけど、
>>187 じゃ合計金額じゃなく累計になるね
だからわざわざ合計金額にもDataGrid使うような設計しているのか……
193 :
184 :2007/07/09(月) 13:53:13
何か良い方法など、ありますかね?
毎度合計金額テーブルのレコードをクリアすればいいんだろうけど、
DataGrid使う意味なくなるよ?
課題が糞なのか
>>184 の脳みそが糞なのか
195 :
デフォルトの名無しさん :2007/07/09(月) 20:08:37
ヘルプはほんとに分かりやすいけどクラスの使い方が書いてあるだけだから 言語とかの基本的なところはヘルプでは分かりにくい
198 :
197 :2007/07/10(火) 14:01:01
誤爆すまん
199 :
デフォルトの名無しさん :2007/07/10(火) 14:52:13
age
200 :
デフォルトの名無しさん :2007/07/10(火) 14:54:00
200get!
201 :
デフォルトの名無しさん :2007/07/10(火) 16:50:58
DataGridの行をクリックするとその行を削除するようにしたいんだけど どのようにコーティングすればいいかな?
クリックするとその行を削除するようにコーディングしたら?
ifとかforeachとかちゃんと使えば書けるだろ
GUI で、グラフを描画するソフトを作っていますが、非同期処理がうまくいかないので、ここに書かせて下さい。 まずメインの GUI スレッドで、スタートボタンを押すとウィンドウが開きます。 そのクラスにデータを渡すと自動的にグラフを描画します。 で、その描画するメソッドは、 if (this.Parent != null && this.Parent.InvokeRequired) { IAsyncResult ar = this.Parent.BeginInvoke(new MethodInvoker(delegate { GraphDraw(ref values); })); while (!ar.IsCompleted) { } } として、this.Parent ( メインの Form コントロール) で描画させています。 で、シングルCPU のマシンで動作させている分には問題ないのですが、マルチコアの CPU だと動作がかくかくしてしまいます。 このような処理ではいけないのでしょうか?
PictureBoxが赤い×印で表示されることがあるらしいんだけど どうしたら再現できますか?
>>204 全体像がいまいち掴めないから何とも言えないけど
> while (!ar.IsCompleted) { }
これはまずいでしょ。
どうせ待機するなら this.Parent.Invoke(...); でいいんじゃないの?
>>205 描画処理中に例外を投げるとかじゃなかったっけかな。
あいまいな記憶だけど・・・。
関係ないが最近黒字に赤の斜め格子模様っていう現象に遭遇した。
なんだったんだろ。
>>206 お返事ありがとうございます。
this.Parent.Invoke(...); だと、シングル CPU の時に、グラフウィンドウのグラフは
描画されますが、メインの GUI の方に制御が戻ってこないのです。
( グラフのウィンドウもクリックしても無反応 )
どう考えても同期とか非同期とかまったく無関係なところでのバグだな。 感にたよって原因を「あて推量」したくなる気持ちは分からないでもないが (いや本当は理解できないが。。)それじゃ賭博と変わらん。 原因に関して仮説を立てるのはいいんだが、立てたらそれを実証しなきゃ。 人に聞くのははそれからじゃないの順番として
どこがやねんw 単に思うように動かないコードがあって、 それには自分があまり自身がない技術(スレッディング)が使ってあるから 原因はそれに違いない、っていう非科学的な思い込みが書いてあるだけじゃん。
>204 全貌が見えないので何やりたいんだかよくわからんが、 while (!ar.IsCompleted) { } のループの途中でSleepが入ってなくてBusyLoopになってる予感。 ちょっとだけThread.Sleep(10)とか入れとけ。
処理が終わるまでwhileループを回してたら処理も重くなるわな
なぜかビジーループなのに画面は反応するらしいぞ。
処理が終わるまで待機するやつを呼び出せばいいんじゃないの?
それはないよ。
>>211 みなさん御助言ありがとうございます。204 です。
やりたいことは簡単に言うと、GUI のスタートボタンを押すと、別ウィンドウのグラフ描画開始
ストップボタンを押すとグラフ描画終了というものです。
普通にやってしまうと、スタートボタンをおしたらそのまま描画しっぱなして停止させることが
できないので、@IT の記事などを参考にしながら作りました。
結局、
>>211 さんの助言の通り sleep を入れたところ、Single/Dual CPU 両方で正常に動作しました。
sleep を入れないと、Single CPU は CPU が遅いこともあり、Busyloop に CPU がもっていかれて処理が
GUIに戻ってこなかったようです。
やりたいことは単純に、GUI からスタート・ストップをしたいだけです。
while (!ar.IsCompleted) { Thread.sleep(10); }
という使い方は MSDN で「ポーリング」として解説されていて、同期処理と同じだからあまりおすすめ
できないと書かれていました。
通常はどういう実装で GUI に処理を戻すようにするのでしょうか?
てかなんでthisじゃなくてParentでBeginInvokeとかしてんの?
while (!ar.IsCompleted) { Thread.sleep(10); } はお勧めできないと書かれていたから、 while (!ar.IsCompleted) { } としたのだな? いっぺんしんでこい
ふらっとなんだからそこは穏便に……
>>216 とりあえずスレッドから直接GUIの描画メソッド呼ぶんじゃなくてさ。
スレッドからGUIに渡すものはデータのみにしなさい。
データをGUIに渡してそのあとでInvalidate()なり呼べばよろしい。
GUI {
int[] _data;
int[] data {
get { return _data; }
set { lock(_data) { _data = value; } this.Invalidate(); }
}
override OnPaint() { lock(_data) { GraphDraw(_data); } }
}
void ThreadProc() {
int[] data1 = MakeData();
GUI.data = data1;
int[] data2 = MakeData();
GUI.data = data2;
}
>>216 >while (!ar.IsCompleted) { Thread.sleep(10); }
>という使い方は MSDN で「ポーリング」として解説されていて、同期処理と同じだからあまりおすすめ
>できないと書かれていました。
これの意味がわかんない 誰か教えて
やりたいのはポーリングじゃないの?
だったらそれでいいんじゃない?
同期処理と同じ?ここ意味わかんない
>while (!ar.IsCompleted) { Thread.sleep(10); } 実質同期と変わらんだろ、どう見ても。
>>223 MSDNに書いてある意図はよくわからんけど
とりあえずその書き方はスレッドコンテキストの切り替えが頻繁に起こるからあまりよろしくない。
ある状態になるまで待機するというようなときは普通はイベント(EventWaitHandle)を使う。
意味ないとまでは行かないけど疑問が残る。
>やりたいことは単純に、GUI からスタート・ストップをしたいだけです
なんだから、計算&描画は別スレッドでやるべきなんじゃないのさ?
>>216 でしょ結局。
メソッドとスレッドを混同する(初学者に)よくある間違いでは?
>>228 いや
>>204 がベースになってる限りマルチスレッドにする意味が分かんないってことは?
・重い(計算&描画)と思われる処理をFormスレッドで行っている
・whileで描画の待ちを行っているため、別スレにする意味がよく分からない
シングルスレッドにするのが一番よさそうだな
>>231 シングルスレッドだと
>やりたいことは単純に、GUI からスタート・ストップをしたいだけです
ができないんじゃマイカ?描画中でも止めたいんだろ。
BackGroundWorker を使うのが一番楽だと思うが。
シングルスレッドだとDoEventsを呼ぶ方法と、 処理を小分けにしてタイマーで処理する方法がある。 C#ならYieldで処理を反転させる変体チックな方法がおすすめ。 スレッドを使うならダブルバッファを使うべきだろう。
>>233 単純にやるには DoEvents が一番楽でシンプルですね。
ありがとうございます!
ダブルバッファってのはなんで? あ、単にバックの処理で描画が重くなるからってことかな?
すいません、VC#でmdbファイルをデータベースとして指定したのですが、 いざDataGridViewで表示させようとすると、パスワードが違います と、例外エラーがでてしまいます。 パスワードは接続時に入力したのですが…
接続時っていつのことだ? それがDbConnection.Open時じゃなくプロジェクトに追加時ってだけの意味なんだろうか とりあえず保存された接続文字列見てPassword=hogehogeという文字があるかどうか 確かめてみたほうがいい
238 :
236 :2007/07/11(水) 14:43:22
>>237 一度削除して、もう一度データベース接続を作った際に
「重要情報を接続情報に含めます」を選んだらつながりました・…
お手数をおかけしました。まだまだよくわかってないです。。。@C#三日目
ToolStrip を持つ Form を作っています。 この Form の AutoScroll を True にして、フォームを下側にスクロールすると ToolStrip が 固定されず上にスクロールしてしまいます。 これを固定する方法はありませんか? ステータスバーもスクロールしていってしまいます。
フォームの上にパネル貼ってパネルをオートスクロールにしたらいいんじゃね
ウィンドウのサイズを変更したら、フォームとかの大きさが自動的にかわるのってどうするんでしょうか? javaならflowlayoutを指定すればよかったのですが、C#はなんか違うようで。。。 flowLayoutコンテナにいくつかコンポーネントをのっけても何も反応がなかったのですが、 何かやりかた間違ってるでしょうか。
「ウィンドウのサイズを変更したら、フォームとかの大きさが自動的にかわる」 なんのことかさっぱりわからん。
すいません、テキストフィールドなど です。 本人の修正より早い光速突っ込みありがとうございます。
Anchorプロパティを使う
DockかAnchorだな。
なるほど。調べてみます。 ありがとうございます。
mdbファイルをデータベースとして扱いたいのですが、 VC#Express上ではデータベースエクスプローラに追加して接続できたのですが、 実際にプログラムでつなごうとするとできません(涙 持っている入門書ではSQLServerにつなげる方法しか書いてなかったのですが、 mdbに接続するにはどうすればいいでしょうか?
↑の件ですが、 こんな感じでかいてみたんですが… 何か間違ってますでしょうか? System.Data.SqlClient.SqlConnection scn = new System.Data.SqlClient.SqlConnection(); scn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=C:\soft\db.mdb;Persist Security Info=True";
>>248 自分で接続文字列にOLDDBって書いてるじゃないか
SqlClientじゃなくOleDb使わないと……
>>249 ありがとうございます。 いけましたorz
パスワード付きのmdbの場合は"Database Password=hoge;"といった記述を追加すればいい
といったことを見つけたのですが、
実際やってみると「インストール可能なISAMドライバが見つかりませんでした」と表示されました。。。。
これはいったいなんなのでしょうか?
接続文字列が間違っているだけ VSに任せて自分で書こうとしない方が良い
252 :
250 :2007/07/11(水) 19:20:16
>>251 データの追加をする際は、どうしても手動でDBに繋がないといけないと思ったのですが・・・
日付等のカレンダーのフォントサイズって大きくできる? ぐぐったけど以外になさげ
254 :
253 :2007/07/11(水) 19:22:46
うわマジすまん、フォントサイズ変えたらいけるやん 何か勘違いしてた まじすまん
255 :
253 :2007/07/11(水) 19:29:17
すまん、やっぱりカレンダーを作った際に「□今日 2007/07/17」の部分の左端が切れてしまう。 何かいい対処法ないかな。 サイズ指定もなぜか無視されるし
>>252 そうじゃなくて、データベースエクスプローラ(サーバーエクスプローラ)使っているなら
プロパティで接続文字列見れるじゃない
257 :
252 :2007/07/12(木) 08:51:27
>>256 プロパティで接続文字列見えるのですが、
パスワードだけはなぜかみれないんです。
んで、コピペすると「パスワードが違います」とのExceptionがorz
コピペじゃなくて設定したパスワードを入れろよ
接続文字列云々はスレ違いだからADO.NETスレかAccessスレにでも行けよと思うが mdbをデータソースに追加したら Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\hoge.mdb; Persist Security Info=True; Jet OLEDB:Database Password=hoge となったぞ
260 :
デフォルトの名無しさん :2007/07/12(木) 13:07:43
ListViewに複数データ連結する方法はないでしょうか? 1行にカラムを6つほど作ってそこにDataSetから読み込んで表示したいのです。
DataGridViewで我慢してください
string [] A,B があるとき、Aの要素のうちで、Bの要素ではないものを取り出すにはどうしたらいいでしょうか? A = ["a","b","h","e"] B = ["b", "k", "e","i"] のとき、 "a" と "h"がほしいのです。
ボタンをクリックしたとき if (!string.IsNullOrEmpty(textBox1.Text) { 処理 } とするか if (string.IsNullOrEmpty(textBox1.Text)) { return } 処理 どちらの方が良いでしょうか
>>263 どっちでもいいです。見やすいほうにしてください
Delphi言語(ObjectPascal時代)からの移行ですが、かなり戸惑っています。VS2005 Standardを 購入してかなり経ちますがコーディング手法の違いで一向に進みません。どちらも使っていると 言う人が居たらご教示願いたいのですが。宜しくお願いいたします。
>>262 var c = a.Except(b);
いやなやろーだ
>>262 string[] C = Array.FindAll<string>( A, delegate( string str )
{
return Array.IndexOf<string>( B, str ) == -1;
} );
>>263 どっちでもいい
ちなみにtextBox1.Textはnullにはならないよ
前にここのスレで聞かれてた様なな気がするのですが、 Delegateを使って(別にDelegateじゃなくてもいいけど)stringの中から コードを実行する方法ってありますか? もしあればヒントをいただけるとうれしいのですが…
言っている意味がわからんが、スクリプト言語のevalみたいな物が欲しいってことか?
>>270 evalっぽいのはJScriptを使った方法ならわかるのですが、
JavaScriptのFunctionコンストラクタみたいのが無いかなと
思ったんですが、さすがにインタプリタみたいには行かないですかね?
CSharpCodeProvider
>>272 やっぱり一度exeかdllにしないとだめですか…
ありがとうございました。
∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄
IronPython使えよ。
Emit インラインアセンブラ状態になるけどw
>>269 コードとデータを融合したソースは書かないほうがいいよ。
メタデータには介入しないほうがいい
それをやるのは変態プログラマで、天才でもなんでもない。
リフレクション禁止?
>>277 いや、ちょっとした実験やるのにもわざわざVS立ち上げるのも面倒なので、スクリプト的に実験できる
ツールを作りたかっただけなのですが…
それならCSharpCodeProvider使えと言われればそれまでなんですけどね orz
>>280 やっていることはまさしくこれなんですが、
できれば
int n = 10;
int m = 20;
Console.WriteLine(Add(n ,m).ToString());
int Add(int num1, int num2)
{
return num1 + num2;
}
といったことがやりたいので自分で作ろうと思ったのですが…
うーん、英語勉強しとけばよかった orz
282 :
デフォルトの名無しさん :2007/07/13(金) 01:16:29
listviewのイベント SelectedIndexChangedで選択された行のインデックスを取得したいんですが、最初の一回だけ取得でき、次にエラーが発生します。 0' の InvalidArgument=Value は 'index' に対して有効ではありません。 イベントの中には MessageBox.Show(listView.SelectedItems[0].Index.ToString()); と書いてます。 なお、MultiSelectプロパティはFalseです。 何回でも取得できるようにしたいのですが、取得の仕方が間違ってるのでしょうか
283 :
282 :2007/07/13(金) 01:26:41
すみません。自己解決しました。 SelectedIndexChangedイベントは選択時、選択解除時の二回呼ばれるんですね。 Clickイベントで処理すると、無事取得できました。
>>265 普通にDelphi理解してれば一緒。
戸惑うレベルであればどの言語に移っても一緒。
vfwとBITMAPINFOHEADERについて質問させてください。 今AVIからBMPを取り出す処理を書いているのですが、 PAVIFILE、PAVISTREAM、PGETFRAMEは単純にIntPtrに 置き換えていいのでしょうか? また、BITMAPINFOHEADERとImageへの相互変換する方法 について、何かヒントをいただけないでしょうか。
>>285 ポインタはP/Invokeで適当に型合わせてくれるみたいだから、IntPtrでいいと思う。
構造体メンバを参照したい場合は、それに合わせた型をC#側で作る必要があるけど。
BitmapはImage.FromHBitmap()でHBITMAPからつくれるから、
Win32APIでHBITMAPこさえればなんとかなんじゃない?
出力仮引数(out修飾子)の利点って何でしょうか? どういう時に使われるものなのでしょうか? 教えてたもれ。
メソッドから返値以外の出力も得たいとき
>>290 説明が足りなくて申し訳ない。
参照渡しで実現できるのに、
out修飾子が存在する理由(=メリット)が
わからないのであります。
outは出力用。メソッド内で代入する。 refは入力用。メソッドに渡す前に初期化する。
outは渡す前に値を代入するとエラーになる あえて制限を増やして用途を明らかにする働き
>>291 outの場合refと違って変数を初期化しないで受けられるのです。
>>288 ありがとうございます。
HBITMAPについてはちょっとわからないので調べてみます。
refの場合は未初期化で変数を渡すとコンパイルエラーが出る
>>293 >outは渡す前に値を代入するとエラーになる
なりません
みなのものかたじけない。 メリットという点で言うと >あえて制限を増やして用途を明らかにする働き ということで理解しました。
bool TryGetHoge( out Hoge hoge ){} という形でよく使うね
>>298 が引用している
>>293 は正しくないからな
制限ってのは callee 側で代入が必須になるという制限であって
caller で代入ができないってことじゃないぞ
[Out]属性だけが自動的に適用される。
何が言いたいんだ。 エスパー以外の人間にも意味が伝わる日本語書けよ。 お前さんの文章こそ「アウト」だよ。
日本語でおk
野球はツーアウトからです
void Add(ref int lx, ref int ly, int rx, int ry){lx += rx; ly += ry;} みたいに、もともとの値を使用したいときにrefを使う 呼び出し側で代入必須っていうのは必然的にそうなるだけで本質じゃない
もうその話は終わりましたよ
値型って宣言時に必ずゼロに初期化されますが、。 宣言してすぐoutパラメータとして渡した場合ってどうなるんでしょうか? どうせメソッドの中で初期化し直さなければならないので宣言時に初期化してしまうと 二重初期化になってしまう気がするんですが。
適当に最適化されます。
309 :
307 :2007/07/14(土) 16:41:33
>>308 あれ?
宣言時に初期化されるってのは勘違いだったようです。
と書こうとしたらレスが。
やっぱ初期化されるんですか?
ローカル変数は初期化しないと値読めないよ フィールドは自動で初期化されるけど、宣言してすぐoutパラメータとして渡すなんてことはできないし
311 :
307 :2007/07/14(土) 16:46:43
>>310 なるほど、自動的に初期化されるのはフィールドでしたか。
ごっちゃになってたみたいです。
いずれにせよ
>>307 の質問は見当違いだったわけですね。これですっきりしました。
されない メンバはされるが っていうか、自動変数は初期化されないよ
ぎゃあ、亀亀
ワロタ
string s = "ゆーまchan" (sjis)を文字コードに変換したいんですが、どんな方法が考えられますか?
日本語でおk
string s = "ゆーまchan"; Encoding enc = Encoding.GetEncoding( "shift_jis" ); byte[] b = enc.GetBytes( s ); ってことか? まあ日本語でおkとしか言いようがない
ヒント:Encoding
VC#2005EE を使用しています。 Stringとstringの違いをズバリ教えてください。
つ【MSDN】
>>321 回答ありがとうございます。
stringはStringの別名で全く同じってことで理解縞々。
>>322 まぁjava&vc++やってる俺からすっと新しい表現だけどな。
ふと疑問に思ったんですけど、 デリゲート型変数に登録してあるメソッドを削除する場合のnewってどんな意味合いがあるんですかね?
意味不明です。
すいません、こんな感じの delegate void Sample(); class test { public event Sample sample; public void MethodA() { sample += new Sample(MethodB); sample -= new Sample(MethodB); ←ここのnew } public void MethodB() { } } です。
参照が違っても同じと判断されれば消される
>>326 それはメソッドをデリゲートにしてるだけ。
違和感があるなら sample += MethodB; sample -= MethodB; でおk
その書き方ができるようになったのは、C#2.0からだったかな。
ただ単に、+=とー=の記述を会わせただけじゃない? デリゲートは本来ユーザが書かなきゃいけないことをショートカットして 書いてるようなもんで複雑な部分ははコンパイラがやってくれている(属性やyieldみたいに)。 MSがわかりやすいように仕様を合わせたものと思われ
デリゲートのnewって実際に何かしらヒープに確保されてるの?
333 :
332 :2007/07/15(日) 00:11:19
よく考えたら当たり前だったスマソ
エスパーしてみると delegateVariable -= new HogeDelegate(Hoge); とかのnewのことをいってるんじゃまいか?
ぎゃあ、亀亀
ワラワズ
やっぱり記述をあわせてるだけっぽいですか。実はまだ質問があって、 インスタンス生成したときメソッドをデリゲートに登録しておけば、 インスタンス変数にnewを上書きするなどしても、ちゃんと参照されるみたいです。何ででしょう? デリゲートの原理がわからない・・・ delegate void Sample(); ManyMakeClass { コンストラクタ() { SampleClass.MyDelegate += new Sample(MethodA); } void MethodA() { } } SampleClass { static public Sample MyDelegate; ManyMakeClass class = null; void test() { class = new コンストラクタ(); class = new コンストラクタ(); MyDelegate(); } } たとえばこうすると、それぞれのインスタンスからMethodAが1回ずつ呼ばれるっぽいです。 リスト構造っぽいのを作るのは楽なんですが、-=やり損ねるとガベージコレクタしてくれない・・・
デリゲートはCombineすることが可能。 また、メンバ関数が元になった、デリゲートはインスタンスの参照を保持している。
当たり前だろう、何が疑問なのかわからん。
しかし、参照全部外したつもりでもdelegateから-=するの忘れてると、 GCされないというのはなんか面倒だな。 しかも、delegate中にしか参照ないから、-=しにくいし。 ファイナライザに-=書いたりしてもダメそうだし。
delegate自体をどこかから参照してなければ 問題ないんでないの?
>static public Sample MyDelegate; ここをstaticにしてるのがGCされない原因じゃねえか? -= しなくてもMyDelegateがGCされれば連鎖的にGC対象になるはず。
>>337 デリゲートはMulticastDelegate クラス
中身が知りたければ プログラミング .NET Frameworkあたりを参照するか
中間言語に落としてみればいいんでない?
コンストラクタから引数の違う別のコンストラクタに移らせるとき、たとえば MyClass() : this(new Hoge()) のようにしますが、このとき新しく作ったHogeオブジェクトの何らかのプロパティを変更してから 別のコンストラクタに移らせるようにするにはどうすればいいですか?
初期化用のprivateメソッドを作ってそれを呼ぶ。
346 :
デフォルトの名無しさん :2007/07/15(日) 14:31:17
>>326 デリゲートは自分自身のリストみたいな構造になってるからわかりにくいのは確かだね。
文字列が文字列自身のリストになってるような奇妙な感じだ。
でも、たとえば
sample -= new Sample(MethodB);
↑は単にリストから「どの」アイテムを削除するかを指定してるだけなんだよね。
>>341 まあそうなんだが、
AがBとかCとかをいろいろlistenしていて、
その後Aだけ破棄したいという場面なんかでは、
いちいちlisten解除しなくちゃいけなくてめんどくない?
listen先を全部記録しておかないといけないし。
>>347 外部からeventを操作するなら+= -=をひとつずつ使うことになるが、
delegateをなまで使うなら
sample = null; // 全部破棄
とか
sample = new Sample(MethodB); // 全部破棄してMethodBだけにする
などやりたい放題できる。
>>346 普通の実装ではこうなのだろうけど
DelegateList del = new DelegateList();
del.Add(new DelegateItem(MethodA));
delegateの特徴として
フォーム等のコントロールでeventとして大量に準備される。
そのほとんどでリスナーは登録されないつまり使用されない。
なので恐らく使用しない状態でオブジェクト(リスト)を
生成した状態にしたくなかったのだろう。
>>349 フォームのイベントでははじめはデリゲートオブジェクトは準備されてない
add/removeイベントアクセサを自前で実装してメモリを節約してる
イベントに対する+=や-=はそのアクセサを呼び出すための特別な演算子で、デリゲートとはまた別
プロパティで配列をnewして返すなとMSDNには書いてあるけど、 yieldでイテレータを返すのはどうなんだろう
質問です。 Bitmapからbyte[]をMarshal.Copyで取り出したのですが、1pxあたりの情報の 入り方は16bppRGBの時は空RRRRRGGGGGBBBBB、32bppRGBの時は 空*8、R*8、G*8、B*8という感じで合ってますでしょうか? また、16bppRGBのとき、一度shortに直してから>>や<<でシフトして 取り出すよりも効率のいい方法はあるのでしょうか?
後半のことなら unsafe で可能だが 速度は大して変わらんかと
>>353 おとなしく>><<でがんばります。
>>354 24bppRGBの取り出し方はわかるのですが、
32bppRGBと16bppRGB555(さっき555付け忘れた orz)の
RGBの入り方がわからなくて…
テキストや画像などに関連づけされたアプリのパスを取得することって出来るのでしょうか?
間違えた、サンクス
Process.Start(静的動的共に)でCUIアプリを呼び出す際にコマンドプロンプトウィンドウを最小化した状態で呼び出すにはどのようにしたら良いのでしょうか。 まさかショートカットを作ってそこから?
Process.StartInfoのメンバを参照
362 :
360 :2007/07/16(月) 17:56:02
StartInfo.WindowStyleプロパティですね。 StartInfo.CreateNoWindowに気を取られて気付きませんでした。 ありがとうございます。
8の倍数を得るメソッドとかってありますか? 100 を与えると 108 か 92 が得られるようなものです。
これ→
>>363 何?
頭にぼうふらわいてるんじゃ?
CoCreateInstanceを使用して得られたIntPtrを他の interfaceにキャストするにはどうしたらいいでしょうか?
>>363 ぼくのほしいプログラムつくってくれるかんすうありますか?
レジストリからHTMLの実行ファイルを取得したのですが "\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" -nohome" これの先頭の「"\」とは何でしょうか? string s = "\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" -nohome"; s = s.Remove(0, 1); とすると何故か "C:\\Program Files\\Internet Explorer\\iexplore.exe\" -nohome" と二つとも消えます。
最近 C#に無関係な質問が多いすぎるな。 マ板でC#って名前だけのスレみたいだぜ。
それがなにか?
>>371 \\は知っていましたが、リンク先を見て理解しました。
IEのパスを二重引用符で囲んでいるのですね。
ありがとうございました。
375 :
368 :2007/07/16(月) 20:17:41
すいません、事故解決しました。 CoCreateInstanceを使わずにActivator.CreateInstanceでいけました。
そういえばエラープロバイダーを使ったアプリって見たこと無いね
377 :
デフォルトの名無しさん :2007/07/16(月) 22:37:43
インターフェースってメソッドに実装が書かれていないクラスって感じですが これって何に使うの? インターフェースを利用する場合は実装を利用側で書くと思いますが だったら最初からクラスのメソッドに実装書けば?と思ってしまうのですが インターフェースが無いと厳しいケースってどんな時? 普通にクラスに実装書けば?と思ってしまうのですが・・・
多重継承ができないからインタフェースでお茶を濁したって感じかな
379 :
デフォルトの名無しさん :2007/07/16(月) 22:56:49
どうせ実装を書くんならインターフェースなんて入らない気が・・・
実装が存在しなくても、あたかも存在するかのようにプログラムを組める。
適当な表現で悪いけど、 インターフェースは制約というか実装の義務ですな。 あるクラスAから別のクラスBを使いたいとき、 最低限実装して欲しいメソッド等をインターフェースで書いておく。 インターフェースの良いところはそのまた別のクラスC、D、E などでもきちんとインターフェース実装していたらクラスAを変更しなくても 使えることかな? まあ実装がただしくなかったら… 多重継承関連でよく話が出るけど、若干違う感じもする。
実装内容がどれも同じとは限らないだろ。 実装内容は違うが振る舞いは同じで同じように扱いたいという場合、 インターフェイスは有効。
実装は他の人任せで、インターフェイスだけでプログラム組めるのが良いのよ
純粋仮想関数との違いはどう説明する
抽象クラスよりもインターフェイスを使ってください by Microsoft
プラグイン機能をつけるとき。
/ キーを押したときに Form#KeyDown に送られてくる KeyEventArgs#KeyCode の値が良く分かりません。 Keys.Divide ではないようなのですが、これは一体何が送られてきているのですか?
多重継承ないからインターフェイスがあるってあほかw
コンソールアプリで引数を渡されたエスケープ文字を そのままエスケープ文字として使用したいのですが、 Replaceを使用した場合うまくいかなくて困っています。 public static int Main(string[] args) { string str = args[0].Replace("\\\\","\\"); Console.Write("result1 = \"" + str + "\""); Console.Write("result2 = \"" + str + "\""); } 上記を実行した場合、 C:\> test.exe \\ \n result1 = "\\" result2 = "\n" 求める結果としては、 result1 = "\" result2 = " " Replace("\\","")とした場合は\nの方は求める結果となるのですが、 \\の方はnullとなってしまいます。 現状は必要なエスケープをReplace("\\n","\n")として とりあえず求める結果を得られてはいますが、 なんとも格好悪くて、どうにかうまく扱う方法はありませんでしょうか?
C#でキーボードから打ち込んだキーを直接変数に保管したいんですけど どうしたらいいですか?
KeyPress KeyDown
テーブルに読み込んだデータの更新ってどうすればいいのでしょうか? this.TestInfoTableAdapter.Fill(this.msoftDataSet.TestInfo); で読み込んだデータを最新の情報に更新したいのですが…
>>389 エスケープ文字のことをよくわかってない。
文字列として確定したらもうそれはエスケープとしては機能しない。
すまん。mdbをoledbでつないだ場合のパラメータクエリの実行方法を教えてほしい OleDbCommand oCom = new System.Data.OleDb.OleDbCommand("INSERT INTO testInfo (test1, test2) VALUES(? , ?)", connection); と指定した後に?に値を代入する方法が分からない。。。 oCom.Parameters.Clear(); oCom.Parameters.Add(1, OleDbType.varChar).value = "test"; みたいな感じでしていしたらいいのでしょうか?
順番守って適当な名前を付けていけば良かったような気がする comm.Parameters.Add("unk", OleDbType.Integer);
現在のIMEの状態を取得、または設定するにはどうすればいいでしょうか? テキストボックス等ではなく、Windowsアプリケーションが実行中の状態についてなのですが。
397 :
394 :2007/07/17(火) 18:21:01
データセットの作り方を勉強したいのですが、お勧めのページとかありますか? やりたいことは、単にmdbファイルにselect文をかけた結果をデータセットに格納したいだけなのですが…
型指定されたデータセット? 難しい部分なんてあったっけ?
400 :
398 :2007/07/17(火) 18:59:04
>>399 入門書でADO.NETについて勉強して少しわかりました。
なんかものすごくややこしいのを想定していました。。。。
今、TableAdapter.Fill(dataSet)と、指定しても、
データベースの最新の情報がデータセットに反映されなくて困っています。
INSERTを実行した後にちゃんとDBに入っていることは確認しているのですが。。。
ADO.NETスレでそいういうこと言ってた奴いたな。MySQLだったけど。 Clearするかnewしとけば良いと思うよ。
『独習C#』の21pでいきなりつまずきました。 VisualStudio2005を使い、本のとおりに進めています。 [ビルド]メニューに[ソリューションのビルド]が、 [デバッグ]メニューに[デバッグなしで実行]の項目が出てきません。 前者はproject1のビルドという項目があり、これでいいのかと思いますが、 後者はちんぷんかんぷんです。 なにかいけないことがあるんでしょうか? こういう開発環境なるものじたい初めてなんですが、 メニューとかはインストールしたPCなどによって違うものなのか不安です?
>>402 プロジェクト作ってなかったりするかい?
って、プロジェクトは作ってあるんだな。そいつは失礼した。
>>402 ツールバー→ユーザー設定→リセット
してみたらどう?
>>402 Express Editionを使ってるのかな
上の方は、
「ツール」→「オプション」→「プロジェクトおよびソリューション」→「全般」→「常にソリューションを表示」
下の方は出し方がわからないけどExpress Editionでも出るのは間違いない
オプションの「すべての項目を表示」にチェック入れていろいろいじったりしてみて
407 :
398 :2007/07/18(水) 12:31:45
>>401 ありがとう。でもdset.Clea()rやdset = New Dsetってしてもうまくいかなかった。
ADO.NETスレで聞いてみます。
すんません。これがイコールにならないのですが、これでどうしてイコールにならないのでしょうか? object a = new string[] { }; if (a.Equals(new string[] { })) { // 同じだった場合の処理 }
Array.Equalsは参照の等価性を返すから。
>>409 なるほど。参照が同じかどうかを比較するということですね。
どうにかならんかのう
仮想呼び出しって delegate のことですか?
違います。
>>411 aが空の文字列配列かどうかを判断したいだけじゃねーの?
C言語を始めてやり始めたものです。 質問なんですが友人のPCでコンパイラ(MinGW)を使って早速「hello world」と表示させるプログラムを作ったそうですが gcc: installation problem, cannot exec `as': No such file or directory と出てきてコンパイラされないそうです。 ちなみにOSはVistaと聞きました。
MinGW 再インストールしろ。
わたし女だけどCとC#を間違えるおとこの人って……
諦めてVC++Express使えば
PATHが通ってない
質問にすらなってないし
すんげーしょーもないことだけど、 accessなしでもmdbファイル使ったアプリ動くよね? まぁ開発環境には必要だと思うけど…
必要だと思ったことはないな
無くても問題ない
え?accessなくてもmdbファイル使ったアプリ動くの?? 動かないと思ってSQLite使おうとしてたんだけど、ラッキー。
426 :
デフォルトの名無しさん :2007/07/19(木) 00:28:38
VC#ってSP1では絶対に使えないんでしょうか? 一回インストールしてみましたが、インストールの時点で弾かれました。 なんとかしてSP1で使いたいのですが・・・
普通に使えるよ
SP1ってVSの? それともXPの?
>>427 >>428 XP Pro SP1です。
Visual C# 2005 Express Edition をCDに焼いてインスコしようとしましたが、弾かれました。
必要システムのところに、SP2と書いてあるので、当たり前なんですが、
なんとかごまかしてインストールしたい。
なんでSP2入れないの?
>>430 不具合情報スレを見ていると不安で。
近々、統合インストールCDを作って入れようと思っていますが、
そのまえにSP1でインスコできる方法があるならそっちを試したいと思いまして。
>>431 いまどきSP2の不具合だなんて。
SP1のほうがよっぽどバグだらけだと思うが?
>>432 じゃあ、素直にSP2いれたほうが早いですね。
お騒がせしました。
バックアップがめんどい・・・
これこれこういう実害があるからSP1、というなら理解できなくもないが 不安だから、というのでSP2にあげないで不利益を被っているのは理解できない
サービスパックを不安といい始めたら、もう一生バージョンアップしないってことか…
DataSetデザイナでクエリを作成する際に、 SELECT文のWhere句を可変にする方法ってありますでしょうか? 具体的には SELECT * FROM test WHERE field1 = ? , field2 = ? のようなSQL文で、条件に応じてWHERE句の検索フィールドを変えたいのです。 SELECT * FROM test WHERE field1 = ? AND field2 = ? SELECT * FROM test WHERE field3 = ? SELECT * FROM test WHERE field3 = ? OR field2 = ? のような感じで… 何かいい方法ありますでしょうか?
438 :
436 :2007/07/19(木) 10:20:28
>>437 クエリの追加だと、固定されたフィールドしか指定できませんよね?
Where 句のフィールド数が可変なんですよ…
>>438 可変ってどう引数渡すつもりなんだ? object型のparamsで要素数判定するつもりか……?
field1 = ? AND field2 = ?とfield3 = ? OR field2 = ?の違いはどう判別したら良いんだ?
FillByHogeを数パターン作って最適なものを判別するメソッド追加するか
検索条件によってWHERE句自力で生成するメソッド作るかしたら?
440 :
436 :2007/07/19(木) 10:38:56
>>439 全くその通りです。すいません。
WHERE句を自力で生成するメソッドを作ろうと思います。
自力でWhere句を作ったのを ? で渡したりってできませんよね・・・
SELECTコマンドのみ、TableAdapter使わなければいいだけの話だと思うんだが、 それでも無理矢理使いたいならHogeDataSet.csにHogeDataSetTableAdapterの 分割クラスとして書けば良いんじゃないか? FillByOresamaVer(SearchParameter hoge)みたいなの
442 :
デフォルトの名無しさん :2007/07/19(木) 13:09:08
VistaとXPでフォームの縦横比がうまく揃わないんで困ってます。 フォントの関係(メイリオとMSPゴシ?)だとは思うんですけど XPに合わせるとVistaで縦長になりすぎ、 Vistaに合わせるとXPで横長になりますぎます。 こういうときどうしたらいいんでしょうか?
フォントを明示するとか。
API と DLL の意味の差がよくわかりません
ここで質問する意味がよくわかりません
MDIウインドウで、スクロールバーを非表示にするにはどうしたらいいでしょうか? AutoScrollはFalseなのになぜか表示されてしまいます。 ScrollPropertyは読み取り専用だし、AutoScrollMarginを増やしたら子ウインドウを 最小化したときにどっかいっちゃうし… orz
ループの中でICollection<T>.Addを繰り返して(回数不定)要素を追加していって 最終的にIEnumerable<T>を取りたいんだけど、どのICollection<T>実装を使うのが 一番効率いいの?
List<T>
ダイアログから親の変数に値をセットするいい方法はないでしょうか? 今はダイアログ生成時にコンストラクタで親を渡してやってるんですが、 もうちょっとスマートなやり方があれば教えて欲しいです。
親もFormならOwnerで取得可能
ダイアログでイベント公開して親がリッスンして親が自力で値設定とか
Formに無駄に変数を増やすなよ。汚らしい
そりゃ、特定の親からしか呼び出せないなんて腐ってるからな
HttpRequest クラスで、 Http 1.0を使うことは可能でしょうか?
はい。
具体的にはどうすればいいでしょうか?
具体的に質問してください。
HttpRequest クラスの どのプロパティ、メソッドをいじればHTTP 1.0で通信できるのでしょうか
HttpRequestなんてあったっけ?
System.Web.HttpRequest クラスです
それでHttp1.0をつかって何をするつもりですか。
HTTP 1.0プロトコルで通信するつもりです
HttpRequestって通信に使うクラスじゃないだろ
>455-464 よくあるエスパー期待型の質問だが これほど流れがスムーズだとなぜか気持ちいいなw
467 :
デフォルトの名無しさん :2007/07/21(土) 14:04:47
リファクタリングってなんすか?
ググレカスって言われたいマゾなのか それとも何か面白い答えを期待してるのか判断に苦しむ
リフレクションとリファクタリングを混同してしまいそうになる
471 :
デフォルトの名無しさん :2007/07/22(日) 00:09:30
秀丸みたいな行番号とルーラーを表示できるTextBoxコントロールって無いのかな?
んなもん自分で作るに決まってるだろ
↑夏休みだな
475 :
472 :2007/07/22(日) 08:33:06
>>473 別に有料でもかまわないので
あったら教えて下さい。
478 :
472 :2007/07/22(日) 16:14:52
479 :
デフォルトの名無しさん :2007/07/22(日) 16:57:15
DataTableに SELECT ID,NAME,ADDRESS FROM tTEST ORDER BY ID の結果が入っているとする。 NAME順にDataTableを並び替えてセットしたい場合で SELECT ID,NAME,ADDRESS FROM tTEST ORDER BY NAME というSQLを発行することなく並び替えることは可能でしょうか? 自分でDataTableのソート処理を自作するのではなくDataTableのメソッドにそういう機能は無いでしょうか?
何か嫌なことでもあったのか
>>472 プログラマは他人のソースを読むことを厭うては駄目だぞ
他人の作ったコンポーネントに頼るのも手段の一つだがいつか限界がくる
先を読んで研鑽しろ
それに下品な態度は人間としても駄目だ
言語のスレであってコンポーネントくださいスレではないしな
482 :
472 :2007/07/22(日) 18:59:48
精進いたします m(_._)m
484 :
デフォルトの名無しさん :2007/07/22(日) 21:47:59
SqlDataSourceよりObjectDataSourceのほうが機能がよさげなんですが SqlDataSourceを使うメリットはあるんでしょうか?
485 :
デフォルトの名無しさん :2007/07/22(日) 22:35:48
#include<stdio.h> #include<stdlib.h> #include<math.h> int main() { int i, count; double x, y, pi, z; char line[20]; line[0]='y'; ←この部分の意味が知りたいです。 srand( (unsigned int) time(NULL) ); while(1){ count=0; for (i = 1;i <= 10000000; i++) { x = (double)rand() / (RAND_MAX + 1); y = (double)rand() / (RAND_MAX + 1); if(x*x + y*y < 1){ count++; } pi=(double)count / i * 4 ; z=fabs(M_PI - pi)/M_PI ; if(i==100||i==1000||i==10000||i==100000||i==1000000||i==10000000){ printf("(%d)pi=%f(%f)\n",i,pi,z) ; } } printf("もう一度やりますか(y/n)?"); gets(line); if(line[0] == 'n'||'N'){ break; } } return 0; }
お前はスレタイも読めないのか。
C# 2005 Express Editionでプログラムを作っています。 ボタンを押された(へこんだ)状態にする方法を教えてください。 キーボードでも操作できるようにしたいんですが、マウスを使った時と同じように、 KeyDownでフォーム上のボタンが押された状態にして、KeyUpで戻したいわけです。 button1のプロパティは探してみたのですが、ボタンの状態をどこで決めているのか、 どうしてもわかりませんでした。
無理です。
CheckBox の Button 形式で誤魔化すのはどうだろう
492 :
488 :2007/07/22(日) 23:55:01
>>489-491 自力でもぐぐってみたのですが、やっぱりCheckBoxを使うのが定番のようですね。
ありがとうございました。
正規表現で "[" を探す場合はどのようにするのですか?
\[
すいません質問です。 List<> を配列のように利用してfor文を作った時、forループ内で listVariable.RemoveAt( i ); とした場合次に実行される要素が、ちゃんとRemoveされたiの次の要素になっているのはなぜでしょう?
おっしゃっている意味が分かりません
ちゃんと動いたら何か問題でもあるのか
次の要素にならないだろ List<int> lst = new List<int>(); lst.AddRange( new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ); for( int i = 0; i < lst.Count; i++ ) { lst.RemoveAt( i ); } // lst の内容→1,3,5,7,9
削除のたび前にシフトするんじゃ使い物にならん
すいません、ちゃんと検証したらしっかり一個飛ばしてました。orz お騒がせしてすいません。
一個飛ばすという表現は微妙な…ま、いいか
504 :
デフォルトの名無しさん :2007/07/23(月) 22:47:47
stringとStringはどう違うなりか?
>>504 正式名称はStringだが、stringという別名で書いてもいい。
つまり同じ。
>>505 何この回答者達
さんざんもったいぶった挙句、「IL見てみろ」てw
まあ自分で解決する姿勢がないとダメってことじゃないか? プログラムで詰まっても大体誰も助けてくれない。 最後に頼るのは自分。
自分で気づく事も重要だぞ 回答者たちはヒントを与えて誘導してるからいいじゃまいか
誘導しつつ暇つぶしの種にされてる気も……
型と関数の区別が付かない人に 別の言語の情報を出してきたりIL見ろと勧めたりするのはさすがにないだろ
じゃあ stringはSystem.Stringの別名。
自分で調べなければ実力つかないとか、ハッキリ言って質問に対する回答じゃないよな。
質問に対する回答じゃないな、と見做し思うことによって現実から目を背けているだけだなw そういうのを防衛機制という。
>質問に対する回答 質問に "解答"が来るとは限らないよw ゆとり君w
まあ
>>505 の場合は「自分で考えてみろ」じゃなくて「本読んで一から出直せ」だと思うけどな
遊ばれてるようにしか見えない
もういいよ。 中学の英語の教科書も下に全部日本語訳書いとけよ。
この英文は去年の生徒がすでに訳しています。 これを訳すのは車輪の再発明です。
質問です。 画像の回転についてなんですが、Graphics.RotateTransformで回転させる ことは出来たのですが、回転軸を画像の中心に固定するにはどうしたらいいでしょうか?
>>520 それを使って画像の回転には成功したのですが、軸が(0, 0)に
なってしまうので、その軸を中心にするにはどうしたらいいのかなーと
思ったのですが…
Graphics.TranslateTransformあたりなんか関係ありますかね?
逆に考えろ 回転する前に画像の中心を(0,0)に持ってくるんだ
>>522 回転前にGraphics.TranslateTransformで移動したら上手くいきました!
ありがとうございました。
すいません、コンボボックスの編集を不可(あらかじめ用意した値しか選択させないようにする) ようにしたいのですが、設定が見つからずに困っています。 どうすればいいか、知ってる人がいたら教えていただけたら嬉しいです。
DropDownStyle
>>524 それはドロップダウンリストって名前
プロパティ探してごらん
527 :
524 :2007/07/24(火) 12:34:08
vs2005#expressにあるインターフェースをつけたとき、通常の実装と明示的実装があります。 なにやらアクセス修飾子の有無が違うのですがこれはどう違ってくるのでしょうか?
529 :
524 :2007/07/24(火) 14:03:02
もうひとつ聞きたいのですが、 ドロップダウンリストで最初に選択している値を指定するのって VC#上では厳しいでしょうか? SelectedIndexをわざわざ指定するとフォーカスが移動してしまうし、 簡単に指定できればなぁと思ってます
SelectedIndex使ってもフォーカス移動しないべ?
>>528 明示的実装はそのインターフェイスに代入しないと使えない
Timerを使って、簡単なアニメーションを描画したいのですが、 FormのDoubleBufferedプロパティをtrueにすると、なぜか描画が 表示されません。なぜでしょうか? ちなみに、描画はFormのPaintイベントで行っています。 public partial class Form1 : Form { public Form1() { InitializeComponent(); // この中でDoubleBuffered=true; falseだと表示される } private void Form1_Paint( object sender, PaintEventArgs e ) { Graphics g = this.CreateGraphics(); g.FillEllipse( Brushes.Red, rect ); // 表示部分 g.Dispose(); }
なんでわざわざ無効にしてしまうようなことしてんのかな?
いつも思うんだが、e.Graphicsつかわない利点ってあるの?
535 :
532 :2007/07/24(火) 17:12:20
すみません。自己解決しました。
ダブルバッファーによって、e.Graphics で描画したものが OnPaint 抜けてフリップするはずが CreateGraphicsで 表に描いちゃったからフリップで裏に行っちゃったのか。
スコープ付けるためだけのブロックってC#で使う?
使う。
できるだけ使わない 使う状況になったら設計を見直す
多くの場合、そのブロックまるごと関数に持ってける気がするけどね。
542 :
538 :2007/07/24(火) 18:15:31
やっぱりあんまり使わない方がいいのかな スコープを付けるためじゃなくて、仕方なく低レベルな処理をするときに unsafeと同じように後ろめたい気持ちを込めて使ってたんだけど
>>531 ありがとうございます。
つまりeventとかprivateみたいに機能を制限する文法ってことですね。
機能を制限するというより単に心理的なものだけどな あと、メンバの名前が被るのを回避するのにも使える(というか多分それが目的)
いざVC#Expressでアプリを完成させたので、 発行してみようと思ったのですが、発行元が信頼できない云々のメッセージがでてきて困ってます。 これってStandardEdtionを買えばVS2005の証明書の発行って可能になるのでしょうか?
全然
>>545 >困ってます
いったい、なにが困るのかおじさんに教えて欲しいなあ(怒)
フリーウェア入れたことないの???
いきなりお前を信頼しろと言われても、 そりゃ困ると思うんだよ
無駄にインストーラ付けると余計信頼されないよ
( ) ソースヲ ( ) | | ヽ('A`)ノ コウカイスル! ( ) ノω| __[警] ( ) ('A`) ( )Vノ ) | | | |
c#使いって下品だな。
質問です。 ACMFORMATCHOOSE構造体を以下のように宣言したのですが、なぜか Marshal.SizeOf()でエラーが出ます。どうやら原因はStringBuilderのようなんですが、 どう解決したらいいかわかりません。一応MarshalAs属性はつけてるのですが… よろしくお願いします。
554 :
368 :2007/07/25(水) 04:04:51
[StructLayout(LayoutKind.Sequential)] struct ACMFORMATCHOOSE { public uint cbStruct; public uint fdwStyle; public IntPtr hwndOwner; public IntPtr pwfx; public uint cbwfx; [MarshalAs(UnmanagedType.LPStr)] public string pszTitle; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 48)] public char[] szFormatTag; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public char[] szFormat;
[MarshalAs(UnmanagedType.LPStr)] public StringBuilder pszName; public uint cchName; public uint fdwEnum; public IntPtr pwfxEnum; public int hInstance; [MarshalAs(UnmanagedType.LPStr)] public string pszTemplateName; public IntPtr lCustData; [MarshalAs(UnmanagedType.FunctionPtr)] public ACMFORMATCHOOSEHOOKPROCA pfnHook; } delegate uint ACMFORMATCHOOSEHOOKPROCA(IntPtr hwnd, uint uMsg, IntPtr wParam, IntPtr lParam); 改行規制が… orz しかもなんか上の名前違うし orz
556 :
553 :2007/07/25(水) 05:08:45
すいません。事故解決しました。 structの中ではStringBuilderは使えないんですね…
IEnumerableをIEnumerable<T>に変換するには、 一般的な方法としてはyieldとかで自前でやるしかない?
public static IEnumerable<T> OfType<T>(/*this*/ IEnumerable source) { foreach(object item in source) if(item is T) yield return (T)item; }
らっぱでいいじゃない
using System.Collections; using System.Collections.Generic; namespace Hoge { public struct Enumerable<T> : IEnumerable<T> { private IEnumerable m_enumerable; public Enumerable(IEnumerable enumerable) { m_enumerable = enumerable; } public IEnumerator<T> GetEnumerator() { return new Enumerator(m_enumerable.GetEnumerator()); } IEnumerator IEnumerable.GetEnumerator() { return m_enumerable.GetEnumerator(); } private struct Enumerator : IEnumerator<T> { private IEnumerator m_enumerator; public Enumerator(IEnumerator enumerator) { m_enumerator = enumerator; }
>>560 続き
public T Current
{
get { return (T)m_enumerator.Current; }
}
public void Dispose()
{
IDisposable disposable = m_enumerator as IDisposable;
if (disposable != null) disposable.Dispose();
}
object IEnumerator.Current
{
get { return m_enumerator.Current; }
}
public bool MoveNext()
{
return m_enumerator.MoveNext();
}
public void Reset()
{
m_enumerator.Reset();
}
}
}
}
なげーなおいw
やっぱりyieldのがよっぽどシンプルだわ
まあそりゃ560-561を書かなくて済むようにするためのyieldだからな
>>563 そして
>>558 が最初から含まれてるのがLINQだな。
// C# 3.0
object[] objs = new object[] { 0, "Hello", DateTime.Now };
IEnumerable seq = objs;
IEnumerable<string> strseq = objs.OfType<string>();
foreach (string item in strseq)
{
Console.WriteLine(item);
}
// Hello
すまん、上のはこう読み替えてくれ。 IEnumerable<string> strseq = seq.OfType<string>();
3.0ならvar使えよ。var
varってなんかC#のありがたみっつーか一応コンパイル言語であるところの いかにもプログラムって感じがしないので抵抗があるのはおれだけ?
> C#のありがたみ > コンパイル言語であるところのいかにもプログラムって感じ 意味が分かりません!
右辺から左辺の型を推量するくらい、これからのどの静的型付け言語でもできるようになるよ。
型推論は、匿名型と一緒にしか使わないと思う。 てか、使わない方がいいと思う。 で、匿名型も、LINQ のクエリ構文の select 区以外ではあんまり使いたい機能じゃないし、 var はもう、LINQ 専用だと思っといた方がいいんじゃないかと。
>>567 var使っててもIntelliSenseでその感じはちゃんと体験できるので安心しろ
書いた人限定だが
TcpListenerでacceptするプログラムを作成したんだけど、 2つ同時に起動させると、SocketExceptionエラーが落ちて怒られる…。 具体的には、 tcpListener.Start(); の箇所で次のようなエラーが出ます。 「SocketExceptionはハンドルされませんでした。 通常、各ソケットアドレスに対してプロトコル、ネットワークアドレス、 またはポートのどれかのみを使用できます。」 ポート番号は違うものでacceptしてるのに、なぜ?? わかる方いらっしゃいますか?
573 :
572 :2007/07/26(木) 17:03:41
何か日本語がおかしかったので修正。
>>572 2つ同時に起動させると、SocketException例外が出て怒られる。
574 :
572 :2007/07/26(木) 17:09:18
もひとつ修正。例外が発生している箇所は、acceptではなく、listenです。 すみません。
すみません、自己解決しました。
キミは誰やねん
577 :
575 :2007/07/26(木) 19:27:46
578 :
デフォルトの名無しさん :2007/07/26(木) 23:32:07
クラス作るとき必ずIDisposableインターフェイスを実装しとくの? そういうケースが多い?
オブジェクトがGCに喰われるより先に破棄すべきリソースを保持してるならIDisposableを実装すべし。
必要なのにしかつけないが 後処理が必要なクラスなんてあんまりないし
GCより先に破棄しなきゃやばいリソースってどんなもの?
カーネルオブジェクトとか、GDIオブジェクトとか。
acmFilterEnumや、acmDriverEnumを使うときに、コールバック関数の部分には どんなdelegateを作って当ててやればいいでしょうか?
>>584 何という検索
ありがとうございました。
unsafeか… orz
refで構造体渡せばunsafe使わなくてもいけるっしょ
>>586 refでも大丈夫ならいいのですが…
とりあえずrefでやってみます。
後、どっかにLP〜*となってるのを
素直にIntPtrで受けずにclassを作って
[StructLayout(LayoutKind.Sequential, Pack = 1)]
とかつけて使ってるのがあったんですが、これって常套手段ですか?
classよりかstructっしょ? Marshalくらすに便利なメソッド群あるし
>>588 いや、LP〜*じゃなくてただのLP〜かな?
structの中のstructのポインタを指す部分に該当するstructを
classにして使ってるのがいくつかあったんですが、これは毎回毎回
IntPtrに変換しなくてもすむようにするため?
一応ToStruct()は積んでるみたいなんですが
構造体のポインタをメンバに持つクラスにしてラップするのが普通だと思うよ
static readonly な変数メンバもつ基本クラスを継承した派生クラスがあるとします。 例えば 派生クラスコンストラクタ(int x) : base(x) { } で、static readonly 変数の値を決定した場合、その変数は 1、同じ派生クラスでのみ共有されている。 2、派生クラスと基本クラスで共有されている。(必然的に別の派生クラス全てとも共有) のどちらでしょうか?
static readonly のフィールドをどうやってインスタンスコンストラクタで初期化するんだ?
基本的なこと忘れてましたorzそういえばそうですね。
はじめまして、今すごく悩んでいるので相談させてください。 ツリービューからツリービューをコピーしたいのですが 元のツリービューのデータはデータベースのデータテーブルに入っています。 これをツリービューに直すやり方がわからなくて困っています。 データベースなど触ったことも無いので、ネットで探したのですが 探し方が悪いせいか、見つかりません。 宜しければ教えていただけるとうれしいです。 よろしくお願いします、
コピー元が TreeView のノードならもうデータベースとか関係なくね?
>>595 レスありがとうございます
元のツリービューの名前が分からないので
どうやって指定すればいいのかわかりません。
一度ツリービューを入れてみようとしたのですが
nullになってしまってエラーが出てしまいました。
逆に難しく考えてしまっているんでしょうか?
いや全くわかってないだけ。 ここで説明するだけスペースないから ツリービューとは何か調べなおしたらいい。
ツリービューをコピーっていう意味がわからん。 ツリー(ノード)をコピーしたいってコト?
600 :
デフォルトの名無しさん :2007/07/28(土) 00:33:45
outとrefは動きが同じっぽいけど、どう使い分けるの? outを使う場合は変数に値をセットしてるとダメってだけ?
outパラメタに変数を渡すと、そこで初期化されたと見なされる。
>>600 outは出力用、refは入力用。
outはメソッドに渡す前に値をセットしててもしなくてもいい。
しかし渡した後、メソッドを抜ける前にはセットしなければならない。
refはメソッドに渡す前に値をセットしなければならない。
要は呼び出し側が初期化するべきか呼び出される側が初期化するべきかだな
>>602 入力用じゃなくて入出力用だろ
Method( object o ); ↑メソッド抜けてもoはoの指してたものを指してる Method( ref object o ); ↑抜けた後、もしかしたらoは違うものを指してるかもしれない Method( out object o ); ↑oが未初期化とかなんの値がはいってるとか関係なく 最低でも初期化されて何かの参照が入ってる(ことが要求される)
こっちも必要だな void Method(object o) { o.ToString(); o = new object(); // ↑newしたオブジェクトは呼び出し元と無関係 } void Method(ref object o) { o.ToString(); o = new object(); // ↑newしたオブジェクトは呼び出し元で参照できる } void Method(out object o) { o.ToString(); // ↑コンパイルエラー。newするまでoは使用不可 o = new object(); // ↑newしたオブジェクトは呼び出し元で参照できる }
改訂版。まあふらっとスレなので。。 参照型の場合 Method( object o ); ↑メソッド抜けてもoはoの指してたものを指してる もちろんoのプロパティとかフィールドとかは変化してるかもしれない Method( ref object o ); ↑抜けた後、もしかしたらoは違うものを指してるかもしれない もちろんoのプロパティとかフィールドとかは変化してるかもしれない Method( out object o ); ↑oが未初期化とかなんの値がはいってるとか関係なく 最低でも初期化されて何かの参照(null参照もありえる)が入ってる (実装者はそれを要求される) 値型の場合 Method( STRUCTURE s ); ↑メソッド抜けてもsはsの指してたものを指してる。つまり値は変化しない sのフィールドも変化なし Method( ref STRUCTURE s ); ↑抜けた後、もしかしたらsは違うsになってるかもしれないし sのフィールドは違う値が入ってるかもしれない Method( out STRUCTURE s ); ↑sが未初期化とかなんの値がはいってるとか関係なく 最低でも初期化されてる。 (実装者はそれを要求される)
MSもわかりやすい所にわかりやすい形でこういうのを書いておいて欲しいね
>>599 ツリーを別のツリーにコピーしたい、というより
まずは最初のツリー表示ができていないんじゃないの?
つまり
DBに格納されたXML文字列かなんかをツリー表示したい
ってのが質問の意図なんじゃないかと…?
(違ってたらゴメンな)
そこらへんがうまく伝わるように表現できないって事自体が
自分で何をしたら良いのかすら分かっていないので
もう少しポイントを絞って質問したほうが良いよ。
それだと
>>597 のようにしか答えてもらえないよ。
611 :
デフォルトの名無しさん :2007/07/28(土) 08:28:11
下記のメソッドを持っているクラスが破棄されたら 呼び出しもとのoはどうなっちゃうのでしょうか? 一緒に破棄されちゃうの? void Method(ref object o) { o.ToString(); o = new object(); // ↑newしたオブジェクトは呼び出し元で参照できる }
されない。
613 :
デフォルトの名無しさん :2007/07/28(土) 08:40:40
>>612 マジで?
じゃあ呼び出し元(クラスA)でDBに接続し、そのオブジェクトをrefで渡し
呼び出し先(クラスB)のデストラクタでDBを切断した場合、クラスAの
DBオブジェクトはどうなるんでしょうか?
切断されちゃってるよね?
何を言いたいのか分からん。 とりあえず DbConnection は必要な時に作ってデータとってすぐ破棄しろ。
初心者で、誘導されてきました。 メソッドAをBeginInvokeを使って非同期で処理したい場合、メソッドAからコールするメソッドB、メソッドCについても BeginInvokeが必要なのでしょうか? メソッドA →メソッドB →メソッドC
定数違いのクラスをいくつか作りたいんですが、 protected の逆で、基本クラスから派生クラスのメンバにアクセスできるアクセス修飾子ってないですかね?
abstract protected
>>617 そうかプロパティか!すばやい解答ありがとうございました!
>>616 コンストラクタで定数を指定じゃだめか?
621 :
615 :2007/07/28(土) 12:35:14
>>618 必要ないのですか・・・。
メソッドB呼び出しのところでフリーズしちゃうんですが、別の問題ってことですね。
>>621 そもそもそういう超がつくほどの愚問を発する時点で、非同期処理に対する正しい理解が
欠如していると思われる。
>>620 何百もインスタンス作るのでインスタンス変数避けてstatic かつ readonly な 変数にしたいんですよ。
staticならリフレクション使うしかなかろう。
>>624 「定数(というか、ReadOnlyメンバ)クラス」のインスタンスを
静的なフィールドで持たせるようにすればいいんじゃない?
それじゃ定数クラスのメンバにアクセスできないんじゃね?
>>627 何をいいたいのかよく分からないが、要はvirtualまたはabstructなリードオンリーの
プロパティを、単にstatic readonlyなフィールドを返すような実装にして、
そのstatic readonlyなフィールドの初期化は各派生クラスの静的コンストラクタで
行うようにするだけの話だよ。
630 :
デフォルトの名無しさん :2007/07/28(土) 19:50:06
誘導されてこっちにきました invokeとはいったいどういったメソッドなのでしょうか 〜のinvokeとか・・・のinvokeとかは聞き deligateをじっこうさせれるとか・・・ 有用性をどなたか教えてください。お願いします。
継承ってそんなに使う? ほとんど使ったこと無い。
以下
>>631 と同等な文章
送りバントって使う?
ほとんど使ったこと無い。
エアコンの除湿って使う?
ほとんど使ったこと無い。
犬用虫下しって使う?
ほとんど使ったこと無い。
コンドームって使う?
ほとんど使ったこと無い。
継承使わないなんて信じられない。
掲示板に自動書込みを行うにはどうすれば良いでしょうか? 何か参考になるサイトがあればお教えて頂けますか? ※荒らし目的ではありませんので、悪しからず。
ドライは使うでしょ
>>636 "Don't Repeat Yourself"?
ドライって何?
C#でテキストボックスの内容が数値かどうかをチェックするには TrayParseを使わないとダメなのでしょうか? 皆さんはこんな感じでロジックを組んでいるのでしょうか? IsNumeric関数のように対象文字列だけ引数に入れるような関数は無いのでしょうか? int nNull; if (!int.TryParse(this.text1.Value.ToString(), out nNull)) { this.text1.Value = "0"; }
>>638 そんな関数自分でつくればいいじゃん。馬鹿らしい。
小数をどうするのかとか十六進表記をどうするのかとか
継承すると、後で読み返すときめんどいから使わない、ってのは俺だけ? 別に処理の共通化したいならインターフェースでいい、みたいな考えなもんで
お前だけ
だいたい継承使わないとフォームやユーザコントロールが作れないだろ 使わなくても不可能ではないけど
644 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 10:05:41
メソッドをoverrideするには、対象の親メソッドでは virtualをつけないとだめなの? 逆に言うと、overrideされたくない場合はvirtualを付けなければ良いと。
>>644 もとのクラスが想定していない継承やoverrideはさせないというのがC#の基本思想。
これについては賛否はあるが、C#ではそういうやり方を選んだ。
継承についてはデフォがinheritableである以上、ちょっと違うと思うけど。
気に入らなかったら親と同じ名前のメソッドを定義し直して隠せるよ オーバーライドにはならないけどあくまで気休めに
掲示板に自動書込を行う コードを教えて下さい。 せめて参考になるサイトがあれば非常に助かります。 お願いします!!
>>649 WEBシステムなので出来ればクライアント(VB.net / C#)で
で掲示板に対して自動書込みを行うコードを教えて下さい。
※参考URLでも結構です。
system.EventHandlerって何者でしょうか? わざわざ自分でデリゲート自体の宣言をしなくてするためのものと考えて良いんでしょうか?
WM5端末向けの「端末に保存されたHTMLファイルを表示する」アプリを作って みたのですが、WM5エミュレータ上ではとりあえず動くようになったものの、 実機で試してみると、端末で関連付けられたブラウザでHTMLファイルが開かれて しまい、作ったアプリでHTMLファイルを開くことができません。 関連付けを無視して自作のアプリで端末上のHTMLファイルを開く方法を教えて いただけませんでしょうか・・・ アプリにはmainWBという名前でWebbrowserを配置し、mainWB.navigate(ファイルパス) やmainWB.url=(ファイルパス)で端末上のHTMLファイルを開こうとしています。
655 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 20:02:41
以下のように書いてるんですが、POPサーバーの認証が通りません・・・ 他のメーラーで、一度送受信した後で製作中のプログラムを走らせると 認証が通るので、以下の部分で認証出来てないと思うのですが・・・ どこかまずいとこあればお願いします。 TcpClient tcp = new TcpClient(); sw = new StreamWriter(tcp.GetStream()); sw.Write("USER testuser\nPASS testpass\nQUIT\n");
>>655 ネットワークプログラム作るなら規格読めよ。
まず、POP3は対話型プロトコルだ。
657 :
名無しさん@そうだ選挙に行こう :2007/07/29(日) 20:19:07
byte配列の一部をuintの配列としてアクセスしたいのですが、 BitConverterを使う以外の方法ってありますか? C言語で表現すると char[128] arr; unsigned int* p = (unsigned int*)&arr[80]; p[0] = 0xFFFF0000; p[1] = 0xF0F08080; そもそもあんまり褒められたやり方じゃない気がしますが・・・
unsafeでCと同じことはできるよ。
あとは Buffer.BlockCopy でいったんコピーして操作後に書き戻すか。
660 :
657 :2007/07/29(日) 20:38:38
やっぱりmanaged環境だとコピーが発生するのは避けられないんですかね・・・ なるべくunsafeは使いたくなかったんですが、検討してみます
ん?unsafeはmanagedだぞ。unmanagedではない。
>>661 マジですか。誤解してた
勉強してでなおしてきます
>>656 ありがとうございます。
アレコレ調べてtelnetでメールの本文取得できるくらいは分るのですが、
ググるとこれで認証できると書いてるサイトが2,3つ出てくるので・・・信じ切ってました。
対話的に処理を書き直してみます。
664 :
デフォルトの名無しさん :2007/07/29(日) 21:23:50
抽象メソッドを作成すると、そのクラスは抽象クラスになっちゃいますが 抽象クラスはインスタンス化できませんよね。 抽象メソッドってインターフェースと同じ気がするのですが インターフェースだったら抽象クラスになっちゃうような影響は無いんで 抽象メソッドを使うんだったらインターフェースを使った方が良いんですよね? 抽象メソッドのメリットっていったい・・・
665 :
デフォルトの名無しさん :2007/07/29(日) 21:26:59
PC-9801とQUICKCの組み合わせを知らないときついよ
抽象クラスは実装を持てる
>>664 抽象クラスとインターフェイスの使い分けのガイドラインがMSDNにあるからよんどくといいよ。
>>664 インターフェースは全てのメソッド定義が必要で取捨できないじゃん
WIN版Postgresqlとの連携って可能ですか? どういうキーワードでたぐって勉強していけばよいですか?
C++/CLIでラッパーを書けば それなら普通にC++から使うのと同じはずだから情報も沢山あるでしょ
Npgsqlとか、PostgreSQLDirect.NETとか。
コントロールの名前についての質問なんですが、 タスクマネージャのプロセス一覧の様なコントロールって なんていう名前なのでしょうか? DataGridViewじゃないみたいだし…
ListView
スタイルがView.Detailsに設定されたListView
そういやエクステンションメソッドでインターフェイスに実装が 追加できるようになるよなあ
列挙型やデリゲート型には使えるのかな
678 :
699 :2007/07/30(月) 19:13:40
>>670 >>671 ありがとうございます!!
Npgsqlなんてものがあったのですね。
これを利用してみようと思います。
C#の文字列処理についてご質問があります。 例えば、次の様な文字列が存在するとして、 あああabcdefg★1234tomato.jpあああ ★の左側 ★の右側 にある文字列のうち全角文字が出て来るまで取得する プログラムを作っているのですが、判定時に全角文字(あいう・・・) を判定するにはどうすれば良いでしょうか? ここでは最終的に、 abcdefg★1234tomato.jp を取得したいと考えています。 (REGX等を使うのではなく全角かどうかを判定する.NET関数は 用意されていますか?)
そもそも全角って何だ。
>>679 全角は前時代のもの。
シフトJISで判定。
682 :
デフォルトの名無しさん :2007/07/30(月) 22:55:31
catch内の処理で例外が発生したらどうなっちゃうの? catchでエラー画面にResponse.Redirectで遷移し、ついでにResponse.End()もやってるんだけど これってやばい? Resonse.RedirectってResponse.End()ってやらないとすぐに遷移しないですよね。 それがヤダ。 画面が全部表示しきってから遷移するんだもんなぁ。 これって何とかならんの? Response.End()やるしかない?
683 :
679 :2007/07/30(月) 22:56:57
>>680 あいうえお
>>681 シフトJISであれば、全角文字(あいうえお・・・)等では無いという
関係が成り立つのでしょうか?
>>683 s-jisでエンコードしてバイナリを読めば簡単に判定できるって意味でしょ恐らく。
っていうかググると簡単に答え見つからないか?
アアアabcdefg★1234tomato.jpアアア はいいのか?w
文字コードとかエンコーディングとかその辺のキーワードをもとに勉強すべきだね。
>>679 なんで正規表現だめなの?
[1-9]とか、[a-Z]のが格段に楽だと思うけど
688 :
679 :2007/07/31(火) 00:35:20
>>684 ああ、そういう意味ですか。理解できました。ありがとうございます。
もっと勉強しなくてはなりませんね。
>>685 、、、そうでした、それも困りますね。
>>686 勉強します。
>>687 ダメという訳では無いのですが私個人の趣味の問題で、
使いたくなかっただけです。
しかしながら
>>685 さんよりご指摘を頂きましてやは
り正規表現を使う方が無難かと思い始めて参りました。
メルアド抽出したいの?
>>688 半角全角って区別が前時代的って
>>681 さんが言ってるニュアンスを理解してください
そんな区別は(多分)日本にしか存在してないでしょう
日本以外の東アジアにもあるよ
趣味の問題というより正規表現分からないってだけじゃね?
全角と言わずに非ASCIIと言っておけばまだ良かったのか。 また、(非英米環境で)文字列処理をしたいのなら文字エンコーディングの知識は 必須なのに、なぜこれだけ軽視されているのだろう。
Javaプログラマーが初めてC#をやる場合、何読めばいいかな?
MSDNにJavaプログラマのための手引きみたいなのあったような気がする
>693 あまりにも必須であり初期に出会う問題なため、 とりあえずその時作ってる物が動くようになったらそれ以上詳しいことは深追いせずに そのまま放置して来てしまう人が多いのではなかろうか。 俺の事のような気がしてきたけど。
ありがとうございます。ちょっと見てみます。 本とかで学習する場合、おすすめの本とかありますか?
>>696 なるほど。
でも、シフトJISでそれほど苦労せずに組めているM$環境の人は、買ってでも
した方がいい苦労の様な気がするな。なんで未だにシフトJISなんだ、てのをもっと
感じて欲しい。
今更shift_jis環境とか存在するの?死ぬの?
おれは死にたくないなぁがんばる。
701 :
688 :2007/07/31(火) 02:15:57
>>689 ずばりそうです。
>>690 頑張ります。
>>692 正規表現は、バッチリです。(???)
業務で使うあらゆるパターンを控えておりますので。。。
ふらっとな夏ですね
正規表現で3行でメール抽出できるだろ
正規表現が分からないんだろ
DataGridViewで「セルの編集はできないがテキストの範囲指定やコピーはできる」ような状態にしたいんですが どうしたらいいんでしょうか?
706 :
デフォルトの名無しさん :2007/07/31(火) 13:59:07
dataGridView.ReadOnly = true ;
>>706 それだとテキストの指定とコピーができないですよね。
708 :
デフォルトの名無しさん :2007/07/31(火) 15:20:21
質問です 「型または名前空間名 'DirectX' は名前空間 'Microsoft' に存在しません。アセンブリ参照が不足しています。」 って出たんですけど、どうすればいいのですか?
参照設定を右クリックして参照の追加をやってみては?
アセンブリ参照を追加してください
712 :
デフォルトの名無しさん :2007/07/31(火) 15:32:00
for(i = 0; i < 8; i++) for(j = 0; j < 8; j++) { // 次の値の方が小さい場合 if(iArray[j + 1] < iArray[j]) { iTemp = iArray[j + 1]; // 数値の保持 iArray[j + 1] = iArray[j]; // 数値の代入 iArray[j] = iTemp; // 保持した数値の設定 } } これをクイックソートに書きおなしてみるべしw 誰が一番早いかな??
713 :
デフォルトの名無しさん :2007/07/31(火) 15:35:36
>>709 ,
>>710 DirectXを追加すればいいのですか?
夏期休暇から始めたんでまだぜんぜんわかんないんです
>>711 ありがとうございます
見ときます
714 :
705 :2007/07/31(火) 16:04:18
EditingControlShowingでコントロールをReadOnlyにすることで一応実現できました。
>>712 iArray[j + 1] あたりでIndexOutOfRangeExceptionが出そうなコードだな
宿題・・・?
>>705 セルを選択した時その座標にReadOnlyのテキストボックスを配置する。
>>713 Managed DirectXはインストールしてあるの?
(今更Managed DirectXに手を出すのはやめといた方がいいと思うよ)
720 :
デフォルトの名無しさん :2007/07/31(火) 20:41:18
Visual Studio 2005のRADで、 自作のコントロールをコンテナとして使うにはどうしたらいい? Panelみたいに、その中にコントロールを追加したいんだが。
コンテナとして使えるコントロールを継承
>>721 Panelを継承したらRADで編集できなくならね?
てかなったw
ぬるぽ
ガッ
textboxで入力制限をしたいです 例えば横10文字縦10文字として 超えれば入力できない、貼り付けだったら10*10に入る分だけ表示したいのですが どうすればいいでしょうか?
どうすれば、ってそういう動作をするコードを書くんだよ。 でなきゃ何のためのプログラマだよ。 馬鹿じゃないの? プログラミングに関する質問というのはそういう漠然としたことを聞くものじゃないだろ?
糞レス乙。 とりあえずKeyPressイベントを見て云々すれ。 入力をキャンセルするにはe.Handled = true;
つか、普通に桁数とか行数の指定できんの?
729 :
デフォルトの名無しさん :2007/07/31(火) 22:59:13
catch内で例外が発生したらもう終わり?それとも勝手にthrowされるの?
不思議な発想をする人だな 終わりとはどういう意味だ?
この世の終わりだよっ
>catch内で例外が発生したらもう終わり?それとも勝手にthrowされるの? 普通は例外が「スローされる」ことを例外が発生したとかいう。
try { throw Excetion(); } catch { try { throw Exception(); } catch { try { throw Exception(); } catch { … } } }
コンパイルエラーになりました。
throw new Exception();
736 :
デフォルトの名無しさん :2007/08/01(水) 18:37:44
try { throw new Exception(); } finally { throw new Exception(); }
フリーウェアつくってるんですが64bit環境で registryKey.SetValue( valName, (long)hwnd, RegistryValueKind.QWord ); とレジストリに書き込んだハンドルを IntPtr hwnd = (IntPtr)(long)registryKey.GetValue( valName, 0 ); としてるところで例外が出ると報告がありました。 32bitマシンしかもってないんでテストできないんですが ここでInvalidCastExceptionが出るとしたら何ででしょう? また正しいコードはこうだ、ってあったら教えてくんださい
ポインタをlongに変換しちゃいかん。
739 :
デフォルトの名無しさん :2007/08/01(水) 22:07:17
textboxみたいなコントロールを自作してるんだが、 フォーム自体からフォーカスが外れてもLeaveイベントが呼ばれないのはなぜ? キャレットを非表示にしたいんだが。
>>739 textboxみたいなコントロールはフォーム?
フォームのLeaveイベントと自作コントロールの関係がよくわからんけど、
overrideしてるとこにbase.OnLeaveを書いてないからとか。
非アクティブでもフォーカスは残ってるからな
>>737 例外とは関係ないけどなんでまたウインドウハンドルなんかをレジストリに?
読み出したときに同じウインドウを指してる保障なんてないよ。
743 :
737 :2007/08/01(水) 23:19:51
>>738 どういうことですか?
64bit環境のIntPtrってInt64であらわせないすか?
>>742 一応ウインドウが閉じる時に消してます
(long)GetValue(..)
はいけてますよね?(QWordで保存されてるんだから)
(IntPtr)(long)
がいけないのかな……
WORDとつくとunsignedのように感じるが。 でも何でレジストリ?
>743 レジストリに保存した後、読み出して使っても有効な値のIntPtrってどういうもんだよ? レジストリに書かなくても処理できるようなものじゃないのか?
今宵も… なんだか。 UINT64
エスパーじゃないけど 多重起動可能でそれぞれでハンドル使いまわしているんじゃないか?
748 :
737 :2007/08/02(木) 00:04:10
>>747 まあそんな感じです。
でも聞きたいのはそっちじゃなくてキャストの例外の話なんです(T_T)
>>746 (IntPtr)(UInt64)GetValue(...);
ってことですか?
(UInt64)GetValue(...)でInvalidCastExceptionでました。。。
まあ教えてくださっても自分じゃテストできないわけですが
コンパイル時の /platform は anycpu, x86, Itanium, x64 のどれに設定してる?
>748 キャストせずにIntPtr.ToInt64()とIntPtrのlongを引数に持つコンストラクタでいいんでない?
キャストしないと渡せないだろ。
DirectXなどで見かけるんですが、ビット演算の | とビットフィールド列挙型を使って、引数を渡す場合がありますが、 あれってキャストしてませんよね。 C#ではあのような演算のとき、暗黙の型変換をサポートしてるって事でしょうか?
つ[FlagsAttribute]
>>753 ずばり解答のサイトありがとうございます。
サイトってどこ?
ぐぐったら、一番上にmsdnのサイトが一番上に来たので。 実際に使用する場合は[Flags] を列挙体定義時に先頭に添えるようです。
byte[] random = new byte[100]; System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider(); rng.GetBytes(random); 6桁のランダムな整数を取得したいのですが上記では3桁ほどの 整数しか取得できません。 どのように変更すれば6桁のランダムな整数を取得できるでしょうか?
random[0] | random[1] << 8 | random[2] << 16 とか?
>>757 byteだから255までしか出てこないんでないの?
999999までの乱数が欲しいなら
Random.Next(1000000)
それはRNG以下略の代わりにはならないだろ
オブジェクト名をプログラムで動的に指定することって可能ですか? textBox1,textBox2,textBox3 というコンポーネントがあって for (i = 1; i <= 3 ;i++) { textBox_i.text = "ほげほげ"; } という感じに指定したいのですが、いい方法ありますでしょうか?
>>761 Reflectionで可能だが、その前にコンポーネントの配列で
代用できないか検討してからにしろよ。
Controls[string]を使えば簡単にできるよ お勧めしないけど
764 :
761 :2007/08/02(木) 11:31:29
>> 762,763 ありがとうございます。 コンポーネントを配列に入れるという方法がありましたね。 今VC#のデザイン画面?にテキストボックスをいくつか並べて、 ボタンを押したらすべてのテキストボックスにデータベースから取得した値をそれぞれ表示するというプログラムを作っています。 デザイン画面を配列で指定することはできないので、ReflectionやControlsというものについて調べてみます。 ありがとうございます。
最初に List<TextBox> list = new List<TextBox>(); list.Add(textBox1); list.Add(textBox2); list.Add(textBox3); ってするだけじゃないのか?
766 :
761 :2007/08/02(木) 14:52:20
>>765 おおおっ そんな手があるんですね!!
調べてみます。
ありがとうございます。
スレチだと思うのでですがC#で書いてるので質問させてください。 今waveファイルの合成処理をするメソッドを書いているのですが、 どうにもぷちぷちとノイズが乗ってしまいます。 //16bit 44.1kHz sbyte src1; sbyte src2; int t = src1 & src2; こうしたのが一番いいような気もするのですが、単純に足したときとほとんど 変わりません。 なにかヒント、または誘導先を教えていただけないでしょうか?
既に表示しているListViewItem全てを一気にList<ListViewItem>に入れる方法ありますか?
おつ。PC見つめすぎて目が痛いお
>>769 動くかどうかは知らん
IEnumerable<ListViewItem> getEnumerator(){foreach(ListViewItem item in ListView.Items) yield return item; }
list = new List<ListViewItem>(getEnumerator());
>>768 今外出中なので後で見てみます。
ありがとうございました。
>>767 >int t= src1 & src2:
何の処理??????
sbyteは -128 〜 127
つっこんだら負けですよ
775 :
767 :2007/08/03(金) 00:05:45
>>773 すいません、古い方の処理書いてました orz
//16bit 44.1kHz
byte src1;
byte src2;
int t = src1 + src2;
if(t > 256)
{
t %= 255
}
//ネット繋がらない orz
if(t > 256) { t %= 255 } なんの冗談だ。
//16bit 44.1kHz byte src1; byte src2; あれ?
if(t > 256) 変 その判定でtrueの場合 t %= 255 変 大きな合成音のとき小さくなる? byte src1; 変
>>775 WAVEファイルの事はよく知らないけど255を超えたら255にしたかったんじゃないの?
int t = src1+src2;
if(t>255)t = 255;
それか二つの波の平均をとるのは?
int t = (src1+src2)
>>1 ;
>>767 単純な合成はクリッピングするんじゃなくて、全データを足して2で割るんだよ。
足したところでキャリーオーバーが発生しないように型を変換して、計算してから
また元の型に戻すのがポイント。
音声処理は昔やったなあ。 16bitで量子化してんだからbyte型じゃまずいだろ。元のデータはMSのC#ならushort型だ。 (wavデータの内部形式は符号無し) これをまず符号付きのint型に変換する。次に32768を引く。 2つのデータを足して2で割ったら再び32768を足してushortに戻す。 これでいけるはず。 間違ってたらスマソ。
782 :
781 :2007/08/03(金) 05:55:43
>>767 こうだな。
ushort src1, src2, t;
t = (ushort)((((((int)src1 - 32768) + ((int)src2 - 32768))) >> 1 ) + 32768);
符号なしは8bitの場合だけだったはずだが。。
何が8bitの場合だけなんだ?CLSの話か?
listviewのサブアイテムにはアイコンを表示できないのけ?
やりたければオーナードローしてくだちゃい
単純な合成は2で割る あほなこというな
足して2で割ったような感じ
>>780 波の重ね合わせって割ったら意味ないような…
>>781 ushortか…
でも、生データのbyte配列ままなんでそのままシフトしてshortにキャストすれば引く処理は必要なくなりますか?
790 :
デフォルトの名無しさん :2007/08/03(金) 16:37:11
ASP.NETの質問をさせてください。 TestソリューションにAプロジェクトとBプロジェクトを追加し Bプロジェクトの参照設定で、Aプロジェクトを追加しました。 Bプロジェクトに追加されたAプロジェクトはローカルにコピーしないを設定しました。 これで実行すると、Aプロジェクトがどこにあるか分からない的なエラーが出るのですが どう改善したら良いのでしょうか? A.dllをグローバルアセンブリキャッシュに登録しないやり方があれば教えてください。
791 :
デフォルトの名無しさん :2007/08/03(金) 16:57:15
質問です. 目的は,2値画像の縮小です. 縮小する際に,1画素ずつとばして格納したいのです. 原画像[0][0]→Bitmap[0][0]に格納したら, 原画像[0][2]→Bitmap[0][1]に格納する. というように,1画素飛ばしで格納していき, 最終的には原画像を0.5倍したいと考えております. どのような,プログラムを組めばいいのでしょうか? for文でまわそうとしても,エラーが出てフリーズしてしまいます・・・ よろしくお願いします.
>>791 「そのように書く」としかいいようがない質問だな・・・
どんなエラーが出るのか書かないと答えようがないよ。
SetStrechBltMode と StrechBlt 使ったほうが速そうだが・・・ どんなエラーがでるのさ。
って tが抜けた。StretchBltね・・・
795 :
791です :2007/08/03(金) 17:07:18
for(i = 0; i < pictureBox1.Height; i+2){ for(j = 0; j < pictureBox1.Width; j+2) { col = img.GetPixel(i,j); gray = col.R; bmp.SetPixel(i,j,Color.FromArgb(gray,gray,gray)); } } とかくと・・・ System.ArgumentException のハンドルされていない例外が system.drawing.dll で発生しました。 追加情報 : 使用されたパラメータが無効です。 とでてきます. imgが原画像でbmpが新しく用意した格納先です.
i+2 って iそのものは増えてない気が。 あと書き込む先は1/2しなくていいのかい
797 :
791です :2007/08/03(金) 17:13:15
>>796 Bitmap bmp = new Bitmap(pictureBox1.Width / 2 , pictureBox1.Height / 2);
書き込む先は,上記のようにしていますが・・・
根本的に考え方が間違っているのでしょうか?
>bmp.SetPixel(i,j,Color.FromArgb(gray,gray,gray)); こっちだよ bmp.SetPixel(i/2,j/2,Color.FromArgb(gray,gray,gray)); じゃないのか
799 :
791です :2007/08/03(金) 17:18:58
>>798 割り当て、呼び出し、インクリメント、デクリメント、および新しいオブジェクトの式のみがステートメントとして使用できます。
というエラーが出てきます(汗
>>799 それは i + 2 のほうじゃないの?
i += 2でやってみそ
for (int i = 0; i < source.GetLength(0); i += 2) { for (int j = 0; j < source.GetLength(1); j += 2) { target[i / 2, j / 2] = source[i, j]; } }
802 :
791です :2007/08/03(金) 17:26:16
>>800 だめでした・・・
'System.ArgumentException' のハンドルされていない例外が
system.drawing.dll で発生しました。
追加情報 : 使用されたパラメータが無効です。
ちなみに,今書いているプログラムは↓
private void button4_Click(object sender, System.EventArgs e)
{
int i,j,gray;
Color col;
Bitmap img = new Bitmap(pictureBox1.Image);
Bitmap bmp = new Bitmap(pictureBox1.Width,pictureBox1.Height);
for(i = 0; i < pictureBox1.Height; i+=2){
for(j = 0; j < pictureBox1.Width; j+=2)
{
col = img.GetPixel(i,j);
gray = col.R;
bmp.SetPixel(i/2,j/2,Color.FromArgb(gray,gray,gray));
}
}
pictureBox1.Image = bmp;
//イメージに合わせてPictureBoxのサイズを変更
pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
}
駄目でしたじゃなくてさ〜 そのエラーが出た時点で、どの関数のどの引数がいくつになってるから発生したのか すぐに調べられるだろ?
iとjが逆だろw
805 :
791です :2007/08/03(金) 17:39:30
すいみません(汗
本当に初心者なのでこの板で質問していました.
(初心者用ということなので…)
>>804 iとjを逆にしてもフリーズしてしまいます.
この↓
col = img.GetPixel(i,j);
が,フリーズしたときに緑色になっています.
>>805 今後のためにも、エラーで止まったらどうすればいいのかは自分でできるようになっとくといいよ
とりあえず、i と j が逆なのはわかった(x,yと置き換えるとわかりやすいぞ)
1箇所変える位じゃすまないから、for文の Height と Width を入れ替えてみ
あわてんぼにも分かるようにi,jじゃなくて x,yでループ回せよ。 for(x = 0; x < pictureBox1.Width; x+=2) ってな……
808 :
791です :2007/08/03(金) 17:46:46
みなさん,ありがとうございます!!! できました!画像の縮小! とても助かりました. エラーがでたとき,もっと色々考えるべきことはたくさん ありますね・・・(反省
あと画像を走査するのにピクチャボックスの大きさを使うなよ。
810 :
791です :2007/08/03(金) 17:53:10
>>809 ピクチャボックスの大きさはだめなんですか?!
大きさがimageと同じとは限らない 汎用性もない
812 :
791です :2007/08/03(金) 17:58:45
あらかじめ長さを調べないといけないということですか?
あとエラー時に緑になってるって書いてたが、その時点でマウスカーソルを 変数の上に乗っけりゃパラメタがわかるし、ローカルというウィンドウの $exception に詳しい理由が書いてあることもある。
>>812 ピクチャーボックスの高さは pictureBox1.Height だが
イメージの高さは pictureBox1.Image.Height だろう
815 :
791です :2007/08/03(金) 18:03:26
GetPixel/SetPixelだとおかしいところがなくてもフリーズしてるみたいになりそう
いやー、まるまるコピーして動かしてみたが 意外と速いんで驚いた。
818 :
791です :2007/08/03(金) 18:12:25
>>814 確かに・・・そうですね.
気をつけます!
819 :
デフォルトの名無しさん :2007/08/03(金) 18:18:27
画像の取り扱いについて話をされているようですが 画像処理について詳しいかたいらっしゃいますか? ラベリング処理でなやんでいます
すいません。XMLのシリアライズについて教えて下さい。 あるクラスを格納するListを作っています。 ⇒hogeをhogeListに格納しています。 class hoge { public string hogehoge1; public string hogehoge2; public hoge() { } } List<hoge> hogeList = new List<hoge>(); hoge h = new hoge(); h.hogehoge1 = "○"; h.hogehoge2 = "×"; hogeList.Add(h); : :
これを以下の様にhoge.xmlにシリアライズ化しましたが、うまくいきません。
XmlSerializer xs = new XmlSerializer(typeof(List<hoge>));
FileStream fs = new FileStream("hoge.xml", FileMode.Create);
xs.Serialize(fs, hogeList);
fs.Close();
以下の様な感じでです。
<?xml version="1.0"?>
<ArrayOfhoge xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance " xmlns:xsd="
http://www.w3.org/2001/XMLSchema ">
<hoge />
<hoge />
: hogeListの要素数だけ
</ArrayOfhoge>
hogeに格納したhogehoge1やhogehoge2の情報がありません。。。
オブジェクトを格納したListをシリアライズするとオブジェクトの中身は取り込めないのでしょうか?
XMLシリアライズのドキュメント見返してきますが、ご指南願います。
>>822 どぼん氏のところにそれがうまくいかない理由と解決法が書いてあるよ。
っていうか、普通そういう有名どころにヒントないか見ないか?
>> 823 ありがとうございます。 『ArrayListオブジェクトの内容をXMLファイルに保存する』のTipsでしょうか? この記事は、2つの理由でスルーしていました。 ⇒私のところではエラーが出ないこと。 ⇒ジェネリックで型指定しているから型が定まらないことはないと思ってました。 念の為型指定しましたが、結果は同じでした。 ⇒XmlArrayItem してみました。 すいません。私は節穴でしょうか。。。 もっとずばりのTipsあるでしょうか。。。 出直してきます。。。
hoge クラスは public じゃないように見えるが
>>825 どうもです。。。
しょうもない誤記ですいません。
⇒質問がミスっただけで、コードは最初からpublicです。
訂正します。
public class hoge {
~~~~~~
public string hogehoge1;
public string hogehoge2;
public hoge()
{
}
}
828 :
823 :2007/08/04(土) 00:19:58
>>824 ごめんなんか勘違いしとったw
偉そうにいって申し訳ない
で、俺も追試験してみたけど827の言うとおり何も問題なく普通に
シリアル化できるみたいだけど。
>>827 >>828 恐縮です。。。
その通り。hogeは問題ないです。
シリアライズできます。
いまさら、何でダメだったか書きにくいのですが。。。
>>825 さんが指摘して下さった時点で、実物とデフォルメした質問の違い
を疑うべきでした。
どぼんさんの所にもMSDNにもXMLのシリアライズはpublicだけだよ、と書
いてあったし、それを読んで知っていたのに。。。
悩みの対象の表示されないメンバはprivateでした。
⇒相談にのって下さった皆様には知る由もないことです。
デフォルメした質問にはあるべき姿のpublicを打ち込んでいながら。。。
はぁ〜、バカすぎてどうしようもないです。
お騒がせして申し訳ありませんでした。スレ汚しです。
>>827 さん 828さん
ありがとうございました。本当にここはあったかいですね。
また、こさせて下さい。
ちなみにprivateでシリアライズしたい時はバイナリにしてね、とMSDNに
書いてありました。
enumについての質問なんですが、 enum Test { test1, test2, test3 } こういう列挙体があって、 Test test = Test.test1 | Test.test2; という変数があるとします。 このとき、ifの条件で、"test内にtest1が含まれるとき"という 条件を指定するとき、どのような式を書けばいいのでしょうか?
>>830 フラグにしたいんなら、test1=1, test2=2, test3=4 みたいに明示しないとまずいかも。
(test & Test.test1) != 0
そうやっても Test.test1 | Test.test2 で初期化できたっけ?
>>831 うまくいきました。
フラグにする時ってビット演算使うんですね。
==とか!=とか使ってた場所全部直さなきゃ orz
ありがとうございました。
どうしてCLIにPascalの集合型のようなものを入れなかったのか不思議でならん。
FlagsAttributeを使うんだ
>>833 >>831 の書き方は微妙にまずい場合があるよ。
たとえばMSDNのFlagsAttributeの解説にあるように、
ReadWrite = Read OR Write のような定数を定義した場合ね。
(test & Test.test1) == Test.test1の方が好ましいと思う。
Express Editionを使ってます。 C#を起動したときの「ソリューションエクスプローラー」、「プロパティー」のような、 自由に大きさが変えられてきっちり収まる部品を置きたいんですが、 あれはなんというものなんでしょうか? お願いします。
>ReadWrite = Read OR Write のような定数を定義した場合ね。 >(test & Test.test1) == Test.test1の方が好ましいと思う。 意味を考えて使えってことだけじゃねーの? (test & Test.ReadWrite) == Test.ReadWrite (test & Test.ReadWrite) != 0 そっちがまずいとか正しいとかってもんでもないだろ。
その二つの式は等価ではないぞ
いや、 (test & Test.test1) == Test.test1 こういう書き方は「慣習」でもあるから素直に従ったほうがいいと俺は思うけどね。 それは別に村の掟だから従え、って意味ではなく、一般的は慣習には従ったほうが 人のコードを読むときも自分がコード書くときも余分な思考をスキップできるという利点があるからだけど。
>>841 だから意味を考えてといっとるんじゃ。
>>842 そうか、慣習ってイメージが俺にはなかった。
一般にこう書くものならそれに合わした方がいいかもな。
MSDNでは!=0でフラグがたってる判定に使ってるね
>>843 揚げ足取りじゃなく、だから意味を考えるなら
test & Test.ReadWrite) != 0
これはまずい。
こんな単純な論理演算の陥穽はプログラマなら人に言われなくても気づくべきだが、
それが無理なら、言ってるように素直にMSDNのFlagsAttributeの解説を読んだ方がいいよ。
例えば、
Read = 1,
Write = 2,
ReadWrite = Read | Write
だったらどういう問題が起こるか考えてみ
なにも問題は起きません
あの2式はセマンティクスとか言う以前に結果が異なるんだよ
ReadWriteが3になる
(hoge & ReadWrite) != 0 だとReadとWriteどっちが有効なのかわかんないよママン
なんでそんなループすんの?
そのフラグを何に、なんのために使うのかによって、困るか困らないかも 変わってくるんじゃねーの? プログラム全体を見ないで一部だけ見て議論してもしゃーないべ。 一般論で片付く話じゃないだろ。
852 :
デフォルトの名無しさん :2007/08/04(土) 23:05:04
さっきコンソールアプリでテキストファイルを読み込んで コンソールライトランで書き出したら文字化けした 初めてコンソールアプリでファイルを読み込んだんですけど なんか初期化が必要なんでしょうか? 教えてください。
エンコードが間違ってるんじゃねぇの
new StreamReader("hoge.txt", Encoding.GetEncoding("shift_jis"))とか?
855 :
852 :2007/08/04(土) 23:29:55
新しい項目の追加でtxtファイル追加で追加したら文字化けして メモ帳でUTF-8で保存したtxtファイルを開いたらちゃんと開けた わけわかんね
>>845 ぜんぜん意味が通じないな…
(test & Test.ReadWrite) != 0
ReadかWriteのフラグ少なくともどっちかが立ってたらという意味で使う
(test & Test.ReadWrite) == Test.ReadWrite
ReadとWriteのフラグ両方のフラグが立ってたらという意味で使う
やりたい処理の意味にあわせて使い分けると言ってるだけなのに…
だいたいビットフラグってのは、個別の独立したフラグの集合って場合が多いから、 この例で言うReadWriteを判定で使う場面も少ない気もするしな。 ただ、慣習で一般にそういう書き方するってんなら特に反対する理由もないが。
>>856 自分の間違いや負けを認められない悲しい奴が後付でほざいているようにしか聞こえない。
本気で言っているのなら
>>830 からの話の流れをもう一度確認するように。
お前はいったい何を言ってるんだ?
>>830 の話なら(テストするフラグが単一なら)どっちの書き方でも結果は一緒だろ。
ただ、複数フラグの場合にまずい場合があるので、!=0 ではなくて == フラグ値 の方がいいという指摘
↓
@ぞれは!=0が間違いってことじゃなくて、判定したい意味内容によって使い分けるだけじゃないの?
↓
慣習なので云々
↓
そうか
って流れだろ。
それに対して、いきなり@のところで
>その二つの式は等価ではないぞ
って横槍入れてきただけだろ(等価でない、意味が違うから目的に合わせてってことで@を書いたのに)
後付ってなにが後付なわけ??
どこが間違ってるわけ?
ぜんぜんわからん。
>>858 自分の間違いや負けを認められない悲しい奴が後付でほざいているようにしか聞こえない。
本気で言っているのなら
>>830 からの話の流れをもう一度確認するように。
ああちなみに俺が書いたのは
>>840 ,843,856,857,859だ、念のためな
あんたの言ってることは間違ってないよ
負け惜しみで言ってるのかとおもったが、どうやらリアルで頭悪いみたいだね。 端的に言うけど、 >(test & Test.ReadWrite) != 0 >ReadかWriteのフラグ少なくともどっちかが立ってたらという意味で使う こういう使い方は普通はありえないよ。 これじゃReadWriteの値の定義に依存したコードになっちゃうじゃないかw
やめようかとも思ったが、あえて追い討ちをかけるよ。
だからそもそも
>>830 を読めよ、と。
>>830 の質問に関する回答が妥当かどうか、って話をしてたはずなのに
どうして「そういう書き方がありうるかありえないか」の話になってるんだよw
??
どれが誰かさっぱりわからんw >こういう使い方は普通はありえないよ。 >これじゃReadWriteの値の定義に依存したコードになっちゃうじゃないかw どういう意味??
だからReadWriteが、 ReadWrite = Read | Write こう定義されている、という前提でないと856の言っていることは成立しない。 一般に、コードにいういう「なれなれしい」前提を持ち込むのはよくないこととされている。
最初からそういう前提の話だろうがよ。 MSDNの例もそういう話だろうがよ。
どっかよそのスレでやれよ。気持ち悪い
こっちこないでください><
ビットフラグでReadとWriteがあってさらにまったく別の値でReadWriteが定義されてるほうがびっくりするわ。
そうね
>ReadWrite = Read | Write
>こう定義されている、という前提でないと
>>856 の言っていることは成立しない。
もしこうでないなら、そもそも複数ビットのフラグの話の意味がないだろ。
最初からReadWriteフラグってのが、ReadともWriteとも関係ないなら、
@そもそも1ビットの独立したフラグで、どっちの書き方でも違いがない
A複数ビットフラグだとするといったいなんのフラグなんだか意味不明
どっちにしても意味が通らない。
ファイル監視のプログラムを作っているのですが、 backgroundWorkerのIsBusyの参照がうまくいかず困っています worker.RunWorkerAsync() Thread.Sleep(100)//一応ウェイトを置く if(worker.IsBusy == true) { 「FileWatch.Path = Folder.PATH」が正常に処理され、workerが終了していないときの処理 } else { 「FileWatch.Path = Folder.PATH」が正常に処理されず、workerが終了してる時の処理 }
875 :
874 :2007/08/05(日) 14:10:55
続き private void worker_DoWork(object sender, DoWorkEventArgs e) { FileSystemWatcher FileWatche = new FileSystemWatcher(); try { FileWatch.Path = Folder.PATH; } catch { return;//フォルダがないなど、エラーが発生したときに戻る } //ファイル監視の設定など(省略) for(;;)//キャンセル命令が出るまで監視し続ける { if (worker.CancellationPending == true) { break; } //無限ループだと重いので最小単位でのウェイトを置く(もっといい方法ないですか?) Thread.Sleep(1); } }
876 :
874 :2007/08/05(日) 14:11:25
続き こんな感じでIsBusyを参照しているのですが、 worker.IsBusyが常にtrueになってしまい困っています。 試しに値を参照してみたところ worker.RunWorkerAsync(); MessageBox.Show(Convert.ToString(worker.IsBusy)); MessageBox.Show(Convert.ToString(worker.IsBusy)); とすると、何故か 1回目「True」2回目「False」となります。 正常にIsBusyの値を取得する方法はないでしょうか?
そもそもFileSystemWatcherの使い方がおかしい気がするな。 なんでBackgroundWorkerのなかで呼んでるのだろうか?
おいおいスレッドの意味もFileSystemWatcherの意味も むちゃくちゃ誤解してないか?w とても人に質問して簡単なアドバイスもらって解決できるレベルとは思えない。 なんでまず地道に勉強しようとは思わないの?
そんな糞レスしてる暇があったらなにかヒントでもやれば。
>>879 同意だな。
878は書き出しは良いのに結局煽りとは良い性格してるな。
あ、オレが答えられたら良いんだけど。
まあちょうど879のように、馬鹿ってのは自分の主張を自分自身に適用できないのな。 俺は874のような人間にヒントを出すことに意味があるとは思わないし、だからやらないが お前(879)が意味があると思うならまずお前がやれよ。
あほらし
俺は何も思うところはないしが、
>>878 は思うところがあるんだろ?
だったらそれを具体的に指摘するのが質問者にとっても良いことだろうがよ。
それをしないんなら始めから糞にも劣るレスしないことだな。
文盲だろうか? 「思うところ」は書いてある。 874は質問するレベルに到達してないからまず地道に勉強せよ、と。 馬鹿な君が読み取れないだけだ。
質問するレベル(苦笑) ふらっとスレで何か言ってる奴がいるぜ。
そういう煽りもスレ違い
>>874 FileSystemWatcherって変更があったらイベントを発生するんじゃなかったっけ?
何故スレッドに詰め込んでんの?
>for(;;)//キャンセル命令が出るまで監視し続ける
だからworker.IsBusyが常にtrueになってしまい…であってるんじゃないの?
>for(;;)//キャンセル命令が出るまで監視し続ける
>{
>if (worker.CancellationPending == true)
while で書いたほうがいいんじゃない?
この書き方もきになるなあ。 >MessageBox.Show(Convert.ToString(worker.IsBusy));
889 :
874 :2007/08/05(日) 15:25:53
スレが荒れるのは不本意ですが...
>>877 私のやりたいことは
1.プログラム起動時、XMLファイルから「監視するフォルダのパス」「監視するファイルの拡張子」を取得
2.「監視するフォルダのパス」「監視するファイルの拡張子」がnullではない場合、監視を開始する
3.MainWindowのMenuから「監視するファイルの変更」を選択した場合監視を止め、
監視するファイルの拡張子を入力させるウィンドウを表示する→入力が正常なら新しい条件で監視を実行
MainWindowとは別で監視させる必要があるため、backgroundWorkerを使っています(間違っているかもしれませんが...)
(backgroundWorker内の終了処理として、FileWatch.Dispose();を忘れている気がしてきました...)
890 :
874 :2007/08/05(日) 15:27:48
続き backgroundWorkerを使わずに、FileSystemWatcherでフォルダを監視させたとき メニューを選択した場合、 private void 監視するファイルの変更ToolStripMenuItem_Click(object sender, EventArgs e) { FileWatch.Dispose(); <-これだとエラーが出ます。 FileSystemWathcer FileWatch = new FileSystemWathcer(); FileWatch.Dispose(); <-もちろん止まってくれません。 //拡張子を入力させるための処理(省略) } となり、ファイル監視を停止できません... 最後に、私の無知や勉強不足は承知の上で "「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です" ということだったので書き込ませて頂きました。 (c#を少しずつ勉強しながら目的のソフトを作っています。 後もう少しで完成するのですが、どうしてもフォルダ監視がうまくいかず スレに書き込ませて頂きました。)
>FileWatch.Dispose(); <-これだとエラーが出ます。 なんていうエラーかぐらい書こうよ。 >FileSystemWathcer FileWatch = new FileSystemWathcer(); >FileWatch.Dispose(); <-もちろん止まってくれません。 これなに? なにがしたいの?コンパイルできてるの?
>>889 わざわざBackgroundWorkerでFileSystemWatcher作る必要はないと思いますよ。
監視ディレクトリを動的に変更したいだけならEnableRaisingEvents=falseしてから
各プロパティを更新してEnableRaisingEvents=trueにしてあげればいけそうですけど。
試してませんが。
893 :
874 :2007/08/05(日) 15:43:22
>>891 説明が不足していて申し訳ありません。
もちろんコンパイルできません。
「FileWatchの定義がありません」とエラーが出ます。
>>892 ありがとうございます!!
プログラムを書き直して見ます。
>>893 FileWatch をちゃんとメンバーにしていないからだよ。
ないものにはアクセスできないよ。
インテリセンスで出てこなかっただろ?
とりあえずFileSystemWatcherの典型的な使い方をしてみようよ。 WindowsFormにツールボックスからFileSystemWatcherをドロップして、 プロパティウインドウでPathとCreatedやDeletedなどのイベントを実装する。 これでできたソースと自分のソースを見比べてみるといい。
897 :
874 :2007/08/05(日) 16:16:23
>>894 こちらのアドバイスもどうもありがとうございます。
目的どおりに動作させることが出来ました。
(backgroundWorkerは削除しました。)
色々とアドバイス頂きましてありがとうございました。
質問させてください。 ファイルへの関連付け機能で起動されたアプリで、 起動のきっかけになったファイルの名前を取得するのは どうやれば良いのでしょうか。 ある拡張子に関連付けされているアプリを探す方法は わかったのですが、これのやり方は探してもみつかりませんでした。。。
Main の引数とか Environment クラスのプロパティ&メソッドとか
>>899 ありがとうございました。
Environment.GetCommandLineArgs()で求めているものが取得できました。
textBox1.Text ="abc" textBox2.Text ="abc" textBox3.Text ="abc" というふうな感じの場合、ループで処理すれば綺麗にまとまりますよね 数字の部分を配列変数のようにアクセスできないものでしょうか? オブジェクト指向がよく変わってないもので、よろしくお願いします
>>901 textBox[] tb = new textBox[2];
tb[0] = textBox1;
tb[1] = textBox2;
tb[2] = textBox3:
こんな感じに配列にする。
もしくは
foreach (Control ctrl in Controls)
if (ctrl.Name.StartsWith("textBox")
ctrl.Text = "abc";
とか。
TextBox[] tb;//メンバ変数 for(int i=1;i<=3;i++) tb[i-1]=this.Controls["textBox"+i.ToString()]; コンストラクタだけなら許されると思う
>>902 、903
テキストボックス型の配列にいれるのかな
なるほど。登録の手間がが多少かかってもこれが安全なんですね
ありがとうございました
Control.Tagって使ってる? やっぱりDictionary<Control, 値の型>を使うかコントロールを拡張するべき?
Tagを使っちゃうと占有しちゃうからなー 他の何かがTagを使おうとしてる場合に困るので避けてしまう。
>>906 場合によりけり、としか言い様がない気がしますが。
俺はTagで十分な場合が多いと思うけどDictionary使うかコントロールを拡張して
関連するオブジェクト専用の型付けされたプロパティを追加するかの選択なら
迷わず後者を選ぶなあ。
まあ、でもこれもケースバーケースか。
すいません、現在実行しているプログラムのパスってどうやって取得していますか? カレントディレクトリの取得だと、ファイル名の選択ウィンドウ等を使うと、カレントディレクトリも変更されてしまうので…
911 :
909 :2007/08/06(月) 10:08:17
912 :
デフォルトの名無しさん :2007/08/07(火) 13:13:09
質問です。 SQLで"SELECT〜FROM〜WHERE 値1 AND 値2" といった形のSQLをDataAdaterを使い、DataSetにFill・ListBoxに表示しています。 そこで、SQLの条件が値1のものはそのまま、値2のものは文字を赤くしたいのですが 可能でしょうか?
914 :
912 :2007/08/07(火) 14:50:29
ふむふむ、DrawModeを使ってやればいいのですね。 今回自分の場合だと、どのような形でやればいいでしょうか?
917 :
912 :2007/08/07(火) 15:25:21
えっと、上記のMSDNを参考にすると、Switchのところに何を入れればいんでしょうか? caseには値1,2でいいんかな?
はぁ?
やってみりゃいいべ
920 :
912 :2007/08/07(火) 16:46:21
そのまま試してみたところ、色を変えることに成功しました。 しかし、これだと0行目と1行目しか色が変わらず、値1と2は何行目にくるか 毎回決まっているわけではないので、どうしたらいいでしょうか? また、それまではListBoxにきちんと表示されていたものが、System.Data.DataRowView となってしまいました。DisPlayMenberも変える必要があるのでしょうか?
でぃす ぷれい めんばあ
そのコードの意味を考えてみればおのずとどう書けばいいかわかりそうなもんだが・・・ インデックスの値だけで色を変えればそりゃインデックスによってしか変えられないのは当たり前でしょ。 リストの内容を見ないと。
どんだけ初心者なんだ・・・ 自分がどの程度やったのかを提示してもらえるとレベルがわかって説明しやすいんだが。
924 :
デフォルトの名無しさん :2007/08/07(火) 17:16:35
コンボックスAに値を入れた後、ロストフォーカスして自動的にコンボックスBにコンボックスAで入力した値が入る処理ってどうやったらいいか分かりますか?
925 :
912 :2007/08/07(火) 17:20:53
private void button1_Click(object sender, System.EventArgs e) { OracleConnection oracon = new OracleConnection(); oracon.ConnectionString = "user id=hoge;" + "password=hoge;" + "Data Source = test"; OracleDataAdapter oleda; DataSet ds = new DataSet("検索"); oleda = new OracleDataAdapter("SELECT A FROM B WHERE C = 1 AND (値1 OR 値2)",oracon); oleda.Fill(ds,"検索"); listBox1.DisplayMember = "A"; listBox1.ValueMember = "A"; listBox1.DataSource = ds.Tables["検索"]; } こんな形になっています。 ListBoxのDrawItemについては、まだ変わっていません。
>>925 つまりさ、Indexがわかれば Items とかでデータの中身もわかるよな。
データの中身によって色を変える、という事ならIndexさえわかれば
どうにでもできると思わないか?
enumの中身をあとから追加することってできますか? enum iro { aka=10, ao=20 } とかに midori=30 とかを動的に追加したい
>>924 KeyPressかなんかでEnterを待つ
→そのときの値をcomboBoxB.Items.Add
→(ロストフォーカスというのが意味分からんが)comboBoxB.Focus()?
>>928 むりぽ
>>928 何に使うんだそれ
static IDictionary<string, int>とかじゃだめなのか
チャットレディって知ってますか?
今、急激に需要が伸びている在宅アルバイトです。
報酬もよくて、時給換算で3000円〜6000円
位です。怪しい仕事ではありません。
本業でもいいですし、副業にするなら最高の
アルバイトです。下記サイトをご覧下さい。詳しく説明しています。
http://www2.atpages.jp/nicl1216
インストールかよ
>>929 やっぱだめか
動的にenumそのものを作れるって知ったんで
追加もできるのかと思ってた
>>930 あるディレクトリからビットマップを読んでLISTに入れるが
これだとインデックスでしか指定できないから
ENUMで名前に対応するインデックスのリストを作って
名前でインデックス刺せるようにしたかった
ジェネリックなら名前とビットマップもったクラスつくって
それを配列ができるんだろうが
名前で呼び出すにはリスト内からそれに対応した名前を
探すと言う処理を加えなければならなくて
ビットマップが増えれば増えるほど遅くなりそうで困る
何かいいアイデアはないかの〜
>>933 悪いけど意味不明にしか聞こえないなあ。。
遅くなることが実感できるとは思えないがなあ
遅い早い以前に、ファイルと一対一で対応するEnumの要素の必要性がまったくわからんw
つハッシュ
Dictionary<string, Bitmap>以外ありえない
>>940 それもどうなの?w
Dictionaryが必要になるほどガンガンBitmapこさえて大丈夫なんかいな?
やってみれ
検索が遅くなるのを実感する前にビットマップがメモリを食いつぶすだろ
動的にenumのメンバを追加できたとしても そのメンバを使う手段はリフレクションしかないわけだから かえってとんでもなく遅くなるはずw
遅いかどうかは別として考え方が変。 enumにする利点がない。 あったら教えて。
private enum 部位 { 目 = 0, 鼻 = 1, 口 = 2 } Bitmap[] bitmaps = new Bitmap[3]; bitmap[部位.目] = new Bitmap("目.bmp"); bitmap[部位.鼻] = new Bitmap("鼻.bmp"); bitmap[部位.口] = new Bitmap("口.bmp"); こういう使い方は稀にやるかも 増える可能性があるならもちろんDictionaryにするけど
objectに持たせろよ。
948 :
デフォルトの名無しさん :2007/08/07(火) 21:20:48
Dictionaryというものの存在を始めて知ったお おまいらありがとう すごい便利そうだ
949 :
デフォルトの名無しさん :2007/08/07(火) 21:52:39
Stringの"070101"を DateTime型の"2007/07/01" に変換しようとしたらどうすればいいのでしょうか? DateTime.Parse("070101")をしようとしたら エラーになります 一度"070101"を"2007/01/01"に変換してからじゃないとダメなようです
ParseExact
そうですか。 報告ご苦労様。
ぜんぜん関係ないけどEnumのToString強烈に遅いのな、びっくりしたわ。
そうですか。 報告ご苦労様。
いったんDictionary<int, string>にためたほうがそれでも圧倒的に早いのな びっくりしたわ 報告了
ドラッグアンドドロップの質問なんですが、ファイルをドロップした時は DragDropイベントが発生するのに、フォルダをドロップしたときには発生しません。 DragEnterイベントで if (e.Data.GetDataPresent(DataFormats.FileDrop)) { e.Effect = DragDropEffects.All; } の部分は反応するのですが、DragDropイベントを反応させるにはどうしたらいいでしょうか?
>>955 //if (e.Data.GetDataPresent(DataFormats.FileDrop))
//{
e.Effect = DragDropEffects.All;
//}
>>955 ドラッグ&ドロップを受け入れるコントロールのAllowDropをtrueにしてる?
>>956 ifを消さなくても中がtrueになるので指摘されている中の式には到達するのですが、
フォルダをドロップしてもDragDropイベント自体が発生しないので困っています。
ファイルだと発生するのに… orz
>>957 してます。
また、空のフォームのを使っているので他のコントロールが
邪魔しているということもないです。
ソース晒せるなら晒してみて
>>952 具体的にどのくらい強烈に遅いのかも教えてくれたらよかったぜ?
>>960 こんな感じです。
private void Form1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.All;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
string[] path = (string[])e.Data.GetData(DataFormats.FileDrop, false);
this.BackgroundImage = Icon.ExtractAssociatedIcon(path[0]).ToBitmap();
}
これとForm1の自動生成されたコンストラクタのみです。
963 :
デフォルトの名無しさん :2007/08/08(水) 02:18:41
>>962 このコードでDragDropイベント起きるぞ。。。
ブレイク張ってりゃ止まるだろ???
>>962 自分はこれでできたよ
参考にしてみて
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.DragDrop += new DragEventHandler(Form1_DragDrop);
this.DragEnter+= new DragEventHandler(Form1_DragEnter);
}
private void Form1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.All;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
string[] path = (string[])e.Data.GetData(DataFormats.FileDrop, false);
this.BackgroundImage = Icon.ExtractAssociatedIcon(path[0]).ToBitmap();
}
}
>>962 イベントハンドラを登録してないって事はない?
>>962 一応ここに乗せる前にもこのコードで試したときもブレークポイント張ったんですが、
ブレークポイント張ったところに引っかからないんですが…
>>964 イベントがデザイナで自動実装されてるとこ以外こちらのコードと
一緒です。
>>965 ファイルをドロップしたときは反応するのでそれはないです。
>>967 ついでにこっちも貼っとく
こっちも違いはない?
#region Windows フォーム デザイナで生成されたコード
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// Form1
//
this.AllowDrop = true;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 11F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(292, 266);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
>>968 こちらのはこんな感じです。
private void InitializeComponent()
{
this.SuspendLayout();
//
// Form1
//
this.AllowDrop = true;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(115, 69);
this.Name = "Form1";
this.Text = "Form1";
this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);
this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);
this.ResumeLayout(false);
}
>>970 そうですか…
うーん、何が原因なんだ orz
もしかして.NETが何らかの原因で壊れたって可能性はありますか?
>>972 ファイルをD&Dするとその拡張子に関連付けられたアイコンが背景として表示されるんだよね?
これは自分の環境でも表示されてる。
んで、フォルダをD&Dするとイベントは発生してるけど、↓の部分で
>this.BackgroundImage = Icon.ExtractAssociatedIcon(path[0]).ToBitmap();
「'System.IO.FileNotFoundException' の初回例外が System.Drawing.dll で発生しました。」
ってのが出て背景にフォルダのアイコンは出てこない。
>>961 PentiumM 1.73GHzのノートマシンで、
Enum型.ToString()
約3.6マイクロ秒
Dictionary<Enum型,string>で保持して検索
約75ナノ秒
>>974 例外飛んできません…
確かに背景画像は変わりませんが。
もしかしてこれが引っかからなかった理由?
MainにSTAThreadがついてないよママン
>>974 Icon.ExtractAssociatedIcon(path[0]).ToBitmap();
の中で例外は処理されてしまっていて表には出てこない。
VC#の デバッグ→ウィンドウ→出力 で出力されてるだろうから見てみて。
>>978 出ました。
んで、こいつの下にブレークポイントを置いたらエラー起こした時に
最後まで行かないということがわかりました。
結局俺のミスか orz
でも.NETの再インストールよりかはマシか。
>>975 Enum#ToString はこっそりリフレクション使って名前調べてたりする
>>979 フォルダのアイコンを表示できるようにしてみた
private void Form1_DragDrop(object sender, DragEventArgs e)
{
string[] path = (string[])e.Data.GetData(DataFormats.FileDrop, false);
if (File.Exists(path[0]))
{
this.BackgroundImage = Icon.ExtractAssociatedIcon(path[0]).ToBitmap();
}
else if (Directory.Exists(path[0]))
{
Icon icon = GetFolderIcon(false, false);
this.BackgroundImage = icon.ToBitmap();
}
}
//以下フォルダアイコンを取得するためのコード。参考サイト
//
http://www.atmarkit.co.jp/fdotnet/dotnettips/280getappicon/getappicon.html //
http://www.codeproject.com/cs/files/fileicon.asp public const uint SHGFI_LARGEICON = 0x000000000;
public const uint SHGFI_SMALLICON = 0x000000001;
public const uint SHGFI_OPENICON = 0x000000002;
public const uint SHGFI_USEFILEATTRIBUTES = 0x000000010;
public const uint SHGFI_ICON = 0x000000100;
public const uint FILE_ATTRIBUTE_DIRECTORY = 0x00000010;
[DllImport("User32.dll")]
private static extern int DestroyIcon(IntPtr hIcon);
[DllImport("shell32.dll")]
private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
>>981 の続き
[StructLayout(LayoutKind.Sequential)]
public struct SHFILEINFO
{
public IntPtr hIcon;
public int iIcon;
public uint dwAttributes;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string szDisplayName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public string szTypeName;
};
public Icon GetFolderIcon(bool smallIcon, bool openedFolder)
{
uint flags = SHGFI_ICON | SHGFI_USEFILEATTRIBUTES;
if (openedFolder)
flags |= SHGFI_OPENICON;
if (smallIcon)
flags |= SHGFI_SMALLICON;
else
flags |= SHGFI_LARGEICON;
SHFILEINFO shFileInfo = new SHFILEINFO();
SHGetFileInfo(null, FILE_ATTRIBUTE_DIRECTORY, ref shFileInfo, (uint)Marshal.SizeOf(shFileInfo), flags);
Icon.FromHandle(shFileInfo.hIcon);
Icon icon = (Icon)Icon.FromHandle(shFileInfo.hIcon).Clone();
DestroyIcon(shFileInfo.hIcon);
return icon;
}
ここまで
Visual C# 2005でTreeViewをドラッグ&ドロップに対応させようとしているのですが、
ドラッグされて来たデータがどこから来たものかを判別するにはどうしたらいいのでしょうか。
作ろうとしているものはこんな感じです。
ノードをドラッグしてターゲットのノードにドロップすると
ドラッグしたノードがドロップした所の子ノードになる。
ttp://msdn2.microsoft.com/ja-jp/library/system.windows.forms.treeview.itemdrag (VS.80).aspx
現状だとこのアプリケーションを2つ起動させて、
一方のTreeViewから他方のTreeViewへドラッグしてもドロップエフェクトが有効になってしまいます。
ソースで言うとこんな感じのことをするにはどうしたらいいでしょうか。
private void treeView1_DragEnter(object sender, DragEventArgs e)
{
if( ソースもターゲットも自分 )
{
e.Effect = DragDropEffects.All;
}
else // 他のアプリケーションからドラッグされて来た場合
{
e.Effect = DragDropEffects.None;
}
}
984 :
デフォルトの名無しさん :2007/08/08(水) 08:11:40
2つのファイルのタイムスタンプの差を秒単位で取得したいのですが 以下のコードを書いてみました。 DateTime srcTime = DateTime.Now; DateTime dstTime = DateTime.Now; TimeSpan fTimeSpan; int fSpan; // srcFileInfoFileInfo の新しいインスタンスを生成する System.IO.FileInfo srcFileInfo = new System.IO.FileInfo(sourcePath); // タイムスタンプを取得する。 srcTime = System.IO.File.GetLastWriteTime(sourcePath); // dstFileInfoFileInfo の新しいインスタンスを生成する System.IO.FileInfo dstFileInfo = new System.IO.FileInfo(destPath); // タイムスタンプを取得する。 dstTime = System.IO.File.GetLastWriteTime(destPath); // タイムスタンプの差を求める。 fTimeSpan = srcTime.Subtract(dstTime); // タイムスタンプの差を秒の絶対値で取得 ifSpan = System.Math.Abs(fTimeSpan.Seconds); System.Math.Abs(fTimeSpan.Seconds);でタイムスタンプの秒差を絶対値で求めたいのですが fTimeSpan.SecondsのSecondsはint型で返ってきます。 一年間の差があるとして31,536,000がさとなります。 int型の範囲は-2,147,483,648 〜 2,147,483,647です。 となると69年以上差がある場合intの範囲を超えてしまいます。 この場合はどういった処理で求めれば良いのでしょうか?
>>984 MSDN嫁よ。
TimeSpan.Secondsの返す値は-59 ~ 59だ。
986 :
912 :2007/08/08(水) 09:08:48
>>927 ごめんなさい、ちょっとわからないです・・・・・orz
具体的にどのようにしたらいいでしょうか?
>>986 まだやってたのかw
例えば、サンプルのDrawItemの中の
switch (e.Index)
を
listbox1.Items[e.Index] と値1の比較にすればいいんじゃないか?
988 :
912 :2007/08/08(水) 11:02:09
>>987 listbox1.Items[e.Index]を試してみました。が、整数型の値が必要ですと
言われてしまいました・・・
比較方法まで書いてないのは“値”1の型がわかんないからなんだけどな Items[] はobject 型を返すから、ToString()でも Int.parse()でも使って 値1にあわせて比較すればいい。
990 :
912 :2007/08/08(水) 11:17:26
細かく書いてなくてすいませんでした。値1,2ともにInt型です。
switch (int.Parse(listBox1.Items[e.Index].ToString())) { case 値1: myBrush = Brushes.Red; break; ・ ・ とか? もっといいやり方とかもあるかもしれないが、 とりあえず目に見える形で出してから考えるのがいいかなあ
特定のフォルダのバックアップを取るのに、圧縮+アーカイブして別ドライブに保存したいのですが、 何かいいのありますでしょうか? 将来シェアウェア化も考えているので、できればGPL以外だとうれしいうのですが…
誤爆?
994 :
912 :2007/08/08(水) 11:35:20
値1、2ともに定数値が必要だといわれてしまいます。 int 値1,2 = 0; で初期化してるんですけれど、ほかに何か必要ですか?
switchつかわずに素直にifで分岐したらどうですか まず基礎から勉強してくださいこのオタンコナスくん
定数値が必要 ←必要だから言われてる
おいおいSQLに入れた値1はなんだったんだよ
998 :
912 :2007/08/08(水) 13:27:13
すみません。初期値は0ですが、途中のボタンクリックイベントの中のSQLで、値1,2には ちゃんと数値が入ります(値1には0、2には1)。
とりあえず swicth 使うなら0とか1入れてみ if文なら if (int.Parse(listBox1.Items[e.Index].ToString()) == 値1) とかでいいよ
1000 :
デフォルトの名無しさん :2007/08/08(水) 13:43:47
C/C++、マンセー、やっぱ言語はC/C++! _,rr-―''''¨゙゙゙ ̄ ̄ ̄ ̄ ̄`゙゙゙゙゙゙゙゙''ヘi、、 ,,,,-―---、 ,r‐'″ ._,,,, `'lri,!'''″ ゙l .,,,″ ,,r'"` ゙゙l, ゙ヘ, | !アr, .l°.ェ'ニ,コ .| ゚ヘ、 | `'i、 .く_,、vr''″ ., ゙'i、 .,,/ ゙X、 ト ゙!,゛ .,,r‐--、 ,、_,、 .,,,,r‐'″ | } .,,r‐'^’ .|゜ め゙゚“゙゙~゛ |  ̄` .,l゙ | ,i´ ,l゙ ゙!、 ,i´ ,ノ .'┐ ,,-° '=,, /` .゚!, ,,,,r'″ ゙┐ ,l゙ ゚'r, .''''"` │ .,,-''i、 / `''x, .| | .,,r'" .゙┐ ,i´ ~'ヘi,,, | |_,r・″ 'ヘ,、 l゙ `¬--|i,,,,,,,,,,,,,,,,v、r',广 ゙ヘ=@ ,l゙ `゙'ーぃ--r'″ `'―、,,,,/
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。