ふらっとC♯, C#(初心者用) Part17

このエントリーをはてなブックマークに追加
184デフォルトの名無しさん
質問です。
DataGrid1に金額という列があり、その列の合計をDataGrid2の合計という列に
集計させたいのですが、どのようにやればいいでしょうか?
MSDNのDataColumn.Expression プロパティなどを参考にしているのですが
いまいち理解できませんでした・・・・
185184: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["合計金額"];
}
186デフォルトの名無しさん:2007/07/09(月) 11:24:06
シールクラスのシールを外す裏技ってないですか?
187184: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);
}
上記のようにコーティングしています。間違っている部分も多々あると思いますが
なにとぞよろしくお願いします
188デフォルトの名無しさん:2007/07/09(月) 11:28:03
>>184
またお前か
もう来るなって言ったはずだぞ
189184:2007/07/09(月) 11:44:08
ここに書き込むのは自分、初めてなのですが・・・・
190デフォルトの名無しさん:2007/07/09(月) 11:46:16
以前のDataGridバカとは違うはずだけど、>>61と同一人物だと思ってたわ
学校の課題か何かなんだろうか
191184:2007/07/09(月) 12:02:24
学校ではないのですが、会社の課題なのです。

1から初めて自分で調べて課題を解いて行けという感じなのですが
ネットで調べたり、手元にある本だけじゃ限界があり、ここに質問させて
いただきました。
192デフォルトの名無しさん:2007/07/09(月) 12:03:11
リレーション設定できるカラムなさそうだし、Exspressionじゃ解決できないよね
というわけで、ループ処理で合計金額出せばいいだけなんだけど、
>>187じゃ合計金額じゃなく累計になるね
だからわざわざ合計金額にもDataGrid使うような設計しているのか……
193184:2007/07/09(月) 13:53:13
何か良い方法など、ありますかね?
194デフォルトの名無しさん:2007/07/09(月) 14:07:31
毎度合計金額テーブルのレコードをクリアすればいいんだろうけど、
DataGrid使う意味なくなるよ?
課題が糞なのか>>184の脳みそが糞なのか
195デフォルトの名無しさん:2007/07/09(月) 20:08:37
177です。
MSDNのヘルプ(慣れが必要なのか?)を読めば何とかなるのですね。
本はさらっと読めそうな初心者本買って来ました。
http://www.amazon.co.jp/dp/4797332018/
まずはIDE落としてきて動かしてみます。
アドバイスありがとうございました。
196デフォルトの名無しさん:2007/07/09(月) 22:19:13
ヘルプはほんとに分かりやすいけどクラスの使い方が書いてあるだけだから
言語とかの基本的なところはヘルプでは分かりにくい
197デフォルトの名無しさん:2007/07/10(火) 14:00:27
こなた処刑
http://www.nicovideo.jp/watch/sm521773

こなたの絵をエアガンでバンバン撃つ動画が50位くらいに入ってたんだが
権利者削除されちまった
198197: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の行をクリックするとその行を削除するようにしたいんだけど
どのようにコーティングすればいいかな?
202デフォルトの名無しさん:2007/07/10(火) 16:52:50
クリックするとその行を削除するようにコーディングしたら?
203デフォルトの名無しさん:2007/07/10(火) 16:53:39
ifとかforeachとかちゃんと使えば書けるだろ
204デフォルトの名無しさん:2007/07/10(火) 19:46:56
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 だと動作がかくかくしてしまいます。
このような処理ではいけないのでしょうか?
205デフォルトの名無しさん:2007/07/10(火) 19:55:35
PictureBoxが赤い×印で表示されることがあるらしいんだけど
どうしたら再現できますか?
206デフォルトの名無しさん:2007/07/10(火) 20:01:20
>>204
全体像がいまいち掴めないから何とも言えないけど
> while (!ar.IsCompleted) { }
これはまずいでしょ。
どうせ待機するなら this.Parent.Invoke(...); でいいんじゃないの?

>>205
描画処理中に例外を投げるとかじゃなかったっけかな。
あいまいな記憶だけど・・・。
関係ないが最近黒字に赤の斜め格子模様っていう現象に遭遇した。
なんだったんだろ。
207デフォルトの名無しさん:2007/07/10(火) 20:07:22
>>206
お返事ありがとうございます。
this.Parent.Invoke(...); だと、シングル CPU の時に、グラフウィンドウのグラフは
描画されますが、メインの GUI の方に制御が戻ってこないのです。
( グラフのウィンドウもクリックしても無反応 )



208デフォルトの名無しさん:2007/07/10(火) 20:54:05
どう考えても同期とか非同期とかまったく無関係なところでのバグだな。

感にたよって原因を「あて推量」したくなる気持ちは分からないでもないが
(いや本当は理解できないが。。)それじゃ賭博と変わらん。

原因に関して仮説を立てるのはいいんだが、立てたらそれを実証しなきゃ。
人に聞くのははそれからじゃないの順番として
209デフォルトの名無しさん:2007/07/10(火) 21:03:06
>>208
>>204 はそれを実証しようとしてるジャマイカ?
210デフォルトの名無しさん:2007/07/10(火) 21:06:50
どこがやねんw

単に思うように動かないコードがあって、
それには自分があまり自身がない技術(スレッディング)が使ってあるから
原因はそれに違いない、っていう非科学的な思い込みが書いてあるだけじゃん。
211デフォルトの名無しさん:2007/07/10(火) 21:21:07
>204
全貌が見えないので何やりたいんだかよくわからんが、
while (!ar.IsCompleted) { }
のループの途中でSleepが入ってなくてBusyLoopになってる予感。
ちょっとだけThread.Sleep(10)とか入れとけ。
212デフォルトの名無しさん:2007/07/10(火) 21:28:35
処理が終わるまでwhileループを回してたら処理も重くなるわな
213デフォルトの名無しさん:2007/07/10(火) 21:43:46
なぜかビジーループなのに画面は反応するらしいぞ。
214デフォルトの名無しさん:2007/07/10(火) 22:39:03
処理が終わるまで待機するやつを呼び出せばいいんじゃないの?
215デフォルトの名無しさん:2007/07/10(火) 23:17:03
それはないよ。
216デフォルトの名無しさん:2007/07/10(火) 23:30:07
>>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 に処理を戻すようにするのでしょうか?
217デフォルトの名無しさん:2007/07/10(火) 23:31:14
てかなんでthisじゃなくてParentでBeginInvokeとかしてんの?
218デフォルトの名無しさん:2007/07/10(火) 23:32:32
while (!ar.IsCompleted) { Thread.sleep(10); }
はお勧めできないと書かれていたから、
while (!ar.IsCompleted) { }
としたのだな?





いっぺんしんでこい
219デフォルトの名無しさん:2007/07/10(火) 23:34:19
ふらっとなんだからそこは穏便に……
220デフォルトの名無しさん:2007/07/10(火) 23:49:17
>>216
非同期で任せて自分は終了。
221デフォルトの名無しさん:2007/07/10(火) 23:49:36
>>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;
}

222デフォルトの名無しさん:2007/07/10(火) 23:53:45
>>218
お前すごいなw
223デフォルトの名無しさん:2007/07/10(火) 23:55:12
>>216
>while (!ar.IsCompleted) { Thread.sleep(10); }
>という使い方は MSDN で「ポーリング」として解説されていて、同期処理と同じだからあまりおすすめ
>できないと書かれていました。
これの意味がわかんない 誰か教えて
やりたいのはポーリングじゃないの?
だったらそれでいいんじゃない?
同期処理と同じ?ここ意味わかんない
224デフォルトの名無しさん:2007/07/11(水) 00:01:06
>while (!ar.IsCompleted) { Thread.sleep(10); }
実質同期と変わらんだろ、どう見ても。
225デフォルトの名無しさん:2007/07/11(水) 00:02:20
>>223
MSDNに書いてある意図はよくわからんけど
とりあえずその書き方はスレッドコンテキストの切り替えが頻繁に起こるからあまりよろしくない。
ある状態になるまで待機するというようなときは普通はイベント(EventWaitHandle)を使う。
226デフォルトの名無しさん:2007/07/11(水) 00:08:52
>>224,225
確かにw
意味無いな
227デフォルトの名無しさん:2007/07/11(水) 00:12:51
意味ないとまでは行かないけど疑問が残る。
228デフォルトの名無しさん:2007/07/11(水) 01:19:23
>やりたいことは単純に、GUI からスタート・ストップをしたいだけです

なんだから、計算&描画は別スレッドでやるべきなんじゃないのさ?
>>216でしょ結局。
メソッドとスレッドを混同する(初学者に)よくある間違いでは?
229デフォルトの名無しさん:2007/07/11(水) 01:20:37
× >>216でしょ
>>220でしょ
230デフォルトの名無しさん:2007/07/11(水) 01:47:26
>>228
いや
>>204がベースになってる限りマルチスレッドにする意味が分かんないってことは?

・重い(計算&描画)と思われる処理をFormスレッドで行っている
・whileで描画の待ちを行っているため、別スレにする意味がよく分からない
231デフォルトの名無しさん:2007/07/11(水) 06:21:46
シングルスレッドにするのが一番よさそうだな
232デフォルトの名無しさん:2007/07/11(水) 08:33:55
>>231

シングルスレッドだと

>やりたいことは単純に、GUI からスタート・ストップをしたいだけです

ができないんじゃマイカ?描画中でも止めたいんだろ。
BackGroundWorker を使うのが一番楽だと思うが。
233デフォルトの名無しさん:2007/07/11(水) 09:06:57
シングルスレッドだとDoEventsを呼ぶ方法と、
処理を小分けにしてタイマーで処理する方法がある。
C#ならYieldで処理を反転させる変体チックな方法がおすすめ。

スレッドを使うならダブルバッファを使うべきだろう。
234デフォルトの名無しさん:2007/07/11(水) 09:49:13
>>233
単純にやるには DoEvents が一番楽でシンプルですね。
ありがとうございます!
235デフォルトの名無しさん:2007/07/11(水) 10:31:09
ダブルバッファってのはなんで?
あ、単にバックの処理で描画が重くなるからってことかな?
236デフォルトの名無しさん:2007/07/11(水) 12:44:15
すいません、VC#でmdbファイルをデータベースとして指定したのですが、
いざDataGridViewで表示させようとすると、パスワードが違います と、例外エラーがでてしまいます。
パスワードは接続時に入力したのですが…
237デフォルトの名無しさん:2007/07/11(水) 13:03:17
接続時っていつのことだ?
それがDbConnection.Open時じゃなくプロジェクトに追加時ってだけの意味なんだろうか
とりあえず保存された接続文字列見てPassword=hogehogeという文字があるかどうか
確かめてみたほうがいい
238236:2007/07/11(水) 14:43:22
>>237

一度削除して、もう一度データベース接続を作った際に
「重要情報を接続情報に含めます」を選んだらつながりました・…

お手数をおかけしました。まだまだよくわかってないです。。。@C#三日目
239デフォルトの名無しさん:2007/07/11(水) 15:00:06
ToolStrip を持つ Form を作っています。
この Form の AutoScroll を True にして、フォームを下側にスクロールすると ToolStrip が
固定されず上にスクロールしてしまいます。
これを固定する方法はありませんか?
ステータスバーもスクロールしていってしまいます。
240デフォルトの名無しさん:2007/07/11(水) 15:17:44
フォームの上にパネル貼ってパネルをオートスクロールにしたらいいんじゃね
241デフォルトの名無しさん:2007/07/11(水) 15:24:29
ウィンドウのサイズを変更したら、フォームとかの大きさが自動的にかわるのってどうするんでしょうか?

javaならflowlayoutを指定すればよかったのですが、C#はなんか違うようで。。。
flowLayoutコンテナにいくつかコンポーネントをのっけても何も反応がなかったのですが、
何かやりかた間違ってるでしょうか。

242デフォルトの名無しさん:2007/07/11(水) 15:25:06
「ウィンドウのサイズを変更したら、フォームとかの大きさが自動的にかわる」

なんのことかさっぱりわからん。
243デフォルトの名無しさん:2007/07/11(水) 15:25:41
すいません、テキストフィールドなど です。
本人の修正より早い光速突っ込みありがとうございます。
244デフォルトの名無しさん:2007/07/11(水) 15:29:58
Anchorプロパティを使う
245デフォルトの名無しさん:2007/07/11(水) 15:34:02
DockかAnchorだな。
246デフォルトの名無しさん:2007/07/11(水) 15:56:18
なるほど。調べてみます。
ありがとうございます。
247デフォルトの名無しさん:2007/07/11(水) 15:57:36
mdbファイルをデータベースとして扱いたいのですが、
VC#Express上ではデータベースエクスプローラに追加して接続できたのですが、
実際にプログラムでつなごうとするとできません(涙

持っている入門書ではSQLServerにつなげる方法しか書いてなかったのですが、
mdbに接続するにはどうすればいいでしょうか?
248デフォルトの名無しさん:2007/07/11(水) 16:12:20
↑の件ですが、
こんな感じでかいてみたんですが…
何か間違ってますでしょうか?

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";
249デフォルトの名無しさん:2007/07/11(水) 16:58:34
>>248
自分で接続文字列にOLDDBって書いてるじゃないか
SqlClientじゃなくOleDb使わないと……
250デフォルトの名無しさん:2007/07/11(水) 17:09:11
>>249
ありがとうございます。 いけましたorz


パスワード付きのmdbの場合は"Database Password=hoge;"といった記述を追加すればいい
といったことを見つけたのですが、
実際やってみると「インストール可能なISAMドライバが見つかりませんでした」と表示されました。。。。
これはいったいなんなのでしょうか?
251デフォルトの名無しさん:2007/07/11(水) 17:23:36
接続文字列が間違っているだけ
VSに任せて自分で書こうとしない方が良い
252250:2007/07/11(水) 19:20:16
>>251
データの追加をする際は、どうしても手動でDBに繋がないといけないと思ったのですが・・・
253デフォルトの名無しさん:2007/07/11(水) 19:20:54
日付等のカレンダーのフォントサイズって大きくできる? ぐぐったけど以外になさげ
254253:2007/07/11(水) 19:22:46
うわマジすまん、フォントサイズ変えたらいけるやん
何か勘違いしてた まじすまん
255253:2007/07/11(水) 19:29:17
すまん、やっぱりカレンダーを作った際に「□今日 2007/07/17」の部分の左端が切れてしまう。
何かいい対処法ないかな。
サイズ指定もなぜか無視されるし
256デフォルトの名無しさん:2007/07/11(水) 20:19:57
>>252
そうじゃなくて、データベースエクスプローラ(サーバーエクスプローラ)使っているなら
プロパティで接続文字列見れるじゃない
257252:2007/07/12(木) 08:51:27
>>256
プロパティで接続文字列見えるのですが、
パスワードだけはなぜかみれないんです。

んで、コピペすると「パスワードが違います」とのExceptionがorz
258デフォルトの名無しさん:2007/07/12(木) 10:03:36
コピペじゃなくて設定したパスワードを入れろよ
259デフォルトの名無しさん:2007/07/12(木) 10:18:03
接続文字列云々はスレ違いだから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から読み込んで表示したいのです。
261デフォルトの名無しさん:2007/07/12(木) 13:22:05
DataGridViewで我慢してください
262デフォルトの名無しさん:2007/07/12(木) 16:47:28
string [] A,B
があるとき、Aの要素のうちで、Bの要素ではないものを取り出すにはどうしたらいいでしょうか?

A = ["a","b","h","e"]
B = ["b", "k", "e","i"]

のとき、 "a" と "h"がほしいのです。
263デフォルトの名無しさん:2007/07/12(木) 16:51:51
ボタンをクリックしたとき

if (!string.IsNullOrEmpty(textBox1.Text)
{
処理
}

とするか

if (string.IsNullOrEmpty(textBox1.Text))
{
return
}
処理

どちらの方が良いでしょうか
264デフォルトの名無しさん:2007/07/12(木) 16:57:21
>>263
どっちでもいいです。見やすいほうにしてください
265デフォルトの名無しさん:2007/07/12(木) 17:04:27
Delphi言語(ObjectPascal時代)からの移行ですが、かなり戸惑っています。VS2005 Standardを
購入してかなり経ちますがコーディング手法の違いで一向に進みません。どちらも使っていると
言う人が居たらご教示願いたいのですが。宜しくお願いいたします。
266デフォルトの名無しさん:2007/07/12(木) 17:05:58
>>262
var c = a.Except(b);
267デフォルトの名無しさん:2007/07/12(木) 17:31:07
いやなやろーだ
268デフォルトの名無しさん:2007/07/12(木) 17:35:53
>>262
string[] C = Array.FindAll<string>( A, delegate( string str )
{
    return Array.IndexOf<string>( B, str ) == -1;
} );

>>263
どっちでもいい
ちなみにtextBox1.Textはnullにはならないよ
269デフォルトの名無しさん:2007/07/12(木) 17:55:03
前にここのスレで聞かれてた様なな気がするのですが、
Delegateを使って(別にDelegateじゃなくてもいいけど)stringの中から
コードを実行する方法ってありますか?
もしあればヒントをいただけるとうれしいのですが…
270デフォルトの名無しさん:2007/07/12(木) 18:00:42
言っている意味がわからんが、スクリプト言語のevalみたいな物が欲しいってことか?
271デフォルトの名無しさん:2007/07/12(木) 18:03:34
>>270
evalっぽいのはJScriptを使った方法ならわかるのですが、
JavaScriptのFunctionコンストラクタみたいのが無いかなと
思ったんですが、さすがにインタプリタみたいには行かないですかね?

272デフォルトの名無しさん:2007/07/12(木) 18:11:13
CSharpCodeProvider
273デフォルトの名無しさん:2007/07/12(木) 18:22:10
>>272
やっぱり一度exeかdllにしないとだめですか…
ありがとうございました。
274デフォルトの名無しさん:2007/07/12(木) 19:03:14
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

275デフォルトの名無しさん:2007/07/12(木) 19:23:36
IronPython使えよ。
276デフォルトの名無しさん:2007/07/12(木) 19:42:38
Emit
インラインアセンブラ状態になるけどw
277デフォルトの名無しさん:2007/07/12(木) 21:14:19
>>269
コードとデータを融合したソースは書かないほうがいいよ。
メタデータには介入しないほうがいい

それをやるのは変態プログラマで、天才でもなんでもない。
278デフォルトの名無しさん:2007/07/12(木) 21:54:17
リフレクション禁止?
279デフォルトの名無しさん:2007/07/12(木) 22:28:52
>>277
いや、ちょっとした実験やるのにもわざわざVS立ち上げるのも面倒なので、スクリプト的に実験できる
ツールを作りたかっただけなのですが…
それならCSharpCodeProvider使えと言われればそれまでなんですけどね orz
280デフォルトの名無しさん:2007/07/12(木) 23:18:41
つまりこういうのか?
http://www.codeproject.com/csharp/csi.asp
281デフォルトの名無しさん:2007/07/13(金) 00:17:55
>>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です。
何回でも取得できるようにしたいのですが、取得の仕方が間違ってるのでしょうか

283282:2007/07/13(金) 01:26:41
すみません。自己解決しました。

SelectedIndexChangedイベントは選択時、選択解除時の二回呼ばれるんですね。
Clickイベントで処理すると、無事取得できました。
284デフォルトの名無しさん:2007/07/13(金) 01:53:29
>>265
普通にDelphi理解してれば一緒。
戸惑うレベルであればどの言語に移っても一緒。
285デフォルトの名無しさん:2007/07/13(金) 20:53:26
vfwとBITMAPINFOHEADERについて質問させてください。
今AVIからBMPを取り出す処理を書いているのですが、
PAVIFILE、PAVISTREAM、PGETFRAMEは単純にIntPtrに
置き換えていいのでしょうか?
また、BITMAPINFOHEADERとImageへの相互変換する方法
について、何かヒントをいただけないでしょうか。
286デフォルトの名無しさん:2007/07/13(金) 23:57:05
>>285
自前
287デフォルトの名無しさん:2007/07/14(土) 02:02:47
>>285
つーかそれそC#の話題じゃねーだろ。
288デフォルトの名無しさん:2007/07/14(土) 02:31:23
>>285
ポインタはP/Invokeで適当に型合わせてくれるみたいだから、IntPtrでいいと思う。
構造体メンバを参照したい場合は、それに合わせた型をC#側で作る必要があるけど。

BitmapはImage.FromHBitmap()でHBITMAPからつくれるから、
Win32APIでHBITMAPこさえればなんとかなんじゃない?
289デフォルトの名無しさん:2007/07/14(土) 03:21:57
出力仮引数(out修飾子)の利点って何でしょうか?
どういう時に使われるものなのでしょうか?
教えてたもれ。
290デフォルトの名無しさん:2007/07/14(土) 03:31:56
メソッドから返値以外の出力も得たいとき
291デフォルトの名無しさん:2007/07/14(土) 04:08:11
>>290
説明が足りなくて申し訳ない。
参照渡しで実現できるのに、
out修飾子が存在する理由(=メリット)が
わからないのであります。
292デフォルトの名無しさん:2007/07/14(土) 04:28:26
outは出力用。メソッド内で代入する。
refは入力用。メソッドに渡す前に初期化する。
293デフォルトの名無しさん:2007/07/14(土) 06:46:22
outは渡す前に値を代入するとエラーになる
あえて制限を増やして用途を明らかにする働き
294デフォルトの名無しさん:2007/07/14(土) 08:01:00
>>291
outの場合refと違って変数を初期化しないで受けられるのです。
295デフォルトの名無しさん:2007/07/14(土) 08:38:02
>>288
ありがとうございます。
HBITMAPについてはちょっとわからないので調べてみます。
296デフォルトの名無しさん:2007/07/14(土) 08:55:26
refの場合は未初期化で変数を渡すとコンパイルエラーが出る
297デフォルトの名無しさん:2007/07/14(土) 09:02:15
>>293
>outは渡す前に値を代入するとエラーになる
なりません
298デフォルトの名無しさん:2007/07/14(土) 10:33:33
みなのものかたじけない。
メリットという点で言うと
>あえて制限を増やして用途を明らかにする働き
ということで理解しました。
299デフォルトの名無しさん:2007/07/14(土) 11:26:58
bool TryGetHoge( out Hoge hoge ){}
という形でよく使うね
300デフォルトの名無しさん:2007/07/14(土) 11:27:40
>>298が引用している>>293は正しくないからな
制限ってのは callee 側で代入が必須になるという制限であって
caller で代入ができないってことじゃないぞ
301デフォルトの名無しさん:2007/07/14(土) 13:27:31
[Out]属性だけが自動的に適用される。
302デフォルトの名無しさん:2007/07/14(土) 14:30:22
何が言いたいんだ。

エスパー以外の人間にも意味が伝わる日本語書けよ。
お前さんの文章こそ「アウト」だよ。
303デフォルトの名無しさん:2007/07/14(土) 14:32:34
日本語でおk
304デフォルトの名無しさん:2007/07/14(土) 14:33:31
野球はツーアウトからです
305デフォルトの名無しさん:2007/07/14(土) 15:25:26
void Add(ref int lx, ref int ly, int rx, int ry){lx += rx; ly += ry;}
みたいに、もともとの値を使用したいときにrefを使う
呼び出し側で代入必須っていうのは必然的にそうなるだけで本質じゃない
306デフォルトの名無しさん:2007/07/14(土) 15:47:50
もうその話は終わりましたよ
307デフォルトの名無しさん:2007/07/14(土) 16:33:20
値型って宣言時に必ずゼロに初期化されますが、。
宣言してすぐoutパラメータとして渡した場合ってどうなるんでしょうか?
どうせメソッドの中で初期化し直さなければならないので宣言時に初期化してしまうと
二重初期化になってしまう気がするんですが。
308デフォルトの名無しさん:2007/07/14(土) 16:36:17
適当に最適化されます。
309307:2007/07/14(土) 16:41:33
>>308
あれ?
宣言時に初期化されるってのは勘違いだったようです。
と書こうとしたらレスが。
やっぱ初期化されるんですか?
310デフォルトの名無しさん:2007/07/14(土) 16:42:42
ローカル変数は初期化しないと値読めないよ
フィールドは自動で初期化されるけど、宣言してすぐoutパラメータとして渡すなんてことはできないし
311307:2007/07/14(土) 16:46:43
>>310
なるほど、自動的に初期化されるのはフィールドでしたか。
ごっちゃになってたみたいです。
いずれにせよ>>307の質問は見当違いだったわけですね。これですっきりしました。
312デフォルトの名無しさん:2007/07/14(土) 18:31:20
されない
メンバはされるが
っていうか、自動変数は初期化されないよ
313デフォルトの名無しさん:2007/07/14(土) 18:32:49
ぎゃあ、亀亀
314デフォルトの名無しさん:2007/07/14(土) 18:57:55
ワロタ
315デフォルトの名無しさん:2007/07/14(土) 20:37:35
string s = "ゆーまchan"
(sjis)を文字コードに変換したいんですが、どんな方法が考えられますか?
316デフォルトの名無しさん:2007/07/14(土) 20:38:34
日本語でおk
317デフォルトの名無しさん:2007/07/14(土) 20:56:25
>>315
一文字ずつ取り出せるだろ。
318デフォルトの名無しさん:2007/07/14(土) 21:10:13
string s = "ゆーまchan";
Encoding enc = Encoding.GetEncoding( "shift_jis" );
byte[] b = enc.GetBytes( s );

ってことか?
まあ日本語でおkとしか言いようがない
319デフォルトの名無しさん:2007/07/14(土) 21:11:36
ヒント:Encoding
320デフォルトの名無しさん:2007/07/14(土) 21:46:41
VC#2005EE を使用しています。
Stringとstringの違いをズバリ教えてください。
321デフォルトの名無しさん:2007/07/14(土) 21:54:40
つ【MSDN】
322デフォルトの名無しさん:2007/07/14(土) 22:02:49
>>321
回答ありがとうございます。
stringはStringの別名で全く同じってことで理解縞々。
323デフォルトの名無しさん:2007/07/14(土) 22:54:00
>>322
まぁjava&vc++やってる俺からすっと新しい表現だけどな。
324デフォルトの名無しさん:2007/07/14(土) 22:55:40
ふと疑問に思ったんですけど、
デリゲート型変数に登録してあるメソッドを削除する場合のnewってどんな意味合いがあるんですかね?
325デフォルトの名無しさん:2007/07/14(土) 23:18:14
意味不明です。
326デフォルトの名無しさん:2007/07/14(土) 23:33:36
すいません、こんな感じの
delegate void Sample();

class test
{
public event Sample sample;

public void MethodA()
{
sample += new Sample(MethodB);
sample -= new Sample(MethodB); ←ここのnew
}

public void MethodB()
{
}

}

です。
327デフォルトの名無しさん:2007/07/14(土) 23:48:04
参照が違っても同じと判断されれば消される
328デフォルトの名無しさん:2007/07/14(土) 23:52:06
>>326
それはメソッドをデリゲートにしてるだけ。
329デフォルトの名無しさん:2007/07/14(土) 23:55:43
違和感があるなら

sample += MethodB;
sample -= MethodB;

でおk
330デフォルトの名無しさん:2007/07/14(土) 23:58:35
その書き方ができるようになったのは、C#2.0からだったかな。
331デフォルトの名無しさん:2007/07/15(日) 00:03:27
ただ単に、+=とー=の記述を会わせただけじゃない?

デリゲートは本来ユーザが書かなきゃいけないことをショートカットして
書いてるようなもんで複雑な部分ははコンパイラがやってくれている(属性やyieldみたいに)。
MSがわかりやすいように仕様を合わせたものと思われ
332デフォルトの名無しさん:2007/07/15(日) 00:07:30
デリゲートのnewって実際に何かしらヒープに確保されてるの?
333332:2007/07/15(日) 00:11:19
よく考えたら当たり前だったスマソ
334デフォルトの名無しさん:2007/07/15(日) 00:45:39
エスパーしてみると
delegateVariable -= new HogeDelegate(Hoge);
とかのnewのことをいってるんじゃまいか?
335デフォルトの名無しさん:2007/07/15(日) 00:46:33
ぎゃあ、亀亀
336デフォルトの名無しさん:2007/07/15(日) 01:09:04
ワラワズ
337324=326:2007/07/15(日) 01:15:03
やっぱり記述をあわせてるだけっぽいですか。実はまだ質問があって、

インスタンス生成したときメソッドをデリゲートに登録しておけば、
インスタンス変数に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回ずつ呼ばれるっぽいです。
リスト構造っぽいのを作るのは楽なんですが、-=やり損ねるとガベージコレクタしてくれない・・・
338デフォルトの名無しさん:2007/07/15(日) 01:18:36
デリゲートはCombineすることが可能。
また、メンバ関数が元になった、デリゲートはインスタンスの参照を保持している。
339デフォルトの名無しさん:2007/07/15(日) 01:21:34
当たり前だろう、何が疑問なのかわからん。
340デフォルトの名無しさん:2007/07/15(日) 02:23:01
しかし、参照全部外したつもりでもdelegateから-=するの忘れてると、
GCされないというのはなんか面倒だな。
しかも、delegate中にしか参照ないから、-=しにくいし。
ファイナライザに-=書いたりしてもダメそうだし。
341デフォルトの名無しさん:2007/07/15(日) 02:33:10
delegate自体をどこかから参照してなければ
問題ないんでないの?
342デフォルトの名無しさん:2007/07/15(日) 03:43:39
>static public Sample MyDelegate; 

ここをstaticにしてるのがGCされない原因じゃねえか?
-= しなくてもMyDelegateがGCされれば連鎖的にGC対象になるはず。
343デフォルトの名無しさん:2007/07/15(日) 09:53:00
>>337
デリゲートはMulticastDelegate クラス
中身が知りたければ プログラミング .NET Frameworkあたりを参照するか
中間言語に落としてみればいいんでない?
344デフォルトの名無しさん:2007/07/15(日) 13:24:56
コンストラクタから引数の違う別のコンストラクタに移らせるとき、たとえば
MyClass() : this(new Hoge())
のようにしますが、このとき新しく作ったHogeオブジェクトの何らかのプロパティを変更してから
別のコンストラクタに移らせるようにするにはどうすればいいですか?
345デフォルトの名無しさん:2007/07/15(日) 13:26:24
初期化用のprivateメソッドを作ってそれを呼ぶ。
346デフォルトの名無しさん:2007/07/15(日) 14:31:17
>>326
デリゲートは自分自身のリストみたいな構造になってるからわかりにくいのは確かだね。
文字列が文字列自身のリストになってるような奇妙な感じだ。

でも、たとえば
sample -= new Sample(MethodB);
↑は単にリストから「どの」アイテムを削除するかを指定してるだけなんだよね。
347デフォルトの名無しさん:2007/07/15(日) 15:55:09
>>341
まあそうなんだが、
AがBとかCとかをいろいろlistenしていて、
その後Aだけ破棄したいという場面なんかでは、
いちいちlisten解除しなくちゃいけなくてめんどくない?
listen先を全部記録しておかないといけないし。
348デフォルトの名無しさん:2007/07/15(日) 16:08:07
>>347
外部からeventを操作するなら+= -=をひとつずつ使うことになるが、
delegateをなまで使うなら
sample = null; // 全部破棄
とか
sample = new Sample(MethodB); // 全部破棄してMethodBだけにする
などやりたい放題できる。
349デフォルトの名無しさん:2007/07/15(日) 16:13:21
>>346
普通の実装ではこうなのだろうけど
DelegateList del = new DelegateList();
del.Add(new DelegateItem(MethodA));

delegateの特徴として
フォーム等のコントロールでeventとして大量に準備される。
そのほとんどでリスナーは登録されないつまり使用されない。
なので恐らく使用しない状態でオブジェクト(リスト)を
生成した状態にしたくなかったのだろう。
350デフォルトの名無しさん:2007/07/15(日) 18:14:06
>>349
フォームのイベントでははじめはデリゲートオブジェクトは準備されてない
add/removeイベントアクセサを自前で実装してメモリを節約してる
イベントに対する+=や-=はそのアクセサを呼び出すための特別な演算子で、デリゲートとはまた別
351デフォルトの名無しさん:2007/07/15(日) 19:39:39
プロパティで配列をnewして返すなとMSDNには書いてあるけど、
yieldでイテレータを返すのはどうなんだろう
352デフォルトの名無しさん:2007/07/16(月) 01:02:57
質問です。
Bitmapからbyte[]をMarshal.Copyで取り出したのですが、1pxあたりの情報の
入り方は16bppRGBの時は空RRRRRGGGGGBBBBB、32bppRGBの時は
空*8、R*8、G*8、B*8という感じで合ってますでしょうか?
また、16bppRGBのとき、一度shortに直してから>>や<<でシフトして
取り出すよりも効率のいい方法はあるのでしょうか?
353デフォルトの名無しさん:2007/07/16(月) 01:14:32
後半のことなら unsafe で可能だが
速度は大して変わらんかと
354デフォルトの名無しさん:2007/07/16(月) 01:23:18
>>352
取り出し方にこだわらないなら
これが参考になると思われ
http://www.codeproject.com/cs/media/csharpgraphicfilters11.asp
355デフォルトの名無しさん:2007/07/16(月) 01:39:51
>>353
おとなしく>><<でがんばります。

>>354
24bppRGBの取り出し方はわかるのですが、
32bppRGBと16bppRGB555(さっき555付け忘れた orz)の
RGBの入り方がわからなくて…
356デフォルトの名無しさん:2007/07/16(月) 15:56:28
テキストや画像などに関連づけされたアプリのパスを取得することって出来るのでしょうか?
357デフォルトの名無しさん:2007/07/16(月) 16:27:04
>>356
C# 関連付け
358デフォルトの名無しさん:2007/07/16(月) 16:31:34
>>357
セックス
359デフォルトの名無しさん:2007/07/16(月) 16:32:22
間違えた、サンクス
360デフォルトの名無しさん:2007/07/16(月) 17:31:41
Process.Start(静的動的共に)でCUIアプリを呼び出す際にコマンドプロンプトウィンドウを最小化した状態で呼び出すにはどのようにしたら良いのでしょうか。
まさかショートカットを作ってそこから?
361デフォルトの名無しさん:2007/07/16(月) 17:44:11
Process.StartInfoのメンバを参照
362360:2007/07/16(月) 17:56:02
StartInfo.WindowStyleプロパティですね。
StartInfo.CreateNoWindowに気を取られて気付きませんでした。
ありがとうございます。
363デフォルトの名無しさん:2007/07/16(月) 18:00:23
8の倍数を得るメソッドとかってありますか?
100 を与えると 108 か 92 が得られるようなものです。
364デフォルトの名無しさん:2007/07/16(月) 18:01:03
>>363
指定した数の倍数ですね。
365デフォルトの名無しさん:2007/07/16(月) 18:02:26
>>363
(100 / 8 * 8)
366デフォルトの名無しさん:2007/07/16(月) 18:06:48
>>365
367デフォルトの名無しさん:2007/07/16(月) 18:12:42
これ→ >>363 何?
頭にぼうふらわいてるんじゃ?
368デフォルトの名無しさん:2007/07/16(月) 18:16:17
CoCreateInstanceを使用して得られたIntPtrを他の
interfaceにキャストするにはどうしたらいいでしょうか?
369デフォルトの名無しさん:2007/07/16(月) 18:57:14
>>363
ぼくのほしいプログラムつくってくれるかんすうありますか?
370デフォルトの名無しさん:2007/07/16(月) 19:09:31
レジストリから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"
と二つとも消えます。
371デフォルトの名無しさん:2007/07/16(月) 19:16:12
>>370
途中の \\ がなぜ \\ なのかはわかる?
それを考えた上で以下を読むといいと思うよ。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/csspec/html/vclrfcsharpspec_2_4_4_5.asp
372デフォルトの名無しさん:2007/07/16(月) 19:24:39
最近 C#に無関係な質問が多いすぎるな。
マ板でC#って名前だけのスレみたいだぜ。
373デフォルトの名無しさん:2007/07/16(月) 19:27:54
それがなにか?
374デフォルトの名無しさん:2007/07/16(月) 19:41:46
>>371
\\は知っていましたが、リンク先を見て理解しました。
IEのパスを二重引用符で囲んでいるのですね。
ありがとうございました。
375368:2007/07/16(月) 20:17:41
すいません、事故解決しました。
CoCreateInstanceを使わずにActivator.CreateInstanceでいけました。
376デフォルトの名無しさん:2007/07/16(月) 22:26:09
そういえばエラープロバイダーを使ったアプリって見たこと無いね
377デフォルトの名無しさん:2007/07/16(月) 22:37:43
インターフェースってメソッドに実装が書かれていないクラスって感じですが
これって何に使うの?
インターフェースを利用する場合は実装を利用側で書くと思いますが
だったら最初からクラスのメソッドに実装書けば?と思ってしまうのですが
インターフェースが無いと厳しいケースってどんな時?
普通にクラスに実装書けば?と思ってしまうのですが・・・
378デフォルトの名無しさん:2007/07/16(月) 22:46:31
多重継承ができないからインタフェースでお茶を濁したって感じかな
379デフォルトの名無しさん:2007/07/16(月) 22:56:49
どうせ実装を書くんならインターフェースなんて入らない気が・・・
380デフォルトの名無しさん:2007/07/16(月) 22:57:55
実装が存在しなくても、あたかも存在するかのようにプログラムを組める。
381デフォルトの名無しさん:2007/07/16(月) 22:58:17
適当な表現で悪いけど、
インターフェースは制約というか実装の義務ですな。

あるクラスAから別のクラスBを使いたいとき、
最低限実装して欲しいメソッド等をインターフェースで書いておく。
インターフェースの良いところはそのまた別のクラスC、D、E
などでもきちんとインターフェース実装していたらクラスAを変更しなくても
使えることかな? まあ実装がただしくなかったら…
多重継承関連でよく話が出るけど、若干違う感じもする。
382デフォルトの名無しさん:2007/07/16(月) 23:02:57
実装内容がどれも同じとは限らないだろ。
実装内容は違うが振る舞いは同じで同じように扱いたいという場合、
インターフェイスは有効。
383デフォルトの名無しさん:2007/07/16(月) 23:20:23
実装は他の人任せで、インターフェイスだけでプログラム組めるのが良いのよ
384デフォルトの名無しさん:2007/07/16(月) 23:22:27
純粋仮想関数との違いはどう説明する
385デフォルトの名無しさん:2007/07/16(月) 23:25:49
抽象クラスよりもインターフェイスを使ってください by Microsoft
386デフォルトの名無しさん:2007/07/16(月) 23:33:13
プラグイン機能をつけるとき。
387デフォルトの名無しさん:2007/07/17(火) 00:59:26
/ キーを押したときに Form#KeyDown に送られてくる KeyEventArgs#KeyCode の値が良く分かりません。
Keys.Divide ではないようなのですが、これは一体何が送られてきているのですか?
388デフォルトの名無しさん:2007/07/17(火) 03:37:13
多重継承ないからインターフェイスがあるってあほかw
389デフォルトの名無しさん:2007/07/17(火) 04:43:55
コンソールアプリで引数を渡されたエスケープ文字を
そのままエスケープ文字として使用したいのですが、
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")として
とりあえず求める結果を得られてはいますが、
なんとも格好悪くて、どうにかうまく扱う方法はありませんでしょうか?
390デフォルトの名無しさん:2007/07/17(火) 04:56:10
C#でキーボードから打ち込んだキーを直接変数に保管したいんですけど
どうしたらいいですか?
391デフォルトの名無しさん:2007/07/17(火) 04:57:18
KeyPress
KeyDown
392デフォルトの名無しさん:2007/07/17(火) 10:51:04

テーブルに読み込んだデータの更新ってどうすればいいのでしょうか?

this.TestInfoTableAdapter.Fill(this.msoftDataSet.TestInfo);

で読み込んだデータを最新の情報に更新したいのですが…
393デフォルトの名無しさん:2007/07/17(火) 11:02:24
>>389
エスケープ文字のことをよくわかってない。
文字列として確定したらもうそれはエスケープとしては機能しない。
394デフォルトの名無しさん:2007/07/17(火) 11:24:34
すまん。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";
みたいな感じでしていしたらいいのでしょうか?

395デフォルトの名無しさん:2007/07/17(火) 11:56:04
順番守って適当な名前を付けていけば良かったような気がする
comm.Parameters.Add("unk", OleDbType.Integer);
396デフォルトの名無しさん:2007/07/17(火) 15:16:24
現在のIMEの状態を取得、または設定するにはどうすればいいでしょうか?
テキストボックス等ではなく、Windowsアプリケーションが実行中の状態についてなのですが。
397394:2007/07/17(火) 18:21:01
>>395

いけた トンクス。
398デフォルトの名無しさん:2007/07/17(火) 18:21:49
データセットの作り方を勉強したいのですが、お勧めのページとかありますか?

やりたいことは、単にmdbファイルにselect文をかけた結果をデータセットに格納したいだけなのですが…
399デフォルトの名無しさん:2007/07/17(火) 18:39:52
型指定されたデータセット?
難しい部分なんてあったっけ?
400398:2007/07/17(火) 18:59:04
>>399
入門書でADO.NETについて勉強して少しわかりました。
なんかものすごくややこしいのを想定していました。。。。

今、TableAdapter.Fill(dataSet)と、指定しても、
データベースの最新の情報がデータセットに反映されなくて困っています。

INSERTを実行した後にちゃんとDBに入っていることは確認しているのですが。。。
401デフォルトの名無しさん:2007/07/17(火) 20:36:36
ADO.NETスレでそいういうこと言ってた奴いたな。MySQLだったけど。
Clearするかnewしとけば良いと思うよ。
402デフォルトの名無しさん:2007/07/17(火) 23:11:52
『独習C#』の21pでいきなりつまずきました。
VisualStudio2005を使い、本のとおりに進めています。

[ビルド]メニューに[ソリューションのビルド]が、
[デバッグ]メニューに[デバッグなしで実行]の項目が出てきません。

前者はproject1のビルドという項目があり、これでいいのかと思いますが、
後者はちんぷんかんぷんです。
なにかいけないことがあるんでしょうか?

こういう開発環境なるものじたい初めてなんですが、
メニューとかはインストールしたPCなどによって違うものなのか不安です?
403デフォルトの名無しさん:2007/07/18(水) 00:05:43
>>402
プロジェクト作ってなかったりするかい?
404デフォルトの名無しさん:2007/07/18(水) 00:08:18
って、プロジェクトは作ってあるんだな。そいつは失礼した。
405デフォルトの名無しさん:2007/07/18(水) 01:08:44
>>402
ツールバー→ユーザー設定→リセット
してみたらどう?
406デフォルトの名無しさん:2007/07/18(水) 02:15:24
>>402
Express Editionを使ってるのかな
上の方は、
「ツール」→「オプション」→「プロジェクトおよびソリューション」→「全般」→「常にソリューションを表示」
下の方は出し方がわからないけどExpress Editionでも出るのは間違いない
オプションの「すべての項目を表示」にチェック入れていろいろいじったりしてみて
407398:2007/07/18(水) 12:31:45
>>401

ありがとう。でもdset.Clea()rやdset = New Dsetってしてもうまくいかなかった。
ADO.NETスレで聞いてみます。
408デフォルトの名無しさん:2007/07/18(水) 15:16:55
すんません。これがイコールにならないのですが、これでどうしてイコールにならないのでしょうか?

object a = new string[] { };
if (a.Equals(new string[] { }))
{
// 同じだった場合の処理
}
409デフォルトの名無しさん:2007/07/18(水) 15:30:09
Array.Equalsは参照の等価性を返すから。
410デフォルトの名無しさん:2007/07/18(水) 15:30:19
ObjectのOEquals使っているからじゃね?

http://msdn2.microsoft.com/ja-jp/library/bsc2ak47(VS.80).aspx
>Equals の既定の実装では、参照が等価であるかを判断する機能だけがサポートされています。
>ただし、派生クラスでこのメソッドをオーバーライドすると、値が等価であるかを判断する機能を
>サポートできます。
411デフォルトの名無しさん:2007/07/18(水) 15:34:12
>>409
なるほど。参照が同じかどうかを比較するということですね。
どうにかならんかのう
412デフォルトの名無しさん:2007/07/18(水) 15:55:11
仮想呼び出しって delegate のことですか?
413デフォルトの名無しさん:2007/07/18(水) 16:09:43
違います。
414デフォルトの名無しさん:2007/07/18(水) 17:02:53
>>411
aが空の文字列配列かどうかを判断したいだけじゃねーの?
415デフォルトの名無しさん:2007/07/18(水) 18:00:54
C言語を始めてやり始めたものです。
質問なんですが友人のPCでコンパイラ(MinGW)を使って早速「hello world」と表示させるプログラムを作ったそうですが
gcc: installation problem, cannot exec `as': No such file or directory
と出てきてコンパイラされないそうです。
ちなみにOSはVistaと聞きました。
416デフォルトの名無しさん:2007/07/18(水) 18:03:40
MinGW 再インストールしろ。
417デフォルトの名無しさん:2007/07/18(水) 18:07:03
わたし女だけどCとC#を間違えるおとこの人って……
418デフォルトの名無しさん:2007/07/18(水) 18:11:08
諦めてVC++Express使えば
419デフォルトの名無しさん:2007/07/18(水) 20:11:35
>>415
どう贔屓目に見てもスレ違い。
420デフォルトの名無しさん:2007/07/18(水) 20:32:30
PATHが通ってない
421デフォルトの名無しさん:2007/07/18(水) 21:22:40
質問にすらなってないし
422デフォルトの名無しさん:2007/07/18(水) 21:26:02
すんげーしょーもないことだけど、

accessなしでもmdbファイル使ったアプリ動くよね?
まぁ開発環境には必要だと思うけど…
423デフォルトの名無しさん:2007/07/18(水) 21:33:26
必要だと思ったことはないな
424デフォルトの名無しさん:2007/07/18(水) 21:55:07
無くても問題ない
425デフォルトの名無しさん:2007/07/18(水) 23:37:17
え?accessなくてもmdbファイル使ったアプリ動くの??
動かないと思ってSQLite使おうとしてたんだけど、ラッキー。
426デフォルトの名無しさん:2007/07/19(木) 00:28:38
VC#ってSP1では絶対に使えないんでしょうか?
一回インストールしてみましたが、インストールの時点で弾かれました。
なんとかしてSP1で使いたいのですが・・・
427デフォルトの名無しさん:2007/07/19(木) 00:32:28
普通に使えるよ
428デフォルトの名無しさん:2007/07/19(木) 00:33:05
SP1ってVSの?
それともXPの?
429デフォルトの名無しさん:2007/07/19(木) 00:42:01
>>427
>>428
XP Pro SP1です。
Visual C# 2005 Express Edition をCDに焼いてインスコしようとしましたが、弾かれました。
必要システムのところに、SP2と書いてあるので、当たり前なんですが、
なんとかごまかしてインストールしたい。
430デフォルトの名無しさん:2007/07/19(木) 00:44:15
なんでSP2入れないの?
431デフォルトの名無しさん:2007/07/19(木) 00:50:22
>>430
不具合情報スレを見ていると不安で。
近々、統合インストールCDを作って入れようと思っていますが、
そのまえにSP1でインスコできる方法があるならそっちを試したいと思いまして。
432デフォルトの名無しさん:2007/07/19(木) 00:53:53
>>431
いまどきSP2の不具合だなんて。
SP1のほうがよっぽどバグだらけだと思うが?
433デフォルトの名無しさん:2007/07/19(木) 00:57:36
>>432
じゃあ、素直にSP2いれたほうが早いですね。
お騒がせしました。
バックアップがめんどい・・・
434デフォルトの名無しさん:2007/07/19(木) 00:58:26
これこれこういう実害があるからSP1、というなら理解できなくもないが
不安だから、というのでSP2にあげないで不利益を被っているのは理解できない
435デフォルトの名無しさん:2007/07/19(木) 01:28:54
サービスパックを不安といい始めたら、もう一生バージョンアップしないってことか…
436デフォルトの名無しさん:2007/07/19(木) 09:05:11
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 = ?

のような感じで…
何かいい方法ありますでしょうか?
437デフォルトの名無しさん:2007/07/19(木) 09:08:32
>>436
クエリの追加
438436:2007/07/19(木) 10:20:28
>>437

クエリの追加だと、固定されたフィールドしか指定できませんよね?

Where 句のフィールド数が可変なんですよ…
439デフォルトの名無しさん:2007/07/19(木) 10:27:49
>>438
可変ってどう引数渡すつもりなんだ? object型のparamsで要素数判定するつもりか……?
field1 = ? AND field2 = ?とfield3 = ? OR field2 = ?の違いはどう判別したら良いんだ?

FillByHogeを数パターン作って最適なものを判別するメソッド追加するか
検索条件によってWHERE句自力で生成するメソッド作るかしたら?
440436:2007/07/19(木) 10:38:56
>>439 全くその通りです。すいません。

WHERE句を自力で生成するメソッドを作ろうと思います。
自力でWhere句を作ったのを ? で渡したりってできませんよね・・・
441デフォルトの名無しさん:2007/07/19(木) 10:51:13
SELECTコマンドのみ、TableAdapter使わなければいいだけの話だと思うんだが、
それでも無理矢理使いたいならHogeDataSet.csにHogeDataSetTableAdapterの
分割クラスとして書けば良いんじゃないか?
FillByOresamaVer(SearchParameter hoge)みたいなの
442デフォルトの名無しさん:2007/07/19(木) 13:09:08
VistaとXPでフォームの縦横比がうまく揃わないんで困ってます。

フォントの関係(メイリオとMSPゴシ?)だとは思うんですけど
XPに合わせるとVistaで縦長になりすぎ、
Vistaに合わせるとXPで横長になりますぎます。

こういうときどうしたらいいんでしょうか?

443デフォルトの名無しさん:2007/07/19(木) 13:19:49
フォントを明示するとか。
444デフォルトの名無しさん:2007/07/19(木) 18:19:50
API と DLL の意味の差がよくわかりません
445デフォルトの名無しさん:2007/07/19(木) 18:25:47
ここで質問する意味がよくわかりません
446デフォルトの名無しさん:2007/07/19(木) 19:55:43
MDIウインドウで、スクロールバーを非表示にするにはどうしたらいいでしょうか?
AutoScrollはFalseなのになぜか表示されてしまいます。
ScrollPropertyは読み取り専用だし、AutoScrollMarginを増やしたら子ウインドウを
最小化したときにどっかいっちゃうし… orz
447デフォルトの名無しさん:2007/07/19(木) 20:52:03
ループの中でICollection<T>.Addを繰り返して(回数不定)要素を追加していって
最終的にIEnumerable<T>を取りたいんだけど、どのICollection<T>実装を使うのが
一番効率いいの?
448デフォルトの名無しさん:2007/07/19(木) 20:59:42
List<T>
449デフォルトの名無しさん:2007/07/20(金) 15:44:27
ダイアログから親の変数に値をセットするいい方法はないでしょうか?
今はダイアログ生成時にコンストラクタで親を渡してやってるんですが、
もうちょっとスマートなやり方があれば教えて欲しいです。
450デフォルトの名無しさん:2007/07/20(金) 15:52:24
親もFormならOwnerで取得可能
451デフォルトの名無しさん:2007/07/20(金) 16:08:31
ダイアログでイベント公開して親がリッスンして親が自力で値設定とか
452デフォルトの名無しさん:2007/07/20(金) 16:09:29
Formに無駄に変数を増やすなよ。汚らしい
453デフォルトの名無しさん:2007/07/20(金) 19:50:54
ダイアログ自体に持たせるか>>451が正当
454デフォルトの名無しさん:2007/07/20(金) 19:55:43
そりゃ、特定の親からしか呼び出せないなんて腐ってるからな
455デフォルトの名無しさん:2007/07/20(金) 20:16:21
HttpRequest クラスで、
Http 1.0を使うことは可能でしょうか?
456デフォルトの名無しさん:2007/07/20(金) 20:39:55
はい。
457デフォルトの名無しさん:2007/07/20(金) 20:48:49
具体的にはどうすればいいでしょうか?
458デフォルトの名無しさん:2007/07/20(金) 20:54:15
具体的に質問してください。
459デフォルトの名無しさん:2007/07/20(金) 20:56:44
HttpRequest クラスの どのプロパティ、メソッドをいじればHTTP 1.0で通信できるのでしょうか
460デフォルトの名無しさん:2007/07/20(金) 21:26:08
HttpRequestなんてあったっけ?
461デフォルトの名無しさん:2007/07/20(金) 21:29:23
System.Web.HttpRequest クラスです
462デフォルトの名無しさん:2007/07/20(金) 21:31:54
それでHttp1.0をつかって何をするつもりですか。
463デフォルトの名無しさん:2007/07/20(金) 21:38:32
HTTP 1.0プロトコルで通信するつもりです
464デフォルトの名無しさん:2007/07/20(金) 21:40:50
HttpRequestって通信に使うクラスじゃないだろ
465デフォルトの名無しさん:2007/07/20(金) 22:16:33
>>463

学生さんですか?
466デフォルトの名無しさん:2007/07/20(金) 22:51:18
>455-464
よくあるエスパー期待型の質問だが
これほど流れがスムーズだとなぜか気持ちいいなw
467デフォルトの名無しさん:2007/07/21(土) 14:04:47
リファクタリングってなんすか?
468デフォルトの名無しさん:2007/07/21(土) 14:10:58
ググレカスって言われたいマゾなのか
それとも何か面白い答えを期待してるのか判断に苦しむ
469デフォルトの名無しさん:2007/07/21(土) 14:11:47
リフレクションとリファクタリングを混同してしまいそうになる
470デフォルトの名無しさん:2007/07/21(土) 14:13:27
>>467
ググレカスカスカスカスカスカスカスカスカスカスカスカスカスカスカスカスカスカス
http://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
471デフォルトの名無しさん:2007/07/22(日) 00:09:30
>>470
死ね
472デフォルトの名無しさん:2007/07/22(日) 03:33:29
秀丸みたいな行番号とルーラーを表示できるTextBoxコントロールって無いのかな?
473デフォルトの名無しさん:2007/07/22(日) 03:35:28
んなもん自分で作るに決まってるだろ
474デフォルトの名無しさん:2007/07/22(日) 03:39:45
↑夏休みだな
475472:2007/07/22(日) 08:33:06
>>473
別に有料でもかまわないので
あったら教えて下さい。
476デフォルトの名無しさん:2007/07/22(日) 10:54:00
477デフォルトの名無しさん:2007/07/22(日) 13:30:32
>>475
フリーのエディタのソース読め。
478472:2007/07/22(日) 16:14:52
>>476
ありがとうございました

>>477
( ゚д゚)、ペッ
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のメソッドにそういう機能は無いでしょうか?
480デフォルトの名無しさん:2007/07/22(日) 18:15:20
何か嫌なことでもあったのか>>472
プログラマは他人のソースを読むことを厭うては駄目だぞ
他人の作ったコンポーネントに頼るのも手段の一つだがいつか限界がくる
先を読んで研鑽しろ
それに下品な態度は人間としても駄目だ
481デフォルトの名無しさん:2007/07/22(日) 18:58:50
言語のスレであってコンポーネントくださいスレではないしな
482472:2007/07/22(日) 18:59:48
精進いたします m(_._)m
483デフォルトの名無しさん:2007/07/22(日) 20:11:07
>>479
DataViewを使う
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; }
486デフォルトの名無しさん:2007/07/22(日) 22:41:23
お前はスレタイも読めないのか。
487デフォルトの名無しさん:2007/07/22(日) 22:41:52
>>485
ここはC#言語のスレ
C言語はスレ違い
次回からはこちらへどうぞ
http://pc11.2ch.net/test/read.cgi/tech/1184003625/

'y'は文字リテラルで「y」に対応する数値(0x79)を表す
で、その行はこの値をline配列の0番目に代入するって意味
488デフォルトの名無しさん:2007/07/22(日) 23:01:20
C# 2005 Express Editionでプログラムを作っています。
ボタンを押された(へこんだ)状態にする方法を教えてください。

キーボードでも操作できるようにしたいんですが、マウスを使った時と同じように、
KeyDownでフォーム上のボタンが押された状態にして、KeyUpで戻したいわけです。

button1のプロパティは探してみたのですが、ボタンの状態をどこで決めているのか、
どうしてもわかりませんでした。
489デフォルトの名無しさん:2007/07/22(日) 23:02:51
無理です。
490デフォルトの名無しさん:2007/07/22(日) 23:06:36
>>488
そういうコントロールは自作
491デフォルトの名無しさん:2007/07/22(日) 23:08:43
CheckBox の Button 形式で誤魔化すのはどうだろう
492488:2007/07/22(日) 23:55:01
>>489-491
自力でもぐぐってみたのですが、やっぱりCheckBoxを使うのが定番のようですね。
ありがとうございました。
493デフォルトの名無しさん:2007/07/23(月) 00:08:50
494デフォルトの名無しさん:2007/07/23(月) 20:02:08
正規表現で "[" を探す場合はどのようにするのですか?
495デフォルトの名無しさん:2007/07/23(月) 20:12:33
\[
496デフォルトの名無しさん:2007/07/23(月) 20:20:00
すいません質問です。
List<> を配列のように利用してfor文を作った時、forループ内で
listVariable.RemoveAt( i );
とした場合次に実行される要素が、ちゃんとRemoveされたiの次の要素になっているのはなぜでしょう?
497デフォルトの名無しさん:2007/07/23(月) 20:24:02
おっしゃっている意味が分かりません
498デフォルトの名無しさん:2007/07/23(月) 20:27:00
ちゃんと動いたら何か問題でもあるのか
499デフォルトの名無しさん:2007/07/23(月) 20:32:50
次の要素にならないだろ

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
500デフォルトの名無しさん:2007/07/23(月) 20:39:38
削除のたび前にシフトするんじゃ使い物にならん
501デフォルトの名無しさん:2007/07/23(月) 20:44:59
>>500
どういういみ?
502デフォルトの名無しさん:2007/07/23(月) 20:46:40
すいません、ちゃんと検証したらしっかり一個飛ばしてました。orz
お騒がせしてすいません。
503デフォルトの名無しさん:2007/07/23(月) 21:25:50
一個飛ばすという表現は微妙な…ま、いいか
504デフォルトの名無しさん:2007/07/23(月) 22:47:47
stringとStringはどう違うなりか?
505デフォルトの名無しさん:2007/07/23(月) 22:49:47
506デフォルトの名無しさん:2007/07/23(月) 22:52:33
>>504
正式名称はStringだが、stringという別名で書いてもいい。
つまり同じ。
507デフォルトの名無しさん:2007/07/23(月) 23:03:54
>>505
何この回答者達
さんざんもったいぶった挙句、「IL見てみろ」てw
508デフォルトの名無しさん:2007/07/23(月) 23:06:19
まあ自分で解決する姿勢がないとダメってことじゃないか?

プログラムで詰まっても大体誰も助けてくれない。
最後に頼るのは自分。
509デフォルトの名無しさん:2007/07/23(月) 23:06:27
自分で気づく事も重要だぞ
回答者たちはヒントを与えて誘導してるからいいじゃまいか
510デフォルトの名無しさん:2007/07/23(月) 23:12:51
誘導しつつ暇つぶしの種にされてる気も……
511デフォルトの名無しさん:2007/07/23(月) 23:14:37
型と関数の区別が付かない人に
別の言語の情報を出してきたりIL見ろと勧めたりするのはさすがにないだろ
512デフォルトの名無しさん:2007/07/23(月) 23:21:13
じゃあ
stringはSystem.Stringの別名。
513デフォルトの名無しさん:2007/07/23(月) 23:24:50
自分で調べなければ実力つかないとか、ハッキリ言って質問に対する回答じゃないよな。
514デフォルトの名無しさん:2007/07/23(月) 23:30:07
質問に対する回答じゃないな、と見做し思うことによって現実から目を背けているだけだなw
そういうのを防衛機制という。
515デフォルトの名無しさん:2007/07/23(月) 23:32:13
>質問に対する回答

質問に "解答"が来るとは限らないよw

ゆとり君w
516デフォルトの名無しさん:2007/07/23(月) 23:34:43
まあ>>505の場合は「自分で考えてみろ」じゃなくて「本読んで一から出直せ」だと思うけどな
遊ばれてるようにしか見えない
517デフォルトの名無しさん:2007/07/23(月) 23:42:07
もういいよ。
中学の英語の教科書も下に全部日本語訳書いとけよ。
518デフォルトの名無しさん:2007/07/23(月) 23:52:50
この英文は去年の生徒がすでに訳しています。

これを訳すのは車輪の再発明です。
519デフォルトの名無しさん:2007/07/23(月) 23:54:52
質問です。
画像の回転についてなんですが、Graphics.RotateTransformで回転させる
ことは出来たのですが、回転軸を画像の中心に固定するにはどうしたらいいでしょうか?
520デフォルトの名無しさん:2007/07/23(月) 23:57:28
これやったの?
ttp://msdn2.microsoft.com/ja-jp/library/a0z3f662(VS.80).aspx
521デフォルトの名無しさん:2007/07/24(火) 00:16:00
>>520
それを使って画像の回転には成功したのですが、軸が(0, 0)に
なってしまうので、その軸を中心にするにはどうしたらいいのかなーと
思ったのですが…
Graphics.TranslateTransformあたりなんか関係ありますかね?
522デフォルトの名無しさん:2007/07/24(火) 00:23:19
逆に考えろ
回転する前に画像の中心を(0,0)に持ってくるんだ
523デフォルトの名無しさん:2007/07/24(火) 00:34:23
>>522
回転前にGraphics.TranslateTransformで移動したら上手くいきました!
ありがとうございました。
524デフォルトの名無しさん:2007/07/24(火) 11:04:02
すいません、コンボボックスの編集を不可(あらかじめ用意した値しか選択させないようにする)
ようにしたいのですが、設定が見つからずに困っています。
どうすればいいか、知ってる人がいたら教えていただけたら嬉しいです。
525デフォルトの名無しさん:2007/07/24(火) 11:19:54
DropDownStyle
526デフォルトの名無しさん:2007/07/24(火) 11:20:22
>>524
それはドロップダウンリストって名前
プロパティ探してごらん
527524:2007/07/24(火) 12:34:08
>>525,526

ありがとうございますー
528デフォルトの名無しさん:2007/07/24(火) 14:02:19
vs2005#expressにあるインターフェースをつけたとき、通常の実装と明示的実装があります。
なにやらアクセス修飾子の有無が違うのですがこれはどう違ってくるのでしょうか?
529524:2007/07/24(火) 14:03:02
もうひとつ聞きたいのですが、
ドロップダウンリストで最初に選択している値を指定するのって
VC#上では厳しいでしょうか?

SelectedIndexをわざわざ指定するとフォーカスが移動してしまうし、
簡単に指定できればなぁと思ってます
530デフォルトの名無しさん:2007/07/24(火) 14:30:48
SelectedIndex使ってもフォーカス移動しないべ?
531デフォルトの名無しさん:2007/07/24(火) 16:06:34
>>528
明示的実装はそのインターフェイスに代入しないと使えない
532デフォルトの名無しさん:2007/07/24(火) 16:48:06
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();
}
533デフォルトの名無しさん:2007/07/24(火) 16:57:18
なんでわざわざ無効にしてしまうようなことしてんのかな?
534デフォルトの名無しさん:2007/07/24(火) 17:12:09
いつも思うんだが、e.Graphicsつかわない利点ってあるの?
535532:2007/07/24(火) 17:12:20
すみません。自己解決しました。
536デフォルトの名無しさん:2007/07/24(火) 17:13:29
>>534
ありがとうございました
537デフォルトの名無しさん:2007/07/24(火) 17:17:21
ダブルバッファーによって、e.Graphics で描画したものが
OnPaint 抜けてフリップするはずが CreateGraphicsで
表に描いちゃったからフリップで裏に行っちゃったのか。
538デフォルトの名無しさん:2007/07/24(火) 18:05:14
スコープ付けるためだけのブロックってC#で使う?
539デフォルトの名無しさん:2007/07/24(火) 18:06:42
使う。
540デフォルトの名無しさん:2007/07/24(火) 18:08:30
できるだけ使わない
使う状況になったら設計を見直す
541デフォルトの名無しさん:2007/07/24(火) 18:12:57
多くの場合、そのブロックまるごと関数に持ってける気がするけどね。
542538:2007/07/24(火) 18:15:31
やっぱりあんまり使わない方がいいのかな
スコープを付けるためじゃなくて、仕方なく低レベルな処理をするときに
unsafeと同じように後ろめたい気持ちを込めて使ってたんだけど
543デフォルトの名無しさん:2007/07/24(火) 18:54:33
>>531
ありがとうございます。
つまりeventとかprivateみたいに機能を制限する文法ってことですね。
544デフォルトの名無しさん:2007/07/24(火) 19:03:14
機能を制限するというより単に心理的なものだけどな
あと、メンバの名前が被るのを回避するのにも使える(というか多分それが目的)
545デフォルトの名無しさん:2007/07/24(火) 20:42:27
いざVC#Expressでアプリを完成させたので、
発行してみようと思ったのですが、発行元が信頼できない云々のメッセージがでてきて困ってます。

これってStandardEdtionを買えばVS2005の証明書の発行って可能になるのでしょうか?
546デフォルトの名無しさん:2007/07/24(火) 20:46:55
全然
547デフォルトの名無しさん:2007/07/24(火) 20:56:20
>>545

>困ってます

いったい、なにが困るのかおじさんに教えて欲しいなあ(怒)
フリーウェア入れたことないの???
548デフォルトの名無しさん:2007/07/24(火) 21:13:33
いきなりお前を信頼しろと言われても、
そりゃ困ると思うんだよ
549デフォルトの名無しさん:2007/07/24(火) 21:15:26
無駄にインストーラ付けると余計信頼されないよ
550デフォルトの名無しさん:2007/07/24(火) 21:19:08
  (  ) ソースヲ
  (  )
  | |

 ヽ('A`)ノ コウカイスル!
  (  )
  ノω|

 __[警]
  (  ) ('A`)
  (  )Vノ )
   | |  | |
551デフォルトの名無しさん:2007/07/24(火) 21:22:25
c#使いって下品だな。
552デフォルトの名無しさん:2007/07/24(火) 21:33:31
>>550-551
自演乙!
553デフォルトの名無しさん:2007/07/25(水) 04:02:05
質問です。
ACMFORMATCHOOSE構造体を以下のように宣言したのですが、なぜか
Marshal.SizeOf()でエラーが出ます。どうやら原因はStringBuilderのようなんですが、
どう解決したらいいかわかりません。一応MarshalAs属性はつけてるのですが…

よろしくお願いします。
554368: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;
555553 続き:2007/07/25(水) 04:05:49
        [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
556553:2007/07/25(水) 05:08:45
すいません。事故解決しました。
structの中ではStringBuilderは使えないんですね…
557デフォルトの名無しさん:2007/07/25(水) 18:06:24
IEnumerableをIEnumerable<T>に変換するには、
一般的な方法としてはyieldとかで自前でやるしかない?
558デフォルトの名無しさん:2007/07/25(水) 18:09:19
public static IEnumerable<T> OfType<T>(/*this*/ IEnumerable source) {
foreach(object item in source) if(item is T) yield return (T)item;
}
559デフォルトの名無しさん:2007/07/25(水) 23:53:42
らっぱでいいじゃない
560デフォルトの名無しさん:2007/07/26(木) 00:09:04
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;
}
561デフォルトの名無しさん:2007/07/26(木) 00:09:52
>>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
562デフォルトの名無しさん:2007/07/26(木) 00:11:08
やっぱりyieldのがよっぽどシンプルだわ
563デフォルトの名無しさん:2007/07/26(木) 00:13:52
まあそりゃ560-561を書かなくて済むようにするためのyieldだからな
564デフォルトの名無しさん:2007/07/26(木) 00:40:48
>>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
565デフォルトの名無しさん:2007/07/26(木) 00:42:25
すまん、上のはこう読み替えてくれ。

IEnumerable<string> strseq = seq.OfType<string>();
566デフォルトの名無しさん:2007/07/26(木) 00:44:39
3.0ならvar使えよ。var
567デフォルトの名無しさん:2007/07/26(木) 01:00:48
varってなんかC#のありがたみっつーか一応コンパイル言語であるところの
いかにもプログラムって感じがしないので抵抗があるのはおれだけ?
568デフォルトの名無しさん:2007/07/26(木) 01:06:13
> C#のありがたみ
> コンパイル言語であるところのいかにもプログラムって感じ
意味が分かりません!
569デフォルトの名無しさん:2007/07/26(木) 01:06:48
右辺から左辺の型を推量するくらい、これからのどの静的型付け言語でもできるようになるよ。
570デフォルトの名無しさん:2007/07/26(木) 01:24:37
型推論は、匿名型と一緒にしか使わないと思う。
てか、使わない方がいいと思う。

で、匿名型も、LINQ のクエリ構文の select 区以外ではあんまり使いたい機能じゃないし、
var はもう、LINQ 専用だと思っといた方がいいんじゃないかと。
571デフォルトの名無しさん:2007/07/26(木) 01:38:45
>>567
var使っててもIntelliSenseでその感じはちゃんと体験できるので安心しろ
書いた人限定だが
572デフォルトの名無しさん:2007/07/26(木) 17:02:16
TcpListenerでacceptするプログラムを作成したんだけど、
2つ同時に起動させると、SocketExceptionエラーが落ちて怒られる…。

具体的には、
tcpListener.Start();
の箇所で次のようなエラーが出ます。

「SocketExceptionはハンドルされませんでした。
通常、各ソケットアドレスに対してプロトコル、ネットワークアドレス、
またはポートのどれかのみを使用できます。」

ポート番号は違うものでacceptしてるのに、なぜ??
わかる方いらっしゃいますか?
573572:2007/07/26(木) 17:03:41
何か日本語がおかしかったので修正。
>>572
2つ同時に起動させると、SocketException例外が出て怒られる。
574572:2007/07/26(木) 17:09:18
もひとつ修正。例外が発生している箇所は、acceptではなく、listenです。
すみません。
575デフォルトの名無しさん:2007/07/26(木) 18:35:12
すみません、自己解決しました。
576デフォルトの名無しさん:2007/07/26(木) 18:48:44
キミは誰やねん
577575:2007/07/26(木) 19:27:46
>>572です。お騒がせしました。
578デフォルトの名無しさん:2007/07/26(木) 23:32:07
クラス作るとき必ずIDisposableインターフェイスを実装しとくの?
そういうケースが多い?
579デフォルトの名無しさん:2007/07/26(木) 23:33:18
オブジェクトがGCに喰われるより先に破棄すべきリソースを保持してるならIDisposableを実装すべし。
580デフォルトの名無しさん:2007/07/26(木) 23:34:07
必要なのにしかつけないが
後処理が必要なクラスなんてあんまりないし
581デフォルトの名無しさん:2007/07/26(木) 23:38:45
GCより先に破棄しなきゃやばいリソースってどんなもの?
582デフォルトの名無しさん:2007/07/26(木) 23:39:35
カーネルオブジェクトとか、GDIオブジェクトとか。
583デフォルトの名無しさん:2007/07/26(木) 23:59:25
acmFilterEnumや、acmDriverEnumを使うときに、コールバック関数の部分には
どんなdelegateを作って当ててやればいいでしょうか?
584デフォルトの名無しさん:2007/07/27(金) 00:01:11
585デフォルトの名無しさん:2007/07/27(金) 00:17:50
>>584
何という検索
ありがとうございました。



unsafeか… orz
586デフォルトの名無しさん:2007/07/27(金) 00:49:15
refで構造体渡せばunsafe使わなくてもいけるっしょ
587デフォルトの名無しさん:2007/07/27(金) 01:25:35
>>586
refでも大丈夫ならいいのですが…

とりあえずrefでやってみます。
後、どっかにLP〜*となってるのを
素直にIntPtrで受けずにclassを作って
[StructLayout(LayoutKind.Sequential, Pack = 1)]
とかつけて使ってるのがあったんですが、これって常套手段ですか?
588デフォルトの名無しさん:2007/07/27(金) 01:51:08
classよりかstructっしょ?
Marshalくらすに便利なメソッド群あるし
589デフォルトの名無しさん:2007/07/27(金) 02:16:18
>>588
いや、LP〜*じゃなくてただのLP〜かな?
structの中のstructのポインタを指す部分に該当するstructを
classにして使ってるのがいくつかあったんですが、これは毎回毎回
IntPtrに変換しなくてもすむようにするため?
一応ToStruct()は積んでるみたいなんですが
590デフォルトの名無しさん:2007/07/27(金) 08:55:08
構造体のポインタをメンバに持つクラスにしてラップするのが普通だと思うよ
591デフォルトの名無しさん:2007/07/27(金) 18:35:27
static readonly な変数メンバもつ基本クラスを継承した派生クラスがあるとします。
例えば

派生クラスコンストラクタ(int x) : base(x)



で、static readonly 変数の値を決定した場合、その変数は
1、同じ派生クラスでのみ共有されている。
2、派生クラスと基本クラスで共有されている。(必然的に別の派生クラス全てとも共有)
のどちらでしょうか?
592デフォルトの名無しさん:2007/07/27(金) 18:40:54
static readonly のフィールドをどうやってインスタンスコンストラクタで初期化するんだ?
593デフォルトの名無しさん:2007/07/27(金) 18:43:39
基本的なこと忘れてましたorzそういえばそうですね。
594デフォルトの名無しさん:2007/07/27(金) 22:00:13
はじめまして、今すごく悩んでいるので相談させてください。

ツリービューからツリービューをコピーしたいのですが
元のツリービューのデータはデータベースのデータテーブルに入っています。
これをツリービューに直すやり方がわからなくて困っています。

データベースなど触ったことも無いので、ネットで探したのですが
探し方が悪いせいか、見つかりません。

宜しければ教えていただけるとうれしいです。
よろしくお願いします、
595デフォルトの名無しさん:2007/07/27(金) 22:04:50
コピー元が TreeView のノードならもうデータベースとか関係なくね?
596デフォルトの名無しさん:2007/07/27(金) 22:19:53
>>595
レスありがとうございます

元のツリービューの名前が分からないので
どうやって指定すればいいのかわかりません。

一度ツリービューを入れてみようとしたのですが
nullになってしまってエラーが出てしまいました。

逆に難しく考えてしまっているんでしょうか?
597デフォルトの名無しさん:2007/07/27(金) 22:27:20
いや全くわかってないだけ。

ここで説明するだけスペースないから
ツリービューとは何か調べなおしたらいい。
598デフォルトの名無しさん:2007/07/27(金) 22:41:05
ツリービューをコピーっていう意味がわからん。
ツリー(ノード)をコピーしたいってコト?
599デフォルトの名無しさん:2007/07/27(金) 22:59:00
>>597
一から作るやり方ならわかる程度なので
確かに解ったつもりになってるだけかもしれません・・・。
ちょっと調べてみます。

>>598
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32522&forum=7&10
コレのようなことをしたいです。

object node = treeView1.TopNode.Clone();
treeView2.Nodes.Add((TreeNode)node);
これの名前を修正して打ち込んでみたのですが
元が無いようでnullが出てしまいました・・・・
最初に.aspx?かなにかでデータベースの内容を取り出してからなら出来るんでしょうか・・・

とりあえず、TreeViewについてもうちょっと調べてみます。
600デフォルトの名無しさん:2007/07/28(土) 00:33:45
outとrefは動きが同じっぽいけど、どう使い分けるの?
outを使う場合は変数に値をセットしてるとダメってだけ?
601デフォルトの名無しさん:2007/07/28(土) 00:38:39
outパラメタに変数を渡すと、そこで初期化されたと見なされる。
602デフォルトの名無しさん:2007/07/28(土) 00:52:59
>>600
outは出力用、refは入力用。
outはメソッドに渡す前に値をセットしててもしなくてもいい。
しかし渡した後、メソッドを抜ける前にはセットしなければならない。
refはメソッドに渡す前に値をセットしなければならない。
603デフォルトの名無しさん:2007/07/28(土) 01:02:01
要は呼び出し側が初期化するべきか呼び出される側が初期化するべきかだな

>>602
入力用じゃなくて入出力用だろ
604デフォルトの名無しさん:2007/07/28(土) 01:06:18
>>603
それを言うならどちらも入出力用だが
605デフォルトの名無しさん:2007/07/28(土) 01:10:16
Method( object o );
↑メソッド抜けてもoはoの指してたものを指してる

Method( ref object o );
↑抜けた後、もしかしたらoは違うものを指してるかもしれない

Method( out object o );
↑oが未初期化とかなんの値がはいってるとか関係なく
最低でも初期化されて何かの参照が入ってる(ことが要求される)
606デフォルトの名無しさん:2007/07/28(土) 01:19:45
こっちも必要だな

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したオブジェクトは呼び出し元で参照できる
}
607デフォルトの名無しさん:2007/07/28(土) 01:27:45
>>605-606
いいねこれ
608デフォルトの名無しさん:2007/07/28(土) 02:16:27
改訂版。まあふらっとスレなので。。


参照型の場合

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が未初期化とかなんの値がはいってるとか関係なく
最低でも初期化されてる。
(実装者はそれを要求される)
609デフォルトの名無しさん:2007/07/28(土) 05:22:46
MSもわかりやすい所にわかりやすい形でこういうのを書いておいて欲しいね
610デフォルトの名無しさん:2007/07/28(土) 05:34:19
>>599

ツリーを別のツリーにコピーしたい、というより
まずは最初のツリー表示ができていないんじゃないの?

つまり
DBに格納されたXML文字列かなんかをツリー表示したい
ってのが質問の意図なんじゃないかと…?
(違ってたらゴメンな)

そこらへんがうまく伝わるように表現できないって事自体が
自分で何をしたら良いのかすら分かっていないので
もう少しポイントを絞って質問したほうが良いよ。

それだと >>597 のようにしか答えてもらえないよ。
611デフォルトの名無しさん:2007/07/28(土) 08:28:11
下記のメソッドを持っているクラスが破棄されたら
呼び出しもとのoはどうなっちゃうのでしょうか?
一緒に破棄されちゃうの?


void Method(ref object o) {
o.ToString();
o = new object();
// ↑newしたオブジェクトは呼び出し元で参照できる
}
612デフォルトの名無しさん:2007/07/28(土) 08:31:08
されない。
613デフォルトの名無しさん:2007/07/28(土) 08:40:40
>>612
マジで?
じゃあ呼び出し元(クラスA)でDBに接続し、そのオブジェクトをrefで渡し
呼び出し先(クラスB)のデストラクタでDBを切断した場合、クラスAの
DBオブジェクトはどうなるんでしょうか?
切断されちゃってるよね?
614デフォルトの名無しさん:2007/07/28(土) 09:16:28
何を言いたいのか分からん。

とりあえず DbConnection は必要な時に作ってデータとってすぐ破棄しろ。
615デフォルトの名無しさん:2007/07/28(土) 12:21:12
初心者で、誘導されてきました。
メソッドAをBeginInvokeを使って非同期で処理したい場合、メソッドAからコールするメソッドB、メソッドCについても
BeginInvokeが必要なのでしょうか?

メソッドA
 →メソッドB
 →メソッドC
616デフォルトの名無しさん:2007/07/28(土) 12:21:46
定数違いのクラスをいくつか作りたいんですが、
protected の逆で、基本クラスから派生クラスのメンバにアクセスできるアクセス修飾子ってないですかね?
617デフォルトの名無しさん:2007/07/28(土) 12:23:33
abstract protected
618デフォルトの名無しさん:2007/07/28(土) 12:31:51
>>615
いいえ

何故試さない?
619デフォルトの名無しさん:2007/07/28(土) 12:33:46
>>617
そうかプロパティか!すばやい解答ありがとうございました!
620デフォルトの名無しさん:2007/07/28(土) 12:35:11
>>616
コンストラクタで定数を指定じゃだめか?
621615:2007/07/28(土) 12:35:14
>>618
必要ないのですか・・・。
メソッドB呼び出しのところでフリーズしちゃうんですが、別の問題ってことですね。
622デフォルトの名無しさん:2007/07/28(土) 12:37:21
>>621
そもそもそういう超がつくほどの愚問を発する時点で、非同期処理に対する正しい理解が
欠如していると思われる。
623デフォルトの名無しさん:2007/07/28(土) 12:41:33
>>622
そうですね。勉強して出直してきます。
624デフォルトの名無しさん:2007/07/28(土) 12:43:22
>>620
何百もインスタンス作るのでインスタンス変数避けてstatic かつ readonly な 変数にしたいんですよ。
625デフォルトの名無しさん:2007/07/28(土) 12:46:45
staticならリフレクション使うしかなかろう。
626デフォルトの名無しさん:2007/07/28(土) 12:53:54
>>624
「定数(というか、ReadOnlyメンバ)クラス」のインスタンスを
静的なフィールドで持たせるようにすればいいんじゃない?
627デフォルトの名無しさん:2007/07/28(土) 14:55:10
それじゃ定数クラスのメンバにアクセスできないんじゃね?
628デフォルトの名無しさん:2007/07/28(土) 16:03:06
>>627
何をいいたいのかよく分からないが、要はvirtualまたはabstructなリードオンリーの
プロパティを、単にstatic readonlyなフィールドを返すような実装にして、
そのstatic readonlyなフィールドの初期化は各派生クラスの静的コンストラクタで
行うようにするだけの話だよ。
629デフォルトの名無しさん:2007/07/28(土) 17:10:42
630デフォルトの名無しさん :2007/07/28(土) 19:50:06
誘導されてこっちにきました
invokeとはいったいどういったメソッドなのでしょうか
〜のinvokeとか・・・のinvokeとかは聞き
deligateをじっこうさせれるとか・・・
有用性をどなたか教えてください。お願いします。
631デフォルトの名無しさん:2007/07/28(土) 20:03:57
継承ってそんなに使う?
ほとんど使ったこと無い。
632デフォルトの名無しさん:2007/07/28(土) 20:17:07
>>630
マルチスレッドプログラム作るなら必要になるかな
http://www.stackasterisk.jp/tech/dotNet/csharp07_01.jsp
633デフォルトの名無しさん:2007/07/28(土) 21:19:00
以下>>631と同等な文章

送りバントって使う?
ほとんど使ったこと無い。

エアコンの除湿って使う?
ほとんど使ったこと無い。

犬用虫下しって使う?
ほとんど使ったこと無い。

コンドームって使う?
ほとんど使ったこと無い。
634デフォルトの名無しさん:2007/07/28(土) 22:03:15
継承使わないなんて信じられない。
635デフォルトの名無しさん:2007/07/28(土) 22:06:31
掲示板に自動書込みを行うにはどうすれば良いでしょうか?
何か参考になるサイトがあればお教えて頂けますか?

※荒らし目的ではありませんので、悪しからず。
636デフォルトの名無しさん:2007/07/28(土) 23:13:39
ドライは使うでしょ
637デフォルトの名無しさん:2007/07/28(土) 23:23:12
>>636
"Don't Repeat Yourself"?
ドライって何?
638デフォルトの名無しさん:2007/07/28(土) 23:24:31
C#でテキストボックスの内容が数値かどうかをチェックするには
TrayParseを使わないとダメなのでしょうか?

皆さんはこんな感じでロジックを組んでいるのでしょうか?
IsNumeric関数のように対象文字列だけ引数に入れるような関数は無いのでしょうか?

int nNull;

if (!int.TryParse(this.text1.Value.ToString(), out nNull))
{
this.text1.Value = "0";
}
639デフォルトの名無しさん:2007/07/28(土) 23:25:47
>>638
そんな関数自分でつくればいいじゃん。馬鹿らしい。
640デフォルトの名無しさん:2007/07/28(土) 23:46:04
小数をどうするのかとか十六進表記をどうするのかとか
641名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:38:07
継承すると、後で読み返すときめんどいから使わない、ってのは俺だけ?
別に処理の共通化したいならインターフェースでいい、みたいな考えなもんで
642名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:42:09
お前だけ
643名無しさん@そうだ選挙に行こう:2007/07/29(日) 08:47:58
だいたい継承使わないとフォームやユーザコントロールが作れないだろ
使わなくても不可能ではないけど
644名無しさん@そうだ選挙に行こう:2007/07/29(日) 10:05:41
メソッドをoverrideするには、対象の親メソッドでは
virtualをつけないとだめなの?
逆に言うと、overrideされたくない場合はvirtualを付けなければ良いと。
645名無しさん@そうだ選挙に行こう:2007/07/29(日) 10:12:29
>>644
もとのクラスが想定していない継承やoverrideはさせないというのがC#の基本思想。
これについては賛否はあるが、C#ではそういうやり方を選んだ。
646名無しさん@そうだ選挙に行こう:2007/07/29(日) 10:20:04
継承についてはデフォがinheritableである以上、ちょっと違うと思うけど。
647名無しさん@そうだ選挙に行こう:2007/07/29(日) 10:22:14
気に入らなかったら親と同じ名前のメソッドを定義し直して隠せるよ
オーバーライドにはならないけどあくまで気休めに
648お願いします。:2007/07/29(日) 10:26:22
掲示板に自動書込を行う
コードを教えて下さい。

せめて参考になるサイトがあれば非常に助かります。
お願いします!!
649名無しさん@そうだ選挙に行こう:2007/07/29(日) 10:34:02
650お願いします。:2007/07/29(日) 10:48:19
>>649
WEBシステムなので出来ればクライアント(VB.net / C#)で
で掲示板に対して自動書込みを行うコードを教えて下さい。
※参考URLでも結構です。
651名無しさん@そうだ選挙に行こう:2007/07/29(日) 11:50:12
>>650
死ね
652名無しさん@そうだ選挙に行こう:2007/07/29(日) 12:35:14
system.EventHandlerって何者でしょうか?
わざわざ自分でデリゲート自体の宣言をしなくてするためのものと考えて良いんでしょうか?
653名無しさん@そうだ選挙に行こう:2007/07/29(日) 12:39:46
>>652
それでOK
654名無しさん@そうだ選挙に行こう:2007/07/29(日) 17:07:46
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");

656名無しさん@そうだ選挙に行こう:2007/07/29(日) 20:12:50
>>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;

そもそもあんまり褒められたやり方じゃない気がしますが・・・
658名無しさん@そうだ選挙に行こう:2007/07/29(日) 20:20:20
unsafeでCと同じことはできるよ。
659デフォルトの名無しさん:2007/07/29(日) 20:30:23
あとは Buffer.BlockCopy でいったんコピーして操作後に書き戻すか。
660657:2007/07/29(日) 20:38:38
やっぱりmanaged環境だとコピーが発生するのは避けられないんですかね・・・

なるべくunsafeは使いたくなかったんですが、検討してみます
661デフォルトの名無しさん:2007/07/29(日) 20:46:00
ん?unsafeはmanagedだぞ。unmanagedではない。
662デフォルトの名無しさん:2007/07/29(日) 20:57:52
>>661
マジですか。誤解してた
勉強してでなおしてきます
663デフォルトの名無しさん:2007/07/29(日) 21:16:17
>>656
ありがとうございます。
アレコレ調べてtelnetでメールの本文取得できるくらいは分るのですが、
ググるとこれで認証できると書いてるサイトが2,3つ出てくるので・・・信じ切ってました。
対話的に処理を書き直してみます。
664デフォルトの名無しさん:2007/07/29(日) 21:23:50
抽象メソッドを作成すると、そのクラスは抽象クラスになっちゃいますが
抽象クラスはインスタンス化できませんよね。
抽象メソッドってインターフェースと同じ気がするのですが
インターフェースだったら抽象クラスになっちゃうような影響は無いんで
抽象メソッドを使うんだったらインターフェースを使った方が良いんですよね?
抽象メソッドのメリットっていったい・・・
665デフォルトの名無しさん:2007/07/29(日) 21:26:59
PC-9801とQUICKCの組み合わせを知らないときついよ
666デフォルトの名無しさん:2007/07/29(日) 21:27:44
抽象クラスは実装を持てる
667デフォルトの名無しさん:2007/07/29(日) 21:29:14
>>664
抽象クラスとインターフェイスの使い分けのガイドラインがMSDNにあるからよんどくといいよ。
668デフォルトの名無しさん:2007/07/30(月) 00:38:51
>>664
インターフェースは全てのメソッド定義が必要で取捨できないじゃん
669デフォルトの名無しさん:2007/07/30(月) 05:13:59
WIN版Postgresqlとの連携って可能ですか?
どういうキーワードでたぐって勉強していけばよいですか?
670デフォルトの名無しさん:2007/07/30(月) 09:29:34
C++/CLIでラッパーを書けば
それなら普通にC++から使うのと同じはずだから情報も沢山あるでしょ
671デフォルトの名無しさん:2007/07/30(月) 09:45:38
Npgsqlとか、PostgreSQLDirect.NETとか。
672デフォルトの名無しさん:2007/07/30(月) 16:31:24
コントロールの名前についての質問なんですが、
タスクマネージャのプロセス一覧の様なコントロールって
なんていう名前なのでしょうか?
DataGridViewじゃないみたいだし…
673デフォルトの名無しさん:2007/07/30(月) 16:35:57
ListView
674デフォルトの名無しさん:2007/07/30(月) 16:36:01
スタイルがView.Detailsに設定されたListView
675デフォルトの名無しさん:2007/07/30(月) 16:49:35
>>673,674
ありがとうございます!
676デフォルトの名無しさん:2007/07/30(月) 17:44:46
そういやエクステンションメソッドでインターフェイスに実装が
追加できるようになるよなあ
677デフォルトの名無しさん:2007/07/30(月) 18:57:21
列挙型やデリゲート型には使えるのかな
678699:2007/07/30(月) 19:13:40
>>670>>671
ありがとうございます!!

Npgsqlなんてものがあったのですね。
これを利用してみようと思います。
679デフォルトの名無しさん:2007/07/30(月) 21:53:56
C#の文字列処理についてご質問があります。
例えば、次の様な文字列が存在するとして、

     あああabcdefg★1234tomato.jpあああ

 ★の左側
 ★の右側
にある文字列のうち全角文字が出て来るまで取得する
プログラムを作っているのですが、判定時に全角文字(あいう・・・)
を判定するにはどうすれば良いでしょうか?

ここでは最終的に、
   abcdefg★1234tomato.jp 
を取得したいと考えています。
(REGX等を使うのではなく全角かどうかを判定する.NET関数は
用意されていますか?)

680デフォルトの名無しさん:2007/07/30(月) 21:58:51
そもそも全角って何だ。
681デフォルトの名無しさん:2007/07/30(月) 22:08:20
>>679
全角は前時代のもの。

シフトJISで判定。
682デフォルトの名無しさん:2007/07/30(月) 22:55:31
catch内の処理で例外が発生したらどうなっちゃうの?

catchでエラー画面にResponse.Redirectで遷移し、ついでにResponse.End()もやってるんだけど
これってやばい?
Resonse.RedirectってResponse.End()ってやらないとすぐに遷移しないですよね。
それがヤダ。
画面が全部表示しきってから遷移するんだもんなぁ。
これって何とかならんの?
Response.End()やるしかない?
683679:2007/07/30(月) 22:56:57
>>680
あいうえお


>>681
シフトJISであれば、全角文字(あいうえお・・・)等では無いという
関係が成り立つのでしょうか?
684デフォルトの名無しさん:2007/07/30(月) 22:59:56
>>683
s-jisでエンコードしてバイナリを読めば簡単に判定できるって意味でしょ恐らく。
っていうかググると簡単に答え見つからないか?
685デフォルトの名無しさん:2007/07/30(月) 23:00:48
アアアabcdefg★1234tomato.jpアアア

はいいのか?w
686デフォルトの名無しさん:2007/07/30(月) 23:01:08
文字コードとかエンコーディングとかその辺のキーワードをもとに勉強すべきだね。
687デフォルトの名無しさん:2007/07/31(火) 00:23:10
>>679
なんで正規表現だめなの?
[1-9]とか、[a-Z]のが格段に楽だと思うけど
688679:2007/07/31(火) 00:35:20
>>684
ああ、そういう意味ですか。理解できました。ありがとうございます。
もっと勉強しなくてはなりませんね。

>>685
、、、そうでした、それも困りますね。

>>686
勉強します。

>>687
ダメという訳では無いのですが私個人の趣味の問題で、
使いたくなかっただけです。
しかしながら >>685さんよりご指摘を頂きましてやは
り正規表現を使う方が無難かと思い始めて参りました。


689デフォルトの名無しさん:2007/07/31(火) 00:44:05
メルアド抽出したいの?
690デフォルトの名無しさん:2007/07/31(火) 01:03:26
>>688
半角全角って区別が前時代的って>>681さんが言ってるニュアンスを理解してください
そんな区別は(多分)日本にしか存在してないでしょう
691デフォルトの名無しさん:2007/07/31(火) 01:07:07
日本以外の東アジアにもあるよ
692デフォルトの名無しさん:2007/07/31(火) 01:07:45
趣味の問題というより正規表現分からないってだけじゃね?
693デフォルトの名無しさん:2007/07/31(火) 01:26:16
全角と言わずに非ASCIIと言っておけばまだ良かったのか。
また、(非英米環境で)文字列処理をしたいのなら文字エンコーディングの知識は
必須なのに、なぜこれだけ軽視されているのだろう。
694デフォルトの名無しさん:2007/07/31(火) 01:37:21
Javaプログラマーが初めてC#をやる場合、何読めばいいかな?
695デフォルトの名無しさん:2007/07/31(火) 01:40:17
MSDNにJavaプログラマのための手引きみたいなのあったような気がする
696デフォルトの名無しさん:2007/07/31(火) 01:41:08
>693
あまりにも必須であり初期に出会う問題なため、
とりあえずその時作ってる物が動くようになったらそれ以上詳しいことは深追いせずに
そのまま放置して来てしまう人が多いのではなかろうか。

俺の事のような気がしてきたけど。
697デフォルトの名無しさん:2007/07/31(火) 01:42:41
ありがとうございます。ちょっと見てみます。
本とかで学習する場合、おすすめの本とかありますか?
698デフォルトの名無しさん:2007/07/31(火) 01:50:46
>>696
なるほど。
でも、シフトJISでそれほど苦労せずに組めているM$環境の人は、買ってでも
した方がいい苦労の様な気がするな。なんで未だにシフトJISなんだ、てのをもっと
感じて欲しい。
699デフォルトの名無しさん:2007/07/31(火) 01:57:28
今更shift_jis環境とか存在するの?死ぬの?
700デフォルトの名無しさん:2007/07/31(火) 02:10:57
おれは死にたくないなぁがんばる。
701688:2007/07/31(火) 02:15:57
>>689
ずばりそうです。

>>690
頑張ります。


>>692
正規表現は、バッチリです。(???)
業務で使うあらゆるパターンを控えておりますので。。。




702デフォルトの名無しさん:2007/07/31(火) 02:36:24
ふらっとな夏ですね
703デフォルトの名無しさん:2007/07/31(火) 11:12:27
正規表現で3行でメール抽出できるだろ
704デフォルトの名無しさん:2007/07/31(火) 11:20:57
正規表現が分からないんだろ
705デフォルトの名無しさん:2007/07/31(火) 13:23:21
DataGridViewで「セルの編集はできないがテキストの範囲指定やコピーはできる」ような状態にしたいんですが
どうしたらいいんでしょうか?
706デフォルトの名無しさん:2007/07/31(火) 13:59:07
dataGridView.ReadOnly = true ;
707デフォルトの名無しさん:2007/07/31(火) 14:20:46
>>706
それだとテキストの指定とコピーができないですよね。
708デフォルトの名無しさん:2007/07/31(火) 15:20:21
質問です
「型または名前空間名 'DirectX' は名前空間 'Microsoft' に存在しません。アセンブリ参照が不足しています。」
って出たんですけど、どうすればいいのですか?
709デフォルトの名無しさん:2007/07/31(火) 15:21:54
参照設定を右クリックして参照の追加をやってみては?
710デフォルトの名無しさん:2007/07/31(火) 15:22:04
アセンブリ参照を追加してください
711デフォルトの名無しさん:2007/07/31(火) 15:24:58
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
ありがとうございます
見ときます
714705:2007/07/31(火) 16:04:18
EditingControlShowingでコントロールをReadOnlyにすることで一応実現できました。
715デフォルトの名無しさん:2007/07/31(火) 17:25:23
>>712
iArray[j + 1] あたりでIndexOutOfRangeExceptionが出そうなコードだな
716デフォルトの名無しさん:2007/07/31(火) 18:23:46
>>712
なんだその意味不明なコードは
717デフォルトの名無しさん:2007/07/31(火) 18:24:40
宿題・・・?
718デフォルトの名無しさん:2007/07/31(火) 18:45:45
>>705
セルを選択した時その座標にReadOnlyのテキストボックスを配置する。
719デフォルトの名無しさん:2007/07/31(火) 18:49:21
>>713
Managed DirectXはインストールしてあるの?
(今更Managed DirectXに手を出すのはやめといた方がいいと思うよ)
720デフォルトの名無しさん:2007/07/31(火) 20:41:18
Visual Studio 2005のRADで、
自作のコントロールをコンテナとして使うにはどうしたらいい?
Panelみたいに、その中にコントロールを追加したいんだが。
721デフォルトの名無しさん:2007/07/31(火) 20:42:31
コンテナとして使えるコントロールを継承
722デフォルトの名無しさん:2007/07/31(火) 20:45:03
>>721
Panelを継承したらRADで編集できなくならね?

てかなったw
723デフォルトの名無しさん:2007/07/31(火) 20:47:16
ぬるぽ
724デフォルトの名無しさん:2007/07/31(火) 20:48:21
ガッ
725デフォルトの名無しさん:2007/07/31(火) 21:50:32
textboxで入力制限をしたいです
例えば横10文字縦10文字として
超えれば入力できない、貼り付けだったら10*10に入る分だけ表示したいのですが
どうすればいいでしょうか?
726デフォルトの名無しさん:2007/07/31(火) 22:35:42
どうすれば、ってそういう動作をするコードを書くんだよ。
でなきゃ何のためのプログラマだよ。
馬鹿じゃないの?

プログラミングに関する質問というのはそういう漠然としたことを聞くものじゃないだろ?
727デフォルトの名無しさん:2007/07/31(火) 22:44:48
糞レス乙。

とりあえずKeyPressイベントを見て云々すれ。
入力をキャンセルするにはe.Handled = true;
728デフォルトの名無しさん:2007/07/31(火) 22:52:26
つか、普通に桁数とか行数の指定できんの?
729デフォルトの名無しさん:2007/07/31(火) 22:59:13
catch内で例外が発生したらもう終わり?それとも勝手にthrowされるの?
730デフォルトの名無しさん:2007/07/31(火) 23:04:45
不思議な発想をする人だな
終わりとはどういう意味だ?
731デフォルトの名無しさん:2007/07/31(火) 23:28:40
この世の終わりだよっ
732デフォルトの名無しさん:2007/07/31(火) 23:29:50
>catch内で例外が発生したらもう終わり?それとも勝手にthrowされるの?
普通は例外が「スローされる」ことを例外が発生したとかいう。
733デフォルトの名無しさん:2007/08/01(水) 00:09:40
try {
 throw Excetion();
} catch {
 try {
  throw Exception();
 } catch {
  try {
   throw Exception();
  } catch {
   …
  }
 }
}
734デフォルトの名無しさん:2007/08/01(水) 17:00:28
コンパイルエラーになりました。
735デフォルトの名無しさん:2007/08/01(水) 17:02:47
throw new Exception();
736デフォルトの名無しさん:2007/08/01(水) 18:37:44
try
{
throw new Exception();
}
finally
{
throw new Exception();
}
737デフォルトの名無しさん:2007/08/01(水) 21:53:55
フリーウェアつくってるんですが64bit環境で

registryKey.SetValue( valName, (long)hwnd, RegistryValueKind.QWord );

とレジストリに書き込んだハンドルを

IntPtr hwnd = (IntPtr)(long)registryKey.GetValue( valName, 0 );

としてるところで例外が出ると報告がありました。
32bitマシンしかもってないんでテストできないんですが
ここでInvalidCastExceptionが出るとしたら何ででしょう?
また正しいコードはこうだ、ってあったら教えてくんださい
738デフォルトの名無しさん:2007/08/01(水) 21:57:53
ポインタをlongに変換しちゃいかん。
739デフォルトの名無しさん:2007/08/01(水) 22:07:17
textboxみたいなコントロールを自作してるんだが、
フォーム自体からフォーカスが外れてもLeaveイベントが呼ばれないのはなぜ?
キャレットを非表示にしたいんだが。
740デフォルトの名無しさん:2007/08/01(水) 22:34:24
>>739
textboxみたいなコントロールはフォーム?
フォームのLeaveイベントと自作コントロールの関係がよくわからんけど、
overrideしてるとこにbase.OnLeaveを書いてないからとか。
741デフォルトの名無しさん:2007/08/01(水) 22:48:07
非アクティブでもフォーカスは残ってるからな
742デフォルトの名無しさん:2007/08/01(水) 23:06:05
>>737
例外とは関係ないけどなんでまたウインドウハンドルなんかをレジストリに?
読み出したときに同じウインドウを指してる保障なんてないよ。
743737:2007/08/01(水) 23:19:51
>>738
どういうことですか?
64bit環境のIntPtrってInt64であらわせないすか?

>>742
一応ウインドウが閉じる時に消してます

(long)GetValue(..)
はいけてますよね?(QWordで保存されてるんだから)

(IntPtr)(long)
がいけないのかな……
744デフォルトの名無しさん:2007/08/01(水) 23:27:42
WORDとつくとunsignedのように感じるが。
でも何でレジストリ?
745デフォルトの名無しさん:2007/08/01(水) 23:42:58
>743
レジストリに保存した後、読み出して使っても有効な値のIntPtrってどういうもんだよ?
レジストリに書かなくても処理できるようなものじゃないのか?
746デフォルトの名無しさん:2007/08/01(水) 23:46:03
今宵も…
なんだか。


UINT64
747デフォルトの名無しさん:2007/08/01(水) 23:49:27
エスパーじゃないけど

多重起動可能でそれぞれでハンドル使いまわしているんじゃないか?
748737:2007/08/02(木) 00:04:10
>>747
まあそんな感じです。
でも聞きたいのはそっちじゃなくてキャストの例外の話なんです(T_T)

>>746
(IntPtr)(UInt64)GetValue(...);
ってことですか?
(UInt64)GetValue(...)でInvalidCastExceptionでました。。。

まあ教えてくださっても自分じゃテストできないわけですが
749デフォルトの名無しさん:2007/08/02(木) 00:13:32
コンパイル時の /platform は anycpu, x86, Itanium, x64 のどれに設定してる?
750デフォルトの名無しさん:2007/08/02(木) 00:43:37
>748
キャストせずにIntPtr.ToInt64()とIntPtrのlongを引数に持つコンストラクタでいいんでない?
751デフォルトの名無しさん:2007/08/02(木) 00:58:07
キャストしないと渡せないだろ。
752デフォルトの名無しさん:2007/08/02(木) 01:05:16
DirectXなどで見かけるんですが、ビット演算の | とビットフィールド列挙型を使って、引数を渡す場合がありますが、
あれってキャストしてませんよね。
C#ではあのような演算のとき、暗黙の型変換をサポートしてるって事でしょうか?
753デフォルトの名無しさん:2007/08/02(木) 01:12:29
つ[FlagsAttribute]
754デフォルトの名無しさん:2007/08/02(木) 01:20:28
>>753
ずばり解答のサイトありがとうございます。
755デフォルトの名無しさん:2007/08/02(木) 01:22:27
サイトってどこ?
756デフォルトの名無しさん:2007/08/02(木) 01:47:38
ぐぐったら、一番上にmsdnのサイトが一番上に来たので。
実際に使用する場合は[Flags] を列挙体定義時に先頭に添えるようです。
757デフォルトの名無しさん:2007/08/02(木) 06:00:24
byte[] random = new byte[100];
System.Security.Cryptography.RNGCryptoServiceProvider rng =
    new System.Security.Cryptography.RNGCryptoServiceProvider();
rng.GetBytes(random);

6桁のランダムな整数を取得したいのですが上記では3桁ほどの
整数しか取得できません。
どのように変更すれば6桁のランダムな整数を取得できるでしょうか?
758デフォルトの名無しさん:2007/08/02(木) 09:08:54
random[0] | random[1] << 8 | random[2] << 16 とか?
759デフォルトの名無しさん:2007/08/02(木) 09:13:54
>>757
byteだから255までしか出てこないんでないの?
999999までの乱数が欲しいなら
Random.Next(1000000)
760デフォルトの名無しさん:2007/08/02(木) 09:25:33
それはRNG以下略の代わりにはならないだろ
761デフォルトの名無しさん:2007/08/02(木) 11:05:15
オブジェクト名をプログラムで動的に指定することって可能ですか?

textBox1,textBox2,textBox3 というコンポーネントがあって

for (i = 1; i <= 3 ;i++) {
textBox_i.text = "ほげほげ";
}
という感じに指定したいのですが、いい方法ありますでしょうか?
762デフォルトの名無しさん:2007/08/02(木) 11:10:08
>>761
Reflectionで可能だが、その前にコンポーネントの配列で
代用できないか検討してからにしろよ。
763デフォルトの名無しさん:2007/08/02(木) 11:12:05
Controls[string]を使えば簡単にできるよ
お勧めしないけど
764761:2007/08/02(木) 11:31:29
>> 762,763

ありがとうございます。
コンポーネントを配列に入れるという方法がありましたね。

今VC#のデザイン画面?にテキストボックスをいくつか並べて、
ボタンを押したらすべてのテキストボックスにデータベースから取得した値をそれぞれ表示するというプログラムを作っています。

デザイン画面を配列で指定することはできないので、ReflectionやControlsというものについて調べてみます。
ありがとうございます。

765デフォルトの名無しさん:2007/08/02(木) 13:49:03
最初に
List<TextBox> list = new List<TextBox>();
list.Add(textBox1);
list.Add(textBox2);
list.Add(textBox3);
ってするだけじゃないのか?
766761:2007/08/02(木) 14:52:20
>>765
おおおっ そんな手があるんですね!!
調べてみます。
ありがとうございます。
767デフォルトの名無しさん:2007/08/02(木) 15:11:26
スレチだと思うのでですがC#で書いてるので質問させてください。
今waveファイルの合成処理をするメソッドを書いているのですが、
どうにもぷちぷちとノイズが乗ってしまいます。

//16bit 44.1kHz
sbyte src1;
sbyte src2;
int t = src1 & src2;

こうしたのが一番いいような気もするのですが、単純に足したときとほとんど
変わりません。
なにかヒント、または誘導先を教えていただけないでしょうか?
768デフォルトの名無しさん:2007/08/02(木) 15:15:31
>>767
http://www.codeplex.com/naudio
こんなのがあるから読んでみたら
769デフォルトの名無しさん:2007/08/02(木) 15:29:02
既に表示しているListViewItem全てを一気にList<ListViewItem>に入れる方法ありますか?
770デフォルトの名無しさん:2007/08/02(木) 15:30:29
おつ。PC見つめすぎて目が痛いお
771デフォルトの名無しさん:2007/08/02(木) 15:41:01
>>769 動くかどうかは知らん
IEnumerable<ListViewItem> getEnumerator(){foreach(ListViewItem item in ListView.Items) yield return item; }
list = new List<ListViewItem>(getEnumerator());
772デフォルトの名無しさん:2007/08/02(木) 15:47:34
>>768
今外出中なので後で見てみます。
ありがとうございました。
773デフォルトの名無しさん:2007/08/02(木) 22:33:29
>>767

>int t= src1 & src2:

何の処理??????
sbyteは -128 〜 127
774デフォルトの名無しさん:2007/08/02(木) 23:14:59
つっこんだら負けですよ
775767: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
776デフォルトの名無しさん:2007/08/03(金) 00:08:27
if(t > 256)
{
t %= 255
}
なんの冗談だ。
777デフォルトの名無しさん:2007/08/03(金) 00:16:32
//16bit 44.1kHz
byte src1;
byte src2;



あれ?
778デフォルトの名無しさん:2007/08/03(金) 00:24:52
if(t > 256) 変

その判定でtrueの場合

t %= 255 変

大きな合成音のとき小さくなる?

byte src1; 変
779デフォルトの名無しさん:2007/08/03(金) 00:25:41
>>775
WAVEファイルの事はよく知らないけど255を超えたら255にしたかったんじゃないの?
int t = src1+src2;
if(t>255)t = 255;
それか二つの波の平均をとるのは?
int t = (src1+src2)>>1;
780デフォルトの名無しさん:2007/08/03(金) 05:24:05
>>767
単純な合成はクリッピングするんじゃなくて、全データを足して2で割るんだよ。
足したところでキャリーオーバーが発生しないように型を変換して、計算してから
また元の型に戻すのがポイント。
781デフォルトの名無しさん:2007/08/03(金) 05:36:34
音声処理は昔やったなあ。
16bitで量子化してんだからbyte型じゃまずいだろ。元のデータはMSのC#ならushort型だ。
(wavデータの内部形式は符号無し)

これをまず符号付きのint型に変換する。次に32768を引く。
2つのデータを足して2で割ったら再び32768を足してushortに戻す。
これでいけるはず。
間違ってたらスマソ。
782781:2007/08/03(金) 05:55:43
>>767
こうだな。

ushort src1, src2, t;

t = (ushort)((((((int)src1 - 32768) + ((int)src2 - 32768))) >> 1 ) + 32768);
783デフォルトの名無しさん:2007/08/03(金) 08:12:07
符号なしは8bitの場合だけだったはずだが。。
784デフォルトの名無しさん:2007/08/03(金) 08:27:22
何が8bitの場合だけなんだ?CLSの話か?
785デフォルトの名無しさん:2007/08/03(金) 09:53:18
listviewのサブアイテムにはアイコンを表示できないのけ?
786デフォルトの名無しさん:2007/08/03(金) 10:38:07
やりたければオーナードローしてくだちゃい
787デフォルトの名無しさん:2007/08/03(金) 13:29:29
単純な合成は2で割る
あほなこというな
788デフォルトの名無しさん:2007/08/03(金) 13:33:36
足して2で割ったような感じ
789デフォルトの名無しさん:2007/08/03(金) 14:05:41
>>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文でまわそうとしても,エラーが出てフリーズしてしまいます・・・
よろしくお願いします.
792デフォルトの名無しさん:2007/08/03(金) 17:00:11
>>791
「そのように書く」としかいいようがない質問だな・・・
どんなエラーが出るのか書かないと答えようがないよ。
793デフォルトの名無しさん:2007/08/03(金) 17:02:10
SetStrechBltMode と StrechBlt 使ったほうが速そうだが・・・
どんなエラーがでるのさ。
794デフォルトの名無しさん:2007/08/03(金) 17:03:25
って tが抜けた。StretchBltね・・・
795791です: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が新しく用意した格納先です.
796デフォルトの名無しさん:2007/08/03(金) 17:08:50
i+2 って iそのものは増えてない気が。
あと書き込む先は1/2しなくていいのかい
797791です:2007/08/03(金) 17:13:15
>>796
Bitmap bmp = new Bitmap(pictureBox1.Width / 2 , pictureBox1.Height / 2);
書き込む先は,上記のようにしていますが・・・
根本的に考え方が間違っているのでしょうか?
798デフォルトの名無しさん:2007/08/03(金) 17:14:26
>bmp.SetPixel(i,j,Color.FromArgb(gray,gray,gray));
こっちだよ
bmp.SetPixel(i/2,j/2,Color.FromArgb(gray,gray,gray));
じゃないのか
799791です:2007/08/03(金) 17:18:58
>>798
割り当て、呼び出し、インクリメント、デクリメント、および新しいオブジェクトの式のみがステートメントとして使用できます。

というエラーが出てきます(汗
800デフォルトの名無しさん:2007/08/03(金) 17:21:16
>>799
それは i + 2 のほうじゃないの?
i += 2でやってみそ
801デフォルトの名無しさん:2007/08/03(金) 17:24:55
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];
  }
}
802791です: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;
}

803デフォルトの名無しさん:2007/08/03(金) 17:28:45
駄目でしたじゃなくてさ〜
そのエラーが出た時点で、どの関数のどの引数がいくつになってるから発生したのか
すぐに調べられるだろ?
804デフォルトの名無しさん:2007/08/03(金) 17:34:54
iとjが逆だろw
805791です:2007/08/03(金) 17:39:30
すいみません(汗
本当に初心者なのでこの板で質問していました.
(初心者用ということなので…)

>>804
iとjを逆にしてもフリーズしてしまいます.
この↓
col = img.GetPixel(i,j);
が,フリーズしたときに緑色になっています.
806デフォルトの名無しさん:2007/08/03(金) 17:42:21
>>805
今後のためにも、エラーで止まったらどうすればいいのかは自分でできるようになっとくといいよ
とりあえず、i と j が逆なのはわかった(x,yと置き換えるとわかりやすいぞ)
1箇所変える位じゃすまないから、for文の Height と Width を入れ替えてみ
807デフォルトの名無しさん:2007/08/03(金) 17:42:41
あわてんぼにも分かるようにi,jじゃなくて
x,yでループ回せよ。

for(x = 0; x < pictureBox1.Width; x+=2)
ってな……


808791です:2007/08/03(金) 17:46:46
みなさん,ありがとうございます!!!

できました!画像の縮小!
とても助かりました.
エラーがでたとき,もっと色々考えるべきことはたくさん
ありますね・・・(反省
809デフォルトの名無しさん:2007/08/03(金) 17:51:25
あと画像を走査するのにピクチャボックスの大きさを使うなよ。
810791です:2007/08/03(金) 17:53:10
>>809
ピクチャボックスの大きさはだめなんですか?!
811デフォルトの名無しさん:2007/08/03(金) 17:55:09
大きさがimageと同じとは限らない
汎用性もない
812791です:2007/08/03(金) 17:58:45
あらかじめ長さを調べないといけないということですか?
813デフォルトの名無しさん:2007/08/03(金) 18:00:05
あとエラー時に緑になってるって書いてたが、その時点でマウスカーソルを
変数の上に乗っけりゃパラメタがわかるし、ローカルというウィンドウの
$exception に詳しい理由が書いてあることもある。
814デフォルトの名無しさん:2007/08/03(金) 18:02:37
>>812
ピクチャーボックスの高さは pictureBox1.Height だが
イメージの高さは pictureBox1.Image.Height だろう
815791です:2007/08/03(金) 18:03:26
>>813
了解です!
勉強になります.
816デフォルトの名無しさん:2007/08/03(金) 18:08:59
GetPixel/SetPixelだとおかしいところがなくてもフリーズしてるみたいになりそう
817デフォルトの名無しさん:2007/08/03(金) 18:10:49
いやー、まるまるコピーして動かしてみたが
意外と速いんで驚いた。
818791です:2007/08/03(金) 18:12:25
>>814
確かに・・・そうですね.
気をつけます!
819デフォルトの名無しさん:2007/08/03(金) 18:18:27
画像の取り扱いについて話をされているようですが
画像処理について詳しいかたいらっしゃいますか?

ラベリング処理でなやんでいます
820デフォルトの名無しさん:2007/08/03(金) 18:20:55
画像処理そのものは別スレがあるけど
C#特有の話ならここでもいいが・・・

画像処理 その9
http://pc11.2ch.net/test/read.cgi/tech/1183910525/
821デフォルトの名無しさん:2007/08/03(金) 22:46:04
すいません。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);
  :
  :
822デフォルトの名無しさん:2007/08/03(金) 22:46:44
これを以下の様に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シリアライズのドキュメント見返してきますが、ご指南願います。
823デフォルトの名無しさん:2007/08/03(金) 22:49:12
>>822
どぼん氏のところにそれがうまくいかない理由と解決法が書いてあるよ。
っていうか、普通そういう有名どころにヒントないか見ないか?
824デフォルトの名無しさん:2007/08/03(金) 23:28:38
>> 823
ありがとうございます。
『ArrayListオブジェクトの内容をXMLファイルに保存する』のTipsでしょうか?
この記事は、2つの理由でスルーしていました。
⇒私のところではエラーが出ないこと。
⇒ジェネリックで型指定しているから型が定まらないことはないと思ってました。

念の為型指定しましたが、結果は同じでした。
⇒XmlArrayItem してみました。

すいません。私は節穴でしょうか。。。
もっとずばりのTipsあるでしょうか。。。

出直してきます。。。
825デフォルトの名無しさん:2007/08/03(金) 23:31:39
hoge クラスは public じゃないように見えるが
826デフォルトの名無しさん:2007/08/03(金) 23:36:53
>>825

どうもです。。。
しょうもない誤記ですいません。
⇒質問がミスっただけで、コードは最初からpublicです。

訂正します。

public class hoge {
~~~~~~
  public string hogehoge1;
  public string hogehoge2;

  public hoge()
  {
  }
}

827デフォルトの名無しさん:2007/08/04(土) 00:16:55
>>826

こうなればいいってこと?

<?xml version="1.0"?>
<ArrayOfHoge xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <hoge>
  <hogehoge1>○</hogehoge1>
  <hogehoge2>×</hogehoge2>
 </hoge>
 <hoge>
 
  <hogehoge1>△</hogehoge1>

  <hogehoge2>□</hogehoge2>
 </hoge>
</ArrayOfHoge>

このコードのまま実行すると、シリアライズできとるがな・・・
828823:2007/08/04(土) 00:19:58
>>824
ごめんなんか勘違いしとったw
偉そうにいって申し訳ない

で、俺も追試験してみたけど827の言うとおり何も問題なく普通に
シリアル化できるみたいだけど。
829デフォルトの名無しさん:2007/08/04(土) 00:34:38
>>827
>>828

恐縮です。。。
その通り。hogeは問題ないです。
シリアライズできます。

いまさら、何でダメだったか書きにくいのですが。。。
>>825さんが指摘して下さった時点で、実物とデフォルメした質問の違い
を疑うべきでした。

どぼんさんの所にもMSDNにもXMLのシリアライズはpublicだけだよ、と書
いてあったし、それを読んで知っていたのに。。。

悩みの対象の表示されないメンバはprivateでした。
⇒相談にのって下さった皆様には知る由もないことです。

デフォルメした質問にはあるべき姿のpublicを打ち込んでいながら。。。
はぁ〜、バカすぎてどうしようもないです。
お騒がせして申し訳ありませんでした。スレ汚しです。

>>827さん 828さん
ありがとうございました。本当にここはあったかいですね。
また、こさせて下さい。

ちなみにprivateでシリアライズしたい時はバイナリにしてね、とMSDNに
書いてありました。
830デフォルトの名無しさん:2007/08/04(土) 02:05:49
enumについての質問なんですが、

enum Test
{
    test1,
    test2,
    test3
}

こういう列挙体があって、

Test test = Test.test1 | Test.test2;

という変数があるとします。
このとき、ifの条件で、"test内にtest1が含まれるとき"という
条件を指定するとき、どのような式を書けばいいのでしょうか?
831デフォルトの名無しさん:2007/08/04(土) 02:08:13
>>830
フラグにしたいんなら、test1=1, test2=2, test3=4 みたいに明示しないとまずいかも。

(test & Test.test1) != 0
832デフォルトの名無しさん:2007/08/04(土) 02:11:35
そうやっても Test.test1 | Test.test2 で初期化できたっけ?
833デフォルトの名無しさん:2007/08/04(土) 02:26:58
>>831
うまくいきました。
フラグにする時ってビット演算使うんですね。
==とか!=とか使ってた場所全部直さなきゃ orz
ありがとうございました。
834デフォルトの名無しさん:2007/08/04(土) 03:17:14
どうしてCLIにPascalの集合型のようなものを入れなかったのか不思議でならん。
835デフォルトの名無しさん:2007/08/04(土) 03:17:34
FlagsAttributeを使うんだ
836デフォルトの名無しさん:2007/08/04(土) 03:23:37
>>833
>>831の書き方は微妙にまずい場合があるよ。
たとえばMSDNのFlagsAttributeの解説にあるように、
ReadWrite = Read OR Write のような定数を定義した場合ね。

(test & Test.test1) == Test.test1の方が好ましいと思う。
837デフォルトの名無しさん:2007/08/04(土) 07:17:10
Express Editionを使ってます。
C#を起動したときの「ソリューションエクスプローラー」、「プロパティー」のような、
自由に大きさが変えられてきっちり収まる部品を置きたいんですが、
あれはなんというものなんでしょうか?
お願いします。
838デフォルトの名無しさん:2007/08/04(土) 09:06:53
839デフォルトの名無しさん:2007/08/04(土) 11:20:09
>>838
ありがとうございます!
840デフォルトの名無しさん:2007/08/04(土) 11:25:15
>ReadWrite = Read OR Write のような定数を定義した場合ね。
>(test & Test.test1) == Test.test1の方が好ましいと思う。

意味を考えて使えってことだけじゃねーの?
(test & Test.ReadWrite) == Test.ReadWrite
(test & Test.ReadWrite) != 0
そっちがまずいとか正しいとかってもんでもないだろ。
841デフォルトの名無しさん:2007/08/04(土) 11:35:02
その二つの式は等価ではないぞ
842デフォルトの名無しさん:2007/08/04(土) 11:36:08
いや、

(test & Test.test1) == Test.test1

こういう書き方は「慣習」でもあるから素直に従ったほうがいいと俺は思うけどね。
それは別に村の掟だから従え、って意味ではなく、一般的は慣習には従ったほうが
人のコードを読むときも自分がコード書くときも余分な思考をスキップできるという利点があるからだけど。
843デフォルトの名無しさん:2007/08/04(土) 13:57:09
>>841
だから意味を考えてといっとるんじゃ。

>>842
そうか、慣習ってイメージが俺にはなかった。
一般にこう書くものならそれに合わした方がいいかもな。
844デフォルトの名無しさん:2007/08/04(土) 14:03:02
MSDNでは!=0でフラグがたってる判定に使ってるね
845デフォルトの名無しさん:2007/08/04(土) 14:03:04
>>843
揚げ足取りじゃなく、だから意味を考えるなら
test & Test.ReadWrite) != 0

これはまずい。
こんな単純な論理演算の陥穽はプログラマなら人に言われなくても気づくべきだが、
それが無理なら、言ってるように素直にMSDNのFlagsAttributeの解説を読んだ方がいいよ。

例えば、

Read = 1,
Write = 2,
ReadWrite = Read | Write

だったらどういう問題が起こるか考えてみ
846デフォルトの名無しさん:2007/08/04(土) 14:07:26
なにも問題は起きません
847デフォルトの名無しさん:2007/08/04(土) 14:22:48
あの2式はセマンティクスとか言う以前に結果が異なるんだよ
848デフォルトの名無しさん:2007/08/04(土) 16:03:36
ReadWriteが3になる
849デフォルトの名無しさん:2007/08/04(土) 21:57:21
(hoge & ReadWrite) != 0
だとReadとWriteどっちが有効なのかわかんないよママン
850デフォルトの名無しさん:2007/08/04(土) 21:59:27
なんでそんなループすんの?
851デフォルトの名無しさん:2007/08/04(土) 22:57:14
そのフラグを何に、なんのために使うのかによって、困るか困らないかも
変わってくるんじゃねーの?

プログラム全体を見ないで一部だけ見て議論してもしゃーないべ。
一般論で片付く話じゃないだろ。
852デフォルトの名無しさん :2007/08/04(土) 23:05:04
さっきコンソールアプリでテキストファイルを読み込んで
コンソールライトランで書き出したら文字化けした
初めてコンソールアプリでファイルを読み込んだんですけど
なんか初期化が必要なんでしょうか?
教えてください。
853デフォルトの名無しさん:2007/08/04(土) 23:09:42
エンコードが間違ってるんじゃねぇの
854デフォルトの名無しさん:2007/08/04(土) 23:25:24
new StreamReader("hoge.txt", Encoding.GetEncoding("shift_jis"))とか?
855852:2007/08/04(土) 23:29:55
新しい項目の追加でtxtファイル追加で追加したら文字化けして
メモ帳でUTF-8で保存したtxtファイルを開いたらちゃんと開けた
わけわかんね
856デフォルトの名無しさん:2007/08/05(日) 00:48:48
>>845
ぜんぜん意味が通じないな…

(test & Test.ReadWrite) != 0
ReadかWriteのフラグ少なくともどっちかが立ってたらという意味で使う

(test & Test.ReadWrite) == Test.ReadWrite
ReadとWriteのフラグ両方のフラグが立ってたらという意味で使う

やりたい処理の意味にあわせて使い分けると言ってるだけなのに…

857デフォルトの名無しさん:2007/08/05(日) 00:52:46
だいたいビットフラグってのは、個別の独立したフラグの集合って場合が多いから、
この例で言うReadWriteを判定で使う場面も少ない気もするしな。

ただ、慣習で一般にそういう書き方するってんなら特に反対する理由もないが。
858デフォルトの名無しさん:2007/08/05(日) 01:06:00
>>856
自分の間違いや負けを認められない悲しい奴が後付でほざいているようにしか聞こえない。
本気で言っているのなら>>830からの話の流れをもう一度確認するように。
859デフォルトの名無しさん:2007/08/05(日) 01:21:22
お前はいったい何を言ってるんだ?
>>830の話なら(テストするフラグが単一なら)どっちの書き方でも結果は一緒だろ。

ただ、複数フラグの場合にまずい場合があるので、!=0 ではなくて == フラグ値 の方がいいという指摘

@ぞれは!=0が間違いってことじゃなくて、判定したい意味内容によって使い分けるだけじゃないの?

慣習なので云々

そうか

って流れだろ。

それに対して、いきなり@のところで
>その二つの式は等価ではないぞ
って横槍入れてきただけだろ(等価でない、意味が違うから目的に合わせてってことで@を書いたのに)

後付ってなにが後付なわけ??
どこが間違ってるわけ?
ぜんぜんわからん。
860デフォルトの名無しさん:2007/08/05(日) 01:23:08
>>858
自分の間違いや負けを認められない悲しい奴が後付でほざいているようにしか聞こえない。
本気で言っているのなら>>830からの話の流れをもう一度確認するように。
861デフォルトの名無しさん:2007/08/05(日) 01:24:45
ああちなみに俺が書いたのは
>>840,843,856,857,859だ、念のためな
862デフォルトの名無しさん:2007/08/05(日) 01:28:41
あんたの言ってることは間違ってないよ
863デフォルトの名無しさん:2007/08/05(日) 01:39:14
負け惜しみで言ってるのかとおもったが、どうやらリアルで頭悪いみたいだね。

端的に言うけど、
>(test & Test.ReadWrite) != 0
>ReadかWriteのフラグ少なくともどっちかが立ってたらという意味で使う

こういう使い方は普通はありえないよ。
これじゃReadWriteの値の定義に依存したコードになっちゃうじゃないかw
864デフォルトの名無しさん:2007/08/05(日) 01:48:05
やめようかとも思ったが、あえて追い討ちをかけるよ。
だからそもそも>>830を読めよ、と。

>>830の質問に関する回答が妥当かどうか、って話をしてたはずなのに
どうして「そういう書き方がありうるかありえないか」の話になってるんだよw
865デフォルトの名無しさん:2007/08/05(日) 01:48:14
??
866デフォルトの名無しさん:2007/08/05(日) 01:50:55
どれが誰かさっぱりわからんw

>こういう使い方は普通はありえないよ。
>これじゃReadWriteの値の定義に依存したコードになっちゃうじゃないかw
どういう意味??
867デフォルトの名無しさん:2007/08/05(日) 01:56:35
だからReadWriteが、

ReadWrite = Read | Write

こう定義されている、という前提でないと856の言っていることは成立しない。
一般に、コードにいういう「なれなれしい」前提を持ち込むのはよくないこととされている。
868デフォルトの名無しさん:2007/08/05(日) 02:01:07
最初からそういう前提の話だろうがよ。
MSDNの例もそういう話だろうがよ。
869デフォルトの名無しさん:2007/08/05(日) 02:02:48
どっかよそのスレでやれよ。気持ち悪い
870デフォルトの名無しさん:2007/08/05(日) 02:04:28
こっちこないでください><
871デフォルトの名無しさん:2007/08/05(日) 02:07:05
ビットフラグでReadとWriteがあってさらにまったく別の値でReadWriteが定義されてるほうがびっくりするわ。
872デフォルトの名無しさん:2007/08/05(日) 02:20:22
そうね
873デフォルトの名無しさん:2007/08/05(日) 02:22:12
>ReadWrite = Read | Write
>こう定義されている、という前提でないと>>856の言っていることは成立しない。

もしこうでないなら、そもそも複数ビットのフラグの話の意味がないだろ。
最初からReadWriteフラグってのが、ReadともWriteとも関係ないなら、
@そもそも1ビットの独立したフラグで、どっちの書き方でも違いがない
A複数ビットフラグだとするといったいなんのフラグなんだか意味不明

どっちにしても意味が通らない。
874デフォルトの名無しさん:2007/08/05(日) 14:10:20
ファイル監視のプログラムを作っているのですが、
backgroundWorkerのIsBusyの参照がうまくいかず困っています

worker.RunWorkerAsync()

Thread.Sleep(100)//一応ウェイトを置く

if(worker.IsBusy == true)
{
「FileWatch.Path = Folder.PATH」が正常に処理され、workerが終了していないときの処理
}
else
{
「FileWatch.Path = Folder.PATH」が正常に処理されず、workerが終了してる時の処理
}
875874: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);
}
}
876874: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の値を取得する方法はないでしょうか?
877デフォルトの名無しさん:2007/08/05(日) 14:21:18
そもそもFileSystemWatcherの使い方がおかしい気がするな。
なんでBackgroundWorkerのなかで呼んでるのだろうか?
878デフォルトの名無しさん:2007/08/05(日) 14:23:04
おいおいスレッドの意味もFileSystemWatcherの意味も
むちゃくちゃ誤解してないか?w

とても人に質問して簡単なアドバイスもらって解決できるレベルとは思えない。
なんでまず地道に勉強しようとは思わないの?
879デフォルトの名無しさん:2007/08/05(日) 14:34:58
そんな糞レスしてる暇があったらなにかヒントでもやれば。
880デフォルトの名無しさん:2007/08/05(日) 14:36:29
>>879
同意だな。
878は書き出しは良いのに結局煽りとは良い性格してるな。
あ、オレが答えられたら良いんだけど。
881デフォルトの名無しさん:2007/08/05(日) 14:38:18
まあちょうど879のように、馬鹿ってのは自分の主張を自分自身に適用できないのな。

俺は874のような人間にヒントを出すことに意味があるとは思わないし、だからやらないが
お前(879)が意味があると思うならまずお前がやれよ。
882デフォルトの名無しさん:2007/08/05(日) 14:41:25
あほらし
883デフォルトの名無しさん:2007/08/05(日) 14:43:18
俺は何も思うところはないしが、>>878は思うところがあるんだろ?
だったらそれを具体的に指摘するのが質問者にとっても良いことだろうがよ。
それをしないんなら始めから糞にも劣るレスしないことだな。
884デフォルトの名無しさん:2007/08/05(日) 14:45:18
文盲だろうか?
「思うところ」は書いてある。
874は質問するレベルに到達してないからまず地道に勉強せよ、と。

馬鹿な君が読み取れないだけだ。
885デフォルトの名無しさん:2007/08/05(日) 14:52:38
質問するレベル(苦笑)
ふらっとスレで何か言ってる奴がいるぜ。
886デフォルトの名無しさん:2007/08/05(日) 15:06:22
そういう煽りもスレ違い
887デフォルトの名無しさん:2007/08/05(日) 15:16:11
>>874
FileSystemWatcherって変更があったらイベントを発生するんじゃなかったっけ?
何故スレッドに詰め込んでんの?

>for(;;)//キャンセル命令が出るまで監視し続ける

だからworker.IsBusyが常にtrueになってしまい…であってるんじゃないの?

>for(;;)//キャンセル命令が出るまで監視し続ける
>{
>if (worker.CancellationPending == true)

while で書いたほうがいいんじゃない?
888デフォルトの名無しさん:2007/08/05(日) 15:19:44
この書き方もきになるなあ。
>MessageBox.Show(Convert.ToString(worker.IsBusy));

889874:2007/08/05(日) 15:25:53
スレが荒れるのは不本意ですが...

>>877
私のやりたいことは

1.プログラム起動時、XMLファイルから「監視するフォルダのパス」「監視するファイルの拡張子」を取得

2.「監視するフォルダのパス」「監視するファイルの拡張子」がnullではない場合、監視を開始する

3.MainWindowのMenuから「監視するファイルの変更」を選択した場合監視を止め、
 監視するファイルの拡張子を入力させるウィンドウを表示する→入力が正常なら新しい条件で監視を実行


MainWindowとは別で監視させる必要があるため、backgroundWorkerを使っています(間違っているかもしれませんが...)
(backgroundWorker内の終了処理として、FileWatch.Dispose();を忘れている気がしてきました...)
890874: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#を少しずつ勉強しながら目的のソフトを作っています。
 後もう少しで完成するのですが、どうしてもフォルダ監視がうまくいかず
 スレに書き込ませて頂きました。)
891デフォルトの名無しさん:2007/08/05(日) 15:35:01
>FileWatch.Dispose(); <-これだとエラーが出ます。
なんていうエラーかぐらい書こうよ。

>FileSystemWathcer FileWatch = new FileSystemWathcer();
>FileWatch.Dispose(); <-もちろん止まってくれません。
これなに?
なにがしたいの?コンパイルできてるの?
892デフォルトの名無しさん:2007/08/05(日) 15:36:21
>>889
わざわざBackgroundWorkerでFileSystemWatcher作る必要はないと思いますよ。
監視ディレクトリを動的に変更したいだけならEnableRaisingEvents=falseしてから
各プロパティを更新してEnableRaisingEvents=trueにしてあげればいけそうですけど。
試してませんが。
893874:2007/08/05(日) 15:43:22
>>891
説明が不足していて申し訳ありません。
もちろんコンパイルできません。

「FileWatchの定義がありません」とエラーが出ます。


>>892
ありがとうございます!!
プログラムを書き直して見ます。
894デフォルトの名無しさん:2007/08/05(日) 15:49:00
>>893
FileWatch をちゃんとメンバーにしていないからだよ。
ないものにはアクセスできないよ。
インテリセンスで出てこなかっただろ?
895デフォルトの名無しさん:2007/08/05(日) 15:57:49
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/index.html
このあたりを読んだほうがいいよ。
896デフォルトの名無しさん:2007/08/05(日) 16:10:04
とりあえずFileSystemWatcherの典型的な使い方をしてみようよ。
WindowsFormにツールボックスからFileSystemWatcherをドロップして、
プロパティウインドウでPathとCreatedやDeletedなどのイベントを実装する。
これでできたソースと自分のソースを見比べてみるといい。
897874:2007/08/05(日) 16:16:23
>>894
こちらのアドバイスもどうもありがとうございます。

目的どおりに動作させることが出来ました。
(backgroundWorkerは削除しました。)

色々とアドバイス頂きましてありがとうございました。
898デフォルトの名無しさん:2007/08/05(日) 18:00:19
質問させてください。

ファイルへの関連付け機能で起動されたアプリで、
起動のきっかけになったファイルの名前を取得するのは
どうやれば良いのでしょうか。

ある拡張子に関連付けされているアプリを探す方法は
わかったのですが、これのやり方は探してもみつかりませんでした。。。
899デフォルトの名無しさん:2007/08/05(日) 18:07:42
Main の引数とか Environment クラスのプロパティ&メソッドとか
900デフォルトの名無しさん:2007/08/05(日) 18:55:43
>>899
ありがとうございました。
Environment.GetCommandLineArgs()で求めているものが取得できました。
901デフォルトの名無しさん:2007/08/05(日) 20:41:07
textBox1.Text ="abc"
textBox2.Text ="abc"
textBox3.Text ="abc"
というふうな感じの場合、ループで処理すれば綺麗にまとまりますよね
数字の部分を配列変数のようにアクセスできないものでしょうか?
オブジェクト指向がよく変わってないもので、よろしくお願いします
902デフォルトの名無しさん:2007/08/05(日) 20:47:33
>>901
>>761-763
上でも言われてるがおすすめしない。少々面倒でもリストにしといたほうがいい。
903デフォルトの名無しさん:2007/08/05(日) 20:53:08
>>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";
とか。
904デフォルトの名無しさん:2007/08/05(日) 21:10:27
TextBox[] tb;//メンバ変数
for(int i=1;i<=3;i++)
tb[i-1]=this.Controls["textBox"+i.ToString()];
コンストラクタだけなら許されると思う
905デフォルトの名無しさん:2007/08/05(日) 21:10:57
>>902、903
テキストボックス型の配列にいれるのかな
なるほど。登録の手間がが多少かかってもこれが安全なんですね
ありがとうございました
906デフォルトの名無しさん:2007/08/05(日) 21:58:51
Control.Tagって使ってる?
やっぱりDictionary<Control, 値の型>を使うかコントロールを拡張するべき?
907デフォルトの名無しさん:2007/08/05(日) 22:45:59
Tagを使っちゃうと占有しちゃうからなー
他の何かがTagを使おうとしてる場合に困るので避けてしまう。
908デフォルトの名無しさん:2007/08/05(日) 22:52:32
>>906
場合によりけり、としか言い様がない気がしますが。

俺はTagで十分な場合が多いと思うけどDictionary使うかコントロールを拡張して
関連するオブジェクト専用の型付けされたプロパティを追加するかの選択なら
迷わず後者を選ぶなあ。

まあ、でもこれもケースバーケースか。
909デフォルトの名無しさん:2007/08/06(月) 09:52:37
すいません、現在実行しているプログラムのパスってどうやって取得していますか?

カレントディレクトリの取得だと、ファイル名の選択ウィンドウ等を使うと、カレントディレクトリも変更されてしまうので…
910デフォルトの名無しさん:2007/08/06(月) 10:06:41
911909:2007/08/06(月) 10:08:17
>>910
thanks ありがとう
912デフォルトの名無しさん:2007/08/07(火) 13:13:09
質問です。

SQLで"SELECT〜FROM〜WHERE 値1 AND 値2"

といった形のSQLをDataAdaterを使い、DataSetにFill・ListBoxに表示しています。

そこで、SQLの条件が値1のものはそのまま、値2のものは文字を赤くしたいのですが
可能でしょうか?
913デフォルトの名無しさん:2007/08/07(火) 13:37:23
914912:2007/08/07(火) 14:50:29
ふむふむ、DrawModeを使ってやればいいのですね。

今回自分の場合だと、どのような形でやればいいでしょうか?
915デフォルトの名無しさん:2007/08/07(火) 15:05:28
916デフォルトの名無しさん:2007/08/07(火) 15:07:13
917912:2007/08/07(火) 15:25:21
えっと、上記のMSDNを参考にすると、Switchのところに何を入れればいんでしょうか?

caseには値1,2でいいんかな?
918デフォルトの名無しさん:2007/08/07(火) 15:47:56
はぁ?
919デフォルトの名無しさん:2007/08/07(火) 16:08:34
やってみりゃいいべ
920912:2007/08/07(火) 16:46:21
そのまま試してみたところ、色を変えることに成功しました。

しかし、これだと0行目と1行目しか色が変わらず、値1と2は何行目にくるか
毎回決まっているわけではないので、どうしたらいいでしょうか?

また、それまではListBoxにきちんと表示されていたものが、System.Data.DataRowView
となってしまいました。DisPlayMenberも変える必要があるのでしょうか?
921デフォルトの名無しさん:2007/08/07(火) 16:53:19
でぃす ぷれい めんばあ
922デフォルトの名無しさん:2007/08/07(火) 16:54:40
そのコードの意味を考えてみればおのずとどう書けばいいかわかりそうなもんだが・・・
インデックスの値だけで色を変えればそりゃインデックスによってしか変えられないのは当たり前でしょ。
リストの内容を見ないと。
923デフォルトの名無しさん:2007/08/07(火) 16:58:32
どんだけ初心者なんだ・・・
自分がどの程度やったのかを提示してもらえるとレベルがわかって説明しやすいんだが。
924デフォルトの名無しさん:2007/08/07(火) 17:16:35
コンボックスAに値を入れた後、ロストフォーカスして自動的にコンボックスBにコンボックスAで入力した値が入る処理ってどうやったらいいか分かりますか?


925912: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については、まだ変わっていません。
926デフォルトの名無しさん:2007/08/07(火) 17:37:02
>>924
キーボードの H J 見てみろ
927デフォルトの名無しさん:2007/08/07(火) 17:44:41
>>925
つまりさ、Indexがわかれば Items とかでデータの中身もわかるよな。
データの中身によって色を変える、という事ならIndexさえわかれば
どうにでもできると思わないか?
928デフォルトの名無しさん:2007/08/07(火) 17:54:49
enumの中身をあとから追加することってできますか?

enum iro
{
aka=10,
ao=20
}

とかに

midori=30
とかを動的に追加したい
929デフォルトの名無しさん:2007/08/07(火) 17:59:11
>>924
KeyPressかなんかでEnterを待つ
→そのときの値をcomboBoxB.Items.Add
→(ロストフォーカスというのが意味分からんが)comboBoxB.Focus()?

>>928
むりぽ
930デフォルトの名無しさん:2007/08/07(火) 18:06:52
>>928
何に使うんだそれ
static IDictionary<string, int>とかじゃだめなのか
931デフォルトの名無しさん:2007/08/07(火) 18:16:47
チャットレディって知ってますか?
今、急激に需要が伸びている在宅アルバイトです。
報酬もよくて、時給換算で3000円〜6000円
位です。怪しい仕事ではありません。
本業でもいいですし、副業にするなら最高の
アルバイトです。下記サイトをご覧下さい。詳しく説明しています。
http://www2.atpages.jp/nicl1216
932デフォルトの名無しさん:2007/08/07(火) 18:24:45
インストールかよ
933デフォルトの名無しさん:2007/08/07(火) 19:04:16
>>929
やっぱだめか
動的にenumそのものを作れるって知ったんで
追加もできるのかと思ってた

>>930
あるディレクトリからビットマップを読んでLISTに入れるが
これだとインデックスでしか指定できないから
ENUMで名前に対応するインデックスのリストを作って
名前でインデックス刺せるようにしたかった

ジェネリックなら名前とビットマップもったクラスつくって
それを配列ができるんだろうが
名前で呼び出すにはリスト内からそれに対応した名前を
探すと言う処理を加えなければならなくて
ビットマップが増えれば増えるほど遅くなりそうで困る

何かいいアイデアはないかの〜
934デフォルトの名無しさん:2007/08/07(火) 19:07:04
>>933
悪いけど意味不明にしか聞こえないなあ。。
935デフォルトの名無しさん:2007/08/07(火) 19:08:27
遅くなることが実感できるとは思えないがなあ
936デフォルトの名無しさん:2007/08/07(火) 19:10:16
937デフォルトの名無しさん:2007/08/07(火) 19:11:05
遅い早い以前に、ファイルと一対一で対応するEnumの要素の必要性がまったくわからんw
938デフォルトの名無しさん:2007/08/07(火) 19:11:21
>>933
配列とリストしか知らんの?
939デフォルトの名無しさん:2007/08/07(火) 19:16:01
つハッシュ
940デフォルトの名無しさん:2007/08/07(火) 19:17:07
Dictionary<string, Bitmap>以外ありえない
941デフォルトの名無しさん:2007/08/07(火) 19:20:23
>>940
それもどうなの?w
Dictionaryが必要になるほどガンガンBitmapこさえて大丈夫なんかいな?
942デフォルトの名無しさん:2007/08/07(火) 19:26:17
やってみれ
943デフォルトの名無しさん:2007/08/07(火) 19:44:34
検索が遅くなるのを実感する前にビットマップがメモリを食いつぶすだろ
944デフォルトの名無しさん:2007/08/07(火) 19:56:30
動的にenumのメンバを追加できたとしても
そのメンバを使う手段はリフレクションしかないわけだから
かえってとんでもなく遅くなるはずw
945デフォルトの名無しさん:2007/08/07(火) 19:58:59
遅いかどうかは別として考え方が変。
enumにする利点がない。
あったら教えて。
946デフォルトの名無しさん:2007/08/07(火) 20:11:16
private enum 部位 { 目 = 0, 鼻 = 1, 口 = 2 }
Bitmap[] bitmaps = new Bitmap[3];
bitmap[部位.目] = new Bitmap("目.bmp");
bitmap[部位.鼻] = new Bitmap("鼻.bmp");
bitmap[部位.口] = new Bitmap("口.bmp");
こういう使い方は稀にやるかも
増える可能性があるならもちろんDictionaryにするけど
947デフォルトの名無しさん:2007/08/07(火) 20:30:15
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"に変換してからじゃないとダメなようです
950デフォルトの名無しさん:2007/08/07(火) 22:00:40
ParseExact
951デフォルトの名無しさん:2007/08/07(火) 22:01:10
そうですか。

報告ご苦労様。
952デフォルトの名無しさん:2007/08/07(火) 22:28:11
ぜんぜん関係ないけどEnumのToString強烈に遅いのな、びっくりしたわ。
953デフォルトの名無しさん:2007/08/07(火) 22:31:24
そうですか。

報告ご苦労様。
954デフォルトの名無しさん:2007/08/07(火) 22:48:51
いったんDictionary<int, string>にためたほうがそれでも圧倒的に早いのな
びっくりしたわ

報告了
955デフォルトの名無しさん:2007/08/08(水) 00:39:23
ドラッグアンドドロップの質問なんですが、ファイルをドロップした時は
DragDropイベントが発生するのに、フォルダをドロップしたときには発生しません。
DragEnterイベントで

if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
    e.Effect = DragDropEffects.All;
}

の部分は反応するのですが、DragDropイベントを反応させるにはどうしたらいいでしょうか?
956デフォルトの名無しさん:2007/08/08(水) 01:15:20
>>955
//if (e.Data.GetDataPresent(DataFormats.FileDrop))
//{
    e.Effect = DragDropEffects.All;
//}
957デフォルトの名無しさん:2007/08/08(水) 01:19:25
>>955
ドラッグ&ドロップを受け入れるコントロールのAllowDropをtrueにしてる?
958デフォルトの名無しさん:2007/08/08(水) 01:19:35
>>956
ifを消さなくても中がtrueになるので指摘されている中の式には到達するのですが、
フォルダをドロップしてもDragDropイベント自体が発生しないので困っています。
ファイルだと発生するのに… orz
959デフォルトの名無しさん:2007/08/08(水) 01:20:54
>>957
してます。
また、空のフォームのを使っているので他のコントロールが
邪魔しているということもないです。
960デフォルトの名無しさん:2007/08/08(水) 01:29:45
ソース晒せるなら晒してみて
961デフォルトの名無しさん:2007/08/08(水) 01:40:24
>>952
具体的にどのくらい強烈に遅いのかも教えてくれたらよかったぜ?
962デフォルトの名無しさん:2007/08/08(水) 01:53:32
>>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イベント起きるぞ。。。
ブレイク張ってりゃ止まるだろ???
964デフォルトの名無しさん:2007/08/08(水) 02:21:45
>>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();
}
}
965デフォルトの名無しさん:2007/08/08(水) 02:23:06
>>962
イベントハンドラを登録してないって事はない?
966デフォルトの名無しさん:2007/08/08(水) 02:24:44
>>962
一応ここに乗せる前にもこのコードで試したときもブレークポイント張ったんですが、
ブレークポイント張ったところに引っかからないんですが…
967デフォルトの名無しさん:2007/08/08(水) 02:26:42
>>964
イベントがデザイナで自動実装されてるとこ以外こちらのコードと
一緒です。

>>965
ファイルをドロップしたときは反応するのでそれはないです。
968デフォルトの名無しさん:2007/08/08(水) 02:28:24
>>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
969デフォルトの名無しさん:2007/08/08(水) 02:29:58
>>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デフォルトの名無しさん:2007/08/08(水) 02:31:39
>>969
置換したけど動作は変わらなかったよ
971デフォルトの名無しさん:2007/08/08(水) 02:37:36
>>969
…… Vista?
972デフォルトの名無しさん:2007/08/08(水) 02:37:59
>>970
そうですか…
うーん、何が原因なんだ orz
もしかして.NETが何らかの原因で壊れたって可能性はありますか?
973デフォルトの名無しさん:2007/08/08(水) 02:38:52
>>971
XP SP2です
974デフォルトの名無しさん:2007/08/08(水) 02:43:23
>>972
ファイルをD&Dするとその拡張子に関連付けられたアイコンが背景として表示されるんだよね?
これは自分の環境でも表示されてる。
んで、フォルダをD&Dするとイベントは発生してるけど、↓の部分で
>this.BackgroundImage = Icon.ExtractAssociatedIcon(path[0]).ToBitmap();
「'System.IO.FileNotFoundException' の初回例外が System.Drawing.dll で発生しました。」
ってのが出て背景にフォルダのアイコンは出てこない。
975デフォルトの名無しさん:2007/08/08(水) 02:46:37
>>961
PentiumM 1.73GHzのノートマシンで、

Enum型.ToString()
約3.6マイクロ秒

Dictionary<Enum型,string>で保持して検索
約75ナノ秒
976デフォルトの名無しさん:2007/08/08(水) 02:46:39
>>974
例外飛んできません…
確かに背景画像は変わりませんが。

もしかしてこれが引っかからなかった理由?
977デフォルトの名無しさん:2007/08/08(水) 02:48:00
MainにSTAThreadがついてないよママン
978デフォルトの名無しさん:2007/08/08(水) 02:52:54
>>974
Icon.ExtractAssociatedIcon(path[0]).ToBitmap();
の中で例外は処理されてしまっていて表には出てこない。
VC#の デバッグ→ウィンドウ→出力 で出力されてるだろうから見てみて。
979デフォルトの名無しさん:2007/08/08(水) 02:56:48
>>978
出ました。
んで、こいつの下にブレークポイントを置いたらエラー起こした時に
最後まで行かないということがわかりました。

結局俺のミスか orz
でも.NETの再インストールよりかはマシか。
980デフォルトの名無しさん:2007/08/08(水) 03:08:40
>>975
Enum#ToString はこっそりリフレクション使って名前調べてたりする
981デフォルトの名無しさん:2007/08/08(水) 03:28:47
>>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);
982デフォルトの名無しさん:2007/08/08(水) 03:29:53
>>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;
}
ここまで
983デフォルトの名無しさん:2007/08/08(水) 07:34:01
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の範囲を超えてしまいます。
この場合はどういった処理で求めれば良いのでしょうか?


985デフォルトの名無しさん:2007/08/08(水) 08:34:50
>>984
MSDN嫁よ。
TimeSpan.Secondsの返す値は-59 ~ 59だ。
986912:2007/08/08(水) 09:08:48
>>927
ごめんなさい、ちょっとわからないです・・・・・orz

具体的にどのようにしたらいいでしょうか?
987デフォルトの名無しさん:2007/08/08(水) 10:48:51
>>986
まだやってたのかw
例えば、サンプルのDrawItemの中の
switch (e.Index)

listbox1.Items[e.Index] と値1の比較にすればいいんじゃないか?
988912:2007/08/08(水) 11:02:09
>>987
listbox1.Items[e.Index]を試してみました。が、整数型の値が必要ですと
言われてしまいました・・・
989デフォルトの名無しさん:2007/08/08(水) 11:09:06
比較方法まで書いてないのは“値”1の型がわかんないからなんだけどな
Items[] はobject 型を返すから、ToString()でも Int.parse()でも使って
値1にあわせて比較すればいい。
990912:2007/08/08(水) 11:17:26
細かく書いてなくてすいませんでした。値1,2ともにInt型です。
991デフォルトの名無しさん:2007/08/08(水) 11:28:25
switch (int.Parse(listBox1.Items[e.Index].ToString()))
{
case 値1:
myBrush = Brushes.Red;
break;


とか?
もっといいやり方とかもあるかもしれないが、
とりあえず目に見える形で出してから考えるのがいいかなあ
992デフォルトの名無しさん:2007/08/08(水) 11:31:00
特定のフォルダのバックアップを取るのに、圧縮+アーカイブして別ドライブに保存したいのですが、
何かいいのありますでしょうか?

将来シェアウェア化も考えているので、できればGPL以外だとうれしいうのですが…
993デフォルトの名無しさん:2007/08/08(水) 11:32:52
誤爆?
994912:2007/08/08(水) 11:35:20
値1、2ともに定数値が必要だといわれてしまいます。

int 値1,2 = 0;

で初期化してるんですけれど、ほかに何か必要ですか?
995デフォルトの名無しさん:2007/08/08(水) 11:39:54
switchつかわずに素直にifで分岐したらどうですか
まず基礎から勉強してくださいこのオタンコナスくん
996デフォルトの名無しさん:2007/08/08(水) 11:40:53
定数値が必要 ←必要だから言われてる
997デフォルトの名無しさん:2007/08/08(水) 11:42:30
おいおいSQLに入れた値1はなんだったんだよ
998912:2007/08/08(水) 13:27:13
すみません。初期値は0ですが、途中のボタンクリックイベントの中のSQLで、値1,2には
ちゃんと数値が入ります(値1には0、2には1)。
999デフォルトの名無しさん:2007/08/08(水) 13:34:40
とりあえず 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'″           `'―、,,,,/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。