全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 最新50
C♯相談室 Part16
- 1名無しさん♯sage04/06/15 20:05
-
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
過去スレは>>2-5あたり。
関連リンク
http://onigiri.s3.xrea.com:8080/csharp/index.php?%5B%5B%A5%EA%A5%F3%A5%AF%5D%5D
- 2名無しさん♯sage04/06/15 20:05
- 過去スレ
Part15 http://pc5.2ch.net/test/read.cgi/tech/1083066815/
Part14 http://pc5.2ch.net/test/read.cgi/tech/1076933504/ (現在HTML化待ち)
Part13 http://pc2.2ch.net/test/read.cgi/tech/1071663456/ (ログ行方不明)
Part12 http://pc5.2ch.net/tech/kako/1066/10660/1066038651.html
Part11 http://pc5.2ch.net/tech/kako/1061/10612/1061262958.html
Part10 http://pc5.2ch.net/tech/kako/1051/10518/1051842450.html
Part9 http://pc2.2ch.net/tech/kako/1039/10396/1039646808.html
Part8 http://pc3.2ch.net/tech/kako/1032/10324/1032488831.html
Part7 http://pc3.2ch.net/tech/kako/1027/10275/1027531796.html
Part6 http://pc3.2ch.net/tech/kako/1022/10222/1022257078.html
Part5 http://pc3.2ch.net/tech/kako/1019/10195/1019533942.html
Part4 http://pc.2ch.net/tech/kako/1016/10165/1016597767.html
Part3 http://pc.2ch.net/tech/kako/1009/10094/1009473982.html
Part2 http://pc.2ch.net/tech/kako/1002/10024/1002468050.html
Part1 http://pc.2ch.net/tech/kako/977/977112364.html
- 3デフォルトの名無しさんsage04/06/15 20:47
- C#のお勧めの参考書があれば教えてください。
いまはnagadon氏のメルマガバックナンバで勉強中です。
- 4デフォルトの名無しさんsage04/06/16 00:44
- Webからhtmlを取得するのにこのような方法を取ってますが、何度も繰り返していると
「WebResponse res = req.GetResponse() as HttpWebResponse;」の箇所で何故か
”メモリが不足しています”というcatchできない例外が発生してしまいます。
メモリや不要リソースは意識してDispose()やnullしてるので、例外発生時でも余裕で700MBほど空いています。
一度に接続しているのは1本のみで、1本読み終わって次に移るようにしています。
色んなサイトのサンプル(@IT、Space仮面、緑単車等)で試して今は"as"でやってますが、
「HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;」を
「HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);」でやっていたときでも同じでした。
解決策のヒントだけでもおながいします。
// 最低限で書きましたが、実際にはそれぞれの処理でtry&catchしてます。
private void gethtml(string url, ArrayList htmlbuff) {
ArrayList txt = new ArrayList();
HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
webreq.KeepAlive = true;
webreq.Timeout = 30 * 1000;
WebResponse res = req.GetResponse() as HttpWebResponse;
System.IO.StreamReader rd = new StreamReader(res.GetResponseStream(),
System.Text.Encoding.GetEncoding("euc-jp"));
while(true) {
string str = rd.ReadLine();
if(str == null) break;
htmlbuff.Add(str);
}
rd.Close();
res.Close();
}
- 54sage04/06/16 00:47
- あ、「private void gethtml(string url, ref ArrayList htmlbuff) 」のref書き忘れてました。
実際にはrefついてます。
- 6デフォルトの名無しさんsage04/06/16 03:10
- 前スレに100件以上のフィールドがうんたらって話がありましたけど、
私の環境は2003なのに、100件以上のフィールドを持つテーブルを使用したところ
コマンド文の自動生成のところでエラーが出ました。
クエリビルダで数を減らしたところ、正常に各コマンドが生成されてました。
これは一体なぜですか?
- 7デフォルトの名無しさんsage04/06/16 06:54
- >>4
再現しないなぁ……。
- 84sage04/06/16 10:25
- 取り込みルーチンをThreadでやってるせいなんでしょうか。
1)ArrayListに10個ほどのURLを入れる
2)読み込み用スレッドを起動
3)スレッド内で>>4のような方法で読み込み
4)全部読んだらスレッドを終了
5スレッドの終了を確認 (全て読み込み成功)
6)またArrayListに10個ほどのURLを入れる
7)読み込み用スレッドを起動
8)スレッド内で>>4のような方法で読み込み
9)ここでreq.GetResponse()で「メモリ不足」例外が発生
10)でも、例外を無視して”継続”を押すと何事も無かったかのように以後は正常に動作 (全て読み込み成功)
11)更にまた1〜を行っても、もう例外はでない
・・・というような感じで「メモリ不足」が発生するのは2回目のスレッド起動の1回目の
req.GetResponse()だけなんです。1回目や3回目以降のスレッド起動では発生しません。
しかもreq.GetResponse()で発生してるにもかかわらず、何故かエラーの内容が
「メモリ不足/System.Drwaing.dll」なので原因の特定もできずにまいってます。
- 94sage04/06/17 00:53
- もしかしたらVS.NET20003のバグかもしれません。
Debugだと確実に再現するんですが、Releaseだと何の問題もありませんでした。
- 10デフォルトの名無しさんsage04/06/17 02:27
- >>9
VC++ での話だけれども
バッファあふれのあるプログラムで Debug だと実行時エラーになるけれども
Release では実行時にエラーが出ないことがあったよ
- 11デフォルトの名無しさんsage04/06/17 03:53
- >>10
その辺もチェックしてみます。
ありがとうございます。
- 12デフォルトの名無しさん04/06/17 20:25
- アプリケーションのセットアップを作成して
デスクトップにショートカットを作成したのですが、
作成したショートカットにファイルをドラッグしても
禁止マークが出てしまいます。
ダブルクリックしてアプリケーションの起動は普通に
出来るのですが、原因が良くわかりません。
インストールしたアプリケーションより直接
ショートカットを作成した場合は普通にドラッグして
ファイルを渡すことが出来ます。
作成手順は
ファイルシステムの「ユーザのデスクトップ」に
ショートカットを作成し、以下のように設定しました。
Name:アプリ名
Arguments:(空欄)
Description:(空欄)
Folder:ユーザーのデスクトップ
Icon:(アイコン)
ShowCmd:vsdscNormal
Target:プライマリ出力
Transitive:False
WorkingFolder:アプリケーション フォルダ
です。
どこが問題なのか指摘していただければ幸いです。
よろしくお願いいたします。
- 13デフォルトの名無しさんsage04/06/17 22:02
- C#でUPnP使いたい時に参考になるリソース教えてください
- 14デフォルトの名無しさん04/06/17 23:09
- dobonで以下の記事を発見して、アプリケーションに関連
づけられている動詞の取得を試しているのですが
どうもデフォルトで起動する動詞が出ない気がします。
あと、動詞をコンテキストメニューのように日本語化
したいのですがそれもいまいち解りません。
もしご存知の方がおられましたらお教えください。
宜しくお願いいたします。
ttp://dobon.net/vb/dotnet/process/getverbs.html
- 15デフォルトの名無しさんsage04/06/17 23:43
- >>14
自力でレジストリを参照するしか無いっぽいよ。
因みにProcessStartInfo.Verbsはアルファベット順に並ぶだけ。
ProcessStartInfo.Verbは自分で設定する用(デフォルトは空文字列)。
- 16デフォルトの名無しさんsage04/06/18 05:42
- Anders Hejlsberg - Programming data in C# 3.0
http://channel9.msdn.com/ShowPost.aspx?PostID=10276
"On of the things that we are trying to think about deeply in C# 3.0 is this big gap
that I still see between general purpose languages and databases...
Anyone who's building an enterprise app is using both worlds...
There's certainly a lot of progress we can make by truly marrying these worlds...
It's nothing but mismatch. We gotta do away with that."
Xen(,Cω)取り込んで、Xen自身は陽の目を見ない、あるいはF#的な扱いってことかな?
- 17デフォルトの名無しさんsage04/06/18 07:25
- Cω
しーふぐり?
- 18デフォルトの名無しさん04/06/18 09:01
- (,Cω)
- 19デフォルトの名無しさん04/06/18 18:44
- 質問です。
C#で、SQL文でウェブサービスを使ってDataSetを取ってきてるのですが、
その最中に、
スレッド '<名前がありません>' コード 0 (0x0) で終了しました。
という文が、出力欄に出てきます。
データ量の多いものだと、4回くらい出てきます。
これが時間のかかる原因だと思っているのですが、
このメッセージの意味は何なのでしょうか?
よろしくお願いします。
- 20デフォルトの名無しさん04/06/18 19:21
- 初心者というか今から始める入門者です。
オセロや将棋や囲碁を自分のPCで一からプログラムしたいのですがお勧めの
書籍&ソフトを教えてください
- 21デフォルトの名無しさんsage04/06/18 19:29
- >>20
必要なソフト:Windows
本:「馬鹿でも分る日本語入門」
以上
- 22●04/06/18 19:59
- ASP.NETで、CAB圧縮/解凍を行いたいのですが、いいコンポーネントは
ないですか。
- 23デフォルトの名無しさんsage04/06/18 20:13
- >19
それは単に内部で起動されたスレッドの終了時
メッセージでは?
Webサービスは基本的に遅いね。
なので多少の遅さには目を瞑ってSOAPの相互運用性を
生かしたいときに粒度の大きいメソッドで作るのがコツ。
現場でもJavaとの相互運用案件ばっかりだしな。
DataSetなんて、ほとんど.NET前提なんだから
ASP.NET経由のリモーティングでもいいような気が
するよ。
- 24デフォルトの名無しさんsage04/06/18 20:29
- >22
前スレ685
- 25デフォルトの名無しさんsage04/06/18 20:35
- >20
二人用の将棋ゲームなら簡単だな
画面描画が中心だ
コンピュータと対戦できるようにするなら
大変そうだな
- 26デフォルトの名無しさん04/06/18 20:49
- >>20
スレ違いな気はするけど、一応。
http://www.amazon.co.jp/exec/obidos/ASIN/4875934289/ref=pd_sim_dp_4/249-7917612-4955516
http://www.amazon.co.jp/exec/obidos/ASIN/4320026810/qid=1087559066/sr=1-5/ref=sr_1_10_5/249-7917612-4955516
http://www.amazon.co.jp/exec/obidos/ASIN/4320028929/qid=1087559066/sr=1-2/ref=sr_1_10_2/249-7917612-4955516
http://www.amazon.co.jp/exec/obidos/ASIN/4320029569/qid=1087559066/sr=1-3/ref=sr_1_10_3/249-7917612-4955516
http://www.amazon.co.jp/exec/obidos/ASIN/4320120744/qid=1087559066/sr=1-4/ref=sr_1_10_4/249-7917612-4955516
http://www.amazon.co.jp/exec/obidos/ASIN/4781907237/qid=1087559066/sr=1-8/ref=sr_1_10_8/249-7917612-4955516
- 27デフォルトの名無しさん04/06/18 22:26
- streamreaderを使ってウェブを読み取ろうとするとたまに
データが欠落することがあるんですが下のコードって間違ってますか?
WebResponse response = request.GetResponse();
Stream recieveStream = response.GetResponseStream();
Encoding encode = Encoding.GetEncoding("EUC-JP");
StreamReader sr = new StreamReader(recieveStream, encode);
StringBuilder data = new StringBuilder();
int bufSize = 1024;
char[] buf = new char[bufSize];
int count = sr.Read(buf,0,bufSize);
while(count>0)
{
data.Append(buf);
count = sr.Read(buf,0,bufSize);
}
sr.Close();
recieveStream.Close();
response.Close();
- 28デフォルトの名無しさん04/06/18 23:07
- C#でWinアプリを作成しています。
PictureBox上にマウス動作で描画するアプリなのですが、
そのままではPictureBoxがフォーカスを受け取らないので
カーソルキーでの操作等を実装しようとしたとき、ほかのコン
トロールに制御を奪われ困っています。
マウスでクリックしたとき強制的にフォーカスを移動したりした
のですが、スマートクライアントにするとエラーが出ます。
できればタブキーでフォーカスを受け取るコントロールにしたい
のですがどのようにすればよいのでしょうか。
アドバイスよろしくお願いいたします。
- 29最凶VB厨房sage04/06/18 23:36
- >>27
たまにか?毎回最後欠落するだろ。
簡単にやるならsr.ReatToEndだったか忘れたが、それ使え。
- 30デフォルトの名無しさんsage04/06/18 23:50
- >>29
Reatしてもいいですか?
- 31最凶VB厨房sage04/06/19 00:14
- ワロタ。ReadToEndね
- 32デフォルトの名無しさんsage04/06/19 09:32
- >>28
FormのKeypreviewプロパティを使えばどうですか?
- 33デフォルトの名無しさん04/06/19 13:18
- >>29
27でつ。.net FWのヘルプにはstreamreader.readtoendはあんまり信頼性
がないからなるべく使わないでね、的なことが書いてあったのでreadでいったん
ですが、、、、
参考までに>>27のコードはどこがタコなんでしょう。
とりあえずきちんとゲットできているように思えるときもあるんですが
- 34デフォルトの名無しさん04/06/19 13:18
- クリックとかのイベント時に音を鳴らしたいのですが、どうすればよいでしょう?
お願いします。
- 35デフォルトの名無しさんsage04/06/19 13:37
- >>33
Streamから直接Readするってのは?
バイト配列を一旦MemoryStreamに納めて、後で文字列にエンコード。
//過去ログにサンプルコードがあったはずだがみつかんない……
- 36デフォルトの名無しさん04/06/19 14:10
- >>35
今はこんな風にしてますがこれだと何の問題もありません。
MemoryStream ms = new MemoryStream();
int count;
while((count = recieveStream.Read(buf,0,bufSize)) > 0)
{
ms.Write(buf,0,count);
}
buf = ms.ToArray();
string data = encode.GetString(buf);
27のコードはなんかおかしいんだすかね、、、、
- 37デフォルトの名無しさんsage04/06/19 14:13
- 多分だけど、途中でエンコードが入ってしまうのがまずいんだと思う。
半端な長さまでダウンロード・バッファリングしたところでエンコードが発生するからじゃないかな。
- 38デフォルトの名無しさんsage04/06/19 15:37
- 同期で読むときは漏れはいつもこうしてる。
もちろんtry/catchも入れてるが。
ArrayList buff = new ArrayList();
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
WebResponse res = (WebResponse)req.GetResponse();
System.IO.Stream s = res.GetResponseStream();
System.IO.StreamReader r = new System.IO.StreamReader(s, System.Text.Encoding.GetEncoding("euc-jp"));
while(true) {
string str = r.ReadLine();
if(str == null) break;
buff.Add(str);
}
r.Close();
s.Close();
res.Close();
- 39デフォルトの名無しさんsage04/06/19 15:46
- >>34
MMControl
- 40デフォルトの名無しさん04/06/19 16:06
- これだけ言わせてくれ
「Unicode逝ってよし!」
と
- 41デフォルトの名無しさん04/06/19 16:23
- ListBoxにおいて、MouseWheelイベントを使って、独自のスクロールを
させたいのですが、何もしなくてもWheelで動いてしまうため、
動きがバッティングしてしまいます。
Wheelを完全に横取りするにはどうすればよいでしょうか。
宜しくお願いいたします。
- 42デフォルトの名無しさんsage04/06/19 16:38
- >>41
hook
- 43デフォルトの名無しさん04/06/19 16:53
- 早速の返事ありがとうございます。
キーワードより以下のページを見つけました。
http://support.microsoft.com/default.aspx?scid=kb;ja;318804
色々試して見ます。
- 444104/06/19 19:34
- うーむ、難しいっす
- 45デフォルトの名無しさんsage04/06/20 01:09
- Javaみたいにメソッドとかを非推奨に指定して
そのメソッド呼び出しを含むコードをコンパイルすると
warningが出るようにする方法ってないでしょうか?
- 46デフォルトの名無しさんsage04/06/20 01:17
- >>45
Obsolete Attribute使えばいいんじゃないかな。
- 47デフォルトの名無しさん04/06/20 03:26
- C#のプロパティって結局メソッドとあまり変わらないじゃん?
Java派の俺から見たら混乱を生むだけのゴミに過ぎん。
- 48デフォルトの名無しさんsage04/06/20 03:34
- なんか痛い人が...
- 49デフォルトの名無しさんsage04/06/20 05:54
- Javaのget/setって結局プロパティとあまり変わらないじゃん?
C#派の俺から見たら混乱を生むだけのゴミに過ぎん。
- 50デフォルトの名無しさん04/06/20 07:24
- sageて書き込んでは説得力無し。
- 5145sage04/06/20 13:08
- >>46
こいつを探してたんです。
ありがたいです。
- 52デフォルトの名無しさんsage04/06/20 14:52
- >>50
ageてる方が厨房。
- 53デフォルトの名無しさんsage04/06/20 17:31
- FontクラスのインスタンスからToString()で文字列形式に変換したのですが、
この変換後の文字列を再びFontクラスのインスタンスに戻すことはできますか?
つまりこういうことです
Font → string → Font
なぜこんなことをやっているかというと、XMLにシリアライズするときに
Fontをダイレクトにシリアライズできないのでいったん文字列を
経由するというわけです。
ヘルプを読んでもこの逆方向のメソッドが見あたりません・・・
よい手だてがありましたら教えて頂けると幸いです。
よろしくお願いいたします。
- 54デフォルトの名無しさんsage04/06/20 17:45
- >53
カスタムシリアライゼーションやるんでしょ?じぶんでFontつくればいいじゃない
- 55デフォルトの名無しさんsage04/06/20 17:58
- >>54
そうです。
仕方ないので、フォント名、色、サイズについて抽出して
保存することにしました。
書式に関しては使うつもりはないので。
Colorについても同様の現象で困ってるのですが、
Color.Nameで抽出した文字列からColor型のインスタンスにすることは
できないのでしょうか?
Fontと違って構造体だからコンストラクタもついてないんですよね・・・
- 56デフォルトの名無しさんsage04/06/20 18:01
- Colorに関してはColorTranslator.FromHtml(string)
でいけました。
Fontなんてよく使うクラスがシリアライズできないなんて
不便ですね・・・
- 57デフォルトの名無しさんsage04/06/20 18:19
- FontConverterクラスで
- 58デフォルトの名無しさんsage04/06/20 20:18
- 基本的にこの辺の奴はTypeConverterを使うのが簡単。
- 59デフォルトの名無しさんsage04/06/20 21:10
- スクロールバーをクリックしたときのイベントハンドラって
存在しないんでしょうか。
ttp://dobon.net/vb/dotnet/control/firescrollevent.html
これを試してみましたが、フォーム上のパネルの
スクロールバーをクリックしても何の通知も来ませんでした。
(フォームのスクロールバーのみ可?)
- 60デフォルトの名無しさんsage04/06/20 21:25
- >>59
> スクロールバーをクリックしても何の通知も来ませんでした。
Formの子クラスでWndProcをオーバーライドしてない?
メッセージを受け取るコントロールでオーバーライドしないと駄目だよ。
その場合なら
public class ScrollPanel : Panel {
protected override void WndProc(ref Message m) {...}
}
ScrollPanel panel1 = new ScrollPanel();
//以下略
- 6159sage04/06/20 22:55
- >>60
早いレスをありがとうございます。いけました。
C♯って、かゆところへ変に手が届かない場面が多々で
先行き不安です。
- 62デフォルトの名無しさんsage04/06/20 23:51
- EmEditor のように JavaScript や VBScript を使うことは可能でしょうか?
Microsoft.JScript を試してみましたがなんか違うような・・・。
- 63デフォルトの名無しさんsage04/06/20 23:56
- があ、何がやりたいんだ???
- 64デフォルトの名無しさんsage04/06/21 05:39
- >>61
そういうのは特殊だからな。
嫌ならスクロールバー単体を自前で貼り付けろ。
- 65デフォルトの名無しさんsage04/06/21 09:55
- 単なるクリックならコントロールでイベント発生させなくても
MouseDownで座標チェックすればいいんじゃ?
- 66デフォルトの名無しさん04/06/21 11:57
- vb6で使ってたOcxをC#でも使って見ようと思って乗せて見たんですが、
Ocxのあるメソッドを使うとSystem.NullReferenceExceptionが発生します。
最初はエラーすら出なかったんですが、try/catch をつけたら例外出してる所を
見つけました。が、なんでSystem.NullReferenceExceptionなのかがわかりません。
そのメソッドに渡してる変数の中身は、デバッグウィンドウで確認しましたが
空ではありませんでした。
Ocxの使用はC#で何か特に注意事項ってあるんでしょうか?
- 67デフォルトの名無しさんsage04/06/21 12:03
- >>66 これ?
スレッド: VB6.0で作成したユーザーコントロールについて
http://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=10836
- 68デフォルトの名無しさんsage04/06/21 12:32
- >そういうのは特殊
スクロールバーのクリックを取得するのって特殊かなあ。
それよりスクロールバーコントロールを貼りつける方がよほど特殊かと。
バーの描画やスクロール位置も全部自前で行わないといけなくなるし、
パネルの右下が
V V
>□ ではなく > とか >V
になるんじゃない?
実用上は問題ないかもしれないけどスマートじゃないなあ。
>MouseDownで座標チェックすれば
MouseDownはクライアント領域上でないと発生しないから、
スクロールバーのクリックは検知できないよ。
- 69デフォルトの名無しさんsage04/06/21 16:47
- .NETがラップしてない部分をDllImportで書いてゴリっちゃうのは難しくないが、
将来的に互換性が不安。
- 70デフォルトの名無しさんsage04/06/21 16:55
- 多分当分は大丈夫だと思うけど。
LonghornでWinFXになっても、Win32APIのDLLはManagedのラッパとして残るだろうから。
二度手間でパフォーマンス低下は当然だが。
- 7162sage04/06/21 17:19
- >>63
EmEditor のようなことがしたいのです。
たとえば、文字列操作など
- 72デフォルトの名無しさんsage04/06/21 18:18
- >>71
WSHとかを使うのなら、アセンブリをCOMに登録するのが基本。
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconExposingNETFrameworkComponentsToCOM.asp
簡単な物なら自前でインタプリタそのものを作ってみても良いかもしれんけどね。
- 73デフォルトの名無しさん04/06/21 19:13
- 単刀直入に聞こう。
C#でネトゲを作ることはできるか?
- 74デフォルトの名無しさんsage04/06/21 19:16
- おまえならできる。
- 75デフォルトの名無しさんsage04/06/21 19:41
- >>68
MouseDownをoverride
- 76デフォルトの名無しさんsage04/06/21 19:42
- >>73
DirectX使えるんだからできるでしょ。
- 77デフォルトの名無しさんsage04/06/21 19:43
- >>73
単刀直入に言おう。
お前にはできん。
俺が10年は保証する。
- 78デフォルトの名無しさんsage04/06/21 19:53
- タイプライブラリを公開してないDLLから取得できる
生のCOMインタフェースポインタを触る必要がある場合
どうするのがいいんでしょう
- 79デフォルトの名無しさんsage04/06/21 20:34
- >>78
リフレクションかレイトバインド。
VB.NETの方が扱いが楽。
- 80デフォルトの名無しさんsage04/06/21 20:38
- >>79
回答ありがとうございます
ええとそれはDispatchインタフェースの場合の話でしょうか?
私が想定しているのは、(Extended)MAPIでして
Dispatchじゃなくてtypesafeなインタフェースポインタが取れるんですが
typelibはないんです。
同じ話になりますか?
- 81デフォルトの名無しさんsage04/06/21 20:46
- >>80
ほれ。
http://g8.cx/mapi/
- 82デフォルトの名無しさんsage04/06/21 20:50
- >>81
あ、実はそこは調べて発見したのですが
オープンソースでないのでちょっと不安というのと
私の環境ではエラーになっちゃうみたいで……
mscorlibのバージョン違いなのかなと思われるんですが
- 83デフォルトの名無しさんsage04/06/21 23:28
- 何度もすいません。C#でUPnPを使うサンプル等あれば教えてください。
- 84デフォルトの名無しさんsage04/06/22 00:12
- IntelのUPnP SDKあたりをみてみては?
- 85デフォルトの名無しさん04/06/22 09:25
- 分数や循環小数を結構正確に扱うクラスまたは構造体を作ろうと考えています。
クラスと構造体、どちらで作ったほうがいいでしょうか?
- 86デフォルトの名無しさんsage04/06/22 09:35
- 意味的には値型の方が相応しいだろうね。
派生させる必要がない限り構造体の方が良いんじゃないかな。
- 87デフォルトの名無しさんsage04/06/22 10:07
- メモリはガベコレが解放するけど、GDIリソースは自前で解放するルールみたいですが、
Brushを解放しないままアプリが落ちちゃった場合、リソースは解放されますか?
また、staticでBrushを保持して、Disposeなしでアプリ終了したときはどうですか?
- 88デフォルトの名無しさんsage04/06/22 10:11
- >>87
ランタイム終了時にきちんと開放されるから心配するな。
> メモリはガベコレが解放するけど、GDIリソースは自前で解放するルール
これはあくまでアプリを長期起動したり、リソースの確保が頻繁な場合の話。
- 89デフォルトの名無しさんsage04/06/22 10:31
- >>87
APIなどでOSのリソースを直接使用した場合はOSの仕様で決まる。
NT系OSなら大丈夫だ。9x系は怪しそう。
- 90デフォルトの名無しさんsage04/06/22 10:33
- >>89
でもストリームは自分で閉じなきゃダメでしょ?
StreamReaderとか。
- 91デフォルトの名無しさんsage04/06/22 11:36
- 覚えても反復しないとすぐ忘れてしまう。
皆さん物覚えがいいですね
- 92デフォルトの名無しさんsage04/06/22 11:59
- >>91
年ですね。引退を考えた方がいいかも。
- 93和田sage04/06/22 12:10
- プログラミングなんて所詮暗記力が命だからな
- 94デフォルトの名無しさんsage04/06/22 12:12
- >>91
体に痛みを与えると記憶力が上がる。
ストレッチをしながら本やドキュメントを読むと
もしかしたらスっと頭に入る、かも。
ストレッチといっても激痛を感じる程にやるんだぞ。
試してみることを勧める。
- 95和田sage04/06/22 12:12
- >>94はおれ
- 96デフォルトの名無しさん04/06/22 14:13
- ListViewについて教えてください。
あるArrayListの内容を1データずつ取り出してListViewItemを作成して、
ListViewに入れたとします。
ListViewからSelectedItemsで取り出したものとArrayListのデータを
結び付けるにはどうすればよいのでしょうか?
選択されたものをArrayListから消したいんです。
- 97デフォルトの名無しさんsage04/06/22 15:32
- >>96
ArrayListの中に入ってるデータのクラスに依るけど。
一番手っ取り早いのは、各ListViewItemのTagプロパティにそれぞれのArrayListから取り出したデータを入れとくことだ。
こうしとけば、
foreach (ListViewItem item in listView.SelectedItems)
arrayList.Remove(item.Tag);
だけで済む。
- 98デフォルトの名無しさん04/06/22 16:54
- プログラムのX印を普通に押したときの終了処理と、VSStudioの■の停止ボタン押したときの終了処理って
何が違うんでしょか?
デバッグ中、■ボタンならエラーがでらんのですが、フォームのXで終了するとエラーが出ます。
なして?
- 99デフォルトの名無しさんsage04/06/22 16:59
- >>98
強制終了させてる
- 100デフォルトの名無しさんsage04/06/22 23:11
- >>90でもストリームは自分で閉じなきゃダメでしょ?
>>89が言ってる意味では別に駄目じゃない、別の意味で普通は駄目だけど。
「ストリームは自分で閉じなきゃダメ」の意味を取り違えてないかい?
- 101デフォルトの名無しさんsage04/06/22 23:14
- >>98そりゃあんたのプログラムに問題があるからだろう。
- 102デフォルトの名無しさんsage04/06/22 23:17
- >>87
最終的には普通OSがちゃんと開放するし、
Disposeがある奴は標準のクラスならFinalizeで開放されるから、
普通は大丈夫。普通はね。
- 103デフォルトの名無しさん04/06/22 23:18
- >>98VSStudioってなんじゃらけ?
何が違うってか、全然違う。
- 104デフォルトの名無しさんsage04/06/22 23:28
- ハンドルが足りなくなったときにGCしてくれるかというと
んなことはないので結局ダメだよ
- 105デフォルトの名無しさんsage04/06/22 23:33
- >>104そういう意味ではもちろん駄目なんだが、
今の話はアプリが終了した場合の話だから、
こちらの意味では別に大丈夫なんでないの?
- 106デフォルトの名無しさんsage04/06/22 23:57
- C#の普及は進んできてるようですが、実行速度とかはどうなんでしょうか
- 107デフォルトの名無しさんsage04/06/23 00:11
- 単純に実行速度自体は思ったより早い。
WindowsForm関連は遅い。
ってのが何となくの印象。
- 108デフォルトの名無しさんsage04/06/23 00:20
- JAVAよりは早いな
- 109デフォルトの名無しさんsage04/06/23 01:11
- 初回起動時は致命的に遅いけど、後は普通。
初回起動時の重たさもJAVAの重さに比べれば許せないほどじゃない。
- 110デフォルトの名無しさんsage04/06/23 04:13
- Socketクラスでホストの移行を処理するにはどうすればいいんだ。
DirectPlayならHostMigrateイベントを処理して終了なんだがなぁ。
- 111デフォルトの名無しさんsage04/06/23 08:49
- 起動と終了は遅いね。
実行中の速度に不満を感じたことはない。
++コンパイラのノウハウが継承されてるんだろうからそれなりに最適化はされてるんだと思う。
メモリは新しいものを無尽蔵に使っていくみたいだから、メモリ周りに関してはその場その場で
やり繰りしている++よりは速いかもしれない。
ただしメモリに余裕のある環境だけね。メモリ少ないと頻繁にGC発生して遅くなるかも。
- 112デフォルトの名無しさん04/06/23 09:35
- 例えばほかのプロセスをアクセス禁止にしてFileStream開いて、閉じ忘れると、GCが開放するまでほかのプロセスが開けなくなるし、
GCがいつ開放するかはわからない。ただ必ず開放されることは確か。
- 113デフォルトの名無しさんsage04/06/23 09:53
- それはGCとはまた別のネタだな。ってか相談しろ。
- 114デフォルトの名無しさんsage04/06/23 13:41
- > 112
そういう時のための IDisposable(と言語組み込みの using (...) { ... } pattern)
# IDisposable を実装する場合は ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconfinalizedispose.asp この辺りを参考に…
# ただ IDisposable を実装しても、そいつを複数箇所から参照してる場合は『誰が責任持ってツブすのか』という問題は結局 programmer の責任なんだけど
>111
領域取得に関しては Generation 0 heap が尽きていなければ、通常の malloc よか速い…とかなんとか MSDN のどっかに書いてあったよーな記憶があります(単に使えるとこを頭から切り出してるだけですから)
GCに関しては頑張って実装してるような印象です。あまり酷い目にあったことが無いからなのかもしれませんが。
- 115デフォルトの名無しさんsage04/06/23 18:30
- GC 便利なんだけど、確かに C++ のときより激しく .Close() とか .Dispose() とか書かされてるな・・・
- 116デフォルトの名無しさん04/06/23 19:38
- C#.NET でのデバッグについて質問です.
デバッグ中のアプリのどのオブジェクトがどれだけメモリを使って
いるかを一覧でみるような事はできないでしょうか?
OutOfMemory Exception が出るのですが,一体どのオブジェクトが
メモリを食っているのかがわからなくて困っています.
よろしくお願いします.
- 117デフォルトの名無しさんsage04/06/23 19:45
- 使用メモリが1GBくらいになると問答無用で
OutOfMemoryException出たような気がするけど、
それとは違うの?
- 118デフォルトの名無しさんsage04/06/23 19:56
- >>116
CLR Profiler
- 119デフォルトの名無しさん04/06/23 21:46
- あんまりWindows環境開発経験ない漏れが質問です。
フォームの継承って多用しても問題ないの?
なんか隣の香具師がフォーム継承したらフリーズするってぶつぶつ言ってんだけど。
明日までに似たようなフォームを持つシステム10本くらい作れって言われたんだけど
いっこいっこフォームつくるのめんどいから継承しちゃいたいのさー。
あんま考えずにやって問題ない?
間抜けな質問ならごめんよ。
- 120デフォルトの名無しさんsage04/06/23 21:56
- >>119
フォームに限らず継承するつもりのクラスはある程度考える必要があるべ。
単にコントロールの配置が同じフォームの派生クラスを作る、
というならあんまりエラーは起きないと思う、
- 121デフォルトの名無しさんsage04/06/23 23:11
- >>117
stringやEncode.GetBytesを多用するループを書いたら、あっという間にメモリリークしたよ。
使い終わった変数にnullを代入しても同じ。
さんざん悩んだ挙句、null後にGC.Collectしてみたら嘘のようにエラーは無くなった。
- 122デフォルトの名無しさんsage04/06/24 00:08
- メモリリーク?
メモリ枯渇じゃなくて?
- 123デフォルトの名無しさんsage04/06/24 01:14
- >>121具体的にどんなプログラム?
- 124デフォルトの名無しさんsage04/06/24 08:29
- >>121
メモリリークじゃなくて単に新しい領域を食いまくってるだけでしょ?
.NETだとnullしたって枯渇してない限りはどんどん新しいとこ使いまくるわけだから。
メモリリークっていうのはメモリが確保されたまま、そのアプリを終了しても
永遠に開放されない場合のことをいうのであって、いつかは開放されるのなら
それはメモリリークではない。
そいつをアプリAとして、もう一つGC.Collect()するだけのアプリBを作ってみ。
「メモリ確認→アプリA実行→メモリ確認→アプリA終了→メモリ確認→アプリB実行→メモリ確認」
これで開放されてるならそれはメモリリークとは呼ばない。
- 125デフォルトの名無しさんsage04/06/24 08:53
- >メモリリークっていうのはメモリが確保されたまま、そのアプリを終了しても
>永遠に開放されない場合のことをいうのであって、いつかは開放されるのなら
>それはメモリリークではない。
無意味な定義だなこれ
- 126デフォルトの名無しさんsage04/06/24 09:04
- >>120
レスさんくす。
となりのやつのフリーズするソースを見てみた。
基本フォームにコンボボックスが3つある。
3つのコンボに対応してるオブジェクトがインスタンス時にDBから値をとってきてるらしい。
3つのオブジェクトは基本クラスのコンストラクタでインスタンスしてる。
それをフォームロードで連結してるだけなんだけど、実際にフリーズしてる・・。
なんだろ、そいつのマシンのスペックの問題かな?
- 127デフォルトの名無しさんsage04/06/24 09:37
- >126
それは本当に"フォームの継承"が問題なの?
複数のフォームから同時に処理にいってデッドロックしてるとか、
継承元にある(protected staticな)共有オブジェクトを継承先でも使って状態を破壊してるとか。
- 128デフォルトの名無しさんsage04/06/24 09:43
- >>127
継承先では何もしてないっぽい。
見てみると、継承ピッカー?なるもので、VSから派生フォームを自動的に作ってるみたいなんだけど。
その時点でフリーズしちゃってるみたい。
ローカルのプロジェクトフォルダにCSファイルは出来てるらしい。
基本クラスのイベントとかが怪しいなーと思ってるんだけど。
基本クラスのフォームロードイベントとか、ちゃんと正常に動くのかな?
- 129デフォルトの名無しさんsage04/06/24 10:12
- PropetyGrid
- 130デフォルトの名無しさんsage04/06/24 10:15
- >>126
スレッド考慮してないからでねーの?
- 131129sage04/06/24 10:16
- 失礼しました。
PropertyGridをUIに使ったアプリを作っています。
PropertyGridで操作するオブジェクトのプロパティがStructまたは
オブジェクトの配列の場合、値の変更がキャンセルされてしまいます。
ただ普通にstruct Pointなどへの設定は有効ですのでstructの定義もしくは
使用するTypeConvertorに一工夫必要なのだと思うのですが。
どなたが情報をお持ちではないでしょうか?
- 13212904/06/24 10:18
- あげ忘れてた…
サンプルです。
public class Test
{
public Test()
{
}
//反映される
public Test1 t1
{
get { return _t1; }
set { _t1 = value; }
}
Test1 _t1= new Test1();
//反映されない
public Test2 t2
{
get { return _t2; }
set { _t2 = value; }
}
Test2 _t2;
}
- 133129sage04/06/24 10:18
- つづき
[TypeConverter(typeof(ExpandableObjectConverter))]
public class Test1
{
public string t1
{
get {return _t1;}
set { _t1 = value; }
}
string _t1;
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public struct Test2
{
public string t2
{
get {return _t2;}
set { _t2 = value; }
}
string _t2;
}
- 134デフォルトの名無しさんsage04/06/24 10:24
- >>130
すまぬ・・・漏れがスレッドをイマイチ理解してない。
そいつのソース貰って、基本クラスの
コンストラクタ内の処理・各イベントを全部コメントアウトしたらフリーズしなくなった。
フォームロードとかのイベントは、派生フォームでやればいいってことなのかな。
でもそれじゃ意味ないよね・・。
- 135デフォルトの名無しさんsage04/06/24 10:26
- モーダルフォームについて質問させてください。
メインのフォーム(A)から、Bフォームをモーダルで表示させ、
dlgA DlgB = new dlgB();
DlgB.ShowDialog();
Bフォームで何らかの処理が行われたときに、Cフォームを処理選択用にモーダル表示します。
dlgA DlgC = new dlgC();
DlgC.ShowDialog();
で、Cフォームに「終了」「キャンセル」のようなボタンを配置し、「終了」が押された時、Cフォームで
Close();を行うとBフォームも終了してAフォームまで戻ってしまいます。
処理としては、Cフォームのみ消して、Bフォームに処理を戻したいのですが、なんか処理の仕方を
間違えておりますでしょうか?
よろしくお願いいたします。
- 136130sage04/06/24 10:30
- んー、派生フォームの方にイベントなど書いてコンパイルしたら動いた。
けど・・・。
派生フォームをVSから表示(デザイン画面)するとフリーズする。
実行は出来るのに、なんでだろ。
これじゃ編集できねーいw
- 137デフォルトの名無しさんsage04/06/24 10:34
- >134
コンストラクタでDBを見に行っているせいで継承元と派生側と二重にDBアクセスして
コンストラクタで例外飛んじゃってるとか?
>135
普通は勝手に他のフォームを閉じたりはしませんが。
書かれているコードもよくわからないし
(型はdlgAではなくdlgBとかdlgCでないの?)
そもそもデバッガで追っかければわかる内容では?
- 138デフォルトの名無しさんsage04/06/24 10:37
- >136
デザイン時にもインスタンス化の処理は走るから、Component.DesigneModeを参照して
デザイン時はDB処理をしないようにすればよいのでは?
- 139デフォルトの名無しさんsage04/06/24 10:40
- >>133
TypeConvertorを継承してTest2StructConvertorとでも作って
ExpandableObjectConverterの代わりに与えれば可能だとは思うが、
もっと簡単なやり方があったらごめん。
- 140130sage04/06/24 10:45
- >>137
レスありがとねー。感謝。
ちょっと流れをまとめてみる。
考え違いあったらつっこんでください。
1.基本クラスで、コントロールの配置をしている。(コンボ3つ)
2.基本クラスで、各コンボのイベントプロシジャを定義。(イベントハンドラに追加)
3.派生クラスで、コンボ3つに対応する3のオブジェクトをインスタンス。DB接続しデータ取得。
4.派生クラス、Form_Loadイベントで、オブジェクトとコンボを関連づける。
これでやってみて、コンパイルし実行も成功。
しかし、デザイン画面で派生フォームを編集しようとするとフリーズ。開かない。
2.でイベントハンドラに追加せずに、派生クラスでイベントハンドラに追加。
これだとデザイン画面でも開ける。
んー。イベントプロシジャの定義は基本クラスでやって良いけど、ハンドラに追加は派生クラスじゃないと
だめってことかな。
長文ごめん。
- 141135sage04/06/24 10:56
- 試しに、Form ABCだけの単純なコード書いたらちゃんと動作しました。
そんなトリッキーな事やった覚えはないんですが・・もう一度ソース見直して、
報告いたします。
- 142デフォルトの名無しさんsage04/06/24 11:13
- >139
サンクス。
何の型に対して、どのメソッドをオーバーライドしてやればよい?
よくサンプルとかに出てくるstringに対する変換は非展開時の表示・編集用だよね…
- 143デフォルトの名無しさんsage04/06/24 11:29
- >>131
ExpandableObjectConverter内のConvertFromメソッドが、
受け取ったパラメータのプロパティを直接弄ってるのが原因と見た。
ExpandableObjectConverterを継承したTest2Converterクラスを作って、
bool CanConvertFrom(ITypeDescriptorContext, Type)
objectConvertFrom(ITypeDescriptorContext, CultureInfo, object)
object ConvertTo(ITypeDescriptorContext, CultureInfo, object, Type)
辺りをオーバーライドしてやればいける。
ヘルプの「型コンバータの実装」参照。
……残った問題は、各プロパティをグリッド上で編集しても即座には反映されないって事だ。
(ex.)
+Test2 hoge
t2 hoge //ここをfooに書き換えてもTest2のhogeが書き換えられない。Test2にフォーカスを当てた時に書き換えられる。
//実際のTest2オブジェクトのプロパティは書き換えられているんだが。
- 144143sage04/06/24 11:42
- 速攻で訂正。
//私こそヘルプを良く読め。
オーバーライドするのは
object ConvertTo(ITypeDescriptorContext, CultureInfo, object, Type)
bool GetCreateInstanceSupported(ITypeDescriptorContext)
object CreateInstance(ITypeDescriptorContext, IDictionary)
だ。
- 145デフォルトの名無しさんsage04/06/24 11:46
- >>143
ポイントはCreateInstance()とConvertToでのInstanceDescriptorに対する処理みたいですね。
英語だと割とマンマの内容の記事を見つけました。
ttp://www.morganskinner.com/Articles/AStructTypeConverter/
今googleのキャッシュでしか読めませんが。
- 146デフォルトの名無しさんsage04/06/24 21:42
- byte[0],byte[1]をushortに型変換するとか
ushortを型変換してbyte配列に入れるとか
出来る関数ってのはBASEライブラリにはないでしょうか?
- 147デフォルトの名無しさんsage04/06/24 22:05
- >>146
BitConverter
- 148デフォルトの名無しさんsage04/06/24 22:05
- >>146
System.BitConverter
- 149デフォルトの名無しさんsage04/06/24 22:09
- なぜかBitConverterは影が薄いよなぁ。
- 150デフォルトの名無しさんsage04/06/24 22:09
- >>147-148
さんくす
- 151デフォルトの名無しさんsage04/06/24 22:26
- ・必要な場面が微妙
・自前で関数書くのも大した手間じゃない
からなー。
//BitConverter.IsLittleEndianは(自前で関数書くときも)重要だが
- 152デフォルトの名無しさんsage04/06/25 00:35
- C#って
クラス名(文字列)からインスタンスって生成できますか?
Hoge createInstance(string className)
というメソッドが有って
こいつに"Hoge"とか"ExtendHoge"とか文字列を渡すと
対応したクラスのインスタンスを返すことってできますか?
- 153デフォルトの名無しさんsage04/06/25 01:02
- >>140
構成ファイルに接続文字列出してたりしてんじゃないの?
基底のフォームが例外で落ちてるってのがいかにもありがち。
ってかそういう突っ込みあるのに確認してないのか?
ちなみに、デザイナで表示してるフォーム自身は完全に動作してなくても
デザイナで表示は出来たりするが、その継承元はちゃんと動作して無いと
駄目な用に思う(なんか、そんな感じに動いてるっぽい)。
だから、デザイナで表示してるフォーム自身が例外はいてるときは
デザイナ自体はちゃんと動いたりする。
※結局、デザイン時に例外はくようなフォームは作るなってこった。
- 154デフォルトの名無しさんsage04/06/25 01:03
- >>152ActivatorとかTypeとか調べろ。
- 155デフォルトの名無しさんsage04/06/25 01:58
- >>152
書き込みに使ってるキーワードだけで、山のように見つかったぞ。
2ちゃんに書き込む時間があったらぐぐった方が早いのくらい知っとけカスが。
カスでも分かる一例
ttp://dobon.net/vb/dotnet/programing/createinstancefromstring.html
- 156デフォルトの名無しさんsage04/06/25 07:56
- C#やる前に言語の特徴の一覧ぐらい見ないのか?
- 157デフォルトの名無しさんsage04/06/25 09:52
- MSDN TV: Whiteboard with Anders Hejlsberg
http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20040624CSHARPAH/manifest.xml
- 158デフォルトの名無しさん04/06/25 23:03
- IEの標準の接続設定で自動構成スクリプトを使用している場合の
プロキシを取得したいのですが何かいい方法はないでしょうか?
System.Net.WebProxy.GetDefaultProxy()を使っても自動構成スクリプト
を使用している場合、プロキシを取得できないみたいなのですが……。
- 159152sage04/06/26 09:25
- >>154
>>155
サンクス次からはちゃんと調べるYO
- 160デフォルトの名無しさん04/06/26 09:56
- クラス名・メソッド名・変数名に2バイト文字使えること最近知ったんだけど、2バイト文字にすると何か問題ありますか?
- 161デフォルトの名無しさんsage04/06/26 09:57
- かっこ悪い
- 162デフォルトの名無しさん04/06/26 09:59
- オープンソースであなたが使う2バイト文字がうまく表示できない人に見てもらわない限り大丈夫じゃん?
- 163デフォルトの名無しさんsage04/06/26 10:31
- そもそも文字コードがUTF16で管理される以上、2バイト文字という表現っておかしいよな。
- 164デフォルトの名無しさん04/06/26 10:44
- >>163
ああ、そうだった
- 165デフォルトの名無しさん04/06/26 11:46
- ttp://bunzin.s33.xrea.com/cgi-bin/up/img/amf1048.gif
C#をインスコしたら、上のようなダイアログがでてきて起動できない・・・orz
環境は
Windows2000
pentiumIII600
メモリ:514MB
で、インスコしたのは、Visual C#.net Standard version2003 アカデミック
です。
なにか、対策はありませんか??
- 166デフォルトの名無しさんsage04/06/26 12:02
- >>165
それまで割れ物のVS.NET使ってたろ。
- 167165sage04/06/26 12:25
- いえ、それまでは、VS.netC++のアカデミックつかってますた・・・。それも購入したやつです。
原因がわからんヽ(`Д´)ノ
- 168デフォルトの名無しさんsage04/06/26 12:32
- adminで入れてないとか?
- 169165sage04/06/26 12:39
- Administratorでインスコして、Administratorで起動したんですがうまくいきませんですた・・・。
.netとframeworkをアニンスコして再インスコしてみます。
成功しても失敗して報告しますんで・・・よろしく・・・orz
- 170デフォルトの名無しさんsage04/06/26 12:54
- >>160
IME立ち上げるのが面倒。
- 171デフォルトの名無しさんsage04/06/26 13:28
- >>160
スペースでなにか問題起こさなかったっけ?
- 172165sage04/06/26 14:40
- だめだ。なおらん!!でも、ダイアログを表示したままならソフトが動くみたいだから、しばらくそれでやってみようかしら(´・ω・`)
- 173デフォルトの名無しさんsage04/06/26 16:18
- .NET Frameworkにコンパイラ付いてるんで、
これだけでもプログラム開発できるみたいね。
SDKを入れると何がインストールされるん?
- 174デフォルトの名無しさんsage04/06/26 17:01
- >>173
ライブラリとか
- 175デフォルトの名無しさんsage04/06/26 17:05
- >>174
てことは、フレームワークだけだと利用できるクラスに制限があるってことか。
ありがと。
- 176デフォルトの名無しさん04/06/26 18:44
- enumに対するXMLドキュメントってどう書けばいいんですか?
enumの定義とは無関係にlistでちまちま書かないと駄目なんですかね。
- 177デフォルトの名無しさんsage04/06/26 18:50
- >>175
制限ないし。
- 178デフォルトの名無しさんsage04/06/26 18:53
- >>176
VSのインテリセンスに有効な書き方は以下の通り。
///<summary>何らかの状態</summary>
public enum Hoge {
///<summary>状態A</summary>
StateA,
///<summary>状態B</summary>
StateB
}
- 179デフォルトの名無しさんsage04/06/26 19:02
- >>178
ありがとうございます。その情報ってどこに載ってますか?
このあたりを一通り読んでみたんですけど・・・
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csref/html/vcwlkxmldocumentationtutorial.asp
- 180デフォルトの名無しさんsage04/06/26 19:18
- >>179
手探り(きっぱり
//ちょっと必要があったので以前全部調べたんだ。
//メソッド以外はほぼsummaryだけっぽい。
- 181デフォルトの名無しさんsage04/06/26 19:29
- その辺は結局手探りのが早いよねえ
///とタイプしてみればとりあえずわかるし
- 182デフォルトの名無しさんsage04/06/26 19:51
- プロジェクト全体に対するコメントも付けられそうなんだけどよく分からない。
- 183デフォルトの名無しさんsage04/06/26 19:52
- >>>181
"/// " の自動補完ってちょっと異常だよな
始めて知ったときは笑いがとまんなかった
- 184デフォルトの名無しさんsage04/06/26 20:47
- double hoge; /// <何?>なんとかかんとか</何?>
「何?」の部分を何にしたら良いのか分からんが、
この形式でインテリセンス働かせる方法無い?
///<summary>なんとかかんとか</summary>
double hoge;
だと上手くいくのは知っているけど、変数宣言で二行取るのは醜いしさ
- 185デフォルトの名無しさんsage04/06/26 23:11
- >>184
うちはC++のころは
/*
コメント。
↓の説明とか
*/
int m_nValue;
とか書いてたから醜いとは思わないけれど、でもそれぐらいの柔軟さはあってもいい気がする。
属性の記述の仕方にあわせてるんだろうか。
- 186デフォルトの名無しさんsage04/06/26 23:17
- .NETFW2.0ではドキュメント(特に見てくれ)周りも改善されるのかな。
それともNDocに丸投げしちゃうのかね。
- 187デフォルトの名無しさん04/06/26 23:48
- http://s03.2log.net/home/nsharp/archives/blog31.html
MVPを名乗ってるのが(♯さんじゃなくてリンク先の方が)こんないい加減なこと書いてていいのか?
- 188デフォルトの名無しさんsage04/06/27 00:21
- 晒し上げるならこっちだろ。
ttp://blogs.users.gr.jp/hidori/archive/2004/06/26/3331.aspx
- 189デフォルトの名無しさんsage04/06/27 01:54
- monoの開発者がSSCLIの中見ても平気なのかね…
Shared Sourceなライセンスだと汚染が起こる気がするんだが。
- 190デフォルトの名無しさんsage04/06/27 02:05
- なんだかなあ・・・。
- 191デフォルトの名無しさん04/06/27 03:17
- string型のasciiエンコード文字列を、JISエンコード文字列に直す方法を教えてください。
- 192デフォルトの名無しさんsage04/06/27 03:33
- 自作の複数のプロパティをグループ化する方法ってありますか?
例えばフォームのサイズプロパティはwidthとheightとあるけど
sizeのところで両方指定もできるし、展開して個々に指定もできる。
- 193デフォルトの名無しさんsage04/06/27 03:47
- >192
Sizeはグループ化してるわけではなく、フォームのWidthとHeightはフォームが持ってる
Sizeへのエイリアスみたいなもので、WidthとHeight自体にはBrowsable(false)がついてるのではと言って見る。
public class Form
{
Size _size;
public Size Size
{
get { return _size; }
set { _size = value; }
}
[Browsable(false)]
public int Height
{
get { return _size.Height; }
set { _size.Height = value; }
}
[Browsable(false)]
public int Width
{
get { return _size.Width; }
set { _size.Width = value; }
}
}
こんな感じ?
自作classを展開指定ならExpandObjectConverter属性をつける。
structを展開したいのなら>139,143-145あたり参照。
- 194デフォルトの名無しさんsage04/06/27 06:21
- >>191
.NET Frameworkではstring型はUnicodeなわけで、
string型のASCIIエンコード文字列だのJISエンコード文字列だのはあり得ない。
バイト配列を変換したいならEncoding.ConvertとかEncoding.GetBytesとか。
- 195デフォルトの名無しさんsage04/06/27 08:33
- ascii charset文字列を...なら分からんでもないけど
- 196デフォルトの名無しさんsage04/06/27 09:32
- PropertyGridの話が出たので便乗ですが、
あるプロパティの値が変更されたとき、
ある他のプロパティの表示/非表示や変更可能/不可能を切り替えることはできますか?
- 197デフォルトの名無しさんsage04/06/27 11:43
- >>196
少し頑張れば可能。
The Code Project - Unleash PropertyGrid with Dynamic Properties and Globalization - C# Programming
http://www.codeproject.com/csharp/DzDynamicProperties.asp
- 198192sage04/06/27 12:49
- >193
thx
こちらの思い通りにできました。
- 199デフォルトの名無しさんsage04/06/27 14:24
- MySqlを使いたいのだけど、OleDbConnectionに渡す接続
文字列ってなにを渡せばよいのでしょうか。
MDBの場合だと、
"Provider=MIcrosoft.Jet.OLEDB.4.0;Data Source=mdbファイル名"
っていうのを書籍でみたのですが、
MySqlの場合はどうしたらよいのでしょうか。
いろいろ検索してみましたがわかりませんでした。
なんか根本から勘違いしてる?
- 200デフォルトの名無しさんsage04/06/27 16:15
- 使うOLEDBプロバイダがMySQL用のものならそのOLEDBプロバイダ用の接続文字列、
OLE-ODBC(って今も使うのかな?)だったらODBC用の接続文字列、では?
- 201199sage04/06/27 19:30
- >200
レスありがとうございます。
せっかく回答いただきましたが、私の知識が乏しすぎて、
さっぱり理解できませんでした。
どこぞで勉強しなおしてくることにします。
勉強になるサイトまたは書籍などあれば教えていただけると
助かります。
- 202デフォルトの名無しさんsage04/06/27 19:42
- >>197
ありがとうございます。
少しというかかなりがんばらないといけないようですね・・・。
PropertyGridは手軽に使えるのはいいんですがこういう痒いところには手が届かないんでしょうか。
PropertyGrid使うのやめてちゃんとGUI作ったほうがよさそうですね。
- 203デフォルトの名無しさんsage04/06/27 22:02
- 「VB MySQL」とか「ADO MySQL」で検索したらすぐに出てきたぞ。
- 204199sage04/06/27 23:19
- >203
検索すると、java+MySqlの情報がたくさんあるのですが、
C#からMySqlを使用するような情報がみつからないんです。
java+MySqlは過去にやったことがあるのですが、DB接続部分は
サンプルからぱくってましたから理解できてません。
この当りを応用すればうまくできるのかなあ。
- 205デフォルトの名無しさんsage04/06/28 00:23
- >>204
検索の仕方が悪い。
ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=SJIS&oe=SJIS&num=100&q=NET%20MySQL%20接続文字列
- 206デフォルトの名無しさんsage04/06/28 09:17
- C#の話じゃなさそうだし、たぶんよく知られていることかもしれないけど、
forやwhileの条件式って、ループのたびに計算される?
while(i < GetSomething()){
// 何かの処理
}
public int GetSomething(){
// 結構面倒な処理だけど、返る値は最初の1回目以降は同一
}
上の式を何百、何千回と回すんだったら下のように書き直した方が、
オーバーヘッドは少なくて済むかな?
それともこの辺りはコンパイラが最適化してくれて、
手作業で小細工しなくてもよかったりするんだろうか。
j = GetSomething();
while(i < j){ ... }
- 207デフォルトの名無しさんsage04/06/28 09:32
- >>206
自分で試そうね。
for (int i = 0; i < GetSomething(); i++) {...}
int GetSomething() {
System.Console.Write(".");
return 10;
}
- 208デフォルトの名無しさんsage04/06/28 09:38
- >>207の例では毎回関数が実行されるが、
毎回実行する必要がないときはJITで最適化される事になっている。
むしろ、小細工してコンパイラを出し抜くな、よけい遅くなる、と言うことになっている。
- 209デフォルトの名無しさんsage04/06/28 10:00
- しかし現状の実装では理想に追いつけてない。
int GetSomething() {
int a = 0;
for (int i = 0; i < 100; i++)
a++;
return 100;
}
って毎回実行する必要の全くない関数でも毎回実行されてるし。
これが完全に最適化される日が来るのかな……。
- 210デフォルトの名無しさんsage04/06/28 11:32
- それを最適化できるような機能を実装する意味が分からない。
- 211デフォルトの名無しさんsage04/06/28 11:53
- そう?
「計算結構長くなるなー、関数にくくり出しちゃえ」とかってそれなりにあると思うけど。
その上で>>208なんだし。
- 212デフォルトの名無しさん04/06/28 12:15
- >211
それは最適化ではなく設計の範疇だと思うんだけど。
- 213デフォルトの名無しさんsage04/06/28 12:56
- >211
『毎回評価される』という言語仕様は変わらないんだから、素直に中間変数取るのがこの場合は自然な気がする…(C,C# 的思考に毒されてるだけなのかもしれない)
inlining が効果的な場合はキチンと inline して JIT する機能は機能で必要なんだけど、ここでそれに頼るのはワシ的には微妙に違和感があります。
- 214デフォルトの名無しさんsage04/06/28 13:04
- STL とか使っていて
for (std::vector<foo>::const_iterator it (bar.begin ()), it_end (bar.end ()) ; it != it_end ; ++it) { ... }
なんて書き方してるしなぁ…(勿論 std::vector 程度じゃ bar.end () を条件のトコに生で書いても大差ないと思うけど)
確か std::foreach の中身では同じ様な書き方してた記憶がある…
# C# な話でなくてスマヌ…
- 215デフォルトの名無しさんsage04/06/28 13:10
- え、毎回呼ばれないのでしょう。
大きいメソッドだと呼ばれちゃうのかな?
http://www.microsoft.com/japan/msdn/net/general/dotnetperftechs.asp
- 216デフォルトの名無しさんsage04/06/28 13:39
- >215
JITが呼び出し先を静的に評価できない可能性があると判断したら
呼び出しのまま残る(というか残ってくれないと困る)のでは?
- 217デフォルトの名無しさんsage04/06/28 13:56
- 1) 32 IL instruction 以下
2) flow 解析は限定されてる
の二つの制約から実際に inlining されるのはかなり単純なものに限定されている気はする…( get { return foo_ ; } みたいな奴とかかな?)
勿論 216 で言及されてるいる様に静的に評価出来ないとか(virtual になってるとか)副作用があるとかだと、残っててもらわないと inlining の有無で結果が違うという具合の悪いことに…
# de-virtualizing なんていう optimization も世の中には存在するけどもささささ…まだ一般的じゃないよなぁ(?)
- 218デフォルトの名無しさん04/06/28 14:09
- 使われてないインスタンスを特定することってできますか?
XXXUser(アカウント用)クラスのインスタンスを、ユーザーがデータを入力するたびに新しく作りたいんですが、
ユーザーが使わなくなったアカウントを逐次的に削除したいんです。
- 219デフォルトの名無しさんsage04/06/28 14:19
- >218
それは GCの神しか知らない情報… instance が消える timing は不定なのが GC ある世界の掟ですが…
- 220デフォルトの名無しさん04/06/28 14:34
- テキストボックス等に繋げられたDBのフィールド名を知る術ってありますか?
- 221199sage04/06/28 20:55
- >205
どうもありがとう。
探してみます。
- 222206sage04/06/28 21:40
- いろんな人の話が聞けてためになったよ。ありがとう。
簡易に試したところでは、差がほとんどなかったり、
30%〜40%の違いが出たりとまちまちだった。
>>206 の前者のようなパターンを、コンパイラが
「戻り値は一定だからここの呼び出しは省ける」とかいった
おせっかいは焼かないんだね。
単純なことでも人の手で速度アップを図れるところはあると。
- 223206sage04/06/28 21:53
- 今、>>215 のMSのサイトを読んでたらこんなのがあった。
for(int i = 0; i < myArray.length; i++){}
int l = myArray.length;
for(int i = 0; i < l; i++){}
コンパイラはおそらく myArray の長さが一定であることを確認し、
for ループの比較に定数を挿入するでしょう。
おー、ここまで見てくれるんだ。
ここでも「コンパイラを出し抜こうと考えるな」って言ってるね。
確かにint型など単純な値型ならLengthでもGetLength()でも差はなかったけど、
myArrayを自前の構造体(いろんなメンバが突っ込んである)で試したら
それなりの差は出た。
- 224デフォルトの名無しさんsage04/06/29 01:51
- >222
強い最適化を施せば >209 みたいな奴を呼び出してても定数との比較に出来るとは思うけど、Just-In-Time compling だからあんまり頑張ると最初の1発目が遅くなってしまう…
実行時 profiling を使って、段階的に optimize level を強くする様な仕掛けを JIT compiler が実装してこない限りはつらそうだなぁ(そのうちやるとは思うけども)
mono project の JIT の optimize は何処までやってんだろうか?
# efficeon の CMS は4段ギアになってるなんて話もあったな… ttp://pc.watch.impress.co.jp/docs/2003/1104/kaigai041.htm
- 225デフォルトの名無しさんsage04/06/29 05:47
- 64bit化による高速化とアプリの64bit化における注意点(MYCOM PC WEB)
http://pcweb.mycom.co.jp/articles/2004/06/24/win64/
マネージコードなら 32bit環境だろうが、64bit環境だろうが x86だろうが
x86-64だろうが、Itaniumだろうが動くと思ってたんだけど・・・
俺の勘違い??
- 226デフォルトの名無しさんsage04/06/29 08:04
- >>225
いや、Managedなら基本的に問題なく使えると書いてある。
ただ、x64だけ、とかいう風に制限を「かけることもできる」という話。
//Win32APIを使ったアプリのための制限とかそんなんかな。
- 227225sage04/06/29 10:08
- >>225
へんな文章書いてごめん。
たしかに問題なく使えると書いてあります。
http://pcweb.mycom.co.jp/photo/articles/2004/06/24/win64/images/016l.jpg
>32bit .NETコードはWOW64で実行
>64bit .NETコードはネイティブ環境で実行
僕が疑問に思ったのはマネージコードに32bit、64bitっていう区分けが可能なの?
とか、
おいおい、WOW64上で実行って事は普通の32bitアプリじゃねえか?
と思ったんですけど・・。いかがでしょうか?
- 228デフォルトの名無しさんsage04/06/29 10:12
- ふーん。.NETは64ビット環境以降への布石でもあったって言うことかい?
- 229デフォルトの名無しさんsage04/06/29 12:12
- >227
.NET Framework を立ち上げるスタブの部分は今のところ X86-32 のコードが入ってるから、立ち上げるところは WOW64 で
hosting 環境が出来てしまえば残りの MSIL の部分は host native 実行…って事なのかしらん?
- 230デフォルトの名無しさんsage04/06/29 15:42
- C#(Windowsアプリケーション)とMVCの説明したHPとかないでしょうかー?
検索してもWEBアプリのサンプルばっかりなので。
Windowsアプリの開発ってあんまりやったことないんですが、画面にイベントハンドラとかプロシジャとか記述するんですよね?
MVCって考えはWindowsアプリにはないのでしょうか。
ちっと悩んでます。
- 231デフォルトの名無しさんsage04/06/29 16:12
- >>227
IntPtrとかサイズが変わる。
- 232デフォルトの名無しさんsage04/06/29 16:23
- >>228
常識。
- 233デフォルトの名無しさん04/06/29 22:01
- UTF8からUTF7への文字コードの変換はどうやったらいいでしょうか?
下のような使い方をしたいのですが・・
//引数1に対象文字列、2に変換前Encoding(UTF8)、3に変換後Encoding(UTF7)
public string (string text, Encoding encode, Encoding encode)
{
return text2;//戻り値はエンコード変換後の文字列
}
- 234デフォルトの名無しさんsage04/06/29 22:08
- >>227
.NETアセンブリは、外見はPEフォーマットになっているんだけど、そのヘッダーに
マジックナンバーとして、どのコードなのかが書かれている。
dumpbin /headers で見てみ。
で、ネイティブなマネージコード、仮にPEヘッダーにPE32とかx86と書かれていても
64bit .NET frameworkでは、64bit用にコンパイルされて動作する。
もちろん、CCW、RCWとか使ってちゃだめよ。
あと、J#だけは、WOW64上の動作に限られる。
- 235デフォルトの名無しさんsage04/06/29 22:11
- >>233
> UTF8からUTF7への文字コードの変換はどうやったらいいでしょうか?
過去何度か出てるけど、string型はUnicode(UTF16)。
そんなメソッドに意味はない。
バイト配列が必要なときにSystem.Text.Encoding.GetBytes()とか使うといい。
あるいはもっと具体的な話をしてくれればほかの助言もできるかもしれないけど。
- 236デフォルトの名無しさんsage04/06/30 00:27
- リフレクションで取得できるフィールドの一覧とか、
プロパティの一覧って必ず宣言した順番に並んでいるのでしょうか?
順番が保証されてるとかないですか?
- 237デフォルトの名無しさんsage04/06/30 00:37
- >>236
何がやりたいの?
アンマネージコードにエクスポートしたいの?なら、LayoutKindがあるけど。
- 238デフォルトの名無しさんsage04/06/30 00:43
- >>237
リフレクションで取得した一覧の順番に依存したコードがあるんで、
それを修正するための理由を探しているんです。
- 239デフォルトの名無しさんsage04/06/30 06:13
- >238
順番を保障してないと考えるのが妥当だと思うけどなぁ…
# custom serialization が実装されているとかすると順番とかそんなの全く関係ないし…
- 240デフォルトの名無しさんsage04/06/30 13:19
- そこらへんのこまい仕様決めてるものないんかい?
- 24116504/06/30 14:27
- このダイヤログを表示したままだとプロパティが使用できない・・・。
どうやら、VC#.netに問題があるのではなく、visual studioに問題があるみたいです。
アプリケーションの追加と削除に、Framework1.1とVC#.netを削除する部分があるんだけど、visual studioを削除する部分がないですよね。。。どこにある??
完全に削除して再インスコを試みたいです・・・orz
- 242デフォルトの名無しさんsage04/06/30 15:30
- こういうのはあきらめてOSから再インスコするのが無難、というか結果的に一番早く解決する。
ウィザード系が走るときにオブジェクトの作成に失敗しましたと出て、コンポーネントの追加やら何やらが
できなくなった状態のがうちにも1台ある。
VS.NET自体は何度か再インスコしたが改善せず。
そのうちOSごとと思ってうっちゃってるけど。
- 243デフォルトの名無しさんsage04/06/30 15:34
- あるアセンブリが別のアセンブリを参照している場合、
その参照される側が更新されると、動作に支障がなくても参照できなくなります。
厳密名とか署名とかいったことが行われている場合だけそうなるようです。
参照する側をいじるにしてもされる側をいじるにしても、
たとえばメジャーバージョンが変更されない限り参照しちゃえみたいな指令はできませんか?
- 244デフォルトの名無しさんsage04/06/30 15:44
- >>243
遅延署名?
- 245デフォルトの名無しさんsage04/06/30 15:52
- >243
[assembly: AssemblyVersion ("1.0.*")] とかやってない?
ttp://www.atmarkit.co.jp/fdotnet/technology/idnfw11_04/idnfw11_04_02.html の version redirect なんてのもあるにはあるけど…
- 246165sage04/06/30 17:23
- >>242
THX...
OS再セットします。。。私事ですが、家族共有PCだから、いつできるかな・・・orz
- 247デフォルトの名無しさんage04/06/30 23:37
-
- 248デフォルトの名無しさんsage04/07/01 02:31
- >>244
なぜにそこで遅延署名…
- 249デフォルトの名無しさん04/07/01 10:36
- string url;
HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest ;
HttpWebResponse res = null ;
try
{
res = req.GetResponse() as HttpWebResponse ;
StreamReader reader = new StreamReader(res.GetResponseStream(),Encoding.GetEncoding("Shift-JIS")) ;
textBox1.Text = reader.ReadToEnd() ;
reader.Close() ;
}
catch
{
textBox1.Text = "Not Found!";
}
こんな感じでWebページのソースファイルを取ってきたいのですが、
2chのスレッドのソースを取得するにはどうすればよいでしょうか?
url に http://pc5.2ch.net/test/read.cgi/tech/1087297504/ といれても Not Found になってしまうのですが。
- 250デフォルトの名無しさんsage04/07/01 10:46
- http://pc5.2ch.net/tech/dat/1087297504.dat
- 251デフォルトの名無しさんsage04/07/01 10:57
- req.UserAgentに適当な文字列を入れる
- 252デフォルトの名無しさん04/07/01 13:17
- ARGB を RGB に変換したいのですが、方法が見つかりません。
Alphaを無視するのではなく、Alphaが有効な状態での、
赤緑青の値を取得したいのです。
- 253デフォルトの名無しさんsage04/07/01 13:55
- >>252
(゚д゚)ハァ?
- 254デフォルトの名無しさんsage04/07/01 14:32
- >>252
背景の色は?
- 25525204/07/01 15:01
- 例えば、
ColorFromArgb(255,Color.Red).ToArgb()
とすると、-65536 が返されます。
これを、255,0,0 に変換したいということです。
- 256デフォルトの名無しさんsage04/07/01 15:09
- >Alphaを無視するのではなく、Alphaが有効な状態での、
>赤緑青の値を取得したいのです。
ここが禿しく意味不明なんだが。
Aが有効なRGBっていうと普通は合成先のRGBも必要だろ。
>>255を読む限りAを無視すればそれでいいじゃんって思うんだが?
byte r = System.Drawing.Color.FromArgb(255,Color.Red).R;
byte g = System.Drawing.Color.FromArgb(255,Color.Red).G;
byte b = System.Drawing.Color.FromArgb(255,Color.Red).B;
これで何か不都合でもあるのか?
- 257デフォルトの名無しさんsage04/07/01 15:29
- 俺にはなぜこんな人を相手にするのかがわからない。
- 258デフォルトの名無しさんsage04/07/01 15:49
- >>252
言ってる意味がわからんのだが、
とりあえずRGB(0,0,0)かARGB(0,0,0,0)と合成してみれ。
それで気に入った色が出てこないんならもっぺん整理して出直せ。
- 259デフォルトの名無しさんsage04/07/01 16:04
- 良く考えると >>257 が一番マトモなこと言ってるね。
メシ食ってくる。
- 260デフォルトの名無しさんsage04/07/02 01:35
- >>252の意味不明な返答を聞きたい
- 261デフォルトの名無しさん04/07/02 23:32
- ブラウザでコピーしたHtmlを
クリップボードで受け取ろうと思ったのですが
文字化けしてしまいます。
回避策はあるのでしょうか?
string dataHtml =
Clipboard.GetDataObject().GetData(DataFormats.Html,true) as string;
- 262デフォルトの名無しさんsage04/07/03 00:55
- エンコードが合ってないのか・・・
- 263デフォルトの名無しさんsage04/07/03 05:32
- >>261
http://santamartadotnet.hp.infoseek.co.jp/documents/dotnettips/tips015.html
文字コード変換で解決できると思う。
- 26426104/07/03 16:30
- >>261,262
参考URLを元に、こんな感じで全部試してみた。
foreach ( Encoding encoding in encodings ){
foreach (Encoding sourceEncoding in sourceEncodings){
byte[] buf = sourceEncoding.GetBytes(dataHtml);
Console.WriteLine( encoding.GetString(buf) );
}}
整理すると
一部の文字化けが解消するパターンはあったけど
完全には戻らなかった。...orz
//一部だけだが文字化けが解消したもの
byte[] bytes =Encoding.Default.GetBytes(dataHtml);
string data = Encoding.UTF8.GetString(bytes);
Console.WriteLine(data);
- 265デフォルトの名無しさん04/07/03 22:16
- .NET のガベージコレクタについて聞きたいのですが,
ある static なインスタンスの中で byte array の配列を用意して
(かなり大きな配列になる)使用しています.
次に,この配列の中身を削除して(例えば null を代入するなり)
GC.Collect() を呼んでも,その配列で使用していたであろうメモリ
が解放されない時があります.(される時もあるんです)
で,その状態で,再度同じ byte array に
ドカンと領域を取ると OutOfMemory 例外となってしまいます.
この時,最初に取得した byte array の分が正しく解放されて
いれば,OutOfMemory にはならないはずなのですが,どこからも
参照していない状態(null を代入するなりして)
どうしても解放されない時があります.
GC.Collect() を行なっても解放されていないメモリ領域が
存在して,かつ,そのメモリ領域が原因で OutOfMemory となるので
プログラム的にどのように対応すればよいのか困っています.
何か注意する点などアドバイスなど頂けませんでしょうか?
- 266デフォルトの名無しさんsage04/07/03 22:23
- GC.Collect()って、「開放してもいいよ」って合図であって、
実際に開放されるタイミングはGCが決めるんじゃなかったっけ?
- 267デフォルトの名無しさんsage04/07/03 22:24
- ・再利用する可能性があるなら自前でメモリ管理する
・OutOfMemoryになるようなハードウェアは使わない
・そもそも設計がおかしい
・どこかで参照が残っている可能性がある
・GC.Collect(int)
- 268266sage04/07/03 22:25
- 思いっきり勘違いしてたw
- 269デフォルトの名無しさんsage04/07/03 22:26
- ttp://www.devdex.com/asp/message.asp?p=2911&r=4203037
.NET Framework 1.0 には large object heap の管理に bug が存在していた模様です。
もしかしたらこいつに引っかかってるのでは?
- 27026504/07/03 22:33
- みなさん,ありがとうございます.
>>266 そうでしたか.では GC.Collect 呼んでもガベージコレクションされる
とは限らないんですね.強制的にガベージコレクションを行なう方法
っていうのは用意されていないんでしょうか?
>>267 自前でのメモリ管理ってどのように行なうのでしょうか?
URL などの情報でもいいので教えていただけないでしょうか?
参照が残っている可能性ですが間違いなく null を代入しているの
ですが,それでは確実ではないでしょうか?
ハードウェアは換えられないし,設計がおかしい可能性も否定は
できませんが….
>> 269
情報ありがとうございます.ゆっくり目を通してみます.
よろしくお願いします.
- 271デフォルトの名無しさんsage04/07/03 23:33
- >270
メモリ管理というのは必要量を最初に確保したまま開放せず、
使いまわせばということです。
可変長であればサイズ管理を追加してしまえばいいのでは。
クラスライブラリのメリットをスポイルしてしまいますが、システムが確保できないような
量を要求している以上仕方ない気もしますが…。
設計がおかしいとは、結局メモリ管理を見直すか、メモリ必要量を見直すしかないのでは?
ということで。
- 272デフォルトの名無しさんsage04/07/04 00:11
- システムが確保できないような量を要求している
っつー点で破綻しているような。
- 273デフォルトの名無しさんsage04/07/04 00:29
- GC.Collect()はパラメータなしだとGC.Collect(0)と同等じゃなかったっけ?
だから第二世代以降の変数は保持されたままになる。
全部開放したいならGC.Collect(2)にしなきゃダメ。
(2)はMaxGenerationだったかで値取得した方がいい。
- 274デフォルトの名無しさんsage04/07/04 00:37
- うそをつけ。
- 275デフォルトの名無しさんsage04/07/04 00:41
- すべてのジェネレーションのガベージ コレクションを強制的に実行します。
public static void Collect();
まあ、こんなものなので鵜呑みにせずちゃんと確認しろってこった。
- 276デフォルトの名無しさんsage04/07/04 01:40
- ttp://www.atmarkit.co.jp/fdotnet/dotnettips/021gc/gc.html
ここの「より高度なガベージ・コレクションを行う」の実行結果を見る限りでは
ジェネレーション指定なしだと開放されずに残るっぽいが?
- 277276sage04/07/04 01:44
- あ、すまん、勘違いだわ。
- 278デフォルトの名無しさん04/07/04 10:29
- エラーコードについて質問です。
Win32 APIの、DdeConnectという関数をC#のPlatform Invokeで呼んでいます。
DdeGetLastErrorの戻り値によると、16390, 16394のエラーが出ているのですが
このエラーの意味を調べるにはどうすれば良いんでしょうか?
MSDNサイトを見ると、15999までのErrorしか記載されていませんでした。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/system_error_codes.asp
16000番以上のエラーコードが調べられるページやファイルがありましたら教えてください。
初歩的な質問かもしれませんが、よろしくおながいします。
- 279デフォルトの名無しさんsage04/07/04 10:45
- 図形の再描画について質問ですあ。
テキストボックスに数値を入れてボタンを押すと、計算をしてグラフを描画するプログラムを作ったのですが、
プログラムのウィンドウの上に他のウィンドウを重ねたりスクロールバーでスクロールさせてもどすと、
いままで隠れていた部分の「描画した線」が見えなくなってしまいます。
消えないようにするにはどうしたらよいのでしょうか?
- 280デフォルトの名無しさんsage04/07/04 11:31
- >>279
Paintイベント・・・・・
- 281デフォルトの名無しさんsage04/07/04 11:32
- >>278
ttp://www.google.co.jp/search?num=100&hl=ja&inlang=ja&ie=UTF-8&c2coff=1&q=ddegetlasterror+16390%7C4006%7C0x4006&lr=lang_ja
と16進でも検索しよう。
ここの一番上でエラーコードとそれの定数が分かる。あとはDdeGetLastErrorのMSDNの解説。
>>279
PictureBox.ImageなりForm.BackgroundImageなりのImageに対して描画する。
- 282デフォルトの名無しさんsage04/07/04 12:08
- >279
入門スレで出直して来い
- 283デフォルトの名無しさんsage04/07/04 12:57
- >>280
Piantイベントを試してみたのですが、
private void button1_Click_1(object sender, System.EventArgs e)
{
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{ //演算、描画のコード
}
}
このような形にしてしまうとエラーがたくさん出てきてしまいます。
かといってpaintイベントをclickイベントの外に出すと、最初から決まっている線については描画できますが
計算によって求まる線については、まだテキストボックスに数値を入力してないということでプログラムが固まってしまいます。
どのようにすればよいのでしょうか・・・
- 284デフォルトの名無しさんsage04/07/04 13:04
- ( ゚Д゚)
- 285デフォルトの名無しさんsage04/07/04 13:48
- >>283
イベントの下にイベントを置くという、C#のルールそのものを無視したやり方自体が間違っている。
C#というよりVisualC#の動作をちゃんと理解した方がいいよ。
> まだテキストボックスに数値を入力してないということでプログラムが固まってしまいます
だったら、先に値をチェックして関数を終了すればいい。
- 286デフォルトの名無しさん04/07/04 14:43
- textBox に文字入力した後Enterを押すと
ボーン てBeep音が出るのですが、
これを鳴らないようにするにはどうすれば良いのでしょうか?
- 287デフォルトの名無しさんsage04/07/04 14:53
- >>286
KeyPressイベントでHandledをtrueにすれば出来たような気がする
- 288デフォルトの名無しさんsage04/07/04 14:57
- >>281
BackgroundImageを利用するの好きだなー。
上からさらに描画したりして応用きくしね。
- 289デフォルトの名無しさんsage04/07/04 15:10
- >279というか>283はあれなんで回答する気力もなくなるんだけど、
>285の
>イベントの下にイベントを置くという、
という表現もなんだかなぁと思う日曜の昼下がり。
- 290デフォルトの名無しさんsage04/07/04 15:12
- >>285
「先に値をチェックして関数を終了」というのはどのようにすればよいのでしょうか?
- 291286sage04/07/04 15:22
- >>287
お〜出来ました!
どうもありがとうございます!!
- 292デフォルトの名無しさんsage04/07/04 16:16
- >>290
いいから入門書を買ってこい。
- 293デフォルトの名無しさんsage04/07/04 16:27
- >>292
すいません、それについては解決しました。実はこのスレには
http://pc5.2ch.net/test/read.cgi/tech/1083995297/
から誘導されてきたのですが(315が私です)、新たな質問は向こうのスレに書きましたので
よろしければご教授願います。ちなみに入門書は何冊か持ってます。
- 294デフォルトの名無しさん04/07/04 16:34
- StreamReader reader = new StreamReader();
のStreamReaderはnewしないと使えないのに、
NetworkStream stream = new TcpClient("hage.net",100).GetStream();
のNetworkStreamはnewしないで使えるのは何故なんですか?
- 295デフォルトの名無しさんsage04/07/04 16:52
- >>293
だからなんでFormへの直接描画にこだわるのさ。
>>294
GetStreamメソッドの中でnewされてるんだろ。
//夏……。
- 296デフォルトの名無しさんsage04/07/04 17:13
- the Spokeの発売は失敗だったのじゃないだろうか(w
- 297デフォルトの名無しさんsage04/07/04 17:17
- PictureBoxに図形を描画するため、とりあえず
http://dobon.net/vb/dotnet/graphics/pictureboximageanddrawimage.html
ここのプログラムを実行してみたのですが、ボタンをクリックすると
'System.ArgumentNullException' のハンドルされていない例外が system.drawing.dll で発生しました。
追加情報 : 値を Null にすることはできません。
というメッセージが出てて、ソースコードの中の
Graphics g = Graphics.FromImage(PictureBox1.Image);
の行が緑色にマーキングされます。これってどういうことでしょうか?
- 298デフォルトの名無しさんsage04/07/04 17:26
- もっとサンプルをよく読め。
何がnullなのか考えてみろ。
- 299デフォルトの名無しさんsage04/07/04 17:26
- >>293
買ったなら読め。
- 300デフォルトの名無しさん04/07/04 17:31
- うちのモニター、1024*768が限界なんですが、1600*1400くらいにするプログラム教えてください。
- 30130004/07/04 17:32
- 要するに、モニターに表示されるグラフィックのサイズを全部まとめて調整できないかな、と。
- 302デフォルトの名無しさんsage04/07/04 17:35
- 釣りかと思いきや意味不明だった、
- 303デフォルトの名無しさんsage04/07/04 17:37
- >>300
別スレで答え出てただろうに。
- 304デフォルトの名無しさんsage04/07/04 17:56
- >296
安くなったりして間口が広がればそこから入ってくるのは当然従来よりも
質の低いものの割合が増えるのは世の習い。
ある意味、金がかかることがユーザの平均的な質を維持してたんじゃないの?
- 305デフォルトの名無しさんsage04/07/04 18:11
- >>290
「まだテキストボックスに数値を入力してないということで」が判明しているのでしょ?
なら、そうなっているかを調べればいい。
- 306デフォルトの名無しさんsage04/07/04 18:17
- >>305
すいません。それについては解決できました。
そして今は>>293や>>297の問題でつまずいております・・・
- 307デフォルトの名無しさんsage04/07/04 18:37
- >>298
すいません。どうしても分かりません。これさえ分かれば全ての問題が連鎖的に解決し、
これ以上皆さんにご迷惑をかけることもないと思うのですが、教えてくださいませんでしょうか・・・?
- 308デフォルトの名無しさんsage04/07/04 18:42
- 絶対無理だからあきらめろ。
- 309デフォルトの名無しさんsage04/07/04 18:44
- あきらめきれません。
- 310デフォルトの名無しさんsage04/07/04 19:43
- >>307
何がnullか分からなかったらデバッガで追っかけてみろ。
それ以前に、文法を一通り学べ。
今のおまえじゃ連鎖的に解決なんか絶対しない。
- 311デフォルトの名無しさんsage04/07/04 19:53
- 入れ違いで申し訳ありませんが>>297は下地となる白いgif画像を用意したら解決しました。
世の中に絶対なんてありません。このまま一気に突き進みたいと思います。
- 312デフォルトの名無しさんsage04/07/04 20:04
- やっぱりファイルを読み込んでるんだろうなー。
どぼんの中の人もわざわざ書いてあることを無視されて切ないだろうなー。
- 313デフォルトの名無しさんsage04/07/04 20:12
- Form1のButtonAをクリックして、Form2をモーダルダイアログボックスとして表示します。
Form2には、textBoxとButtonOK、ButtonCancelが用意されていて、
ButtonCancelが押された場合は何もせず、閉じて、
ButtonOKが押された場合には、textBoxに入力された値を
Form1のhogeStrに保存して、閉じたいと思います。
分からないのは、どうやってForm1のhogeStrに代入するかです。教えてください。
- 314デフォルトの名無しさんsage04/07/04 20:18
- 問題は全て解決しました。ヒントをくれた皆様には感謝の言葉もございません。
くじけそうになったこともありましたが、あきらめずに頑張り続ければいつかきっと報われるということを学びました。
- 315デフォルトの名無しさんsage04/07/04 20:20
- >>313
参考例として、コモンダイアログのOpenFileDialogで考えてみよう。
1)OpenFileDialogを初期化する(Filterの設定とかも含む
2)OpenFileDialog.ShowDialog()を実行する
3)ShowDialogの返り値がDialogResult.OKの場合、
ダイアログでユーザが選択したファイル名が
FileNameプロパティに入っている
- 316デフォルトの名無しさん04/07/04 20:21
- 表示したウィンドウ全体に対して、
あらかじめ定めたテーブルにしたがって、
色を変換するという処理を行ないたいです。
例えば、フォームの中に画像を表示していたら、
画像を含めて表示したウィンドウ全体に
「白黒表示をする」とか「RGBを入れ替える」という処理をしたいのです。
- 31731304/07/04 20:35
- 314は偽者です。こういうとき、ID表示板だったら、と思います。トリップつければ良かったんですけど。
>>315
Form1で、hogeStr = Form2.textBox.Text; とするということですか?
Form1からForm2のtextBoxが見えないのかと思い、 publicにしてみたけどだめでした。
既に閉じた後なのでForm2オブジェクト(?)が消えたんですか?
case DialogResult.OK:
MessageBox.Show(Form2.textBox.Text);break;
とやってみたところ、ビルドエラータスクに
「型or名前空間Form2が見つからない。ディレクティブorアセンブリ参照を使え」
と出ましたが、この意味すらわからないです。
- 318311=314sage04/07/04 20:46
- >>317
すいません。騙るつもりはなかったんですが、タイミングが悪かったです。
- 319313sage04/07/04 20:53
- >>318 こちらこそ、前後の流れを考えずスマソ orz
>>315 ヒント、Thanx!
ヘルプ見ながら考えていて、ついに分かりました。
---------Form1
Form2 f = new Form2();
if ( f.ShowDialog() == DialogResult.OK )
MessageBox.Show(f.MAGE);
---------Form2
public string MAGE { get{ return textBox1.Text; } }
Form1で Form f と宣言していたために、ドツボにはまっていました。
- 320デフォルトの名無しさんsage04/07/04 21:00
- >>317
ようは、こういう流れを再現できるようなForm2を作ればいいの。
Form2 d = new Form2;
if(d.ShowDialog(this) == DialogResult.OK){
MessageBox.Show(d.Atai)
}
で、Form2にある確定ボタンのイベントにて、
this.Atai = textBox.Text; // public string Atai;というメンバかプロパティを作っとく
this.DialogResult = DialogResult.OK;
this.Close();
直接TextBoxを参照するのは後々困るので、例はAtaiって変数に入れるようにしてみた。
- 321デフォルトの名無しさんsage04/07/04 21:01
- うわかぶっちまった (´・ω・`)ホーケー
- 322デフォルトの名無しさんsage04/07/04 21:10
- >>320
> で、Form2にある確定ボタンのイベントにて、
>
> this.Atai = textBox.Text; // public string Atai;というメンバかプロパティを作っとく
> this.DialogResult = DialogResult.OK;
> this.Close();
Close()しちゃ駄目ー。
DialogResultへの代入でメソッド終了。
あと>>319のようにプロパティが直接textBox.Textを参照するほうがスマートかな。
>>319
私もダイアログ間の値の受け渡しは初めえらく悩んだ記憶がある。
特にモードレスの。
//オブジェクト指向を全く理解してなかったからなー。
//クラスとインスタンスの違いすら……。
- 323デフォルトの名無しさんsage04/07/04 23:26
- >>322
自動的にCloseしてくれるんすか。ありがとっす。
> あと>>319のようにプロパティが直接textBox.Textを参照するほうがスマートかな。
個人的には、ブラックボックス化するのがよりスマートかなと。
クライアントの要望で泣く泣くダイアログのデザインが変えなあかん場合、
場合によっちゃそれまで参照していたコントロールが変わるケースは多々あるわけで、
その場合に親ダイアログをすべて変更せなあかんのは死ねる……。
- 324デフォルトの名無しさん04/07/04 23:34
- OEの受信トレイとか送信トレイって、同じコントロール(ListView)ですよね。
同じの作りたいんですが、トレイごとにインスタンス作ったほうがいいんですか?
それとも、インスタンスは一つで、トレイ切り替え時にアイテムや表示項目を読み込んだほうがいいですか?
OEではどうなってるか、見当付きませんか?
- 325デフォルトの名無しさんsage04/07/04 23:39
- >>323
> >>322
> 自動的にCloseしてくれるんすか。ありがとっす。
違う違う。
ダイアログの場合、OKが押されても不可視にするだけでフォームは閉じないってこと(不可視化はset_DialogResultで行われる)
Closeしちゃったら自動的にオブジェクトが廃棄されちゃう。
> 個人的には、ブラックボックス化するのがよりスマートかなと。
> クライアントの要望で泣く泣くダイアログのデザインが変えなあかん場合、
> 場合によっちゃそれまで参照していたコントロールが変わるケースは多々あるわけで、
> その場合に親ダイアログをすべて変更せなあかんのは死ねる……。
この辺の感覚は流石に分からないな……。
個人的にはClickイベントの中を書き換えるかプロパティの中を書き換えるかで、
カプセル化として差はないと考えるけど。
//public string Text {get {return textBox.Text;}}
//の返すべき値がlistBox.SelectedItem.ToString()になったところで
//このプロパティの中だけ書き換えればダイアログ呼び出し元に変更はないし。
>>324
別々にインスタンスを持つほうが自然ではある。
- 326デフォルトの名無しさんsage04/07/05 00:19
- >>324
Outlook Expressは、ひとつのウィンドウで表示項目によって分けている。
実際、ATLで書かれているんだけどね。spy++でじっくりと見てみ。
- 327デフォルトの名無しさんsage04/07/05 00:28
- すみません。教えて下さい。
1.TcpListenerを使って通信をする時、AcceptTcpClient()で繋がった
相手のIPとポートの取得方法がわかりません。
TcpClient からは取得できないようなのですが、どうしたらいいのでしょうか?
2.ルーターがいる場合、ルーター側のグローバルIPってわかりませんか?
お願いします。
- 328デフォルトの名無しさんsage04/07/05 00:38
- ソースコードの一部分だけコンパイラの警告を止めるって出来ますか?
推奨されないことをあえてやっているのですが、
エラーじゃなくて警告なのでコンパイルは通ってます。
ただ、その警告の量が多すぎて、必要な警告が見づらくなってきました。
警告を出すクラスは一つなので、そのクラスについてだけ警告やめて欲しいんです。
- 329デフォルトの名無しさん04/07/05 00:49
- byte[]型にされた文字列のエンコードを調べるにはどうしたらいいんでしょうか?
- 330デフォルトの名無しさんsage04/07/05 00:58
- >328
現時点では、VC++ にある #pragma warning に相当するものが無いんすよね… orz
C# 2.0 には増えたみたいだけど(ttp://lab.msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_csref/html/723493d5-9753-4cec-babb-54e2b8eb36b6.asp)
# Generics と partial type と anonymous method(と iterator support)を早く使わせてくれ(笑)> MS
- 331デフォルトの名無しさんsage04/07/05 01:00
- >329
一旦 byte [] 化されちゃったら、あとは中身を見て推論するしか手が無いのでは?
# nkf とか jcode.pl とかがやってる様に…
- 332デフォルトの名無しさん04/07/05 01:04
- >>328
同じ警告が大量発生するなら、
ソリューションエクスプローラのプロジェクトの「プロパティ」
↓
構成プロパティ→ビルドで、特定の警告を表示しない、の項目で設定できます。
- 333デフォルトの名無しさんsage04/07/05 01:04
- >>329
もちろん自前で判別。
//フレームワークで用意してくれても良いと思うんだけど。
というのもなんなので。
ttp://kasumi.sakura.ne.jp/~gm/gpj/index.shtml
こういうありがたいページがある。
>>328
その部分だけDLLにしとくとか……?
- 33432904/07/05 02:00
- >>331
>一旦byte[]化されちゃったら
文字列データの場合だと、判別する方法はあるんですか?
OEからJISエンコードで送ったメールを、自作POP3で受信すると、受け取ったメールが文字化けしてるので、直したいんです。
(ほかの文字コードで送られた場合も判別変換できたらいいな、と)
- 335デフォルトの名無しさんsage04/07/05 02:06
- >>334
> 文字列データの場合だと、判別する方法はあるんですか?
文字列になったんだったらもうエンコードを気にする必要がなくなってるじゃないか。
- 336278sage04/07/05 07:23
- >>281
ありがとうございました!
エラーの内容がわかったので解決できそうな気がしてきました。
- 337デフォルトの名無しさんsage04/07/05 08:24
- C#でDelphiのProcessMessagesのような処理を行うにはどうすればいいでしょうか。
重い計算をしていると、フォームのコントロールの描画がメチャクチャになるのを
直したいのですが・・・・
this.Refresh(); をはさんでみましたが、フォームそのものが一度フォーカスを失う
とその後は「応答なし」になってしまいます。
- 338デフォルトの名無しさんsage04/07/05 08:53
- >>337
小細工してないで非同期で計算しろ
- 339デフォルトの名無しさんsage04/07/05 08:54
- >>337
重い処理は別スレッドで。これ常識。
- 340デフォルトの名無しさんsage04/07/05 09:35
- まえから思ってたが、このスレってダメな人が常駐してわざとダメな答え返してるね。
Application.DoEvents();
- 341デフォルトの名無しさんsage04/07/05 10:07
- >>338>>339
まだよくわかりません。
>>340
ありがとうございました。バッチリです。
- 342デフォルトの名無しさんsage04/07/05 11:01
- DoEvents()の副作用までわかってるんならいいんだけどね。
- 343デフォルトの名無しさんsage04/07/05 11:02
- DoEventsはむしろ軽い処理の合間に入れるものだろ。
例えばWebからデータを拾ってくるときに相手サーバーの応答が遅かった場合なんかは
DoEvents入れたって応答なしになるぞ。
- 344デフォルトの名無しさんsage04/07/05 11:42
- 見ての通りのDel厨に、スレッド使えだの副作用覚えろだの無理言うなよ。
- 345デフォルトの名無しさんsage04/07/05 11:51
- でもシリアライズとかデシリアライズしている時にDoEvents()挟むと、
統合環境から実行したら大丈夫だけどスタンドアロンでEXEを実行
するとランタイムエラー出ません?
- 346デフォルトの名無しさん04/07/05 14:19
- カスタムコントロール(WindowsForm)を作ろうと思って居ます
作りたい物
複数行(行数は可変でかなり横長)で
Excelのような縦横のスクロールバーを持つ物です
単純なコントロールならUserControl、Contorolどちらからでも一応作ることは出来ます
悩んでいる所はExcelのような奴です
ご存知のようにExcelは横スクロールバーをスライドさせると
列のタイトル(A,B,Cって奴)も一緒にスクロールしますが行タイトル(1,2,3って奴)は固定
縦スクロールバーをスライドさせると行のタイトルはスクロールしますが列のタイトルは固定
これをどの様に実装したらいいのか分かりません
普通にスクロールバーを使用すると、横にスライドすると行のタイトルもスクロールしてしまい
表示枠の外に出てしまいます。
何かアドバイスでも頂けないでしょうか
- 347デフォルトの名無しさんsage04/07/05 14:26
- >346
釣られてしまたが、それがわからない人はカスタム作ろうと思わないほうがいいと思う
- 348デフォルトの名無しさんsage04/07/05 15:20
- >>346
その辺を自動で簡単にやってくれる魔法は用意されていません。
そういう動作をさせるのに、数千行から数万行のコードを書いた経験があります。
やり方を聞かれても、やることが多すぎて答えるのに何日もかかります。
作るための知識もどこから得たのかわからないくらい広範に勉強しました。
参照URLも出せません。
あなたもがんばってください。
もしくは好みの市販コンポかエクセルを買ってください。
- 349デフォルトの名無しさんsage04/07/05 15:53
- >>347さん>>348さん
レスありがとうございます
とても大変そうですが、時間だけは有るので
出来る所までやってみようと思います
- 350デフォルトの名無しさんsage04/07/05 16:01
- ここは君の日記帳じゃないから@ITあたりでスレ立てて相手してくれる人探した方がいいよ。
- 351デフォルトの名無しさん04/07/05 20:45
- スレッドの使い方で悩んでいます。
メインの処理A ――□□□□………………☆☆☆―――
スレッド処理B ――――□□□□□□□□――――――
やりたいのは上の図のようなイメージです。
AからBのスレッドを開始させて、Bの終了後に☆を実行したいです。
どうやったらAを待機させられますか
- 352デフォルトの名無しさんsage04/07/05 20:52
- いべんと
- 353デフォルトの名無しさん04/07/05 22:03
- >>325
> 違う違う。
> ダイアログの場合、OKが押されても不可視にするだけでフォームは閉じないってこと(不可視化はset_DialogResultで行われる)
> Closeしちゃったら自動的にオブジェクトが廃棄されちゃう。
俺もそう思ってたんだけど、どうやら違うみたいよ。
Form1 から Form2をShowDialog(Form1)で開いて Form2のボタンのイベントなんかで
.Close()かけても ちゃんとForm1からForm2のpublicなものは参照できる。
どうやらForm2.Dispose()かけるまで破棄されないみたい。
ヘルプ読むとCloseメソッドはフォームを破棄するように書いてあるとしか
読めないんだけどね。
- 354デフォルトの名無しさんsage04/07/05 22:08
- > どうやらForm2.Dispose()かけるまで破棄されないみたい。
GC様に笑われるぞ。
つか俺が真っ先に笑ったが。
- 355デフォルトの名無しさん04/07/05 22:13
- 353でつ、
俺の大きな勘違いでした。
Form2のButton.DialogResult にOK属性を設定していたので、
ボタンクリックとともにForm2.DialogResultに代入が起こり、それで
Form2からForm1に制御が戻って Form2.Button_Click イベントに
書いてあった Form2.Close()が単に実行されていないだけでした。
- 356デフォルトの名無しさんsage04/07/05 22:43
- >>346
素直にExcelを貼り付けなさい。
- 357デフォルトの名無しさんsage04/07/05 22:45
- >>351
JoinかManualResetEventあたりを使えば?
- 358デフォルトの名無しさんsage04/07/06 00:15
- windowsアプリってMDI形式で作るのが一般的なのかな
- 359デフォルトの名無しさんsage04/07/06 00:21
- SDIまんせー
特にタブブラウザなんかは芯でいいよ
- 360デフォルトの名無しさんsage04/07/06 00:33
- >>340
おまえ、恥ずかしくないか…
- 361デフォルトの名無しさんsage04/07/06 00:39
- >>345
シリアライズ、デシリアライズが具体的に何をさしてるのか分からんが、
普通に所謂シリアライズだとして、どうやって間にDoEventsをはさむんだ?
まさか、…
- 362デフォルトの名無しさんsage04/07/06 00:41
- >>325
お前が間違ってるよ。
>>354
ちょっと意味が分からんが、
>>355
だまされてるよ、あんた。
- 363デフォルトの名無しさんsage04/07/06 00:43
- >>354
そこでGCが出てくる時点で、多分おまいはちゃんと理解してない。
理解してるんなら意味不明なこと書くなよ…
- 364デフォルトの名無しさんsage04/07/06 00:51
- >>325の後半は書いてること自体はそのとおりだと思うんだけど、
多分>>323は
> あと>>319のようにプロパティが直接textBox.Textを参照するほうがスマートかな。
これの意味を取り違えただけだと思う。ってか俺も一瞬取り違えかけた。
※「プロパティが」直接参照するんじゃなくて「親フォームが」と思ったんじゃないかと
- 365デフォルトの名無しさん04/07/06 00:55
- 367.999という、整数部3桁、小数部3桁の数字があるとして、
この数字の小数部を取り出したいんです。どうすればいいですか?
整数部を取り出すのはDecimalのメンバを探せばそれらしいのが見つかったんですが。
- 366デフォルトの名無しさんsage04/07/06 00:59
- >>365
Mathとかにあると思うが、多分次は、
それが本当に小数点以下3桁か?と言う点にはまる。
- 367デフォルトの名無しさんsage04/07/06 01:04
- >>366
Mathを探したんですけど見つかりませんでした。
普通は小数点をさがして、そこで切るとかするんでしょうか?
- 368デフォルトの名無しさんsage04/07/06 01:04
- 整数部がわかるならそれを引けばいいんじゃないの
- 369デフォルトの名無しさんsage04/07/06 01:24
- >>361
いや、例えばBinaryFormatterを通して合計800MBほどのファイルになるデータ
のコンバートを行っているんだけど、当然Serialize()とDeserialize()メソッドを
呼び出すよね?
800MBほどになるとさすがに時間がかかるのでプログレス・バーなんかを付けて
みたんだけど、フォームそのものが一旦フォーカスを失うともう一度フォーカスを
当ててやってもプログレス・バーが固まってしまう。
そこで変換ループの中にDoEvents()を入れてやったわけですよ。すると、統合環境
から実行する分には何の問題も起きないのに、デスクトップからショートカットで起動
すると、FileStreamをClose()しようとする時に"System.Runtime.InteropServices.
SEHException"なんて例外が出るんですよ。いやはや困ってます。
- 370デフォルトの名無しさんsage04/07/06 01:30
- >>365
浮動少数だと下手に演算すると誤差がでるかもしれんから、漏れは文字列に直してやってる。
float a = (float)367.999;
string b = a.ToString(@"F3");
int c = int.Parse(b.ToString().Substring(b.ToString().IndexOf(@".") + 1));
- 371デフォルトの名無しさんsage04/07/06 02:05
- BCD演算ユニットとか変数を充実してくれよ
- 372デフォルトの名無しさんsage04/07/06 02:20
- デシマルでも誤差は出ないのでは?
- 373デフォルトの名無しさんsage04/07/06 02:25
- キャストだと誤差でるね。
float a = (float)367.999;
float b = (float)((int)a);
int c = (int)((float)((float)a - (float)b) * (float)1000.0);
- 374デフォルトの名無しさん04/07/06 02:53
- 受信したメールの文字化けを直したいんですが。
文字コードを変更するには、必ずいったんbyte配列に直さないといけないんですか?
Encoding.Default.GetBytes(s);
の部分のエンコードを、Defaultにしても"shift_jis"にしても"utf-8"にしても正しく表示されるんですが、変換の方法としてはこれでいいんでしょうか?
(戻り値のstringはRichTextBox.Textに入れます。)
public string GetEnc(string s) //sは受信したJISエンコードのメール
{
byte[] bytes = Encoding.Default.GetBytes(s);
return Encoding.GetEncoding("iso-2022-jp").GetString(bytes);
}
- 375デフォルトの名無しさんsage04/07/06 03:01
- 369です。くそっ原因がわかった。
↓↓
Application.EnableVisualStyles();
こいつがすべての元凶ですた。XPスタイルをmanifestを作らずに済まそうと
思っていたのに、Application.DoEvents()と猛烈に相性が悪いだけでなくて
描画速度も大幅に遅くなる。ぐぐってみたら「不具合」の言葉が散在しています。
.NET FrameWork 2.0 では直っている事を強く期待しますぜ。
- 376デフォルトの名無しさんsage04/07/06 05:18
- >373
プッ
- 377デフォルトの名無しさんsage04/07/06 06:34
- >>370
参考になりました。ありがとうございます。
- 378デフォルトの名無しさん04/07/06 08:26
- >>373
フロートじゃなくてデシマルの話。
- 379デフォルトの名無しさん04/07/06 08:52
- プログラム初心者です。
C#で画像処理ボードを使って動画像のキャプチャーを行いたいと思っています。
大抵の商品は、MFC対応とはなっていますが、C#からでも動作可能でしょうか?
お勧めのボードなどありましたら、お教えください。
- 380デフォルトの名無しさんsage04/07/06 09:23
- C#だからできないと言うことはないが、初心者にはできないな。
正確には、買ったボードの寿命までにはできない。
- 381373sage04/07/06 09:44
- 一番単純でありがちな誤差の出る例を示しただけだが、何かおかしかったか?
「キャストだと誤差が出る」とは書いたが、「デシマルでも誤差が出る」とは書いてないだろ。
- 382デフォルトの名無しさん04/07/06 10:16
- C#でaxWebBrowser+mshtmlを使用してテキスト入力→submitを自動化しようとしています。
Yahooは普通に動くのですがGoogleが動きません。
NavigateComplete2イベント後のwww.google.co.jpのouterHTMLを見ると下記の通りで
ブラウザ→ソースで表示される物と違いBodyタグがありません。
何か原因分かる方いらっしゃいますでしょうか?
---------------------------------------------------------------
<HTML><HEAD><TITLE>Google</TITLE>
<META http-equiv=content-type content="text/html; charset=UTF-8">
<STYLE><!--
body,td,a,p,.h{font-family:arial,sans-serif;}
.h{font-size: 20px;}
.q{color:#0000cc;}
//-->
</STYLE>
<SCRIPT>
<!--
function sf(){document.f.q.focus();}
// -->
</SCRIPT>
</HEAD></HTML>
- 383デフォルトの名無しさんsage04/07/06 10:50
- >>382
原因は分からないし、もう知ってるかもしれないけどとりあえずできている例
The Code Project - Microsoft Web Browser Automation using C# - C# Programming
http://www.codeproject.com/csharp/mshtml_automation.asp
- 384デフォルトの名無しさん04/07/06 10:58
- >>383
ありがとうございます、大変助かりました。
NavigateComplete2じゃ無くて、DocumentCompleteイベントを使用するんでした。
- 385デフォルトの名無しさんsage04/07/06 11:34
- >381
必死なキャストっぷりを笑っただけですが?
そんな後だしじゃんけんするんならちゃんとどの部分でどのオーダーでの
誤差が生じるかくらいはレポートしてもらわないと。
- 386デフォルトの名無しさんsage04/07/06 14:21
- >>381
float=浮動小数点なので、誤差が出るのは当たり前ってことでそ?
つまり、実際にベンチさせなくても分かる訳。
この意味が分からなければ、手計算でfloat型に変換してみるとイメージしやすいかも。
- 387デフォルトの名無しさんsage04/07/06 15:48
- >>374
そもそも s はどうやって作ったの?メールのデータなら元はバイト列だったはずで、
それをなんらかの Encoding で string にしたんだろうから、そのときの Encoding を
使うのがまぁ妥当だと思うけど(←この場合 ASCII 推奨)。
iso-2022-jp に限定せずに一般論を言えば、コード不明のバイト列は string には
入らないので (string は常に unicode 文字列)、byte [] のまま持ち歩いて、
使われているエンコードにしたがって文字列化するのが正しい方法。
- 388デフォルトの名無しさん04/07/06 15:56
- C#でASPやってるんですが、戻るボタン押すとページ真っ白になります。
これはどう回避したらいいでしょう?
- 389デフォルトの名無しさんsage04/07/06 15:56
- コンパイル時に参照するアセンブリを指定しないで、
あるコードに達したときに、そこからアセンブリへの参照を追加することはできますか?
- 390デフォルトの名無しさんsage04/07/06 16:24
- >>389
System.Assembly.LoadFromでできるんじゃない?
- 391デフォルトの名無しさんsage04/07/06 16:24
- System.Reflection.Assemblyだった
- 392デフォルトの名無しさん04/07/07 00:07
- C#でSQLサーバのmoney型の範囲にあるかどうか調べたいんですけど、
べた書きしか方法はないんでしょうか?
あと、あるテキストボックスに入力された数字が少数第4位まできちんと入力
されているかチェックしたいのです。どういった方法がありますか?
- 393デフォルトの名無しさんsage04/07/07 00:17
- >374
そう、必ずしなくちゃならない。
最初はおそらく、エンコードされていない状態で、stringに入っていて、
それで、どんなエンコードでGetBytesしても正しく表示できるんだと思う。
- 394デフォルトの名無しさんsage04/07/07 00:34
- >>393
> 最初はおそらく、エンコードされていない状態で、stringに入っていて、
果てしなく意味不明だな。
受け取ったbyte配列の各要素をそれぞれchar型にキャストしたchar配列でnew stringしてるってか?
- 395デフォルトの名無しさんsage04/07/07 00:51
- >>393
ありえん…
- 396デフォルトの名無しさん04/07/07 00:59
- ああ、すいません。メールを受けてる部分のソースはこれです。
(長いので例外処理とかは削除してます。)
public string RETR(int number)
{
string temp;
command = "RETR "+number+"\r\n";
cmdbuffer = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray());
networkStream.Write(cmdbuffer,0,cmdbuffer.Length);
temp = streamReader.ReadLine();
if(temp[0] != '-')
{
while(temp != ".")
{
response += temp + "\r\n";
temp = streamReader.ReadLine();
}
}
else
{
return temp;
}
return response;
}
- 397デフォルトの名無しさんsage04/07/07 01:08
- >>394
ASCIIエンコーディングで入れてるかどっちかかな
ASCIIってバイトそのまま下位バイトにコピーしてるだけかな?
ひょっとして8ビット目は消える?ま、iso-2022-jpなら関係ないか。
>>393のは、デコードしない状態でそのままStringの下位バイトに入ってるんならってことかな。
それにしたところで、どんなエンコーディングでも復元できるわけがない。
たまたまShift_JISとUTF8でやったからだろ。
- 398デフォルトの名無しさんsage04/07/07 01:12
- >>396
…やってること分かってんじゃん…
必ずByteに直すんでなくて初めからByteじゃねーか。
ま、それは分かってる事だが(手を出せない部分なのかと思った)。
StreamReader使わずにStreamそのまま使った方が素直な気がするが…
- 399デフォルトの名無しさんsage04/07/07 01:15
- いや、違うか、ちょっと読み違えてた。
streamReaderをどうやって作ってるんだ?
ま、ASCIIにしてもUTF8にしてもShift_JISにしても結果は同じだが。
- 400デフォルトの名無しさん04/07/07 01:19
- StreamReaderは、
tcpClient = new TcpClient(server, port);
networkStream = tcpClient.GetStream();
streamReader = new StreamReader(tcpClient.GetStream());
こういう感じで作ってます。
- 401デフォルトの名無しさんsage04/07/07 01:21
- それによってどんなエンコーディングで解釈されているか理解してる?
- 402デフォルトの名無しさん04/07/07 01:22
- してません。(自信を持って断言できます)
- 403デフォルトの名無しさんsage04/07/07 01:29
- ヘルプぐらい読めやゴルア
てのは置いといて、まあ気持ち悪いからせいぜいASCIIで読み取って
ASCIIで戻す方法で今まで通りにやるか、
無駄がいやなら読み込みの処理自体Byteでやるかだな。
StraemReaderとかでやるよりもコード上はやや面倒になるかもしれんが。
- 404デフォルトの名無しさんsage04/07/07 02:26
- 実はASCII文字のみのメールで動作確認しているせいで同じ結果を出してたりして。
メールに日本語入ってるんか?
- 405デフォルトの名無しさんsage04/07/07 02:45
- カスタム属性の使い道がいまいち思いつかんのだが...
- 406デフォルトの名無しさんsage04/07/07 02:50
- >>404
いや、上にも書いてるけど、JISコードって言ってるから(ま、メールだからね)、
結局はASCIIにしてもUTF8にしてもShift_JISにしても「結果は同じ」になるわけで。
- 407デフォルトの名無しさんsage04/07/07 02:51
- >>405
テラリウムで遊んでくればとりあえず感じはつかめる。
- 408デフォルトの名無しさんsage04/07/07 02:55
- >>407
それは提供されてる属性の使い方の感じでないの?
# や、実はテラリウム触った事ないから全然知らないんだが。
>>405は、どういう時に自分で定義してうまく活用できるんだということのような。
- 409デフォルトの名無しさんsage04/07/07 03:04
- >>408
テラリウムにはゲーム本体を動かしてるアセンブリと、
そのゲーム本体アセンブリが読み込むクラスの基本クラスの入ったアセンブリがあって、
その基本クラスの入ったアセンブリにカスタム属性が定義されてる。
で、この基本クラスの入ったアセンブリを使って
プレイヤーは派生クラスをつくってゲーム本体に読む込ませて遊ぶんだが、
このとき派生クラスとそのアセンブリの補足的な情報を得るために
ゲーム本体は派生クラスやアセンブリなどから設定されたカスタム属性を読み取ってる。
- 410405sage04/07/07 03:09
- >409
エクスプローラとか使っててファイルになんか印つけさせろとかそんな感じね
うーん継承とかとの使い分けが微妙だけど使い道あるかも
でもやはり動的生成がらみかな
- 411デフォルトの名無しさんsage04/07/07 03:09
- >>409
なるほど、てか、いかにもって使い方ね。
>>408でこういうのを提供されてる属性の使い方って書いたんだけど、
考えてみれば、そりゃこういう風に活用するって参考にはなるね。
- 412デフォルトの名無しさんsage04/07/07 03:16
- >>410
継承とかインターフェイスの実装で代用できるような使い方もあるけど、
それらとは違ってあらゆる要素に適用できるのも特徴かな。
- 413デフォルトの名無しさんsage04/07/07 03:23
- そういえば属性で設定した値って、実行時に変えられたっけ?
変えられるかどうかはカスタム属性の定義しだいだっけ?
と、最近DllImportAttributeの値を実行時に変更できなくて面倒な思いをしたやつが言ってみる。
- 414デフォルトの名無しさんsage04/07/07 03:24
- >412
なっとく。これはおもしろひ。
あとはGenericsさえ実装されればC#メインにしたいんだが...
- 415デフォルトの名無しさんsage04/07/07 03:57
- ttp://66.102.7.104/search?q=cache:2sx4zD-Rp-0J:www.kanazawa-net.ne.jp/~pmansato/Books.htm+Anders+Hejlsberg&hl=ja&lr=lang_ja&inlang=ja
↑に載っている「C# 標準リファレンス」がMSのサイトで公開されてると書いてますが、それはここのことでしょうか?
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csspec/html/CSharpSpecStart.asp
- 416デフォルトの名無しさん04/07/07 11:51
- クラスのオブジェクトをメソッドに渡すときにrefをつけて渡すのとそのまま渡すのでは違いはあるのでしょうか?
もとから参照型なので違いはないように思うのですが。
- 417デフォルトの名無しさんsage04/07/07 11:56
- >>416
参照のコピーを渡すか参照の参照を渡すか。
メソッド内でnewしたときとかでかわってくる。
- 418416sage04/07/07 12:01
- >>417
refで渡した参照をメソッド内でnewして別のアドレスを参照するようにしてしまうと
元のアドレスのオブジェクトが残ってしまうということですか?
- 419デフォルトの名無しさんsage04/07/07 13:15
- >>416
void A(ref object x) { x = null; }
void B(object x) { x = null; }
object a = "abc";
object b = "def";
A( ref a);
B( b);
a は null になる。b は null にならない。
- 420デフォルトの名無しさん04/07/07 16:05
- TextBoxでテキストがCutされた時のイベントって、どうやったらいいんでしょうか。
TextBox.TextChangedイベントはあるんですけど、Cut限定じゃないんで、Pasteにも反応してしまいます。
- 421デフォルトの名無しさんsage04/07/07 16:18
- >>420
マネージコードでやるのなら右クリックされたときのテキストを保存しておいて
次のTextChangedでテキストを比べて違っている部分がクリップボードの中身と一致すれば切り取られたってのは?
めんどくさそうだが。
- 422421sage04/07/07 16:21
- 他にはテキストボックスのコンテキストメニューを自分で作成して監視するのと
KeyDownイベントでCtrl+Xを監視するのをするとか
- 423デフォルトの名無しさんsage04/07/07 17:42
- c#勉強して、とりあえず簡単なプログラム作ったんですがいきなりつまづいてしまいました。
静的でないフィールド、メソッド、またはプロパティ 'test.x' で、オブジェクト参照が必要です。
と表示されてエラーが出ます。
public class test
{
int x=100;
public static void Start()
{
System.Console.WriteLine(x);
}
public static void Main(string[] args)
{
Start();
}
}
- 424デフォルトの名無しさんsage04/07/07 17:59
- >423
int x = 100;の前にもstatic
- 425420sage04/07/07 18:00
- >>421-422
面倒でも不備は無くしたいので、両方とも実装することにします。
どうもありがとうございました。
- 426デフォルトの名無しさんsage04/07/07 18:05
- >>421か>>422の片方でいいと
- 427デフォルトの名無しさんsage04/07/07 18:43
- Application.IdleイベントでGC.Collect()っていいアイデアだと思わない?
このタイミングならウェイトが入っても問題ないし、
次のイベント発生時にもっともゴミの少ない状態になれる。
Windowsフォームアプリみたいなイベント駆動では必須かなとか思ってる。
ただし、連続してイベントが発生したとき、
イベント→アイドルなし→イベント、
という動作をしてくれると期待してるんだけど、
イベント→ビジーなのにアイドルイベント→イベント、
という動作をされたら逆効果だよね。
アイドルイベントの発生タイミングってどうやって調べる?
- 428デフォルトの名無しさんsage04/07/07 19:42
- >427
多分 bad idea … profiling して GC が性能上の bottle-neck に本当になってるのを確認した上で、object pooling だとかの技法をつかっても駄目だったときなら OKなのかもしれないけども。
# GC.Collect () しちゃうとすべての object をナメる上に、thread も一時停止させられちゃうからなぁ…
# N88 basic の string の GC とかとはワケが違うから、.NET Framework の GC をもーすこし信用みるべし(笑)
- 429デフォルトの名無しさんsage04/07/07 20:08
- >>427
それでいけるならFrameworkに組み込まれていると思われ…
- 430427sage04/07/07 20:28
- そういったデメリットがApplication.Idleのタイミングなら発生しても問題ないと思うんだけどな。
どこで起こるかわからないより、起こっても問題ないところで起こしてしまおうと。
で、WindowsアプリなのにConsoleアプリでビルドして、IdleでWriteLineしてみた。
フォーム上でマウスが動くたびに出力があった。
放置状態やメニューのポップアップ中などは出力がなかった。
この仕様なら俺的にはGOサインだなと思ったよ。
- 431デフォルトの名無しさんsage04/07/07 20:33
- >>427
GCがアプリのスループットを悪化させているか
GCがアプリのレスポンスを悪化させているか
>>427の対策がそれらを改善するのか
を実際に検証しないと意味がないと思う。
2ch見てると.NETの中間コード・GCの遅さが必要以上に強調されすぎてるような気がするよ。
今現在のパフォーマンスの悪さは後付されたランタイムのロードと
Win32APIのラッパーであるWindows.Formsの遅さに起因していると思う。
- 432デフォルトの名無しさんsage04/07/07 20:43
- >>431
禿同
- 433デフォルトの名無しさんsage04/07/07 21:20
- 漏れ的には、何らかのアクションが終了したタイミングで GC 走らせる方が好みだけど。
(重い処理の終了時にどさくさにまぎれて、とか)
キー操作やボタン等へのレスポンスは大切だから、ユーザがアクションを起こそうとした瞬間
(←もちろん予知できない)にGCが先んじて動いてユーザが待たされる、ってのは気に入らない。
- 434デフォルトの名無しさんsage04/07/07 21:28
- >>433
だから妄想はいいから428,431を検証したのかと。
- 435デフォルトの名無しさんsage04/07/07 22:11
- C#で大きいアプリ作ってないから分からないんだが、ガベコレでどのぐらい固まるんだい?
- 436デフォルトの名無しさん04/07/07 23:15
- C#でhttpファイル転送をするコードを書いたのですが…
private void hoge()
{
System.Net.HttpWebRequest webreq;
System.Net.HttpWebResponse webres;
//Webリクエストインスタンス生成
webreq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(@"http://hoge/hoge.CAB");
//認証の設定
webreq.Credentials = new System.Net.NetworkCredential("hoge, "hoge");
//HttpWebResponseの取得
webres = (System.Net.HttpWebResponse)webreq.GetResponse();
//応答データを受信するためのStreamを取得
br = new BinaryReader(webres.GetResponseStream());
//ファイルに書き込むためのFileStreamを作成
bw = new BinaryWriter(new FileStream("C:\hoge.CAB", FileMode.Create, FileAccess.Write));※1
// ファイルにサーバから取得したデータを書き込む
bw.Write(br.ReadBytes((int)webres.ContentLength), 0, (int)webres.ContentLength);※2
//閉じる
bw.Close();
br.Close();
}
↓;※1か;※2でこういうエラー(例外)が起きることがあって困っています。
きわめて稀に起きるのですが、何がまずくてどうすれば解決するのでしょうか?
教えてください
mscorlib:パス "C:\hoge.CAB" の一部が見つかりませんでした。
2004/07/06,23:30:35.913,0x00f3ff03,0x00000002,0x668,0x32c, at System.IO.__Error.WinIOError(Int32 errorCode, String str)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)
at RmAAIpAprInfLst0.CApproval.CApproval_Load(Object sender, EventArgs e)
- 437デフォルトの名無しさんsage04/07/07 23:22
- あのね、GCを実行したとき参照が残ってるオブジェクトはどうなるか分かってるかい?
- 438デフォルトの名無しさんsage04/07/07 23:22
- >>428や>>431の立場は俺とは逆だな。
GCがボトルネックやら関わるっていう状況は経験がないか、認識したことがない。
GCってたまにCollect()してあげないとスワップしてもどんどんメモリ消費してる。
俺のところでは百メガ超えてまだがんばってるので、
GCが”起こる”ことがボトルネックではなく、
”起こらない”ことがシステム全体をパフォーマンスダウンさせてる。
だから一つアクション起こし終えたらなるべくCollect()させることにした。
もちろん、Collect後に続いて何もしなくていいようなケースで。
何かさせる前にメモリ不足でモタつくくらいなら、させた後に解放でモタついた方が、
ユーザーにストレスを与えない作りに出来ると思う。
- 439デフォルトの名無しさんsage04/07/07 23:23
- 思う。
- 440428 ◆Qgg7HIarPg sage04/07/07 23:31
- >438
後学のため、どういう状況でそうなるのかチョット知りたい気もする… > heap が大きくなりすぎる
# Gen 2 とか large object heap に何か山盛り残ってるとかそういうことなんだろうか?
- 441438sage04/07/07 23:40
- 特別なことさせてるつもりもないのでどういう状況かも説明出来ないよ。
起動して、ドキュメントを扱って、保存して、別のドキュメントも読み込んで、
その繰り返しというだけのつもりだが、どうせ参照が残ってるとか言われるんだろうな。
GC.Collect()でガクっと減るから残ってはいない。
- 442デフォルトの名無しさんsage04/07/07 23:47
- >>437
どうなるの?
世代がシフトするかなと思うけどそれって好都合。
勝手に発動するGCにはかかりにくく、GCしたいときにかかる。
- 443デフォルトの名無しさんsage04/07/07 23:57
- >>436
typo じゃないとするなら、C:\\hoge.CAB って書いてないため、
Cドライブのカレントディレクトリが使えない状況のときエラーになってるんだと思う。
- 444デフォルトの名無しさんsage04/07/08 00:52
- C++の__FILE__や__LINE__みたいな指定はC#ではどうやればいいのでしょうか?
- 445デフォルトの名無しさんsage04/07/08 00:56
- 出来ませんorz
- 446簡単なベンチとってみたsage04/07/08 01:17
- 環境:CPU AthlonXP3000+ MEM:512MB(テスト中は大きなスワップ無し)
テスト内容:GC.Collect()の空実行10000回の実行時間。
テスト結果
フォーム一枚+ボタン数個の場合:1432ms
フォーム一枚+ボタン数個+objectインスタンス10000個+その参照を保持した配列の場合:4066ms
>>438の言うようにメモリぎりぎりの状態でCollectで100MB稼げるなら効果はありそう。
GC.Collectのオーバーヘッドもそれほど大きくは無い。
ただ個人的にGCで100MB減るような現象は見たことが無く、メモリに余裕がある場合にも効果はない。
さらにApplication.IdleでCollectするテクニックが横行した場合、
複数のアプリケーションで頻繁にCollectされるのでそのオーバーヘッドは無視できないものとなる。
なので.NET製アプリケーションの作法としては行儀のいいやり方とはいえないと思う。
結論:IdleでCollectは楽しすぎ。
- 447デフォルトの名無しさんsage04/07/08 01:25
- ところでApplication.Idleって非アクティブ状態でも0.1秒間隔で
発生するんだけど、いったいなにが起ってるんだろう。
- 448427sage04/07/08 01:56
- テスト中だけど、今のところIdleでGCやらせても問題ない気がする。(憶測)
>>447
Idleイベントで何させてるかで、何度もIdleイベントが呼ばれる。(危険)
最初、Idleの度にフォームのテキストを書き換えたらそうなって困った。
Consoleに書き出せばフォームにイベントが起こらないので、
毎回GCしても非アクティブ時にはイベント発生しなくなる。
だから>>446の、
>複数のアプリケーションで頻繁にCollectされる
という状況にはならないんじゃないかな。
- 449428 ◆Qgg7HIarPg sage04/07/08 02:22
- >441
うーむ、20Kbytes 以上のデカい instance が悪さしてるんだろうか?
>446
ワシも見たこと無いですねぇ>GC.Collect () でドカンと減る奴
- 450デフォルトの名無しさんsage04/07/08 11:03
- Form.Closingで、ドキュメントを保存するかどうか確認させているのですが、
アプリ終了前にWindows自体シャットダウンをされたとき、
確認ダイアログとともに「応答なし?秒で閉じます」的なダイアログが出てしまいます。
これはどうやって回避するんですか?
- 451デフォルトの名無しさんsage04/07/08 11:31
- >>448
一般的には問題なさげなタイミングのようだけど、
ことネットワーク関連アプリの場合は、UI処理が終わって idle が発生するときは
UI操作によって動き始めたワーカスレッドがまさに全力で処理中だったりするので、
なんか最悪のタイミングなような気がする。
- 452デフォルトの名無しさんsage04/07/08 11:36
- >>450
ドキュメントのSessionEnding イベントの解説を参考にして、WM_QUERYENDSESSION
をトラップしてそこで処理する。
- 453デフォルトの名無しさんsage04/07/08 12:39
- >>433みたいに、突然モタモタする事ってよくあるけど、
これってGCが発動したからじゃなくて、GC終えてもまだメモリ不足でスワップしたからだよ。
GCはいつ起こったか気がつかないほどスマートな仕事してるから、
while内みたいなループ部分で呼ばない限り、パフォーマンスダウンを実感できない。
- 454デフォルトの名無しさんsage04/07/08 12:45
- GCってメモリ再配置までやるの?
それとも未使用状態にもどすだけ?
- 455デフォルトの名無しさんsage04/07/08 12:55
- >>454
http://www.microsoft.com/japan/msdn/net/general/dotnetperftechs.asp
- 456デフォルトの名無しさんsage04/07/08 12:58
- 無駄にGC呼ぶとCPUの一次二次キャッシュが吹き飛びそうだな
- 457デフォルトの名無しさんsage04/07/08 17:19
- なるほど、キャッシュがあるからGC速いのか。
- 458デフォルトの名無しさんsage04/07/08 17:29
- >457
それもあるけど、速さの主たる理由ではないと思う…
- 459デフォルトの名無しさん04/07/08 18:05
- 質問があります。
Form2からForm1のコントロールを操作するのに、Form1のコントロールの
可視性をPublicにしても良いのでしょうか?
- 460フェルト04/07/08 18:18
- パソコンのゴミ箱アイコンで、ゴミ箱を空にするを選択したら、Dd121を削除できませんって出ます。
Dd121ってなんですか?
- 461フェルト04/07/08 18:19
- 書き込むところを間違えました
- 462デフォルトの名無しさんsage04/07/08 18:23
- >>459
状況によるけど、BeginInvokeかな。
- 463デフォルトの名無しさんsage04/07/08 18:31
- >>459
コントロールのフィールドに限っては、Publicに変更でも別に良いと思う。
オブジェクト指向の完璧主義者なら、コントロールのスコープはPrivateのままで、
コントロールにアクセスするにはプロパティを作成して内部でアクセスするけど、
それだと余りにもプロパティーの数が増えすぎてソースは長くなるし、読みづらく
なるので、オブジェクト指向の完璧主義者でもないなら手っ取り早くPublicで良いのではと思う。
VB.NETなら直接コントロールにアクセ可能だしね。
- 464 ◆Qgg7HIarPg sage04/07/08 22:50
- # C# に限った話ではないケドも…
ttp://msdn.microsoft.com/netframework/downloads/updates/sptechpreview/default.aspx
.NET Framework 1.0SP3 & 1.1SP1 technical preview … 正式 release は何時頃になんだろなぁ…
- 465デフォルトの名無しさんsage04/07/08 23:33
- 1.0なんてもうイラネ
- 466デフォルトの名無しさんsage04/07/08 23:37
- >>462
…うーん、状況によるってもちょっとそれは出てこん…
- 467デフォルトの名無しさんsage04/07/09 12:00
- >>464
Windows XP SP2 と同時期かと。
XP SP2 RC版で既に .NET Framework 1.1 SP1 が入っていたので、一緒に試しているけど、
Visual Studio .NET 2003 でいじっている分には、今のところ、問題ないです。
- 468デフォルトの名無しさん04/07/09 12:45
- タイマで1msec単位でイベント発生できますが、
もう3桁こまかくμsec単位でイベントを制御したいときはどうしたらいいですか?
- 469デフォルトの名無しさんsage04/07/09 12:56
- Windowsはそんな高精度に動作できない
- 470デフォルトの名無しさんsage04/07/09 12:59
- そんな高精度タイマが使えたら携帯電話にすら.NETがのってるだろうな。
- 471468sage04/07/09 13:04
- Windowsからは制御できませんか…
わかりました。
- 472デフォルトの名無しさんsage04/07/09 13:39
- >>471
一応、単なる高精度カウンタだったらQueryPerformanceCounter()なるAPIがあるよと言っておこう。
まぁ、多分あなたがやりたいことにはあんまり役に立たないと思うが…参考までに一応な。
- 473デフォルトの名無しさんsage04/07/09 13:42
- ハードウェアクロックが8192Hzとすると
...123マイクロ秒
- 474デフォルトの名無しさんsage04/07/09 13:46
- 最強の時計はな、太陽系と、それに含まれる星の公転、時点速度を割り出してエミュレート。
そこから地球上の時間を割り出すんだよ。
- 475デフォルトの名無しさんsage04/07/09 14:00
- >>474
知ったかぶりと言うよりは、子供の戯れ言レベルのアホだな。
- 476デフォルトの名無しさんsage04/07/09 14:16
- Application.Run(Form)はForm.ShowDialog()に比べて何か特別なことしてるの?
- 477デフォルトの名無しさんsage04/07/09 14:17
- 先生!>>476にツッコんでいいのかどうか微妙です!
- 478デフォルトの名無しさんsage04/07/09 14:19
- 初めての人には優しくしてあげなさい。
- 479デフォルトの名無しさん04/07/09 14:22
- ASPから他のEXEにデータを渡したいのですが、どういう方法があるのでしょうか?
今は毎回
StartInfo.Arguments
を与えた上で
Start();
させてるのですが、常駐しているexeに渡すいい方法はないでしょうか?
- 480デフォルトの名無しさんsage04/07/09 14:29
- >>479
Winに特化した方法としては、EXE 側が COM サーバになって COM オブジェクト経由で渡す。
一般的な方法としては、何かプロトコルを考えてソケットやネームドパイプで渡す。
- 481476sage04/07/09 14:40
- どこが変?
Application.RunをShowDialogに変えても動作したんだけどどうなのよ?
- 482デフォルトの名無しさんsage04/07/09 15:04
- >>481
ttp://dobon.net/vb/dotnet/form/notopenform.html
まずこの辺でも読め。
- 483479sage04/07/09 15:21
- れすありがとうございます。
なんかCOMサーバーとか難しそうですね…
どうしようかな… がんばるか…
- 484デフォルトの名無しさんsage04/07/09 16:04
- >479 .NETリモーティングとか使えへんの?
- 485デフォルトの名無しさん04/07/09 16:26
- Form間の値の受け渡しについて教えてくだされ。
FormHogeからFormFugaを呼び出すとすると、
ShowDialog(this)みたいに呼び出しているんだから
FormFugaからFormHogeの変数(private/public)にはアクセスできるはず。
で、どんな風にして値を読めば良いの?
- 486デフォルトの名無しさんsage04/07/09 16:42
- >>485
FormHoge.ShowDialog(FormFuga)としたとき、
FormFugaのOwnerプロパティにFormHogeの参照が入ってる。
> FormFugaからFormHogeの変数(private/public)にはアクセスできるはず。
いやprivateは無理だろ。
- 487デフォルトの名無しさんsage04/07/09 16:44
- アクセスできなければエラーが出るからまずはアクセスしてみれ。
エラー内容聞いてから一緒に考えようじゃないか。
- 488デフォルトの名無しさんsage04/07/09 17:06
- >>468
Win32APIのtimeSetEventは試した?
それがアプリレベルで一番精度が高いんじゃない。
- 489デフォルトの名無しさんsage04/07/09 17:28
- メディアプレイヤーのバーを出さないで、
指定した音楽ファイルを再生する方法を教えてください。
BGMみたいなものをつけたいです。
また、再生が終了したことを検地する方法も教えてください
- 490485sage04/07/09 17:30
- >>486
じゃあ、HogeからFugaの値を読むためだけに、
特定の変数をpublicにしないといけないってこと?
なんでもオープンな体質はOO的にはよくないって聞いたけど…
- 491デフォルトの名無しさんsage04/07/09 17:39
- >>490
他のオブジェクトにprivateメンバまで見せる方がよっぽど「オープン」じゃないか?
というか設計が変だ。
前もやったがOpenFileDialogを例にしよう。
OpenFileDialog dialog = new OpenFileDialog(); //そのオブジェクトに必須のデータはコンストラクタで設定する
dialog.Filter = "すべてのファイル|*.*"; //オブジェクトの処理に使う各種データをプロパティに書き込む
if (dialog.ShowDialog(this) == DialogResult.OK) { //ダイアログを開く
filename = dialog.FileName; //必要なデータをダイアログのプロパティから読み込む
}
- 492デフォルトの名無しさんsage04/07/09 17:42
- >>489
BGMのような扱いをするならメディアプレイヤーでなくてManaged DirectXを使うのが一番簡単じゃない?
>>490
internalにするとか。
- 493デフォルトの名無しさんsage04/07/09 17:46
- >>492
BGMというか、ボタンを押した時にサウンドを鳴らすようなことがしたいんです。
C#標準では無い機能なんですかねぇ?
検索しても余り出てこないし、これだけのためにDirectXの勉強なんてできません
- 494デフォルトの名無しさんsage04/07/09 17:53
- >>493
確か.NET Framework2.0でサウンド処理も追加されるはずだがね。
Managed DirectXでサウンドを再生するのに勉強と言うほどのこともない。
再生・停止するだけならAudioVideoクラスでほとんど手間なく実装できる。
//ボリュームの指定にちょっとはまったけどな。
- 495デフォルトの名無しさんsage04/07/09 18:32
- >>493
メディアプレイヤーを表示しないようにする。
DirectXなら
Microsoft.DirectX.AudioVideoPlayback.Audio hoge = new Microsoft.DirectX.AudioVideoPlayback.Audio("hoge.wav");
hoge.Play();
.NET 2.0なら
System.Windows.Forms.SoundPlayer hoge = new System.Windows.Forms.SoundPlayer("hoge.wav");
hoge.Play();
- 496デフォルトの名無しさんsage04/07/09 18:40
- 半角・全角を判断する方法は
char ch = '半角文字か全角文字(一文字です)'
byte[] byt = Encoding.Default.GetBytes(ch.ToString());
で、byt.Length が 2 だったら全角
というような判断でいいですかね。
もっと良さそうな方法があれば教えてください
- 497デフォルトの名無しさんsage04/07/09 19:04
- >>496
文字コードを見ればいいんじゃない?
もしくは、強引だけどlstrlenを呼び出してきて、1なら半角、2なら全角。
- 498デフォルトの名無しさんsage04/07/09 19:38
- HailStormって今どうなってるの?
最近あまり話を聞かないんだけど。
検索で見つかるのは2001年の情報ばっかり。
- 499デフォルトの名無しさんsage04/07/09 19:45
- >>498
正式名称は.NET My Servicesで、
ttp://itpro.nikkeibp.co.jp/free/NBY/NEWS/20030320/1/
こういうことらしい。
- 500デフォルトの名無しさん04/07/09 23:42
- 500get!
じゃなくて、
ループの中で、
Console.Writeline(hoge[i]);
ってやると
hoge[i]
hoge[i+1]
って表示されますが、これを改行なしで
hogehage
にするにはどうすればいいでしょうか?
- 501デフォルトの名無しさんsage04/07/09 23:45
- >>500
WriteLineじゃなくてWrite
- 502デフォルトの名無しさんsage04/07/10 00:18
- なんか逝っちゃった質問ばっかだ…
- 503デフォルトの名無しさん04/07/10 00:23
- theSpoke効果だなw
- 504479sage04/07/10 00:25
- 噂のthespoke買ったものです。
100010010110101...
といった二進数をそのままバイナリファイルとして保存するにはどうすればいいのでしょうか?
BinaryWriteというのはどうつかえばいいんですか?
- 505デフォルトの名無しさんsage04/07/10 00:37
- >>504
まずその二進数とやらを何の型で保持してるかが問題だ。
- 506デフォルトの名無しさんsage04/07/10 00:42
- 504は混乱した。
- 507504sage04/07/10 00:58
- とりあえずStringでもってます。
同時にchar[i]で一文字ずつのもあります。
- 508デフォルトの名無しさんsage04/07/10 01:12
- >>507
例えばConvert.ToByteとBinaryWriter.Write
問題は一番最後の桁、これが8ビットに足りない場合だな。
どう処理するかによって適当にビットシフトだ。
//ってことが分かるくらいならそもそも聞かないかもなーw
try&errorで経験を積み重ねていこうや。
- 509504sage04/07/10 01:56
- FileStream fs = new FileStream(@"c:\tete.bin",FileMode.CreateNew);
BinaryWriter bw = new BinaryWriter(fs);
なんちゃらかんちゃら
bw.Flush();
bw.Close();
でいけました。 ありがとうございました。
- 510デフォルトの名無しさんsage04/07/10 02:41
- 水平/垂直帰線割り込みってある?
- 511デフォルトの名無しさんsage04/07/10 02:58
- >>510
そりゃC#じゃなく
- 512デフォルトの名無しさんsage04/07/10 03:00
- >>511
こっちのスレで聞いてみるとか。
Managed DirectX vol.2
http://pc5.2ch.net/test/read.cgi/tech/1061285378/l50
- 513512sage04/07/10 03:01
- >>511じゃなくて>>510だった。
- 514デフォルトの名無しさんsage04/07/10 03:10
- >509
折角構文にあるんだから
using (BinaryWriter bw = new BinaryWriter (File.Open (@"foo.bin", FileMode.Create)))
{
// ... Do what you want...
}
するのが美しいかと…本質的ではないのだが…
- 515デフォルトの名無しさんsage04/07/10 03:38
- timerって割り込み?それともイベント?
- 516デフォルトの名無しさんsage04/07/10 08:10
- 割り込みとイベントをどういう意味で書いてるんだよ?
ついでにtimerって何のことを言ってるんだよ?
- 517デフォルトの名無しさんsage04/07/10 10:14
- wm_timerイベント
- 518デフォルトの名無しさんsage04/07/10 10:17
- >>515
がんばっても答えようがないほどあいまいは質問だな。
ちなみにWM_TIMERは割り込みでもイベントでもなく、整数。
- 519デフォルトの名無しさんsage04/07/10 10:21
- ( ゚д゚)ポカーン
- 520デフォルトの名無しさん04/07/10 10:34
- >>518
まぁ、整数は整数なわけだが、「メッセージ」ぐらいにしておいてやれよ。
- 521デフォルトの名無しさんsage04/07/10 10:35
- >>517は自分で「イベント」と言ってるけれど。
- 522デフォルトの名無しさん04/07/10 10:38
- >>517
> wm_timerイベント
そんなものはない。
- 523デフォルトの名無しさんsage04/07/10 10:44
- イベントというならTimer.Tickイベントだろ。
- 524デフォルトの名無しさんsage04/07/10 12:28
- theSpoke発売&夏到来ということで、
これから1〜2ヶ月をがんばって乗り切りましょう。>ALL
- 525デフォルトの名無しさんsage04/07/10 12:44
- >>524
なぜここでお前が仕切っているのか知らんが、
がんばって乗り切るというのは、これからうじゃうじゃ湧いてくるであろう厨房の対策か?
それなら俺はごめんだな。
- 526デフォルトの名無しさんsage04/07/10 12:55
- そう。お前みたいな奴の対策だよ
- 527デフォルトの名無しさんsage04/07/10 12:56
- >>524-527
失せろ
- 528デフォルトの名無しさんsage04/07/10 13:07
- >>527
バイバイ!(w
- 529デフォルトの名無しさんsage04/07/10 13:26
- >524はとばされた
>525はとばされた
>526はとばされた
>527はこんらんしている
- 530デフォルトの名無しさんsage04/07/10 13:36
- >529はふしぎなおどりをおどった!
>529はしんでしまった!
- 531デフォルトの名無しさんsage04/07/10 13:41
- へんじがない。
- 532529sage04/07/10 13:52
- >529はいきかえった!
- 533デフォルトの名無しさんsage04/07/10 15:15
- しかし >529 のようすがへんだ。
そういえば、ここはペットセメタリー・・・・
- 534デフォルトの名無しさんsage04/07/10 15:34
- 初めまして〜質問してもいいでしょうか・・・
VisualStudio.NETでWindowsフォームのアプリを作っています。
TreeNodeクラスを継承し、1つだけプロパティを追加した
CustomTreeNodeクラスなるものを作りました。
ある処理で、TreeNodeオブジェクトを受け取る場面があるのですが、
その受け取ったTreeNodeオブジェクトの内容を全てコピーした
CustomTreeNodeオブジェクトを作成することは可能でしょうか?
- 535デフォルトの名無しさん04/07/10 15:58
- >>534
簡単には、できない。
なんと>529の中身はミミックだった!
- 536534sage04/07/10 16:08
- >>535
明示的にキャストするとできるのかなぁと思ったのですが、
実行時にエラーになりました・・・
あれ〜親子関係にある場合は、キャストできるんじゃなかったっけ???
わからん・・・・
- 537デフォルトの名無しさんsage04/07/10 16:22
- >>536
子は親の情報に加えて自分独自の情報をもっている。
子から親へのキャストは独自の情報を捨てればいいが、
親から子へのキャストで独自の情報はどう処理すればいい?
だから(実は)子だけど親の型の参照で保持されていたものをキャストすれば
当然問題なく子にキャストできる。
しかし親の型で参照された親の型のオブジェクトは子の型にはキャストできない。
- 538デフォルトの名無しさんsage04/07/10 16:23
- TreeNodeでしかないものをどうやってCustomTreeNodeにするんだボケ
キャストできるのはTreeNodeの振りしたCustomTreeNode以上のものだ
- 539534sage04/07/10 16:27
- >>537、538
大変勉強になりました!どうもです!
- 540デフォルトの名無しさんsage04/07/10 17:51
- using(hogehogehogehoge)
{
foobar.foo();
...
}
っていう書き方を見かけるんだけど、どういう使い方をする構文なの?
マイクソ公認のVisualC#本読んだけどほとんど説明なかったんで、さくっと説明きぼん
- 541デフォルトの名無しさんsage04/07/10 17:59
- >>540
using (Font MyFont = new Font("Arial", 10.0f), MyFont2 = new Font("Arial", 10.0f)) {
//use MyFont and MyFont2
}
は
try {
Font MyFont = new Font("Arial", 10.0f), MyFont2 = new Font("Arial", 10.0f));
//use MyFont and MyFont2
}
catch (Exception ex) {
throw ex;
}
finally {
MyFont.Dispose();
}
と等価。
宣言されるオブジェクトはIDisposableを実装する必要あり。
しかしエラー処理に結局try-catchを使うならついでにfinallyも実装してやればいいからなぁ。
私はファイル処理なんかだとusingよりtry-catch-finally派だな。
- 542デフォルトの名無しさんsage04/07/10 18:01
- あ、やべ。
Font MyFont = null;
try {
MyFont = new Font("Arial", 10.0f), MyFont2 = new Font("Arial", 10.0f));
//use MyFont and MyFont2
}
catch (Exception ex) {
throw ex;
}
finally {
if (MyFont != null)
MyFont.Dispose();
}
だな。
- 543デフォルトの名無しさんsage04/07/10 19:36
- usingを使うと、抜ける時にDisposeメソッドが呼ばれるってのがミソなんじゃないの?
>>541が等価なコードを示してるとおりで、try-catch使うよりもスッキリとしたコードに
仕上がってるよね。
- 544デフォルトの名無しさんsage04/07/10 19:39
- Dispose される順番とかを厳密解釈すると…
using (Font MyFont = new Font ("Arial", 10.f), MyFont2 = new Font ("Arial", 10.0f)) {
// Using MyFont, MyFont2
}
は
{
Font MyFont ;
try {
MyFont = new Font ("Arial", 10.0f) ;
Font MyFont2 ;
try {
MyFont2 = new Font ("Arial", 10.0f) ;
// Using MyFont, MyFont2
}
finally {
IDisposable d = MyFont2 as IDisposable ;
if (d != null)
d.Dispose () ;
}
}
finally {
IDisposable d = MyFont as IDisposable ;
if (d != null)
d.Dispose () ;
}
}
…なげぇ…素直に using (...) {} すべし。
- 545デフォルトの名無しさんsage04/07/10 20:24
- 細かい子というようだが...
FONTで例やってるがFONTごときほっとけと思うんですが
- 546デフォルトの名無しさんsage04/07/10 21:09
- >>545
ふぉんとにな。
- 547デフォルトの名無しさんsage04/07/10 21:13
- ついでに言っておくと勝手にキャッチするような迷惑な事はされない。
- 548デフォルトの名無しさんsage04/07/10 21:19
- メモ。マネージドのアセンブリをリソースとして他のアセンブリに格納する。
まず参照されるdll。
[DllPart.cs] csc /t:library /out:DllPart.dll DllPart.cs
using System;
using System.Reflection;
[assembly: AssemblyKeyFile("DllPart.snk")] //sn.exeで作ったキーペアファイル。使いたいのに意味がない(詳しくは後述
namespace Test {
public class DllPart {
public string Name {get {return name;} set {name = value;}}
private string name;
public void SetId(int id) {
this.id = id;
}
public int GetId() {
return id;
}
private int id;
}
}
- 549デフォルトの名無しさんsage04/07/10 21:19
- で、DllPart.dllを参照する本体。実際には例外処理を入れるべき。
[MainPart.cs] csc /t:exe /res:DllPart.dll
using System;
using System.Reflection;
using System.IO;
namespace Test {
public class MainPart {
public static void Main() {
Assembly assembly = null;
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("DllPart.dll")) {
byte[] bytes = new byte[(int)stream.Length];
stream.Read(bytes, 0, bytes.Length);
assembly = Assembly.Load(bytes);
}
Type type = assembly.GetType("Test.DllPart");
object dllpart = Activator.CreateInstance(type);
PropertyInfo nameInfo = type.GetProperty("Name");
nameInfo.SetValue(dllpart, "Test.", null);
string name = nameInfo.GetValue(dllpart, null) as string;
Console.WriteLine(name);
MethodInfo setIdInfo = type.GetMethod("SetId");
setIdInfo.Invoke(dllpart, new object[]{1});
MethodInfo getIdInfo = type.GetMethod("GetId");
int id = (int)getIdInfo.Invoke(dllpart, null);
Console.WriteLine(id);
}
}
}
/r:DllPart.dllしてやればコード内でdllpartをDllPart型にキャストしてやれるじゃん? と思うのだが、
(コンパイルは通るが)なぜか実行時エラーがでてしまう。厳密名まで同じだってのに。
- 550デフォルトの名無しさんsage04/07/10 21:22
- これでは使い勝手が悪いのでプロクシクラスを作って多少の楽を。
namespace Test {
public class ProxyObject {
private object obj;
private Type type;
public ProxyObject(Type type) {
this.type = type;
obj = Activator.CreateInstance(type);
}
public object this[string memberName] {
get {
return type.GetProperty(memberName).GetValue(obj, null);
}
set {
type.GetProperty(memberName).SetValue(obj, value, null);
}
}
public object Invoke(string methodName, params object[] arguments) {
MethodInfo method = type.GetMethod(methodName);
return method.Invoke(obj, arguments);
}
}
}
アクセサのパラメータがmemberInfoなのはFieldの可能性も考慮に入れて。
上のコードでは省略。
- 551デフォルトの名無しさんsage04/07/10 21:22
- ProxyObjectを使って書き直したMainPart。
namespace Test {
public class MainPart {
public static void Main() {
Assembly assembly = null;
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("DllPart.dll")) {
byte[] bytes = new byte[(int)stream.Length];
stream.Read(bytes, 0, bytes.Length);
assembly = Assembly.Load(bytes);
}
Type type = assembly.GetType("Test.DllPart");
ProxyObject proxy = new ProxyObject(type);
proxy["Name"] = ".tseT";
Console.WriteLine(proxy["Name"]);
proxy.Invoke("SetId", 2);
id = (int)proxy.Invoke("GetId");
Console.WriteLine(id);
}
}
}
なんとかコード内で直接DllPart型を使えるようにならないものかなぁ……。
- 552デフォルトの名無しさんsage04/07/10 21:28
- 実行時エラーってやっぱりInvalidCastException?
厳密名なしでも駄目なんだよね?(って最初に試してるだろうけど)
- 553デフォルトの名無しさんsage04/07/10 21:28
- VBでやれっていう神の啓示か…
- 554デフォルトの名無しさん04/07/10 21:35
- bool型の変数を一発で反転させる方法ってありますか?
今は
if(b)
b=false;
else
b=true
ってやってるのですが。もっとスマートな方法無いですか?
b = ~b;
はコンパイラに怒られます
- 555デフォルトの名無しさんsage04/07/10 21:36
- >>554
> bool型の変数を一発で反転させる方法ってありますか?
b = !b;
>>552
> 実行時エラーってやっぱりInvalidCastException?
そう。
> 厳密名なしでも駄目なんだよね?(って最初に試してるだろうけど)
駄目だね。
これさえ解決すればちょっと便利になるのになぁ。
- 556デフォルトの名無しさんsage04/07/10 22:46
- 関係ないが、InvalidCastExceptionとか、
もっと詳細な追加情報くれって思わん?
- 557デフォルトの名無しさんsage04/07/10 23:32
- http://www.gotdotnet.com/japan/student/column/firststep/firststep11.aspx
↑これの通りやっているんですが、うまくいきません。
VisibleChangedが2回されるからか、scoreが+2されます。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&rs=77&re=78&fi=no
↑レス77目が、メインとなるForm8、78がユーザーコントロールのMoleです。
- 558デフォルトの名無しさんsage04/07/11 00:23
- >534
CustomTreeNodeクラスにTreeNodeクラスからの、
暗黙の型変換演算子を宣言すればいいのではないかと思う。
implicitを調べてみて。
- 559デフォルトの名無しさんsage04/07/11 00:50
- >>558
そういうことじゃない。
- 560デフォルトの名無しさん04/07/11 00:53
- nullについて質問です。
Platform Invokeで呼び出したいWin32APIが以下のようになっています。
HDDEDATA DdeClientTransaction(LPBYTE pData,
DWORD cbData, HCONV hConv, HSZ hszItem,UINT wFmt,
UINT wType, DWORD dwTimeout, LPDWORD pdwResult);
下のように1番目の引数(LPBYTE pData)をSystem.Byteで
定義した場合には、呼び出し時にpDataにnullを渡せません。
[DllImport("User32.dll")]
public static extern IntPtr DdeClientTransaction(
ref Byte pData, UInt32 cbData, IntPtr hConv, IntPtr hszItem,
UInt32 wFmt, UInt32 wType, UInt32 dwTimeout, ref UInt32 pdwResult);
1番目の引数に、nullを渡すにはどのようにすればよいのでしょうか?
よろしくお願いします。。
- 561デフォルトの名無しさんsage04/07/11 01:04
- >>560
IntPtr.ZeroがNULLポインタだからして、0を渡してやればいいんではないかい。
//XTYP_EXECUTEかXTYP_POKE以外の時は無視されるだけだと思うけど。
- 562デフォルトの名無しさんsage04/07/11 01:05
- >>555
そういうことやったことは無いから適当な意見なんだけど、
namespace変えるのはどうよ?寝るけど。
- 563デフォルトの名無しさんsage04/07/11 01:08
- >>560
そもそもバイト列のポインタに対してref Byteで宣言するのが正しいの?
System.Byteは1バイトのデータしか持たない気がするんだけど。
- 564デフォルトの名無しさんsage04/07/11 01:12
- >559
え?TreeNodeからCustomTreeNodeへ変換できれば簡単じゃないかな?
だけど、書いてから調べたけどimplicitじゃ無理ですね。
- 565デフォルトの名無しさんsage04/07/11 01:15
- >>558
じゃあその演算子の中身のコードの例を示してくれ。
その過程で気づくだろう。
自分はバカかと。アホかと。
- 566デフォルトの名無しさんsage04/07/11 01:34
- >>562
そ、それをやると…何が変わるんだ…?
- 567デフォルトの名無しさんsage04/07/11 01:47
- http://pc5.2ch.net/test/read.cgi/tech/1089284784/242より来ました。
http://www.gotdotnet.com/japan/student/column/firststep/firststep12.aspx
「残り時間を表示するユーザーコントロール」ができません。
Startメソッドをpublicに修正し、
スタートボタンのクリックイベントハンドラで
this.lastTimer1.Start(10);
と記述したんですが、ずっと「残り10秒」なままです。
どう書けば作動してくれるんでしょうか?
- 568デフォルトの名無しさんsage04/07/11 02:00
- >>561
ガッ
- 569デフォルトの名無しさんsage04/07/11 03:22
- Dotfuscatorは無料版だと貧弱だし、高機能版は高価すぎる。
海外製のオブファスケータはいろいろあるけど、どれもとんでもなく高価だ。
体験版を試しても、マトモに動かないものとかあるのに、製品は数十万円とか。
とても購入意欲は湧かないので自前でどうにかしようと思っている。
アルゴリズムはそれほど難しくなさそうだけど、アセンブリのいじり方がわからない。
Reflectionで様々な情報が取得出来るけど、情報を書き換えるにはどうするの?
- 570デフォルトの名無しさんsage04/07/11 04:32
- ildasm.exe
- 571名無しさん@そうだ選挙に行こうsage04/07/11 07:11
- 日本の尖閣諸島付近には、
イラクに匹敵する世界第2位の量の石油が眠っている。
そしてその資産はなんと、640兆円にもなる
(日本の年間国家予算は約80兆円なので8年分に相当)
ミ ∧_∧
⊂ヾ(・∀・ ) ヘェーヘェーヘェーヘェーヘェ
∩ ゝヽ ⊂_ノヽ
だが、その資源が日本政府のせいで全て水の泡になりそうだ
えぇ━━(゚Д゚;)━━━!!!!!
詳しくわ↓
http://mobius1.nobody.jp/
http://blog.livedoor.jp/team_lifeline/
- 572名無しさん@そうだ選挙に行こうsage04/07/11 09:55
- >>571
すれ違い宣伝だが、600兆も本当にあれば、借金の半分は減らせるねぇ。うん。
ま、戦争などで輸入ができなくなったときのために「貯蔵」したいのか
単に中国が怖いのかだ
- 573名無しさん@そうだ選挙に行こうsage04/07/11 14:42
- >>566
いや、別アセンブリで同namespaceってのが同居できると気持ち悪いな、と思って。
厳密名が被る可能性があるような気が。まあ適当に言ってるだけなんだけど。
- 574名無しさん@そうだ選挙に行こうsage04/07/11 15:49
- 厳密名ってそういう意味だっけ?
- 575573sage04/07/11 16:03
- あ、言葉間違えてるねすまん。普通に名前って書きたかった。
- 576573sage04/07/11 16:13
- バージョンが違うけどインタフェースが同じアセンブリを2つ同時にとか。
typeがstringから生成出来るし、名前が被るとどうなるのかなあと思って。
まあ知らないことに適当に口を挟んでも馬鹿にされるだけだね。ここらでやめとく。
- 577名無しさん@そうだ選挙に行こうsage04/07/11 19:50
- まあ、別のクラスの名前がかぶるのは基本的に不要な混乱をもたらす
可能性があるので、止めた方がいい、というのはそうだと思うんだが…
# ちなみに同じ名前空間が別のアセンブリというのは、標準ライブラリでさえある。
問題は今回の話とつながらないってことだ。
- 578573sage04/07/11 21:50
- > # ちなみに同じ名前空間が別のアセンブリというのは、標準ライブラリでさえある。
だとしたら本当に話がつながらなくて申し訳ないんだけど、
これは本当なの?俺が馬鹿なのかな?参考のために教えて欲しい。
SystemとSystem.Reflectionは名前空間違うって認識で合ってる?それとも俺馬鹿?
- 579デフォルトの名無しさんsage04/07/11 22:28
- >>478
>> # ちなみに同じ名前空間が別のアセンブリというのは、標準ライブラリでさえある。
> これは本当なの?
本当。
例えばわかりやすいのはSystem名前空間。
System名前空間直下の型なんかは、いろんなアセンブリに存在してる。
※念のため、もちろん同じ名前のクラスじゃないよ。誤解を招いてたらスマン。
- 580573sage04/07/11 23:28
- > System名前空間直下の型なんかは、いろんなアセンブリに存在してる。
System.DesignがSystem.Design.dllに入ってるよ、って言ってるならやっぱおかしい。
System.Designは名前空間であって型じゃないよ。
System.ArrayがSystem.dll以外に入ってるってなら合ってるけどマジで?
つーか>>550-551のnamespace別々にして試してみない?とりあえず。
俺会社に行かないと環境無い。
- 581デフォルトの名無しさんsage04/07/11 23:59
- >System.DesignがSystem.Design.dllに入ってるよ、って言ってるならやっぱおかしい。
だからSystem名前空間「直下」の型って書いてるだろうに、ちゃんと読めってか確認してみたら?
>つーか>>550-551のnamespace別々にして試してみない?
だから、全然関係ないの。
っていうか、どれとどれの名前空間を変えろって言ってるのかよく分かんらんけどね。
大体元の問題は、同じアセンブリ(って化クラスと)認識されるはずなのに、
別物と認識されてキャストできないって言ってるんだ。
問題は「同じクラスなのに同じと認識されない」事。
名前空間を変えるって方向が理解できないってことが分かるだろ。
- 582デフォルトの名無しさんsage04/07/12 00:07
- ついでだ、
>System.ArrayがSystem.dll以外に入ってるってなら合ってるけどマジで?
そこまで言ってるんなら、System.Arrayがどこに入ってるか一回確認してみろよ。
- 583デフォルトの名無しさんsage04/07/12 00:11
- >>580
うだうだ言ってないで会社行ったらオブジェクトブラウザでも見てみれば?
- 584581sage04/07/12 00:23
- >>581の最初のは俺の読み違いだった。
俺が名前空間を型だと勘違いしてるんじゃないかって思われたわけね?
# まあ、そんな勘違いは最初からしとらんが。
- 585573sage04/07/12 00:40
- 試せない状況でうだうだ言ってごめん。
そもそも俺が疑問を持った経緯を書いてないのが悪かった。
同じnamespaceでclass名が重複したらコンパイルエラーになるよね。
俺はそもそも同じnamespaceでアセンブリが分けられるとは思ってなかったんだけど、
静的に参照しているならアセンブリが分かれててもコンパイルは通せて、
型が保証されるのは納得できるのよ。
で、動的にロードすると同じclass名とかもうどうしようも無いから、
そもそも同じnamespaceが許されてないんじゃない?と思った。
いやもう馬鹿でいいけど、ごめんよ。明日自分で試して納得するよ。
- 586デフォルトの名無しさんsage04/07/12 00:48
- >>585
それは逆。
名前空間、クラス名が別のアセンブリで重複するとき怒られるのは
静的に参照してる場合の話(コンパイル時の話)。
動的にロードした場合は問題ない(扱う側で注意は要るけど)。
※念のため、もちろん別クラスとして認識される。
静的に参照したアセンブリと動的にリソースからロードしたアセンブリが
同じと認識されないのはどういうことだってのが問題。
- 587573sage04/07/12 10:00
- >>586
あー、一晩寝たら少し話が見えてきた。
実装をすげ替えるんだったらinterface経由でやればいいんじゃないの?
一応以下は会社で試して、動いたよ。まだ勘違いしてたらすまん。
//InterfacePart.cs
//csc /t:library /out:InterfacePart.dll InterfacePart.cs
namespace Test
{
public interface IDllPart
{
string Name { get; set; }
void SetId(int id);
int GetId();
}
}
- 588573sage04/07/12 10:00
- //DllPart.cs
//csc /t:library /res:InterfacePart.dll /out:DllPart.dll DllPart.cs
namespace Test
{
public class DllPart : IDllPart
{
public string Name {get {return name;} set {name = value;}}
private string name;
public void SetId(int id)
{
this.id = id;
}
public int GetId()
{
return id;
}
private int id;
}
}
- 589573sage04/07/12 10:01
- あー読みにくいねすまん。
//MainPart.cs
//csc /t:exe /r:InterfacePart.dll /res:DllPart.dll MainPart.cs
namespace Test
{
public class MainPart
{
public static void Main()
{
Assembly assembly = null;
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("DllPart.dll"))
{
byte[] bytes = new byte[(int)stream.Length];
stream.Read(bytes, 0, bytes.Length);
assembly = Assembly.Load(bytes);
}
Type type = assembly.GetType("Test.DllPart");
object o = Activator.CreateInstance(type);
IDllPart dllpart = o as IDllPart;
dllpart.Name = "Test.";
dllpart.SetId(1);
Console.WriteLine(dllpart.Name);
Console.WriteLine(dllpart.GetId());
}
}
}
- 590デフォルトの名無しさんsage04/07/12 10:33
- うるさい
- 591デフォルトの名無しさんsage04/07/12 11:17
- >>590
カルシウムは足りてるか?
錠剤じゃ吸収率がよくないそうだぞ。
>>587-589
これはこれで面白い結果だが。
//いまいち言葉にしにくいので考察はパス。
しかしこの場合参照ファイルとしてInterfacePart.dllが必要なわけで、
アセンブリの格納としては意味が薄れてしまう……。
//InterfacePart.dllを作って参照するくらいなら初めからDllPart.dllを参照する。
//「実行時に参照ファイルが必要ない」が目指すところ。
//DllPart.dllをいじらない、ってのも必要か?
//ソースがあるならMainPartコンパイル時にDllPart.csも含めればいいんだし。
- 592デフォルトの名無しさんsage04/07/12 11:31
- System.Windows.Forms.Keys.Clearはウチのキーボードにないのですが、
何をするキーだと思えばいいですか?
- 593デフォルトの名無しさんsage04/07/12 11:53
- >>592
そのまんま、クリアするキーらしい。
テキストボックスやら電卓の計算結果やら。
Windowsでは一般的ではない、と思う。(というか有効な(日本製)アプリってあるのか?)
AppleのキーボードにESCのそばにあるとかなんとか。
- 594デフォルトの名無しさんsage04/07/12 11:58
- リッチエディットのデフォルトショートカットにCtrl + Clearが載ってる
- 595デフォルトの名無しさんsage04/07/12 12:10
- >>591
そんなに条件厳しかったのね。
マネージドじゃちょっと思いつかないなあ。
- 596デフォルトの名無しさんsage04/07/12 12:26
- http://www.microsoft.com/japan/msdn/net/general/persistappsettnet.asp
ここを参考にとりあえず、フォームのLocationを
Closingイベント時にXMLで保存しようとしたのですが、
どうも上手くいかず、空のファイルが出来るだけです。
疲れたよ・・・
ヒント教えて
- 597デフォルトの名無しさんsage04/07/12 12:52
- >>596
独り言で済まされたくないのならもうちょっと文章を考えるべきだと思う。
XmlSerializerのシリアライズとデシリアライズをきっちり勉強しろ、としか。
- 598デフォルトの名無しさんsage04/07/12 13:33
- >>596
具体的にどのようなコードを書いて上手く行かなかったのか全く記述なし、
そもそも質問する態度がなってない、
もうぬるぽ。
- 599560sage04/07/12 18:42
- >>561
>>563
解決しました。ありがとうございました。
IntPtr.Zeroは便利そうなので乱用してみます
- 600デフォルトの名無しさんsage04/07/12 19:24
- >>599
どう解決したのか書こうよ。
- 601デフォルトの名無しさん04/07/15 00:45
- >>600
600を取ったおまえをガメラは許さない。
- 602152sage04/07/15 01:57
- C#の参照ってC++の参照とほぼ同じなのでしょうか?
呼び出し元の変数の内容を書き換える場合はどうすれば良いのでしょうか?
呼び出し元のvalueをクラス hoge内部で書き換えたい場合は
ポインタを使用するしかないのでしょうか?
private void button2_Click(object sender, System.EventArgs e)
{
bool value = false;
Hoge foo = new Hoge(value);
foo.getStatus();
if (value) MessageBox.Show(this,"ok");
}
public class Hoge
{
private bool hoge;
public Hoge(bool value)
{
hoge = value;
hoge = true;
}
public void getStatus()
{
if (hoge) MessageBox.Show("");
}
}
- 603152sage04/07/15 01:59
- あ、refを使用した場合でも書き換わりませんでした
- 604デフォルトの名無しさんsage04/07/15 01:59
- >>602
「参照」ならC++のように呼び出しもとの値を書き換えられる。
- 605602sage04/07/15 02:04
- >>604
サンクスです
いろいろと実験したら
クラスで包んでやればできました。
boolとかintの場合はなんかクラスで包んでやらないといけないのですね
- 606デフォルトの名無しさんsage04/07/15 02:07
- んなこたない。
public class Hoge {
public static void Main(){
int x = 100, y = 200;
System.Console.WriteLine("x = " + x + " y = " + y);
swap(ref x, ref y);
System.Console.WriteLine("x = " + x + " y = " + y);
}
static void swap(ref int a, ref int b){
int tmp = a; a = b; b = tmp;
}
}
- 607602sage04/07/15 02:13
- >>606
すんません
ちょっとサンプルが悪かったです
private void button2_Click(object sender, System.EventArgs e)
{
// 初期値でfalse
bool value = false;
Hoge foo = new Hoge(value);
// クラスHoge内部でvalueの値を書き換えたい!
foo.updateStatus();
1
if (value) MessageBox.Show(this,"ok");
public class Hoge
{
private bool hoge;
public Hoge(bool value)
{
hoge = value;
}
public void updateStatus()
{
hoge = true;
}
}
- 608デフォルトの名無しさんsage04/07/15 02:17
- >>602
おまいはいったい何がしたい?
クラスとかインスタンスとかいうもののイメージが理解できてるか?
- 609デフォルトの名無しさんsage04/07/15 02:18
- この例なら返り値を取らせればいいとおもうけどね。
- 610602sage04/07/15 02:20
- 要するになにがしたいかというと
デザインパターンでいうObserverのような機能を実現したいのです
もうちょっと自分でやってみます
- 611デフォルトの名無しさんsage04/07/15 02:21
- >>607
少なくとも、そのコードではhogeに渡しているのは valueのコピーであって参照ではない。
- 612デフォルトの名無しさんsage04/07/15 02:22
- ある変数と同じオブジェクトを別のクラス内で参照しておきたいと言う事なら、
object型などの参照型にアップキャストして保持しとくしかない。
使う時にダウンキャストしないといけなくなるので今一だが。
# まあ、ラッパークラス作ってもいいんだけど。
しかしながら、
if (value) MessageBox.Show(this,"ok");
のところを、
if (foo.value) MessageBox.Show(this,"ok");
みたいな形では駄目なのかを考えた方がいい。
# valueはprivateだなんて突っ込みは不要。
- 613デフォルトの名無しさんsage04/07/15 02:23
- そもそもboolを持たせといてObserverってのがよくわからんな。
- 614デフォルトの名無しさんsage04/07/15 02:25
- Observerパターン?
>>607のコードがいまいちピンとこないんだが…
- 615602sage04/07/15 02:31
- ユーザーコントロールでテキストボックスを拡張した物を作りました
EditBoxという名前とします
フォーム上に30個ぐらいEditBoxを配置するとします
このときにEditBoxに呼び出し元のフォームを知らせます
どれか一つでもテキストボックスの値が変更された場合は
呼び出し元のフォームの更新フラグを更新します
# コントロールの数が増えたり減ったりすることがあるので
# 戻り値で受け取るのはミスが増えるのでやりたくないんです
こうすれば
呼び出しもとのフォームは個々のコントロールの更新未更新を考えずに
画面の内容の更新をしることができると思うんです
こういうのを考えているんですが
javaだとできるんですがC#だとうまくいきません
- 616デフォルトの名無しさんsage04/07/15 02:33
- >>615
フォームにフラグ更新メソッド作っておいて、
そのEditBoxとやらに呼ばせれば?
- 617デフォルトの名無しさんsage04/07/15 02:35
- そもそも親フォームの更新フラグの存在をEditBoxが知っていることが間違ってる。
いや親フォームの存在すら知るべきではない
- 618デフォルトの名無しさんsage04/07/15 02:37
- 「Observerのような機能」じゃなくて「Observerの機能」を持たせればいいと思います。
- 619602sage04/07/15 02:43
- >>613
Observerだとメソッドをたたくじゃやないですか
そうじゃなくて更新フラグとかで通知だけしたいなと思ったんです
boolじゃなくてsetUpdateFlag()
とかのほうがスマートなんだろうか・・・
>>612
参照型として保持しておけば(・∀・)イイ!!んですね
プリミティブ型のラッパークラスは標準では用意されてないんですね
ありがとうございました
>>614
たぶんうまく伝わってませんすみません
>>616
そうですねラッパークラスを作るより
その方が早そうですね
>>618
その方向でやってみます
>>617
Observerにしてしまえば親フォームでコントロールの更新状況などを
考えなくて良いのは便利だと思うのですがどうでしょう?
単一の部品としではなくフレームワークとして考えてですが
とりあえず眠くなってきたので
みなさんのアドバイスを元に起きたらいろいろと試してみてみます
なんかできそうな気がしてきた
- 620デフォルトの名無しさんsage04/07/15 03:19
- なんでJavaで出来てC#で出来ない?
大体フラグ更新という考え方(最初の考え方)だと
Observerのようにならないってのは分かるか?
# それでいいなら別にいいんだけど、そりゃObserverとは言わないだろ。
やり方なんていくらでもあって、EditBoxの既存のイベントを利用する、
独自のイベントを追加して利用する、更新通知メソッドをフォームに用意して
呼び出す、同じようなもんだがフラグプロパティをフォームに用意する、
更新通知デリゲートを渡してフォームに通知する(こりゃイベントとあまり変わらんが)、
なんて辺りがざっと考えられるが。
- 621デフォルトの名無しさんsage04/07/15 03:23
- あと、もしフラグ更新でやるとしたら、そのフラグは
通知側が持つんじゃなくて通知される側の参照経由でセットするのが普通。
て結局は>>620と同じようになるけどな。
- 622デフォルトの名無しさんsage04/07/15 06:52
- C#製アプリに.NET製言語のマクロ機能を搭載しようと思ったらどうすればいいんでしょう。
- 623デフォルトの名無しさんsage04/07/15 10:15
- >>622
完全な独自実装ではなく.NETの機能を使って、例えばC#でマクロ書かせるとして、
document.new();
で、コンパイルエラー出さないためには、
using MyApp;
public class MyMacro
{
public MyMacro()
{
document.new();
}
}
最低でもこれだけ必要で、
ユーザーにとってはマクロなんて気軽なものじゃなくて完全に.NETプログラミング。
それでもかまわないならコンパイラ起動だけすればいい。
document.new();だけで動作できるVSA関連の機能は、
.NET 2.0 betaではobsoleteになってて将来使えなくなる。
- 624デフォルトの名無しさんsage04/07/15 10:20
- ホストアプリと連携できなきゃ意味無いんじゃないの。
.NETでCOMサーバみたいなのって書けるのかね。
- 625デフォルトの名無しさん04/07/15 12:02
- HTMLのテーブルの値って簡単に取得する方法ありますか?
<td>hoge</td>
htmlはstring変数に取得したのでhogeの部分を取得したい。
- 626デフォルトの名無しさんsage04/07/15 12:04
- 正規表現
- 627デフォルトの名無しさんsage04/07/15 12:06
- VSAはobsoleteだからナシとして、コンパイラでやる例を書いておく。
MyApp.exeにBaseMacroクラスを作り、そのメンバとしてホスト連携部を用意しとく。
ユーザーのマクロはBaseMacroを継承したクラスでを書かせる。
using MyApp;
public class MyMacro : BaseMacro
{
}
MyApp.exeを参照させてDLLをコンパイルする。
作成したDLLを動的に呼び出す。
これでstaticの値が連携部になる。
- 628デフォルトの名無しさん04/07/15 12:11
- >>626
もうちょっと具体的に教えてよ。
正規表現でhogeの部分を取得するのは、どういう風に書くの?
- 629デフォルトの名無しさんsage04/07/15 12:19
- >>628
ここはC#相談室
正規表現
http://pc5.2ch.net/test/read.cgi/tech/1062152374/
- 630デフォルトの名無しさんsage04/07/15 12:22
- >>628
ここで結構解説してあるよ
http://www.atmarkit.co.jp/fdotnet/basics/regex01/regex01_01.html
- 631デフォルトの名無しさんsage04/07/15 12:22
- 頭から尻尾まで人に聞いてると成長できないぞ。
質問するのは頭と尻尾だけだ。
- 632デフォルトの名無しさんsage04/07/15 12:35
- C#の正規表現めんどくさいね。
いちいち変数宣言してプロパティセットしてメソッド呼んでとか。
ループの内部で呼ぶとパフォーマンス落ちるから
前もって別の場所で初期化しておかないといけなかったり。
スクリプト言語みたいにもっとお手軽に使えないのかね。
- 633デフォルトの名無しさん04/07/15 12:38
- じゅうぶんお手軽だと思うんだけどなぁ。
あんまり色んな言語いじったことが無いからかも知れんけど。
- 634デフォルトの名無しさんsage04/07/15 14:06
- 言語組み込みの正規表現じゃなく、クラスライブラリなのでしょうがない。
- 635デフォルトの名無しさんsage04/07/15 14:58
- お手軽だからこそスクリプト言語
- 636デフォルトの名無しさんsage04/07/16 00:15
- データグリッドの使い方を教えてください。
検索してもデータベースサーバからごにょごにょすることばかりなのです。
- 637デフォルトの名無しさんsage04/07/16 00:52
- ngen /delete * /show するつもりが、
誤って ngen /delete * してしまいました…_| ̄|○
ネイティブキャッシュを初期状態に戻す方法はないですか?
- 638デフォルトの名無しさんsage04/07/16 01:38
- .NET Frameworkを入れなおすとか・・・
- 639デフォルトの名無しさんsage04/07/16 02:04
- 入れなおします…(ノ∀`)
- 640デフォルトの名無しさんsage04/07/16 17:15
- 今オリジナルメーラーを作ってます。
添付ファイルを表示するListViewにファイルをドラッグアンドドロップするとそのまま
添付ファイルとして送信できるようにしたいのです。
ListViewのlist_temp_DragEnterイベントを使ってDoDragDropメソッドを実行し、
とりあえず、DragDropEffects.Copyにしています。
この後、list_temp_DragDropイベントが実行されて、ファイル名を取得・・と考えていたのですが、
なぜかlist_temp_DragDropイベントが連続して起こります。
どうしてでしょうか。質問が下手ですみません。
- 641デフォルトの名無しさんsage04/07/16 17:28
- >>640
DragEnterイベント内でDoDragDropやっちゃ駄目。
DoDragDropは自分コントロールからよそにドラッグドロップさせるためのメソッド。
(MouseDownイベントで実行させるのが普通)
DragEnterでは受け取ったDragEventArgsのEffectプロパティを操作するだけでいい。
void listView1_DragEnter(object sender, DragEventArgs e) {
if (//e.Dataが要求する型だった) {
e.Effect = DragDropEffects.Copy;
}
}
- 642デフォルトの名無しさんsage04/07/16 17:29
- 「Windows フォーム デザイナで生成されたコード 」の中のあるコントロールの座標値を
変更した後、デザイン画面を見たらそのコントロールが消えてしまいました。
このコントロールを復活させる事はできないのでしょうか?
- 643デフォルトの名無しさん04/07/16 17:36
- SOAPっていうのでさ、情報を取得するプログラムを書いてみたんだが、
FWで接続を許可しないといつまで経っても接続できないだろ?
もしくは、ケーブルが抜けていたらいつまで経っても接続できないだろ?
「接続できない」ことを検出して、ダイアログボックスを表示したいんだが、
どうやって検出するんだ?教えてくれ。
- 644デフォルトの名無しさんsage04/07/16 17:38
- >>642
プロパティをいじる。それで駄目なら作り直し。
- 645643sage04/07/16 17:52
- 御免、例外投げていてくれた。
Thread使っていたからか、「異常終了」にならなかったから気付かなかった。
- 646デフォルトの名無しさんsage04/07/16 17:57
- >>641
ありがとうございます!
解決できました!
- 647646sage04/07/16 18:02
- ついでに質問です。
メールの添付ファイルに使う場合、ドロップしたDataObject型を何に変換させるのがよいでしょうか。
ファイル名と、フルパスさえ取得できればいいと思っています。
FileInfo型にできればよいのですが・・。
- 648デフォルトの名無しさんsage04/07/16 18:22
- >>647
いや普通DataFormats.FileDropのみ受け取るようにするんじゃないだろうか。
- 649デフォルトの名無しさん04/07/16 18:27
- メインウィンドウから新しいウィンドウを呼び出して
setting sw = new setting();
this.Enabled = false;
sw.Show();
両者でstringをやりとりしたいのですがどうしたらいいですか?
Form1のテキストボックスに、
swのopenfileダイアログで選んだファイル名を入れたいです。
- 650646sage04/07/16 18:31
- >>647
FileDropがいまいちわかりませぬ・・。
調べてきます!
- 651デフォルトの名無しさんsage04/07/16 18:34
- >>649
Show()ってことはモードレス? モーダルなら>>315なんだけど。
C#的にはイベントで通知、かな。
あとはForm1に
public void ChangeTextBox1(string text) {
textBox1.Text = text;
}
とかいといてswで実行するか。
- 65264904/07/16 18:39
- レスありがとうございます。
>>あとはForm1に 〜〜 とかいといてswで実行するか。
ってのはどういうことなんでしょうか?
swから
Form1.ChangeTextBox1(openFileDialog1.FileName);
とすると、
静的でないフィールド、メソッド、またはプロパティ '温度計.Form1.ChangeTextBox1(string)' で、オブジェクト参照が必要です。
となってしまいます。
- 653デフォルトの名無しさんsage04/07/16 18:51
- >>652
オブジェクト指向は理解できてるかな、と。
form1でsettingクラスのインスタンスswを作成して、sw.Ownerに自分自身の参照thisを入れる。
//OwnerだとForm型であとでキャストする必要があるからForm1型の別プロパティを作ってもいいけど。
//スマートなのはOwnerプロパティを隠蔽することかな。
sw側からは自身のOwnerプロパティ越しにform1のパブリックメソッドを操作する。
通常OwnerプロパティはForm型なのでForm1型にキャストする必要がある。
//Ownerプロパティのnullチェックもやっておくと多い日も安心。
- 654646sage04/07/16 18:59
- 646です。
おかげさまでドラッグアンドドロップからのメール添付できました!
大変ありがとうございました。
ListViewにアイコンが表示できますが、メール添付するファイルの拡張子にあわせてアイコン表示なんて事も簡単にできるのでしょうか?
ヒントいただけると幸いです。
- 655デフォルトの名無しさんsage04/07/16 19:02
- 普通のコントロールで、値が変更されたら〜する、って処理をする場合には、
OnTextChanged += new TextChangeDelegate( this.hoge );
みたいにイベント使うデソ。
同じノリで、
setting.cs で
public delegate void SetFileNameDelegate(string filename);
public SetFileNameDelegate OnFileSelected;
と delegate を宣言して、Form1 の方には
void SetFileName(string s) { this.textBox.text = s; } を追加、その上で
setting sw = new setting();
sw.OnFileSelected = new setting.SetFileNameDelegate( this.SetFileName );
sw.show();
sw ではファイル名の選択が済んだ段階で this.OnFileSelected(s); として呼び出す。
- 656デフォルトの名無しさんsage04/07/16 19:15
- >>654
ttp://santamartadotnet.hp.infoseek.co.jp/documents/dotnettips/tips021.html
Win32API使わないと実装できないんじゃないかな。
>>655
デリゲートを使うならこの場合eventを使った方が自然。
- 657646sage04/07/16 19:20
- >>656
おおお!これでいけそうです!多謝!
- 658デフォルトの名無しさんsage04/07/16 19:24
- .NET 2.0 なら
Icon.ExtractAssociatedIcon()
でいけますよ。
- 659658sage04/07/16 19:31
- あー、でも exe からアイコン数を取得ってできませんね_| ̄|○
- 66064904/07/16 20:26
- owner 等のキーワードでぐぐってみてやっとわかりました。
フィールドって初めて知りました…orzがんがります
ありがとうございました。
- 661デフォルトの名無しさんsage04/07/16 20:33
- フィールドを使うところあったっけ……?
- 662649sage04/07/16 20:45
- http://dobon.net/vb/dotnet/form/accessanotherformdata.html
の下の方を見たんですが…
フィールドつかわなくてもできた…んですか… orz
やってみよっと。
- 663デフォルトの名無しさんsage04/07/16 20:55
- ああいや、そういう意味なら問題ない。
フィールドをパブリックフィールドととってしまっただけ。
- 664デフォルトの名無しさんsage04/07/16 23:03
- dataAdapterで複数のselectを一度に実行したくて
string sqlStr= "select a from b;" + "select c from d";
と繋げて実行したのですが、
「コマンドの後に文字があるぞ!」って怒られてしまいます。
どなたかアドバイスをお願いします。。。
初心者丸出しですみません。
- 665デフォルトの名無しさんsage04/07/16 23:14
- WinAPI使わないと実装できないことがあるわけ?
どとねとふれーむわーくの意味ないじゃん!
- 666デフォルトの名無しさんsage04/07/16 23:26
- >>665
遅っ
- 667デフォルトの名無しさんsage04/07/16 23:29
- 本命はWinFXだし。
- 668デフォルトの名無しさんsage04/07/16 23:53
- ということは今のどとねと環境での開発は
FXまでの予行演習みたいなものか。
- 669デフォルトの名無しさんsage04/07/16 23:56
- うーんでもやっぱしAPI新しくすることと
どとねと構想とあまし関係ないっつぅか
やっぱどとねとてその存在意義がよくわかんねぇ
DLLひとまとめにしたようなもんか?
- 670デフォルトの名無しさんsage04/07/17 00:12
- >>664
あんた、T-SQLを勉強した方がいいぞ。
- 671602sage04/07/17 03:30
- 602ですが
参照型でいったらできました
ありがとうございました
#refと参照型は違うんですね
- 672デフォルトの名無しさん04/07/17 10:33
- WSE2.0を使ってみたんですが、クライアントとサーバの
システム時間が5分ぐらいずれているとエラーとなってしまいます。
エラー:Message Expired
WSE1.0ではRequestSoapContext.Timestamp.Ttlの値を0にすれば
よかったんですが、WSE2.0にはそのようなプロパティが存在しません。。
上記エラーを回避するには、WSE2.0に対してどのような設定を
すればよろしいでしょうか。
- 673デフォルトの名無しさんsage04/07/17 11:02
- >>672
参考になりそうなのはこれかなー。
ttp://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=12825
- 674デフォルトの名無しさん04/07/17 11:35
- C#のWindowsフォームアプリから、外部コマンドを実行するにはどうしたらいいですか?
- 675デフォルトの名無しさんsage04/07/17 11:36
- System.Diagnostics.Process
- 676デフォルトの名無しさん04/07/17 12:13
- >>675
ありがとん!
- 677デフォルトの名無しさんsage04/07/17 14:58
- Visual C#で作ったアプリをPocket PCで動かすことは出来ますか?
- 678デフォルトの名無しさん04/07/17 15:23
- VC++かC#で、IEのツールバー(googleToolbarのようなものを想像してください)を作りたいのですが、
作成方法を解説しているサイトをご存知ありませんか?
- 679デフォルトの名無しさんsage04/07/17 15:48
- ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/Shell/programmersguide/shell_adv/bands.asp
- 680デフォルトの名無しさんsage04/07/17 15:53
- >>678
The Code Project - Extending Explorer with Band Objects using .NET and Windows Forms - C# Programming
http://www.codeproject.com/csharp/dotnetbandobjects.asp
- 681デフォルトの名無しさんsage04/07/17 16:11
- >>678
リバー
http://home.att.ne.jp/banana/akatsuki/doc/atlwtl/atlwtl13-02/
- 682677sage04/07/17 17:51
- よろしこおながいします。
- 683デフォルトの名無しさんsage04/07/17 17:53
- C#かDelphiで彼女を作りたいんです。
作成方法を解説しているサイトをご存知ありませんか?
あ、最低で柴崎コウさん、堀江由衣さんくらいの彼女が作りたいんです。
C#かDelphiで無理ならC++かVHDLでも問題ありません。
- 684デフォルトの名無しさんsage04/07/17 18:04
- > C#かDelphiで彼女を作りたいんです。
1.C#かDelphiのプログラムが動かず悩んでいる、柴崎コウか堀江由衣くらいの女の子を捜す。
2.答えてあげる。
3.ヽ(゚∀゚)ノヤッター!!
- 685デフォルトの名無しさんsage04/07/17 18:15
- >>682
ttp://www.microsoft.com/japan/
- 686デフォルトの名無しさんsage04/07/17 18:36
- >>684
漏れはその手で会社の後輩をゲトしようと思って、かなりいい線まで逝ったと思うのだが
ある日彼女の妊娠が発覚(入社1ヶ月目でオメデタ3ヶ月)、そのまま退社された orz
- 687677sage04/07/17 18:38
- Pocket PC(Windows CE)上で、.NET Frameworkが動いていれば実行できて、
Visual C#は、Visual Studio .NETのなかに付属している。で、合っていますか?
勘違いしているようでしたら教えてください。失礼します。
- 688デフォルトの名無しさんsage04/07/17 19:21
- >>687
普通にC#で作ったWindowsFormアプリは動かない。
PocketPC向けに.NETCompactFrameworkで作ったアプリはPocketPCのAPIをP/Invokeで呼び出していなければ
大体のものはWindowsXPとかで動く。
- 689677sage04/07/17 22:24
- >>688
レスありがとうございます。取っ掛かりができました。助かりました。
- 690デフォルトの名無しさんsage04/07/18 01:37
- ブラウザ(AxWebBrowser)上のリンクにマウスが乗ったとき、
どのようにすればステータスバーにURLを表示できますでしょうか、、、
タイミングなどよくわかりません・・・
- 691デフォルトの名無しさんsage04/07/18 01:57
- >>690
StatusTextChangeイベント
- 692デフォルトの名無しさんsage04/07/18 01:59
- >>691
正気?
- 693デフォルトの名無しさんsage04/07/18 11:43
- テキストボックス等を以下のように
TextBox[] txtaaaaa = new TextBox[10];
コントロールの配列として扱う方法と、普通にtxtaaaaa1.txtと扱う方法を
1つのプログラムで混ぜていいのですか?
- 694デフォルトの名無しさんsage04/07/18 12:21
- >>693
別に言語仕様上何の問題もない。
コードが読みやすければそれでいい。
混合させれば場面によっては可読性を損なうだろうし、場面によってはよりわかりやすくなることもある。
複数人でコードを扱う場合は多くの場合好まれないだろう。
まあコントロールの配列はコントロールを動的に作成する以外必要性少ないが。
- 695デフォルトの名無しさんsage04/07/18 16:15
- >>694
特に問題はないんですね。
ありがとうございます。
- 696デフォルトの名無しさん04/07/19 13:56
- ほかのアプリケーションを操作する方法って、どんなのがありますか?
キーストロークを送信したりできないのでしょうか?
- 697デフォルトの名無しさんsage04/07/19 15:09
- > キーストロークを送信したりできないのでしょうか?
今んとこ、APIを呼び出すしかない。
- 698デフォルトの名無しさんsage04/07/19 16:37
- SendKeys.Send()
- 699デフォルトの名無しさん04/07/19 23:25
- Buttonの宣言位置なんですが、
public class MainForm : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
public MainForm()
{
InitializeComponent();
}
}
なら普通に動くんですが、下のだと動きません。
public class MainForm : System.Windows.Forms.Form
{
public MainForm()
{
System.Windows.Forms.Button button1;
InitializeComponent();
}
}
一応はButtonのインスタンス(button1)を初期化するInitializeComponent()の前でbutton1を宣言してるんですが、
InitializeComponent()内で、button1の定義が無いとエラーが出ます。
(InitializeComponent()内で、button1 = new Button()やってます)
MainForm()内の、button1宣言文とInitializeComponent()の呼び出し順ってどうなってるんでしょうか?
- 700デフォルトの名無しさんsage04/07/19 23:43
- >>699
ttp://black.sakura.ne.jp/~third/programming/cs/cs.html
この辺で一から勉強し直した方がよくないか。
簡単に言えば、
クラスのメンバとして宣言された変数はオブジェクトが破棄されるときに破棄される。
あるメソッド内で宣言された変数はそのメソッドから抜けるときに破棄される。
また、別のメソッドを呼んだとき、
呼出先メソッドでは呼出元メソッドのローカル変数は扱えない。
- 70169904/07/19 23:54
- あの、それじゃあこの場合で普通に動くんですが、
public class MainForm : System.Windows.Forms.Form
{
public MainForm()
{
InitializeComponent();
}
System.Windows.Forms.Button button1;
}
button1を初期化するInitializeComponent()の後にbutton1を宣言してもOKなのはなんででしょう?
- 702デフォルトの名無しさんsage04/07/20 00:00
- >701
入門書読んでからこい
ヒント
スコープ
メンバ
- 703デフォルトの名無しさんsage04/07/20 00:05
- > button1を初期化するInitializeComponent()の後にbutton1を宣言してもOKなのはなんででしょう?
後じゃないしなあ。
入門書に書いてあるかどうかも不安なレベルだ。
- 704699sage04/07/20 00:13
- あー、なんか分かりました。
public MainForm()
{
InitializeComponent(new Button());
}
private void InitializeComponent(Button button1)
{
button1.Location = new System.Drawing.Point(40, 104);
button1.Name = "button1";
button1.TabIndex = 0;
button1.Text = "button1";
}
これなら動きました。
- 705デフォルトの名無しさんsage04/07/20 00:15
- 何がわかったのか書いてみな。
大事なとこだ
- 706デフォルトの名無しさんsage04/07/20 00:17
- CommandBarとかDocking Windowとか作りたいんだけど、無理?
海外のコンポーネントだとソースコードがないのが多い・・・_| ̄|○
- 707デフォルトの名無しさんsage04/07/20 00:18
- >>705
あんた親切だなあ。
- 708699sage04/07/20 00:22
- button1はInitializeComponent()で初期化するにはクラスのメンバーである必要があるけど、
上の駄目な例だと、MainForm()のローカル変数として宣言してたってことですよね。
で、InitializeComponent()にとって、MainForm()のローカル変数button1はスコープ外だと。
- 709デフォルトの名無しさんsage04/07/20 00:25
- >>706
.NET Framework 2.0でToolStripやらRaftingContainerやらが増えてるが。
ttp://www.google.co.jp/search?q=cache:dobon.net/vb/dotnet/links/coolbar.html
にCommandBarコンポーネントがいくつか紹介されてる。
- 710デフォルトの名無しさんsage04/07/20 00:26
- はずれでもないが、オブジェクトのライフサイクルについても考察せよ
- 711699sage04/07/20 00:26
- ↓こんな感じでやってたと。
public void Test()
{
int a = 0;
}
public void Test2()
{
a=1;
}
- 712デフォルトの名無しさんsage04/07/20 00:26
- >>708
書いていること自体は間違いではないが、まだまだ周りは
「分かってんのかな?」という感想だと思う。
button2を押したら、button1.Textを書き換えるとかはどうする?
- 713デフォルトの名無しさんsage04/07/20 00:30
- >>711
そういう例だと、引数で渡さずにTest()とTest2()で同じaという変数を扱う、
って話をクリアして欲しい。
- 714デフォルトの名無しさんsage04/07/20 00:37
- >699 MainForm()内の、button1宣言文とInitializeComponent()の呼び出し順ってどうなってるんでしょうか?
この時点でおまいはクラスのことを何も分かってないことがわかってしまう
分かってから自分がどれだけばかたりな質問をしたか分かるぞ
責めてるんじゃないが。ある意味その新鮮さがうらやましい
- 715デフォルトの名無しさんsage04/07/20 00:43
- このスレってこんなに親切だったっけ?
あんまり親切すぎるの反対。
- 716デフォルトの名無しさんsage04/07/20 00:48
- そだね。入門スレに帰れ!
- 717699sage04/07/20 00:55
- >>712
>>704のだと、InitializeComponent()の中でbutton2を作って初期化しないと駄目ですね。
InitializeComponent(Button button1)
{
button1 = new Button();
Button button2 = new Button();
button2.Text = "button2";
button2.Click += new EventHandler(button2_Click);
}
private void button2_Click(object s,EventArgs e)
{
button1.Text = "書き換え後のテキスト";
}
いまオブジェクトのライフサイクルってのを調べてます。
- 718699sage04/07/20 01:00
- ああ、すいません。
ふらっとC#ってスレがあるので、今後はそっちをメインに利用します。
- 719デフォルトの名無しさんsage04/07/20 01:09
- 699のC#ライフに幸あれかし。
- 720デフォルトの名無しさんsage04/07/20 01:11
- うむ、好感の持てるお人だった。
でも>>717は無茶苦茶だ。
- 721デフォルトの名無しさんsage04/07/20 01:14
- 後輩が>717のようなソースを持ってきてキラキラした目をしながら「先輩何とか動きました」といってきたらどうする?
- 722デフォルトの名無しさんsage04/07/20 01:15
- >>721
>どうする?
困る。
- 723デフォルトの名無しさんsage04/07/20 01:16
- >722
いや,そのまっすぐな目で見つめられたらおまえは
- 724デフォルトの名無しさんsage04/07/20 01:18
- まあ717はコンパイル通らないから問題ないが。
……いや、button1がフィールドにもある可能性もあるか。
目を逸らしつつ入門書を差し出すかな。
- 725699sage04/07/20 01:21
- あぁすいません。
>>717のInitializeComponentは、
public MainForm()
{
InitilaizeComponent(new Button());
}
って感じで呼び出してます。
とりあえず動作するのは確認してたので・・・というか気になって戻ってきましたw
- 726699sage04/07/20 01:24
- あああ、テストしたのと書き込んだの違った・・・
- 727699sage04/07/20 01:28
- ∧||∧
( ⌒ ヽbutton1はInitializeComponent()のローカル変数だから
∪ ノ button2_Click()からはbutton1.Textにアクセスできないや。
∪∪ さっき出たネタなのに。
- 728デフォルトの名無しさんsage04/07/20 01:30
- >727
心配するな。
それ以上に突込みどころ満載のソースだから
- 729699sage04/07/20 01:35
- やっぱり、VS.NETのデザイナーで生成されるソース使ったほうがいいんですか?
雛形どおり使うのって凄い抵抗あるんですが・・・とにかく変えたい症候群で。
- 730デフォルトの名無しさんsage04/07/20 01:41
- >>729
まずはエディタとcsc.exeとコマンドプロンプトから始めるのを勧めるな。
全ての基本はHello worldだ。
自分がそういうレベルの質問してるという自覚はあるよな?
- 731デフォルトの名無しさんsage04/07/20 01:43
- 壮大な釣りの予感
- 732699sage04/07/20 01:49
- 先月からcsc,nmake→SharpDevelopでやってたんですが、
theSpokeの激安VS.NET買っちゃったので使いたいんです(;´Д`)
レベルについては自覚してます。
- 733デフォルトの名無しさんsage04/07/20 02:22
- >>729
> とにかく変えたい症候群で。
どうやら学生のようだが、プロになったらそんなポリシーなど三秒で駆逐されるから、
今のうちに変えたい症候群を楽しんでおこうね。
- 734デフォルトの名無しさん04/07/20 10:15
- というか、雛形どおりにやってたら楽だが、理解も応用もできなくなるからな。
変えたいというか、自分で最初から構築したいんだろう。いいことだよ。
- 735デフォルトの名無しさんsage04/07/20 10:49
- 改善はいいが改悪は止めてくれ
- 736デフォルトの名無しさんsage04/07/20 12:38
- byte[] hogehoge = new byte[10 * 1024 * 1024];
って感じで大きめの領域を確保して、使い終わったら早めに片づけておきたいんだけど
C++のdelete[] に相当するものってないの?
- 737デフォルトの名無しさんsage04/07/20 12:56
- >>736
ぬるぽGC
- 738デフォルトの名無しさんsage04/07/20 13:35
- ファイル→新規→プロジェクト→C#と巡っても、「Windows Control Library」が無いんですが…。
ちなみにVisual C# .NET 2003 使ってます。
もし私の環境で"WCL"が使えないなら、どうにかして使えるようにする方法はありませんか?
MSのサイトにそのためのプラグインか何かが公開されているとか、
SharpDevelopならば使えるとか、
空のプロジェクトにごにょごにょファイルを追加すればそれ相当になるとか。
- 739デフォルトの名無しさん04/07/20 13:40
- ヽ(`Д´)ノ ウリャアage
- 740デフォルトの名無しさんsage04/07/20 13:45
- >>738
ごにょごにょすればできるよ。
試してないけどそれっぽいツールもある。
オレはそれを知らずにごにょごにょしてしまった。
- 741デフォルトの名無しさんsage04/07/20 13:48
- >>738
これ?
> ■ Visual C#.NET Standard で DLLをビルドする方法。
>
> (1)普通にプロジェクトを作る
> (2)プロジェクトを保存したフォルダの「プロジェクト名.csproj」をテキストエディタで開く
> (3)Settings要素の OutputType属性を "Library"に書き換える
>
> これでビルドするときに Main()がなくても怒られない。
- 742デフォルトの名無しさんsage04/07/20 15:34
- ちょっと教えて下さい。
Cで記述されたDLLから、大量のコールバックを呼び出す必要があるのですが、
DLL内の初期化関数呼び出し時に、利用しそうなコールバック関数を一気に登録しておき、
必要に応じて、該当コールバック関数をコールする。
と言う事は可能なのでしょうか?
あと、コールバック用に作成したデリゲートのライフタイムは
どのへんに依存するのでしょうか?
どこかに、「コールバック登録したデリゲートが勝手に破棄されないようにする」
というような、記述を見た気がするのですが、何処で見たのか・・・
- 743デフォルトの名無しさんsage04/07/20 17:15
- OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
でファイル開くダイアログを出して、.lnkファイルをダブルクリックすると
リンク先のフォルダへ行かず、リンクファイルを開いて終わってしまいました。
FileDialog.DereferenceLinksプロパティをいじっても変わりません。
なんとかなりませんか?
- 744デフォルトの名無しさんsage04/07/20 17:35
- >>743
・FileNameがDereferenceLinksに関わらず.lnkを取得
・.NET Frameworks 2.0βだとDereferenceLinks=trueでリンク先フォルダの選択画面になる
バグか未実装のようだな。
//コモンコントロールなのに……。
- 745デフォルトの名無しさんsage04/07/20 18:51
- >>742
delegateもCLR的には単なるObjectなんだから、
そのポインタをpinしておけばいいのですよ。
つかMC++経由だったらそんなにトリッキーなことにはならんと思うが。
- 746デフォルトの名無しさんsage04/07/20 19:54
- どこで聞いたらいいのか迷ったので…スレ違いだったら誘導してもらえると助かります。
System.Net.HttpWebRequest/HttpWebResponse クラスを使って
簡易HTTPクライアントを作成しているのですが、IEが吐いたクッキーを食わせる方法がわかりません。
hoge.hoge.tldサーバ -[Cookie]-> IE (username@hoge.hoge.tld[x].txt に出力されている)
この状態で、自作プログラムから hoge.hoge.tld 上のリソースにアクセスする際に
IEで受け取ったクッキーを食わせたいんです。
ぐぐったところ
クッキー受け取り->そのクッキーを送出
というものは見つかったのですが、試しにその通りにやっても
期待通りの(クッキーが受け入れられた)動作は得られませんでした。
どなたかご教示いただけませんでしょうか?
- 747デフォルトの名無しさんsage04/07/20 20:07
- >>746
せめてアドレスくらい書いてくれよー。
- 748746sage04/07/20 20:42
- >>747
Amazon.co.jpのトップページでやってみてます。IEでアクセスすると、
こんにちは、hogehogeさん。おすすめ商品を〜
となるんですが、HttpWebResponseで取得すると
こんにちは。おすすめ商品を〜
となり、Cookieが受理されていないようです。
- 749デフォルトの名無しさんsage04/07/20 21:27
- アプリケーション自身が入ってるフォルダを調べるのはどうするんだった?
- 750デフォルトの名無しさんsage04/07/20 21:36
- >>749
Path.GetDirectory(Application.ExcutablePath);
Path.GetDirectory(GetType().Assembly.Location);
でどうでしょうか?
- 751746sage04/07/20 21:37
- 追記です。
request.CookieContainer.SetCookies(request.Address,"session-id-time=xxxx,session-id=xxxx…");
というふうに、Cookieファイルの内容を直接記述したら受理されました。
プロクシの設定みたいに、デフォルトの値を取得できないもんでしょうか?
>>749
Application.ExecutablePath でアプリケーションのフルパス(x:\hoge\hogehoge\foo.exe)
Application.StartupPath で実行パス(y:\foo\bar)
- 752デフォルトの名無しさんsage04/07/20 22:10
- >>751
ファイルから読み込んでSetCookiesしてやればいいんじゃない?
HttpWebRequestでやる以上IEとは関係ないんだし。
デフォルトの値って何よ。
- 753デフォルトの名無しさんsage04/07/20 22:30
- >>750-751
StartupPathだとなぜか一つ上のフォルダが出てきた・・・
Path.GetDirectoryName(GetType().Assembly.Location);でいけますた。
- 754746sage04/07/20 22:33
- >>752
デフォルトって言い方は変でしたね。
プロクシについては GetDefaultProxy()で取得できてたので、
同じように取得できないかな、と思ったのですが。
ファイルから読み込むしかないかな…
レジストリ検索したら、
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cookies
にフルパスを格納した値があったので、試しにこれでやってみたいと思います。
- 755デフォルトの名無しさんsage04/07/20 22:34
- >>754
もっとエレガントに、
Environment.GetFolderPath(Environment.SpecialFolder.Cookies)
Environment.UserName
- 756746sage04/07/20 22:41
- >>755
_| ̄|○
迅速かつエレガントなレスthxです。
>>753
見当違いでした(´・ω・`)sry
- 757746sage04/07/20 23:27
- 駄目だ、ディレクトリまでは簡単に取得できるけど
肝心のファイル名が一意に特定できない
foo.bar.hoge.ne.jpの場合、
...\Cookies\ユーザ名@foo.bar.hoge.ne[n].txt
になる、と思ってたらそうでもなく、
ディレクトリによっても左右されるみたいですね…
Cookiesディレクトリの*.txtを片っ端から走査して、
3行目のドメイン指定(?)が一致するものを探すしかない気がします。
index.datがくさい気がするんですが、ぐぐってもよくわからないし。
連続書き込みで申し訳ない。>ALL
- 758デフォルトの名無しさんsage04/07/20 23:35
- >>757
ググってみたけど、そこまでベタにやるならおとなしく
InternetGetCookie と InternetSetCookie を使うのがいいんじゃない?
- 759746sage04/07/21 00:38
- >>758 さんに頂いたキーワードで検索したところ、ズバリなページを発見。
http://www.rendelmann.info/blog/default.aspx?date=2003-12-12#abd99bcd5-7088-4d46-801e-c0fe622dc2e5
ここのRetrieve〜関数をいじって(そのままだとエラーが出た)
[DllImport("wininet.dll", CharSet=CharSet.Auto , SetLastError=true)]
public static extern bool InternetGetCookie (string url, string name, StringBuilder data, ref int dataSize);
private static string GetIECookiesForUrl(string url)
{
StringBuilder cookieHeader = new StringBuilder(new String(' ', 256), 256);
int datasize = cookieHeader.Length;
if (!InternetGetCookie(url, null, cookieHeader, ref datasize))
{
if (datasize < 0)
return String.Empty;
cookieHeader = new StringBuilder(datasize); // resize with new datasize
InternetGetCookie(url, null, cookieHeader, ref datasize);
}
return System.Text.RegularExpressions.Regex.Replace(cookieHeader.ToString(),";",",");
}
// クッキーを食わせる ( HttpWebRequest request )
request.CookieContainer = new System.Net.CookieContainer();
request.CookieContainer.SetCookies(request.Address,GetIECookiesForUrl(request.Address.ToString()));
のようにしたところ、ちゃんとCookieが受理されました。
アドバイスを下さった皆さん、ありがとうございました。
- 760デフォルトの名無しさんsage04/07/21 02:38
- >759
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconplatforminvokedatatypes.asp
P/Invoke するときに、LPSTR とか LPCSTR が来るところは System.String でも System.StringBuilder でも大丈夫なんだ…知らなかった orz
# 確かに、StringBuilder でないと微妙に具合悪いよなぁ…
- 761デフォルトの名無しさんsage04/07/21 09:12
- LPSTRにSystem.Stringは変なような。ああ、書き換わっても反映されないだけか。
- 762デフォルトの名無しさんsage04/07/21 10:13
- .NET2.0は1.0時代のコードをコチョコチョっと
書き直す程度ビルドできるものなんだろうか。
嫌々使っていたソースの無いサードパーティ部品をやめて
2.0で増えたネイティブコントロールを使いたいんだけど、
あんまり修正部分が広いとしんどい。
- 763デフォルトの名無しさんsage04/07/21 12:46
- >>762
Ruby や perl で変換プログラムを書いたら。
- 764デフォルトの名無しさんsage04/07/21 20:33
- ふと気づいたんだがみんなツールバーの画像とかどうしてる?
- 765デフォルトの名無しさんsage04/07/21 22:01
- エレメンツのシェイプとか使って描いてる。
- 766デフォルトの名無しさんsage04/07/21 22:08
- >764
まんどくせから全部■
- 767デフォルトの名無しさんsage04/07/21 22:20
- 漢だ… > 766
- 768デフォルトの名無しさん04/07/22 00:30
- >762
英語版のお試し版ならダウンロードしてインストールできるでそ
- 769デフォルトの名無しさんsage04/07/22 00:54
- ツールバーの画像探したけど16色のしかなかったよ(;つД`)
どっかXP風なアイコン無料で公開してるとこない?
- 770KazMAX ◆CaGD7FUGns sage04/07/22 01:05
- >>769
http://kde-look.org/
このへんで探してみるとか。
- 771デフォルトの名無しさんsage04/07/22 01:15
- system32\SHELL32.dll
あたりのリソースを無断使用するとか。
- 772デフォルトの名無しさんsage04/07/22 01:15
- >>769
GlyphsXP
- 773デフォルトの名無しさんsage04/07/22 01:41
- >>772はshell32.dllに入ってるものだけだった
できればウィンドウ関係のアイコンが欲しいがみつからない・・・
自分で作るしかないのかなー・・・
- 774デフォルトの名無しさんsage04/07/22 01:43
- >>762
全くと言っていいほどコード書き直す必要ないはずなんだけど。
- 775デフォルトの名無しさんsage04/07/22 01:49
- 2.0でgenerics期待したんだけどなー
- 776デフォルトの名無しさんsage04/07/22 08:44
- だけど?
- 777デフォルトの名無しさんsage04/07/22 11:44
- >>745
callback関数の一括登録できました。
遅ればせながら、ありがとうございました。
- 778デフォルトの名無しさん04/07/22 16:58
- >>771
system32\SHELL32.dll のリソースを見てみました。
ツールバーの画像はアルファ付きBMPらしいのですが
リソースのBMPにはアルファ情報は入っていないみたいです。
カラーキーで背景色を抜いただけではかなり変な表示になってしまいます。
アルファ情報はどこにあるんでしょうか???
・・・・・・って完璧にスレ違いだったスマソ
- 779デフォルトの名無しさん04/07/22 18:35
- C#って言語仕様としてアスペクト指向をサポートしてますか?
そのあたりを解説したサイトがあれば教えてください。
- 780デフォルトの名無しさん04/07/22 20:28
- theSpoke効果
- 781デフォルトの名無しさんsage04/07/22 21:01
- DirectXのプロジェクトが「アセンブリが見つからん」と言われて作成できない。
解決策を教えてくれ
- 782デフォルトの名無しさんsage04/07/22 21:07
- >>781
C#板のみ入れた?
- 783デフォルトの名無しさんsage04/07/22 21:19
- >>782
いや、、VisualStudioのセットで入っていてそのままSDKをインストールしたのだが、、
え、もしかして、単体じゃないと駄目なのか?だとしても何か解決方法があるんでしょ?
- 784デフォルトの名無しさんsage04/07/22 21:32
- >>783
C#版だと問題で、全部入りは問題なかったはずだが。
Managed DirectX vol.2
http://pc5.2ch.net/test/read.cgi/tech/1061285378/
の前スレで
- 785デフォルトの名無しさんsage04/07/23 01:59
- VC#.NET 2003 Standardを購入してインストールしたのですが、
試しにビルドした空のアプリ(画面・コマンドラインとも)を
デバッグ実行すると、戻ってこなくなります。
DirectX 9.0 SDKのC#サンプルも同様に戻ってこなくなります。
.NET FrameWorkの問題でしょうか?
環境はAthronXP、Windows2000Professional、
常駐APはNortonの防火壁とアンチウィルスです。
- 786デフォルトの名無しさんsage04/07/23 09:18
- 戻ってこないってのはどういうことを言っているのかね。
- 78778504/07/23 10:29
- 当該プログラムのプロセスだけが残った状態になります。
C#開発環境はプロセスが反応を返さないのでフリーズします。
DirectXのサンプルブラウザはフリーズはしませんが。
- 788デフォルトの名無しさんsage04/07/23 13:25
- >>781
そういうのは、まずオブジェクトブラウザを見直す。
- 789デフォルトの名無しさんsage04/07/23 14:09
- WinXP ProにVS入れて使ってたとき、
>785に似た現象が出たことある。Norton IS & Antivirusも入れてた。
・F5(開始)でビルドするとVSがフリーズする。
・でもアプリのプロセスは存在する。
・EXE自体は正常にできてる。
VSを強制終了させてexeを直接起動すると
それは問題なく動いたんだよね。
F5(開始)でやるんじゃなくて、
メインメニュー → ビルド → HOGEのビルド
からビルドしてexeを直接起動することで対処してたけど、
いい加減面倒なのでOSごと再インストールしたら直った。
全く同じコードがF5(開始)でビルド&起動できたね。
移行した環境がWin2003Ent + Norton IS + AVGと全然違うし、
他で再現性を試したわけじゃないから
この現象が環境依存なのかどうかはハッキリ言えないけど。
- 790785sage04/07/24 02:07
- >>788
オブジェクトブラウザ以前に、
インストール>とりあえず空のプロジェクトを作る>デバッグ実行>フリーズなもので…。
>>789
どうも環境依存ぽいです。
C#のアンインストーラもスクリプトを設定中に止まってしまうので
アンインストールもできない…。
状況としては同じで、EXEファイルはできてるんですよね。
- 791デフォルトの名無しさんsage04/07/24 03:07
- >>785
ひょっとしてNIS/NAVにてVSが必要とするスクリプトを弾いてしまってませんかね。
NISとNAVを止めておいて実行したらどうなりましょう?
- 792785sage04/07/24 12:12
- >>786,788,789,791
ご協力ありがとう御座いました。
一先ず解決しました。
.NETインストール時に追加したIISが原因だったようで、アンインストールしたら正常化しました。
とりあえずウェブサービスを利用する予定はないので、これで良しとします。
- 793デフォルトの名無しさんsage04/07/24 15:05
- つい昨日の事だけど、俺の開発マシン、ノートン先生が devenv.exe を
違法なスクリプトとして排除してました。
ソリューションの新規作成が出けんつーの!
- 794デフォルトの名無しさんsage04/07/24 15:12
- ノートンをぬっころせ
- 795デフォルトの名無しさん04/07/24 17:03
- C++なんかでプログラムを作るときは大抵、main関数で変数を宣言して、
関数の引数に値やポインタを渡すと思うのですが、
C#では classのなかでグローバル(?)に宣言して 使うのと、
Mainの関数で宣言して渡すのとどちらが よろしいとされていますか?
- 796デフォルトの名無しさんsage04/07/24 17:22
- case by case
- 797デフォルトの名無しさんsage04/07/24 20:59
- グローバルにする「必要」がなければローカル。
ってかmainから関数に渡す引数を何でグローバルにする必要がある?
# 本当に必要のある変数は別よ、>>795はそういう意味では言ってないと思うので。
- 798デフォルトの名無しさん04/07/24 22:39
- 自分自身のインスタンスを参照する場合は this を
使えば良いですけど、自分自身のクラスをこのように
具体的な名前を書かずに指定することはできないん
でしょうかね。
これができると、singletonの実装とかタイプセーフ
enumとかの実装などなどで使いたいんだけど。
インスタンスと違って特定できるんだから名前を
そのまま書けばいいじゃないってのは言う人が
いるだろうけど、ある意味便利だと思われ。
- 79979804/07/24 22:40
- 補足すると、自分自身のクラスと同じ型の戻り値を
返すときなどで、一般的な書き方が出来て可読性が
多少良くなるかなというイメージです。
- 800デフォルトの名無しさんsage04/07/24 22:41
- 確かにね、欲しいと思う事はよくある。
下手に言語仕様を膨らませないためだとは思うんだけどね…
- 801デフォルトの名無しさんsage04/07/24 22:43
- ま、俺の場合は自分自身の型を返す場合と言うよりは、
他のクラスでも同様の記述を行う場合があるようなときかな。
- 802デフォルトの名無しさんsage04/07/24 22:44
- リフレクションじゃだめなの?
- 803デフォルトの名無しさんsage04/07/24 22:54
- 全く代用にならん。
もちろん場合によっては使えない事もないけど。
- 804デフォルトの名無しさんsage04/07/25 10:21
- >>803
どうしてリフレクションじゃダメなんだ?
代用にならない例を教えてくれ。
- 805デフォルトの名無しさんsage04/07/25 10:28
- >>804
例を見れば分かるけど、求められているのはコンパイル時に解決しうる静的なもの。
よりスマートなコードを作りたいわけだ。
で、リフレクションはもともと動的にあれこれするものだし。
//そんなに出番のない余計な実装(言語の無闇な複雑化)という感じはする。
- 806デフォルトの名無しさんsage04/07/25 16:58
- class foo : IClonable {
:
public foo Clone () { ... }
public object IClonable.Clone () { return this.Clone () ; }
:
}
みたいな奴を書くとき、
public thisclass Clone () {...}
とか書けると、class 名を書き換えたりしたときにちょっとだけラクできる…って事なのかしらん…
# STL とかは typedef で逃げてるかな
- 807デフォルトの名無しさんsage04/07/25 17:02
- クラス名なんて変えないし
- 808デフォルトの名無しさん04/07/26 01:50
- フォームから別のフォームを開いた場合、最初のフォームを閉じると、呼び出された新フォームも閉じますよね。
最初のフォームを閉じた際に、開いた新フォームをメインフォームとして使うにはどうしたらいいんでしょうか?
- 809デフォルトの名無しさんsage04/07/26 02:19
- ApplicationCOntextを引数にとるApplication.Runを使って開始。
メインフォームを変える際にApplicationContextのプロパティを変更。
- 810808sage04/07/26 02:41
- >>809
できました。ありがとうございます。
- 811デフォルトの名無しさんsage04/07/26 07:52
- そういう時に、
Form1 firstForm = new Form1();
firstForm.ShowDialog();
Form2 mainForm = new Form2();
Application.Run(mainForm)
とやる俺はヘタレですか?
- 812デフォルトの名無しさんsage04/07/26 11:52
- 書いててふと思ったのですが
// 読み取り中
intdata;
while (-1 != (data = readStream.ReadByte()))
{
writeStream.WriteByte((byte)data);
}
これ遅いですか?
- 813デフォルトの名無しさんsage04/07/26 12:07
- ループ内でキャストしない方法を考えて見ると良いかも。
- 814812sage04/07/26 12:25
- 原因はキャストか
MSIL だとチェックが入ってたような気がするけど、それが遅いのかな?
回避策……「BinaryReader で ReadByte、末尾は例外待ち」しか考え付かない
バイナリじゃなかったら StreamWriter.ReadToEnd とか使えるけど (確かそっちの方が速かった)
流されるデータがバイナリの場合があるので、Stream じゃないと変な変換入りそうで
- 815デフォルトの名無しさんsage04/07/26 12:43
- こうするんだよ。
const int buffer_size = 1024*1024; // 1Mバイト
byte [] buffer = new byte [buffer_size];
int got;
do {
got = iStream.Read(buffer, 0, buffer_size);
oStream.Write(buffer, 0, got);
} while (got != 0);
- 816デフォルトの名無しさんsage04/07/26 12:50
- >>815
ごめん、最後まで Stream.Write の 3 番目の引数に気づかなかった
普段 Stream なんて使わないから_| ̄|○
- 817デフォルトの名無しさん04/07/26 23:52
- 1Mものバッファを使わないでくれ…
- 818デフォルトの名無しさんsage04/07/26 23:56
- ちなみに2〜8Kくらいが速度的にベストなバッファサイズ。
大きすぎると逆に遅くなる。
- 819 ◆FLAlLDIW4w sage04/07/27 00:35
- > 一行で素敵な人生を送れます。
>
> MyLife.Idle += new EventHandler(TieUpLooseEnds);
- 820デフォルトの名無しさんsage04/07/27 12:18
- >>818
C# だとそうなんだ。
C++ で大きい(数M〜2G程度)ファイルのコピーのときにはハードディスクの
内部バッファ(512K程度が多い?)あたりを指定するのが一番速かったけど。
- 821デフォルトの名無しさんsage04/07/27 12:33
- メニューに CTRL-ALT-A のような、Ctrl キーと ALT キーを同時に押すことを
あらわすショートカットキーを指定するにはどうすればよいのでしょうか?
System.Windows.Forms.Shortcut 列挙体に定義がない。ということは WinForm アプリでは
Ctrl-Alt-A とかいうショートカットキーは定義できない?
Alt 単独の場合も数字(ALT-0 から ALT-9 まで)しかなく ALT-X とかを定義できないようなのですが..
C# というか WinForm の話なので、スレ違いならご指摘ください。
- 822デフォルトの名無しさんsage04/07/27 13:12
- >>821
Altを含む、またはF10を含むキーの場合(はShortcutでいいか)、
ProcessCmdKeyをオーバーライドしてWM_SYSKEYDOWNを受け取ったときに動作を実装。
メニュー項目には\tの後にショートカット文字を手書き。
- 823デフォルトの名無しさんsage04/07/27 13:21
- >>822
Alt-X は自分で実装ということですね。
Ctrl-Alt は SYSKEYDOWN にならないので、そちらは WM_KEYDOWN を使う。と。
なんでこんな中途半端なんだろう。
で、ctrl-alt はヨーロッパではアクセント付文字の入力にも使うので、RigthAlt と
Ctrl-LeftALt を別処理しなきゃいけないのだが、このへんの情報をもしお持ちなら..
Win32/MFC だとアクセラレータがこの処理をやってくれるんだけど、WinForm のメッセージ
ポンプに TranslateAccelarator を押し込むことってできましたっけ?
- 824デフォルトの名無しさんsage04/07/27 14:14
- >>823
そっち方面には全く詳しくないので何とも言えないけど、
.NET Frameworkと簡単なP/Invokeで済ますなら
メッセージ/イベントを捕まえたときにGetKeyState関数でチェックするとか?
- 825デフォルトの名無しさん04/07/27 15:51
- C# + .NET Framework で作成するアプリケーションで作成する
アプリケーションで,そのアプリケーションを
タスクマネージャや,その他のランチャソフトから終了しようと
した場合に,それを感知する事はできますか?
自分のアプリケーションの中からの終了の時の処理と
外から終了させられる時の処理を変更させたいのですが….
- 826デフォルトの名無しさんsage04/07/27 18:55
- for(int i=0; i< array.Length; i++) array[i] = i;
みたいなことをforeachで書き換えられますか?
- 827デフォルトの名無しさんsage04/07/27 20:39
- Formの上にPanelを上下に2つおいてSplitterでサイズ変更
できるようにしたいんだけどうまくいかない・・・
上のPanelのDockをFillにしたいんだけど、どうすればいい?
- 828デフォルトの名無しさんsage04/07/27 20:48
- >>827
そんなあなたにSplitContainer。
てのはおいといて、何がどううまくいかないのかさっぱり分からないのだけれど?
- 829デフォルトの名無しさんsage04/07/27 21:06
- >>828
サイズ変更が出来ない。
- 830デフォルトの名無しさんsage04/07/27 21:12
- DockがFillでサイズ変更・・・?
- 831デフォルトの名無しさんsage04/07/27 21:15
- >>830
> DockがFillでサイズ変更・・・?
それは問題ない。
>>829
その説明でどう理解しろと言うのだろう……?
とりあえずまっとうに動くサンプルコード。
Splitterの大抵の問題はControlにAddする順番か。
下のコードもAddRangeの配列の順番を変えると……。
public class Hoge : Form {
public static void Main() {Application.Run(new Hoge());}
public Hoge() {
Panel p = new Panel();
Panel q = new Panel();
Splitter s = new Splitter();
p.BackgroundImage = Image.FromFile("a.bmp");
q.BackgroundImage = Image.FromFile("b.bmp");
p.Dock = DockStyle.Fill;
q.Dock = DockStyle.Top;
s.Dock = DockStyle.Top;
s.BorderStyle = BorderStyle.Fixed3D;
Controls.AddRange(new Control[]{s, q, p});
}
}
- 832デフォルトの名無しさんsage04/07/27 21:17
- あー、DockStyleはご要望だとBottomになるか。
- 833デフォルトの名無しさんsage04/07/27 21:23
- >>827
1. Panelを下に配置。DockをBottom
2. Splitterを配置。 DockをBottom
3. Panelを上に配置。DockをFill
順番が肝心。後でもできるがややこしくなったりしてしまう。
- 834デフォルトの名無しさんsage04/07/27 21:40
- >>831-833
うまく動きますた。サンクス!
- 835 ◆FLAlLDIW4w sage04/07/27 21:50
- コントロールの位置関係は、Controlsの末尾から先頭に向かって順番に描画される
イメージさえ持っておけば全てが分かる。
領域が重なったコントロール同士は、
より先頭に近いほうがより手前に見える。
同じDockプロパティを持つコントロール同士は、
より末尾に近いほうがより外側に配置される。
DockStyle.Fillスタイルを持つコントロールより先頭側には、
DockStyle.None以外のスタイルを持つコントロールを置いてはいけない。
- 836デフォルトの名無しさん04/07/27 22:09
- 自らのインスタンスをコピーする機能を実装する場合に
ICloneableインターフェイスをもつ形で明示的にclone()
を実装すると戻り値の型がObject型になり、使用する側で
キャストをかける必要があったりするわけだけど、なんか
他に良い方法は無いんでしょうかね。
VBなら別名としてICloneableのclone()をもちつつ、これを
別のclone()メソッドから呼ぶ方法があるみたいだけど、
C#でスマートな方法が無いものでしょうかね。
- 837デフォルトの名無しさんsage04/07/27 22:18
- >>836
えーと、明示的なインターフェースの実装っていうと
public class A : ICloneable {
object ICloneable.Clone() {...}
public A Clone() {...}
}
みたいのを指すと思うんだけどそういうことじゃないの?
- 838デフォルトの名無しさん04/07/27 22:27
- 普通にCloneメソッドも書けばいいだけ。
C#の明示実装はクラスのパブリックなインターフェイスからは消えるから、
名前を変えたりする必要なし。
- 839デフォルトの名無しさんsage04/07/27 22:39
- StringCollectionなんかは最大限に使ってるね。
IListやらの返値・パラメータがobjectのを全部stringにしたメソッド・インデクサ。
- 84083604/07/27 23:25
- >>837,838
明示実装すれば同名のメソッドが共存できるのを
すっかり見落としていました。
どうもありがd
- 841デフォルトの名無しさんsage04/07/27 23:37
- >>835
>>831のソースと思いっきり矛盾しているように見えるんだが。
- 842デフォルトの名無しさんsage04/07/28 00:04
- >>841
どこが?
Controls.AddRange(new Control[]{s, q, p});
DockがFillのpを最後に置いてるから矛盾はしてないと思うが
- 843デフォルトの名無しさんsage04/07/28 00:23
- > DockStyle.Fillスタイルを持つコントロールより先頭側には、
> DockStyle.None以外のスタイルを持つコントロールを置いてはいけない。
と
> DockがFillのpを最後に置いてるから矛盾はしてないと思うが
は明らかに矛盾しているように見えるんだが。
試してないんだが>>831のコードは本当に期待した通りに動くのか?
- 844843sage04/07/28 00:31
- ごめん勘違いスマソ逝ってきます
- 845デフォルトの名無しさんsage04/07/28 00:43
- 画面のプロパティで、画面のデザインのフォントをデフォルトのやつから変えているのですが、
作ったアプリケーションの中にあるTreeViewやListviewのフォントは
ちゃんとそのフォントで表示されるのですが、
途中で出すダイアログの中にあるラベルやComboBoxの文字だけは
デフォルト?のフォントのままで指定したフォントになりません。
指定したフォントにするには、どうすればよいのでしょうか?
- 846デフォルトの名無しさんsage04/07/28 00:45
- >>845
ComboBox.Fontプロパティは?
- 847デフォルトの名無しさんsage04/07/28 01:14
- >>846
ComboBoxを直接フォームに貼り付けたときは、
ちゃんと指定したフォントになるのですが、
ダイアログとか、ツールバーに乗せたComboBoxではだめなのです。
何かの設定をすると、いちいち全てのFontプロパティを設定しなくても、
指定したフォントになるんじゃないかと思うんですが・・・
- 848821sage04/07/28 02:53
- >>824
ご協力ありがとうございました。
そのあと調べましたが、MS としてはショートカットキーの組み合わせを絞る方針みたい。
ctrl-alt が Right-ALT にぶつかる問題が大きいのと、Ctrl や ALt とかが特定の
キーボード実装を前提にしているから。らしい。Java はどうやっているんだっけ。
こんなところ「だけ」抽象化されてもなぁ。
折角 TranslateAccelarator の内部で処理しているんだから、その機構を公開して
もらわないと。
VS, Office など MS 製品も ctrl-alt の組み合わせは多用しているのだが、MFC から
.NET に移行する際にどのように変更するのだろうか。
- 849821sage04/07/28 02:57
- >>824 に追伸
>メッセージ/イベントを捕まえたときにGetKeyState関数でチェックするとか?
それだけでは判断できないんです。
現在のキーレイアウトが Right-ALT をサポートしているかどうかの情報を
入手しないと判定できない。
公開 API には存在せず、TranslateAccelarator の内部で処理している。
- 850デフォルトの名無しさんsage04/07/28 03:53
- あのー >>825 はスルーなんでしょうか?
- 851デフォルトの名無しさん04/07/28 06:17
- Processとかで外部アプリ起動させたりする場合、ファイルパスとかに全角の特殊記号(【】)とかが入ってる場合に
エラーとか出ませんか?俺は出てるんですが、これはどうすれば回避できるんでしょうか?
- 85285104/07/28 06:29
- ちがった。特殊記号じゃなくて、空白スペースでした。
- 853デフォルトの名無しさんsage04/07/28 08:11
- 「"」で囲めば?
- 854デフォルトの名無しさんsage04/07/28 08:31
- >>851
そんなことは全くないが。
そもそもなんてエラーなのさ。
どんなコードなのさ。
- 855デフォルトの名無しさんsage04/07/28 11:49
- >>850
「自分のアプリケーションの中からの終了処理」って自分で書いてるんだから、
その場合だけフラグでも立ててやればいいんじゃない?
具体的には、「閉じる」「終了」等のメニューやボタンで自分で終了するとき、
および WndProc で WM_SYSCOMMAND 捕まえて SC_CLOSE で閉じられるとき、
とか。
- 856デフォルトの名無しさん04/07/28 12:11
- if ($hoge =~ /[^a-zA-Z0-9.]/)
# Perlで「hogeにa-zA-Z0-9.以外の文字が含まれていたら」の意味
これをC#で書くにはどうしたらいいですか?
正規表現クラスを見ても複雑すぎてよく分からない。
- 857デフォルトの名無しさんsage04/07/28 12:20
- if (Regex.IsMatch(hoge, "[^a-zA-Z0-9.]"))
言うほど複雑でもないけどね。
- 858デフォルトの名無しさんsage04/07/28 12:24
- RegexIsMatchに該当するページが見つかりませんでした。
"regexismatch"を含むページは見つかりませんでした。
検索のヒント
- キーワードに誤字・脱字がないか確かめてください。
- 違うキーワードを使ってみてください。
- より一般的な言葉を使ってみてください。
- 859デフォルトの名無しさん04/07/28 12:25
- モーダルダイアログを表示し、textBoxになにかを入力させて、OKを押すと閉じるように成っています。
OKボタンを押した時に、textBoxの内容が正しいかどうかを検証する処理を入れました。
でも、OKボタンには DialogResultが設定されているので、
OKボタンのClickされたときの関数を通ると、フォームが閉じられてしまいます。
エラーのあるときは、フォームを閉じないようにするにはどうしたらいいんですか?
- 860デフォルトの名無しさんsage04/07/28 12:26
- >>858 「.」が抜けているぞ。
- 861デフォルトの名無しさんsage04/07/28 12:26
- >>858
○ Regex.IsMatch
× RegexIsMatch
目が悪くて文字が読みにくいなら、コピペしたほうがいいよ。
- 862デフォルトの名無しさんsage04/07/28 12:27
- >>858
> RegexIsMatchに該当するページが見つかりませんでした。
いつのまにC#は素性の知れない関数を扱えるようになったんだ?
ttp://www.google.co.jp/search?num=100&lr=lang_ja&oe=utf8&ie=shift_jis&q=Regex.IsMatch
>>859
正しくなかったときはDialogResultを設定しなけりゃ良いんじゃ?
- 863デフォルトの名無しさんsage04/07/28 12:29
- 859
DialogResult を None にしておいて、
Click のハンドラでエラーが無いときだけ this.DialogResult = DialogResult.OK; とでもしてみては?
- 864デフォルトの名無しさんsage04/07/28 22:24
- >>820
藻前が自分のマシンだけで動かす物を作るならそれでいいんじゃないか?
公開して色んな人に使ってもらうなら、一般的に速いといわれる手法を取り入れるべきだが。
- 865デフォルトの名無しさんsage04/07/28 22:24
- >でも、OKボタンには DialogResultが設定されているので
自分で作ってんだろうに、何でそれをやめようとしないんだろう…
それともその動作を変えてはならない理由でもあるんだろうか…
- 866デフォルトの名無しさんsage04/07/29 00:28
- 雑誌でも買おうと思うんだが
C Magazineと.NET Magazineのどっちのほうがいいよ?
- 867デフォルトの名無しさんsage04/07/29 00:36
- C#は基本的に扱わないC Magazineと.NETは.NETでもVB.NETメインな.NET Magazineでは
このスレ的にはどっちもどっち
つか指向性がかなり違わないかその二つ
単純に比較できるもんでもない気が
- 868デフォルトの名無しさんsage04/07/29 01:12
- DDJとかなくなったのが痛い...
- 869866sage04/07/29 01:22
- >>867
じゃあ、おすすめの雑誌とかある?
- 870デフォルトの名無しさんsage04/07/29 01:28
- SD
- 871デフォルトの名無しさんsage04/07/29 02:24
- NikSof
- 872デフォルトの名無しさん04/07/29 12:49
- 不思議なことがあったので、聞いてくらはい。
RichTextBoxの文字属性変更をできるだけ高速にしたかったので、
SendMessageでEM_SETSELしながら変えてました。
開発機(XP Home)だと普通に動いていたんですが、これをXP Proへ持っていくと
選択位置がずれて、文字属性がばらばらになってました。どうやらASCIIだと
いいんだけど、日本語だと駄目みたいで、要するに文字数じゃなくてバイト数扱いで
文字選択がされてたみたいでした。
実際SendMessageWにしてやると、正常動作しました。要するに何故かProの方では
Unicodeで動作していなかったみたいなんです。
そもそもSendMessageはOSによって勝手にA系かW系か判別して動くものと
思ってましたが、何でしかもHomeとProなのにこんな違いが出たんでしょうか??
そんなことってあるの??
- 873デフォルトの名無しさんage04/07/29 16:13
- 初歩的な質問になってしまうのですが、下記の2つのプログラムの実行結果が異なることが納得いきません。
誰か詳しく教えていただけないでしょうか?
int main(void)
{
double a;
a = 5 / 2;
printf("5÷2 = %f\n", a);
return(0);
}
実行結果:2.000000
int main(void)
{
double a, b;
a = 5;
b = 2;
printf("a÷b = %f\n", a / b);
return(0);
}
実行結果:2.500000
- 874デフォルトの名無しさんsage04/07/29 16:21
- >>873
最初の a = 5/2; は、整数で演算された結果をdouble型のaに入れてる(計算時点では整数)。
次の a/b は、演算する前からdouble型ってことでは?
- 875873age04/07/29 16:25
- 最初に
double a;
a = 5 / 2;
と宣言されているのに計算は整数になってしまうんですか?
そのへんがよく分からないんです。
- 876デフォルトの名無しさんsage04/07/29 16:32
- >>875
a = 5.0/2.0;
a = (double)5/2;
なら上も2.5になる。
数字を書いたときに、小数点を書かなかったら自動的に整数扱い。
手続きとしては、
1.与えられた数値(5と2)を計算する
2.計算結果をaに代入する
だから、aをdoubleで宣言しても、計算時に5と2は整数のまま。
- 877デフォルトの名無しさんsage04/07/29 16:35
- 君が書いた 5/2 の 5 と 2 は
あくまで"整数"なんだよね。
すると当然少数以下は無視される(ここはわかるよね?)から、
5/2 == 2 ということになるんですな。
つまり、
double a = 5/2; というのは、
double a = 2; と等価なわけで、
結果は2.00000...になると。
- 878デフォルトの名無しさんsage04/07/29 16:36
- >小数点を書かなかったら自動的に整数扱い。
ちゃんと宣言時に
double a = 5;
みたいに、型を明記してやれば、小数点なしでもdoubleになるけど。
- 879デフォルトの名無しさんsage04/07/29 16:36
- うを、のろのろ書いてたら被った。
- 880873age04/07/29 16:38
- 奥が深いと言うか、謎が多いんですね。
どうもありがとうございます。
- 881デフォルトの名無しさんsage04/07/29 16:50
- 言語違いにマジレスするなよ
- 882デフォルトの名無しさん04/07/29 16:59
- ダブルバッファリングっていうのを詳しく教えてください。
- 883デフォルトの名無しさんsage04/07/29 17:04
- >>882
バッファリングをダブルで行うことです
いろんな場所で使われていますが真っ先に思いつくのが描画関連
- 884デフォルトの名無しさんsage04/07/29 17:43
- http://www.google.co.jp/search?ie=UTF-8&q=%e3%83%80%e3%83%96%e3%83%ab%e3%83%90%e3%83%83%e3%83%95%e3%82%a1%e3%83%aa%e3%83%b3%e3%82%b0%e3%81%a8%e3%81%af
- 88588204/07/29 18:01
- 概念は分かりましたが、一時的に画像を溜めようとして
g = PictureBox1.CreateGraphics();
g.DrawImage(image2, rect,rect2, GraphicsUnit.Pixel);
とすると、PictureBoxが必要になります。
これを、メモリー上に置くにはどうしたら良いのでしょうか?
- 886デフォルトの名無しさんsage04/07/29 18:09
- >>885
C# でやったことないから自信ないけど、Bitmap クラスあたり使えると思う
- 887デフォルトの名無しさんsage04/07/29 19:37
- C#において、intは常に32bitでしょうか?
CPUが64bitの場合、64bitになりますか?
- 888デフォルトの名無しさんsage04/07/29 19:43
- >>887
C# (というか .NET Framework) において int は常に Systen.Int32 クラスのオブジェクト
つまり 32bit です
- 889デフォルトの名無しさんsage04/07/29 20:51
- >>878
スレ違いだがお前は分かってないだろ。
- 890デフォルトの名無しさんsage04/07/29 20:54
- >C# (というか .NET Framework) において int は常に Systen.Int32 クラスのオブジェクト
ちがうなあ、「C#において」 int は Systen.Int32構造体とイコール、で、
.NET Framework において Systen.Int32 は常に 32ビット、としないとおかしいなあ。
- 891888sage04/07/29 20:56
- >>889
878 を 888 の間違いとみて間違えたのは俺か?
……どうだろ?判っていないのかなぁ
- 892888sage04/07/29 20:58
- >>890
あ、ごめんクラスじゃなくて構造体だった
ついでに言うと「int」と「int 型の数値」を書き間違えてた
普段区別してないから尚更
ま、int は常に 32bit ということでFA?
- 893デフォルトの名無しさんsage04/07/29 20:59
- >>891
スレ違いといっているところから、>>888に対してではない事がうかがえよう。
- 894デフォルトの名無しさんsage04/07/29 21:01
- >>892
> (というか .NET Framework) において int は常に
に対して、.NET Frameworkにintはないと言いたいのだと思われ。
- 895888sage04/07/29 21:06
- >>894
それもそうだ
いや恥ずかしいところをお見せいたしましたOTL
- 896デフォルトの名無しさんsage04/07/29 23:24
- XML文書をReadで次のノードを読み込んだ後に
そのノードに戻ってくるっていうのはできないの?
微妙にわかりにくい文章スマソ。
- 897デフォルトの名無しさんsage04/07/29 23:44
- ユーザから文字列を受け取って、その文字列のインスタンスを生成するってことはできますか?
base_hogeクラスから、fooクラス、barクラスが派生しているとき、
ユーザの"foo"や"bar"の入力に応じ
base_hoge Base_Hoge = null;
Base_Hoge = new ユーザが渡したクラス名(コンストラクタ引数,…);
のようなことがしたいのですが、可能でしたらご教示願います。
検索しようにもどういったキーワードで検索するべきか迷ったのでここで聞かせて頂きました。
よろしくお願いします。
- 898デフォルトの名無しさんsage04/07/29 23:46
- >>897
リフレクション で検索
ちなみにmscorlibに入ってるクラスと実行中のアセンブリに入ってるクラス以外は
事実上不可能と見た方が良いかも。
- 899デフォルトの名無しさんsage04/07/30 00:07
- >>898それってどういう意味?
- 900デフォルトの名無しさんsage04/07/30 00:07
- >>897
Assembly.LoadWithPartialName() からの流れでどうでしょう?
アセンブリ名を決めうちにしない限り、
(アセンブリ名, クラス名)のセットで受け取る必要がある。
- 901897sage04/07/30 00:27
- リフレクション でぐぐったらズバリなサイトが見つかりました。
http://dobon.net/vb/dotnet/programing/createinstancefromstring.html
ですが、プロセスが複雑になる(メンバ関数呼び出しが面倒)気がするので、
素直に switch(userString){ ... } で実装した方がスッキリしそうです。
アドバイス頂きありがとうございました。
>899
Type.GetType(hoge) でTypeが取得できないってことでは?
- 902デフォルトの名無しさんsage04/07/30 00:38
- ああ、アセンブリ名指定せずにクラス名だけなのね…
あと勘違いしてるようだが、メソッドまでリフレクションで呼び出す必要はないぞ。
っていうか、呼び出す必要がないように作るのが普通。
Hoge_baseを継承してるんだろ?独自のメンバを呼び出したいんじゃないよね?
- 903897sage04/07/30 00:50
- >>902
書いてあることのうわべだけをすくって、いじくり回してみるのを忘れてました。
object tmp = type.InvokeMember(null,System.Reflection.BindingFlags.CreateInstance,null,null,new object[]{引数リスト});
でリフレクションでインスタンス生成して、あとはキャストして使えるんですね。反省。
- 904デフォルトの名無しさんsage04/07/30 22:42
- Docking Windowを再現するおすすめのコンポーネントありますか?
出来ればフォームデザイナでできるものがいいんですが・・・
Docking Suiteは使ってみましたが、自動的に隠れるようにしたときフェードしなかったのがいまいちでした。
- 905デフォルトの名無しさん04/07/30 23:34
- C#でWindowsサービス作ってるんですが、OnShutdownイベントが取れません。
CanShutdown を trueには設定してるんですが・・・
OnShutdownをoverrideするだけじゃ駄目なんでしょうか?
ぐぐってみてもイベント取れない話はあっても、解決方法が
見つからない・・・・
- 906デフォルトの名無しさんsage04/07/31 00:38
- C++からC#に移ったひとどうですか?
ここがよかったあれが出来ないとか感想聞きたいんですが...
- 907デフォルトの名無しさんsage04/07/31 00:44
- >>906
WindowsアプリでCやC++を使う場面は皆無になったね。ドライバはC
やC++で書いてるけど、アプリケーションはC#で充分いけると思う。
- 908906sage04/07/31 01:02
- んーなんつーか、次のような違いがあると思うんですよ.
C++:テンプレート、STL,BOOST使える。メモリマンドクサ。。NET実質使いずれ
C#:.NETつかえる。。NETしかつかえない。デリゲート、リフレクションとかも使える.テンプレート使えネ。
そこらへんでテンプレートのないC#に移るの躊躇してるんですけど、その辺は余り気にしませんでしたか?
- 909デフォルトの名無しさんsage04/07/31 01:17
- >>908
boostの中の何を使っているかによるのでは?
signal, function, regex なんかはC#言語仕様&ライブラリで
ある程度は代用になるっしょ。
個人的にはコンテナが型なしなのが気になるが、
キャストが一つ入るだけなので我慢している。
C#2.0が出たら解決されるしね。
- 910906sage04/07/31 01:22
- 派生させるのがマンドクサくてテンプレート多用してるんですけど、その辺はどうでしょう?
- 911906sage04/07/31 01:22
- 2.0は心待ちにしてマフ。。。
- 912デフォルトの名無しさんsage04/07/31 13:35
- テンプレートってアドホックな機能だから削除されたんでは?
- 913デフォルトの名無しさんsage04/07/31 14:06
- >>912
ソース何処、マジだったら急いでC++に戻さなきゃならないシステムがあんるんで・・・
- 914デフォルトの名無しさん 04/07/31 14:29
- C#のスキルがあるとC、C++も実質のスキルはなくともスキル有りと
みられるみたいだね。
CができるからといってC++ができるとはみられないし
その反対もそうだ。
C#のスキルを高めることはとてもPGとして幅を広げることになるだろう。
- 915デフォルトの名無しさんsage04/07/31 14:41
- >CができるからといってC++ができるとはみられないし
そりゃC++がCを完全に含んでいるからだろ、はみ出していればそう結論できんがな。
C++が使える⇒{Cが使える,C#は使えるか不明}
Cが使える⇒{C++は一部使える,C#は使えるか不明}
C#が使える⇒{Cは使えるか不明,C++は使えるか不明}
- 916デフォルトの名無しさんsage04/07/31 14:54
- おりゃC++つかいだが、Cでコード核自信ないぞ
あんなテンプレート内の使えるか
- 917デフォルトの名無しさんsage04/07/31 15:01
- >>916
それは
「おりゃC++つかいだが、Cでコード核自信ないぞ」=「C++が使えない」
って事です。
勝手に使えるなんて勘違いしちゃいけません。
- 918デフォルトの名無しさんsage04/07/31 15:34
- >917
C++で必要とされるすきるとCのそれとは別物だと思う.
元は一緒でもネ
- 919デフォルトの名無しさんsage04/07/31 15:42
- >>917
馬鹿?
- 920デフォルトの名無しさんsage04/07/31 16:05
- >>918
必死だな
- 921デフォルトの名無しさん04/07/31 16:53
- 「C++を使ってまともに仕事してるけど、Cのみの環境は
実戦経験がないので自信なし」
なんていうのはゴロゴロいそうだ。
「それをC++ができるとは言わない」って言いたいんだろうけど
ちょっとマニアックだな。
- 922デフォルトの名無しさん04/07/31 17:34
- なんだか変なのがいるな
C出来る C++やC#が出来るかどうかなんて不明
C++出来る Cが出来ない奴がC++出来るはずないだろ C#はCやC++と種類が違う
C#出来る VB出来るみたいなもん
Java出来る COBOL出来るみたいなもん
- 923デフォルトの名無しさんsage04/07/31 17:46
- C++使えると言うためにはCとの境界を理解して無いと駄目だそうだ。
- 924デフォルトの名無しさんsage04/07/31 17:47
- C++には名前空間があるけど、Cにはない。
- 925デフォルトの名無しさんsage04/07/31 17:49
- C++にはcoutがあるけど、Cにはない。
- 926デフォルトの名無しさんsage04/07/31 17:51
- C++には++があるけど、Cにはない。
- 927デフォルトの名無しさんsage04/07/31 18:03
- ウザ
- 928デフォルトの名無しさん04/07/31 18:23
- 裏バッファに色々な画像パーツを転送して貯めておき、本番で裏バッファから
Pictureboxに映すってことはできますか?
- 92992804/07/31 18:27
- やりたいことはシューティングゲームのようなものを目指しています。
- 930デフォルトの名無しさんsage04/07/31 18:29
- できる
- 93192804/07/31 18:39
- VBではBitbltでできたのですが、C#ではやり方がわかりません。
どなたか教えてください。
- 932デフォルトの名無しさんsage04/07/31 18:57
- すまん、PictureBoxじゃ無理かも。
FormだったらPaintイベント時に
GraphisオブジェクトのGetHDCメソッドでDCのハンドルが取得できるよ。
んでDllImportでBitBltを使えるようにすればいいんでない?
まあ試してないんでこれ以上はなんとも言えないのだが・・・。
- 933デフォルトの名無しさんsage04/07/31 19:02
- 動作が遅くてもいいのなら、Bitmap オブジェクトあたりに画像パーツをためておいて、
Graphics.DrawImage で良いんでないかい?
- 934デフォルトの名無しさん04/07/31 19:22
- Person 型の大きさ3の配列を作成し、それを周囲3人の名前と年齢で初期化し、foreach 文を使って年齢の合計を求めるプログラムを作りなさい。
課題1からもうわかりません。
- 935デフォルトの名無しさんsage04/07/31 19:26
- 課題は自分でがんばってやり遂げることに意味がある。
がんばれ。
- 936デフォルトの名無しさんsage04/07/31 19:37
- >>934
多分 Person 型には、人の名前と年齢が格納されているんだと思う
これが名前と年齢で初期化されるんだから
public struct Person {
string Name;
ubyte Age;
public Person (string name, ubyte age) { Name = name; Age = age; }
}
これで Person 型の定義は終わり
続いて、年齢の合計だけど、これは簡単で
Person[] member = { new Person("name1", age1), new Person("name2", age2), new Person("name3", age3) };
とかなっている Person 型の大きさ3の配列に対し
int sum = 0;
foreach (Person p in member) { sum += p.Age; }
とかすればいいと思う
- 937デフォルトの名無しさんsage04/07/31 20:00
- フォームでOffice2003のLook&Feelを実現しようとすると
市販のコントロールを使用しないといけないのでしょうか。
- 938デフォルトの名無しさんsage04/07/31 21:00
- >>937 仕事なら市販、趣味ならフリーもある。どっちにしても、素では無理。
- 939デフォルトの名無しさんsage04/07/31 21:20
- >>937
そんなもんトライアル版クラ・・・
だめか_| ̄|○
- 940デフォルトの名無しさん04/07/31 22:43
- >>936
ありがとう。できました。
foreachの使い方が?マークでいっぱいでした。
課題2は今頑張ってます。
行列の計算ってのがいまいちわからないけど。
- 941デフォルトの名無しさんsage04/07/31 23:01
- >>940
「ありがとう、できました。」って、>936 をそのまま使ったんだろ。
ちゃんと理解しておけよ。がんがれ。
- 942名無しさん♯sage04/07/31 23:38
- 次スレドゾー ( ゚д゚)ノ
http://pc5.2ch.net/test/read.cgi/tech/1091284402/l50
- 943デフォルトの名無しさん04/07/31 23:38
- 実数の2次元配列を使って以下の3行4列の行列と4行3列の行列を表現し、その行列の積である4行4列の行列を求め表示しなさい。
0.5 8.4 3.4 0.4 3.3 3.4 2.0
2.1 2.5 3.5 × 1.1 1.8 1.9 1.9
8.4 3.2 4.5 3.4 3.8 2.0 2.5
3.3 2.9 1.0
static void Main(string[] args)
{
double[,] jissuu1 = {
{0.5,8.4,3.4},
{2.1,2.5,3.5},
{8.4,3.2,4.5},
{3.3,2.9,1.0}};
double[,] jissuu2 = {
{0.4,3.3,3.4,2.0},
{1.1,1.8,1.9,1.9},
{3.4,3.8,2.0,2.5}};
double[,] sum = new double[4,4];
for(int i=0;i<=2;i++)
{
for(int j=0;j<=3;j++)
{
sum[i,j] = jissuu1[i,0] * jissuu2[0,j];
sum[i,j] += jissuu1[i,1] * jissuu2[1,j];
sum[i,j] += jissuu1[i,2] * jissuu2[2,j];
Console.WriteLine(sum[i,j]);
}
}
できたっぽいです。もっとうまくやる方法があれば教えていただけないでしょうか。
- 944デフォルトの名無しさんsage04/07/31 23:40
- >>938
>>939
やはり外部のコントロール必要っすか。
自分で作る!という選択肢もあるんですが・・・
とりあえずフリーの試してみます。
- 945デフォルトの名無しさんsage04/07/31 23:52
- DotNetBarのバージョン3.2ってどっかにない?
一応Internet Archiveとかあさってみたけど3.1.0.0までしかなかったorz
- 946デフォルトの名無しさん04/08/01 00:58
- リテラルにできる型と、変数にしか出来ない型って、どんなのがありますか?
- 947デフォルトの名無しさんsage04/08/01 01:09
- …newを書かずにインスタンスを作成できる型のこと?
数値型、文字列型くらいじゃないの?ヘルプ見た方が早そうだが。
- 948デフォルトの名無しさんsage04/08/01 01:10
- >>943
内積を計算するサブルーチンとか
転置行列を計算するサブルーチンとか
- 949デフォルトの名無しさん04/08/01 01:36
- C# で,あるディレクトリ内に存在するファイルの数とそのファイルの
合計サイズを求めたいのですが,ファイル数を求める,ディレクトリ内の
ファイルサイズの合計を求めるメソッドがあれば教えてください.
- 950デフォルトの名無しさん04/08/01 01:44
- 今、絵描きソフトを作っているのですが、
System.Drawing.Pen mypen =new Pen(Color.Red,this.trackBar1.Value);
これで太さは設定できるようになっているのですが、
色の指定がどうやったらいいのか全くわかりません。
どなたか教えてください。
- 951デフォルトの名無しさん04/08/01 01:45
- すいません、間違ってました。
補足します。
ColorDialog等で指定したいろにペンの色を設定したいのですが、
いくらがんばってもうまくいきません。
- 95294604/08/01 01:58
- http://www-ise2.ist.osaka-u.ac.jp/~iwanaga/programming/csharp/st_embeddedtype.html
ここを見てたらなんか混乱しちゃったんです。
たとえば、Console.WriteLine("Hello World"); の "Hello World" は文字列リテラル(定数)ですよね。
で、
string s = "Hello World";
って変数 s に代入した場合、「変数 s に、定数 "Hello World" を代入」っていうことでいいんでしょうか?
constが付いた変更禁止なものだけが定数だと思ってたんですが、違うんでしょうか。
- 953デフォルトの名無しさんsage04/08/01 02:04
- >>952
>string s = "Hello World";
この式で変更されているのは s だけなので特に不思議は無いかと。
- 954デフォルトの名無しさんsage04/08/01 02:05
- >>951
もうちょっと具体的な説明よろ。
- 955デフォルトの名無しさんsage04/08/01 02:10
- >>951
ColorDialog dialog = new ColorDialog();
dialog.ShowDialog();
System.Drawing.Pen mypen =new Pen(dialog.Color,this.trackBar1.Value);
でどうでしょうか?
- 956デフォルトの名無しさん04/08/01 02:12
- private void Form1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
System.Drawing.Pen mypen =
new Pen(Color.Red,this.trackBar1.Value);
for(int i=1; i<maxpoints;i++)
{
e.Graphics.DrawLine(mypen, points[i-1],points[i]);
}
}
これで、トラックバーを使ってペンの太さを設定できる状態になっていて、Color.Redと
ペンの色は赤色と定義されています。
これだとペンの色が赤しか使えないので、ColorDialogを使ってユーザーがペンの色を設定できるようにしたいのです。
private Color getColor()
{
Color myColor = new Color(); // 色情報格納用
// 【色の設定】ダイアログの【OK】ボタンが押されたとき
if(colorDialog1.ShowDialog() == DialogResult.OK)
{
myColor = colorDialog1.Color; // 色情報の引渡し
}
return myColor; // 戻り値
}
- 957946sage04/08/01 02:19
- >>953
int a = 30; //変数 a に定数 30 を代入
int b = 40; //変数 b に入っているのは定数 40
Console.WriteLine( 30 + 40 ); //定数 30 と 40 を計算
Console.WriteLine( a + b ); //変数 a と b を計算
Console.WriteLine((a+b.ToString())); //変数 a と bを計算して文字列定数にする
こういう感じで理解してOKなんでしょうか。
- 958デフォルトの名無しさん04/08/01 02:19
- >>955
ありがとうございます。
試してみます。
- 959946sage04/08/01 02:25
- Console.WriteLine((a+b).ToString()); //変数 a と bを計算して文字列定数にする
です。括弧の位置間違えました。
- 960デフォルトの名無しさんsage04/08/01 02:26
- >>957
んー、30とか40を”定数”と考えるんじゃなくて、
単純に”値”でいいんじゃないの?
あと、5行目は「3040」という文字列になるよ。
- 961デフォルトの名無しさんsage04/08/01 02:26
- >>959
了解
- 962デフォルトの名無しさんsage04/08/01 02:29
- >>943
改悪サブルーチンにしてみた
static double[,] MulMatrix(double [,]left,double [,]right){
if(left.GetLength(1) != right.GetLength(0) || left.GetLength(0)*right.GetLength(1)*left.GetLength(1) == 0)
throw new System.ArgumentException("ボケか?計算できねぇよ、マジ頭わりぃんじゃねぇの") ;
double[,] result = new double[left.GetLength(0),right.GetLength(1)] ;
for(int i=0;i<left.GetLength(0);i++)
for(int j=0;j<right.GetLength(1);j++)
for(int k=0;k<left.GetLength(1);k++)
result[i,j] += left[i,k]*right[k,j] ;
return result ;
}
- 963デフォルトの名無しさん04/08/01 02:31
- private void Form1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
System.Drawing.Pen mypen =
new Pen(○○○○,this.trackBar1.Value);
for(int i=1; i<maxpoints;i++)
{
e.Graphics.DrawLine(mypen, points[i-1],points[i]);
}
}
private void menuItem11_Click(object sender, System.EventArgs e)
{
ColorDialog dialog = new ColorDialog();
dialog.ShowDialog();
}
こんな感じでやろうと思ってるんですがうまくいきません。。
これだけで三時間以上なやんでる・・・。
どうしたらいいんでしょうか。
- 964デフォルトの名無しさんsage04/08/01 02:36
- >>963
フォームにPenオブジェクトを持っておいて
ColorDialog dialog = new ColorDialog();
dialog.ShowDialog();
mypen.Color = dialog.Color;
でいいんじゃない?
- 965デフォルトの名無しさん04/08/01 02:41
- 画像のURLを指定して、それをC#のWindowsアプリケーション内に
表示するにはどうしたらいいでしょうか。
ファイルをDLしてそれを表示→インスタンスが複数あるときに微妙
Webブラウザを組み込んで表示→画像のためだけにCOM埋め込むのが微妙。
単純にファイル名を指定してpictureBoxにセットするかのように
URLを指定できる方法ってないでしょうか?
- 966デフォルトの名無しさん04/08/01 02:42
- 絵画するたびに、Form1_Paintが呼び出されるので、この部分をどうにかしてやらないといけないのです。
根本的にだめなのかな。。。
- 967デフォルトの名無しさんsage04/08/01 03:06
- >>966
つまりね、Form1_PaintでPenオブジェクトを毎回作るんじゃなくて、
クラスのメンバとして保持しとけばいいかと。
んで、コードは↓のような感じ。
private void Form1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
for(int i=1; i<maxpoints;i++)
{
e.Graphics.DrawLine(mypen, points[i-1],points[i]);
}
}
private void menuItem11_Click(object sender, System.EventArgs e)
{
ColorDialog dialog = new ColorDialog();
dialog.ShowDialog();
mypen.Color = dialog.Color;
}
- 96896504/08/01 03:17
- 自己解決しました。
解決方法を1行で書くとこんな感じ。
pictureBox1.Image = new Bitmap(new WebClient().OpenRead("http://hoge/image.png"));
- 969デフォルトの名無しさん04/08/01 03:19
- >>967さん
名前 'mypen' は クラスまたは名前空間 'System.Drawing.Drawing2D.WindowsAplication4.Form1' に存在しません。
型または名前空間名 'mypen' が見つかりませんでした。ディレクティブを使うかアセンブリ参照を使ってください。
こんなのがでました…。
本当に素人ですいません…。
明日の朝にはできないとまずいのでがんばってるんだけど、C#はやっぱりわからない…。
- 970デフォルトの名無しさんsage04/08/01 03:25
- >>969
どっかにソースをうpすれば、メモ付きで修正してやるが。
- 971デフォルトの名無しさん04/08/01 03:30
- >>970さん
ttp://smash.s68.xrea.com/uploader/filez/820.txt
うpしました。
よければお願いします。
- 972デフォルトの名無しさんsage04/08/01 03:41
- >>971
とりあえずmypenは初期化できた。
で、testメニューから色を選択して、キャンパスに線を引くと、
既に書かれていた線も、新しく選択した色で書き直されるんだけど、これはOKなの?
- 973デフォルトの名無しさんsage04/08/01 03:43
- http://smash.s68.xrea.com/uploader/filez/821.txt
>>971
21行目と85行目でmypen初期化。
- 974デフォルトの名無しさんsage04/08/01 03:44
- > 名前空間 'System.Drawing.Drawing2D.WindowsAplication4.Form1' に存在しません。
俺はこんな名前空間に住むのはごめんだな。
- 975デフォルトの名無しさんsage04/08/01 03:46
- 確かに香ばしいネームスペースのネスト。
- 976デフォルトの名無しさん04/08/01 03:52
- >972-973
ありがとうございます。おかげで明日はなんとかなりそうです。
既に書かれた線も新しい色になっちゃいますが、なんとか大丈夫…
だと思います。ありがとうございます。そこまでになると全くわかりそうにないんで…。
>>974-975
課題で出すだけなんでもう適当です。
すいません。
- 977デフォルトの名無しさんsage04/08/01 13:58
- >>949
MSDNが手元にありますよね。検索かければ出てきます。
適切な語句の使用と、検索結果から的確に情報を拾い上げる
センスを磨いておくのは大切なことです。
- 978デフォルトの名無しさん04/08/01 16:03
- >>977
検索かけましたが見付けられませんでした.
私にはセンスが無いようです.
ちなみに,どのようなキーワードで検索したか
教えて頂けませんか?
- 979デフォルトの名無しさんsage04/08/01 16:05
- >>978
http://dobon.net/vb/dotnet/file/foldersize.html
- 980デフォルトの名無しさんsage04/08/01 16:24
- このページいい感じ
http://www.microsoft.com/japan/msdn/net/general/win32map.asp#win32map_alphalist
- 981デフォルトの名無しさんウゼェとかゆわんでくれ04/08/01 19:22
- >>978
>>979が答えを示してしまいましたが、
MSDNでの検索では「ファイル ディレクトリ サイズ 取得」
という単語を用いたところ、
File, Directory, FileInfo, DirectoryInfo
が見つかります。
必要な情報をたぐりよせていくセンスは、
みがけば誰でも修得できるものです。(宝石が初めから
光ってはいないのと同じように)
我々プログラマーは、これらのリテラシーを軽んじるべきではありません。
- 982デフォルトの名無しさんsage04/08/01 19:56
- >>981
特に異論はないんだけど、センスを磨くと言うより
検索方法がMSのHELPに特化していくだけの気もする。
- 983デフォルトの名無しさんsage04/08/01 20:06
- >>982
同感
- 984デフォルトの名無しさんsage04/08/01 20:17
- /// デザイナ サポートに必要なスレです。このスレの内容を
/// コード エディタで変更しないでください。
- 985デフォルトの名無しさんsage04/08/01 20:19
- >>984
コードエディタでどうやって変更するのかと小一時間問い詰めたい
- 986デフォルトの名無しさんsage04/08/01 20:21
- >>985
板の管理人に頼んでdatファイルを(ry
- 987デフォルトの名無しさんsage04/08/01 20:53
- 987
- 988デフォルトの名無しさんsage04/08/01 20:54
- 次スレ
http://pc5.2ch.net/test/read.cgi/tech/1091284402/
- 989デフォルトの名無しさんsage04/08/01 20:55
- ここも次スレ
http://pc5.2ch.net/test/read.cgi/tech/1065535118/
- 990デフォルトの名無しさんsage04/08/01 20:55
- 990
- 991デフォルトの名無しさんsage04/08/01 21:00
- ヽ(・∀・)ノ●ウンコー
- 992デフォルトの名無しさんsage04/08/01 21:15
- 992getttttttttttttttttttttttttttttttttttt+++++++++!!!
>>998 考えるのも面倒くさい。
>>999 ハァ?
>>1000 負け犬
>>1001 乙彼
- 993デフォルトの名無しさんsage04/08/01 21:20
- そろそろ埋め時
- 994デフォルトの名無しさんsage04/08/01 21:22
- ヌルリ
- 995デフォルトの名無しさんsage04/08/01 21:25
- >>992
自分がゲトしたいから牽制している罠
- 996デフォルトの名無しさんsage04/08/01 21:27
- 996
- 997デフォルトの名無しさんsage04/08/01 21:28
- ぬるぽ
- 998デフォルトの名無しさんsage04/08/01 21:28
- 997
- 999デフォルトの名無しさんsage04/08/01 21:28
- !
- 1000デフォルトの名無しさんsage04/08/01 21:30
- 1000
- 10011001Over 1000 Thread
- このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
- 275KB (281989Byte)
- dummy_for_searchRef