C♯相談室 Part29
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/02/03(金) 09:07:25過去スレは>>2-5あたり。
関連リンク
http://onigiri.s3.xrea.com:8080/csharp/index.php?%5B%5B%A5%EA%A5%F3%A5%AF%5D%5D
0002デフォルトの名無しさん
2006/02/03(金) 09:09:05Part27 http://pc8.2ch.net/test/read.cgi/tech/1131544541/
Part26 http://pc8.2ch.net/test/read.cgi/tech/1127063469/
Part25 http://pc8.2ch.net/test/read.cgi/tech/1122352650/
Part24 http://pc8.2ch.net/test/read.cgi/tech/1117631000/
Part23 http://pc8.2ch.net/test/read.cgi/tech/1112968209/
Part22 http://pc8.2ch.net/test/read.cgi/tech/1109630502/
Part21 http://pc5.2ch.net/test/read.cgi/tech/1106490240/
Part20 http://pc5.2ch.net/test/read.cgi/tech/1103005153/
Part19 http://pc5.2ch.net/test/read.cgi/tech/1100240847/
Part18 http://pc5.2ch.net/test/read.cgi/tech/1096112588/
Part17 http://pc5.2ch.net/test/read.cgi/tech/1091284402/
Part16 http://pc5.2ch.net/test/read.cgi/tech/1087297504/
Part15 http://pc5.2ch.net/test/read.cgi/tech/1083066815/
0003デフォルトの名無しさん
2006/02/03(金) 09:09:49Part13 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
0004デフォルトの名無しさん
2006/02/03(金) 09:14:48父「詳細キボーヌ」
母「今日はカレーですが、何か?」
兄「カレーキターーーーーーーーー」
妹「キターーーーーーーーーー」
姉「カレーごときで騒ぐ奴は逝ってヨシ」
母「オマエモナー」
父 --------終了-------
兄 --------再開-------
妹「再開すなDQNが!それより肉うpキボンヌ」
母「ジャガイモうp」
姉「↑誤爆?」
兄「タマネギage」
父「ほらよ肉>家族」
妹「神降臨!!」
兄「タマネギage」
母「糞タマネギageんな!sageろ」
兄「タマネギage」
姉「タマネギage厨uzeeeeeeeeeeee!!」
母「ageって言ってればあがると思ってるヤシはDQN」
セールスマン「イタイ家族がいるのはこの家ですか?」
母「氏ね」
父「むしろゐ�`」
兄「タマネギage」
妹「兄 、 必 死 だ な ( 藁 」
0005デフォルトの名無しさん
2006/02/03(金) 10:37:01だけ読んだ。
0006デフォルトの名無しさん
2006/02/03(金) 13:57:17なんかWikiがえらいことになってないか
0007デフォルトの名無しさん
2006/02/03(金) 14:34:470008デフォルトの名無しさん
2006/02/03(金) 14:43:570009デフォルトの名無しさん
2006/02/03(金) 15:29:08WindowsアプリケーションでDataGirdViewを使っています
DataSourceにDataTableを割り当ててデータを表示することはできました
表示されたセルのデータ毎に異なった編集用コントロールを割り当てたいです
一つの列で違う編集コントロールを使いたいのでColumnのColumnTypeの設定では実現できません
セル単位で編集用コントロールを設定することはできないのでしょうか?
0010デフォルトの名無しさん
2006/02/03(金) 16:26:44ボタン2が押されたらそのスレッドを停止するコードはどう書けばいいのでしょうか?
private void button1_Click(object sender, System.EventArgs e)
{
System.Threading.Thread.CurrentThread.Name = "メインスレッド";
Thread t = new Thread(new ThreadStart(my_sub));
t.Start();
}
private void button2_Click(object sender, System.EventArgs e)
{
????
}
????をどう書けばいいかということです。
t.Abort(); では駄目ですよね
0011デフォルトの名無しさん
2006/02/03(金) 16:55:02tをメンバ変数(関数の外で定義)に汁。
0012デフォルトの名無しさん
2006/02/03(金) 16:59:26止めたいときはそのオブジェクトにとめやがれと通知。
スレッド実行メソッドは定期的にやめろといわれて無いか確認。言われてたら自身で終了。
Abortなんて下策。
0013デフォルトの名無しさん
2006/02/03(金) 17:17:030014デフォルトの名無しさん
2006/02/03(金) 17:25:56コードでできるけど?
DataGridViewCellCollection.Itemは読み書き両用プロパティだ。
>>13
URL取得するのが精一杯なような。
GetUrlCacheEntryInfo関数でキャッシュファイルを取得できるかもしれないけど。
001513
2006/02/03(金) 19:03:09>URL取得するのが精一杯
う〜む二度手間みたいになってしまうのが残念
GetUrlCacheEntryInfo関数ってのは初めて見たので調べてみます、ありがとうございました
0016デフォルトの名無しさん
2006/02/03(金) 20:59:21ttp://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_007/cs2_007_03.html#cs0707
>参照型は、objectなどのスーパークラスにキャストしても、もとの型に再キャストすれば、完全にもとどおりの機能を取り戻す。
というのは何故ですか?
0017デフォルトの名無しさん
2006/02/03(金) 21:02:26がそのサイトの説明は間違ってるな。
参照型でも型変換演算をオーバーロードすれば不可逆変換は起こりうる。
0018デフォルトの名無しさん
2006/02/03(金) 21:08:58ありがとうございました。
感覚的にいうと、派生クラスで定義したメンバ変数などは、
キャストで切り捨てられるイメージだったんですが、
インスタンスが同じならなんでキャストするの?って考えまして、
「より汎用的にオブジェクトを使えるように」って思いついたんですが、
問題ないですか?
0019デフォルトの名無しさん
2006/02/03(金) 21:16:05例えば「何でも入れられる」コレクションのためにArrayListがある。
Addの引数はobject型だが、もしobjectにキャストできないのならobject型で無い全てのオブジェクトが入れられなくなってしまう。
0020デフォルトの名無しさん
2006/02/03(金) 21:26:18ちょうどArrayListクラスのコンストラクタを例に考えていたので、
納得できました。
ありがとうございました。
0021デフォルトの名無しさん
2006/02/03(金) 23:49:02会社で開発系オンラインコミュニティの利用を啓蒙し勤務時間中のアクセス許可を勝ち取ろうと思っています
※我が社はネット完全監視+アクセスできるサイトはデフォルト無しで部署単位に許可を得て追加してもらう形式
いくつかの開発系コミュニティがありますが、当初は1つだけと指定されているためどれを選ぶべきか悩んでいます。
目的はC♯を使用した.NET開発全般です
ここも魅力的なのですが、残念ながら2ch.netドメインの許可は下りないので他を探しています。
いくつか調べたところ、@IT(他の技術や記事も期待できる)、GDNJ(歴史が長く検索ヒット率が高い)、VSUG(新興だけどMVP運営なので安心)、MSDNフォーラム(VS2005と連携)あたりが良いと思いました。
この中で最もクオリティの高い情報が集まりそうな場所はどこでしょうか?
どれも魅力的で悩んでいますが、MVPの集まるVSUGか、シームレスなMSDNフォーラムに傾いています。
皆さんのご意見をお聞かせ下さい。
0022デフォルトの名無しさん
2006/02/04(土) 00:01:11VSUGはそれと逆。
MSDNはてもとにあるとして
GDNJ>VSUG>@IT>MSDNの順。
でも開発系でネット制限てあほな会社ですね。お察しします。
0023デフォルトの名無しさん
2006/02/04(土) 01:06:210024デフォルトの名無しさん
2006/02/04(土) 01:18:35002521
2006/02/04(土) 02:37:01参考になります。
会社は金融系で、私は社内システム開発部隊に所属しています。
情報系のサイト(MSDN Onlineなど)であれば比較的簡単に許可が下りるのですが、コミュニケーション系は非常に厳しいです。
過去に掲示板やblogで社内からマズい情報を発信した輩がいて情報管理部署がピリピリきています。
こういう状況下なのですが、やはり生の情報を得られるコミュニティサイトは我々開発の人間にはどうしても必要です。
そこで、いつも部署内で技術サポートやアーキテクトを担当する私と数人が中心となって啓蒙活動を行い、まずは部署内のコンセンサスを取ろうと思っています。
そのために「これは!」と思わせるようなコミュニティが必要なわけです。
これが単なる開発会社であればホントにアホな施策だと思います。
しかし我々の扱う情報が非常に面倒な(大事な)個人情報や資産情報であるため、そうは言えない部分もあります。
ちなみに一般のメッセンジャーは使用不可(社内用のメッセンジャーがある)で、社内メールも全て自動的に上司へコピーが渡るので私用メールはできません。
携帯電話やUSBメモリの持ち込みも厳しく、開発室の入口には専門の警備員(我々開発部隊の不正を監視するための…)がいたりします・・・
0026デフォルトの名無しさん
2006/02/04(土) 02:41:190027デフォルトの名無しさん
2006/02/04(土) 03:12:52Cも#も両方2バイト文字ならまだ分かるけど何故に#だけ2バイト文字なのか。
C#で検索してもスレが出てこないからスレ立たないほど人気ないのかと思ったよw
これは直した方がいいよ。
0028デフォルトの名無しさん
2006/02/04(土) 03:15:130029デフォルトの名無しさん
2006/02/04(土) 03:33:06いま調べてみたらどうやら2バイトでも「#」「♯」の二種類あって
前者の「#」の方だとC#としてでも検索出来るようだね。
まんどくせ〜仕様だなぁ…
0030デフォルトの名無しさん
2006/02/04(土) 03:45:50>>29
半年ROMってろ
0031デフォルトの名無しさん
2006/02/04(土) 03:51:350032デフォルトの名無しさん
2006/02/04(土) 05:23:48DataBindingができることと見栄えがよい程度でしょうか?
RenderModeをSystemにしても微妙に挙動が鈍い、IDEで編集していると画面が
よくバグるわで、ContextMenuのほうが個人的にはよかった。
0033デフォルトの名無しさん
2006/02/04(土) 09:29:46んだな
漏れもGDNJやらVSUGやらで回答してる
ここの名無しさんにもMSMVPやらINETJやらの構成員が大量にいんだろ
はい、手を挙げて
0034yy
2006/02/04(土) 10:24:13次のような、配列を返すWin32のDllがあり、
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
extern"C"__declspec(dllexport)void 配列を返すWin32のDll(double** 配列のアドレス)
{
(*配列のアドレス)=new double[2];
(*配列のアドレス)[0]=0.1;
(*配列のアドレス)[1]=0.2;
}
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
このdllをC#から呼び出すために次のようなコードを書きました。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
class 呼び出し側
{
[System.Runtime.InteropServices.DllImport("C:\\配列を返すWin32のDll.dll")]
static extern void 配列を返すWin32のDll(out double[] 配列のアドレス);
static void Main()
{
double[] 配列を受け取る変数;
配列を返すWin32のDll(out 配列を受け取る変数);
}
}
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
この方法では正しくデータを受け取る事が出来ませんでした。
どうか御教授をお願いいたします。
0035デフォルトの名無しさん
2006/02/04(土) 11:40:29はっきりいえばそんなエクスポート関数作るな。
というか、そんなエクスポート関数をもつdllがあったら文句をいったほうがいい
0036デフォルトの名無しさん
2006/02/04(土) 12:24:05出会い系の書き込みかとオモタ
003735
2006/02/04(土) 12:29:00・そもそもそのエクスポート関数はメモリリークしてる。
・必要な領域を確保するのは「呼び出す側」がするようにエクスポート関数は
実装すべき(というか一部例外を除きほとんどしなければならないレベル)。
説明すると長くなるんで説明しないが、メモリアローケーションはコンパイル
単位で異なるので不整合が発生するから。
だから修正としてはエクスポート関数を
extern "C" __declspec(dllexport) void Foo(double* pBuf);
C#を
static extern void Foo(double[] buf);
のようにする。
003835
2006/02/04(土) 12:35:49C#の名誉のために言っとくが、元のエクスポート関数でも呼び出せない
わけではないぞ。
public extern void Foo(ref IntPtr p);
でポインタをとってきてMarshal.PtrToStructureあたりで戻せばいい。
まぁメモリリークしてるが。それはC#のせいじゃない。
0039yy
2006/02/04(土) 12:56:40残念ながら配列を受け取る変数を書き換えなければならないような状況です。
004035
2006/02/04(土) 13:12:19んじゃ、開放用のメソッドも同時にエクスポートしているか(COMの方式だな)、静的領域で
開放の必要のないもの(まぁこの場合マルチスレッドで問題がよく発生するんだが)、
領域を特定の方法により確保していて開放することが可能な場合を除き、明確な
「バグ」なので、報告しとけ。コール回数が多い場合メモリがどんどん消費されて
落ちるから。
それと、元のエクスポート関数でもとりあえず追記でやり方は示したんだがな。
配列サイズが固定なら、
struct Foo { double a; double b; }
extern static void Bar(out IntPtr p);
で
IntPtr p; Bar(out p);
Foo value = MarshalPtrToStructure(p, typeof(Foo));
なんて取得してもいいし、可変なら、Marshal.Copyでマネージ配列にコピーしてから
MemoryStreamあたりにしてBinaryReaderでよめ。
めんどくさいんならunsafeコードでも使え。その場合そのまま書けるだろ。
0041デフォルトの名無しさん
2006/02/04(土) 13:27:330042yy
2006/02/04(土) 13:31:36IntPtrのアドレスから値を読んでいってArrayにコピーする作業を
[DllImport("win32.dll")]static extern void Foo(
[Out,MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.R8, SizeConst = 2,SizeParamIndex = 0)]
out double[] y
);
のような感じで書けないのでしょうか?
0043デフォルトの名無しさん
2006/02/04(土) 14:10:21まぁごにょごにょいったけど、それはつまり「そんな定義を持ったDLL関数はまずない」というわけで、
そもそもあなたが望んでいる機能(2段階以上のポインタマーシャリング)は必要性があまりないのね。
そのMarshalAs指定してダメなら難しい気がするけど。
あるいは struct Foo { double[] array; } みたいなのを通してref渡しだとどう?
0044yy
2006/02/04(土) 15:15:59structのref渡しは駄目でした。
[DllImport("win32.dll")]static extern void 配列を返すWin32のDll(ref double[] 配列のアドレス);
void Main()
{
double[] y=new double[1024];
配列を返すWin32のDll(ref y);
}
この様にしたらy[0]だけ正常な値が読み取れました。
0045デフォルトの名無しさん
2006/02/04(土) 18:02:19自分で字句解析をするしかないのでしょうか?
csvファイルはカンマで要素が区切られていますが、要素を""で囲まれている場合
カンマを含むことができます。
例)
foo,bar,hoge
hoge,"h,gae",hbar
0046デフォルトの名無しさん
2006/02/04(土) 18:09:48といいたいところだが C# csv でググレばいくらでも見つかる
0047デフォルトの名無しさん
2006/02/04(土) 18:25:45匿名デリゲートの内部からはそこから上のスコープの変数がすべて見えますよね。
これは、それらの変数をプログラム終了まで保存しているということなのでしょうか。
ということは、匿名デリゲートを使用する関数内ではローカル変数を使用しすぎない方が
いいのでしょうか。
0048デフォルトの名無しさん
2006/02/04(土) 18:38:49生成を別スレッドで行い、生成し終わったら
本スレッドに作成したコントロールを追加したいんですが
(本スレッドはUIため、重くしたくない)
別スレッドで作成したコントロールを追加って不可能?
invokeで追加すれば問題なし?
この辺ことがさっぱりわかりません。
動的にformにコントロールを追加したいけど
コントロール作成処理に時間かかるので裏で作ってから
追加したいんだが
0049デフォルトの名無しさん
2006/02/04(土) 18:42:12サンプルはありますか?
自分で作ったものでは配列の中に文字コードが入力されてしまい
正しく元データが認識されませんでした。
0050デフォルトの名無しさん
2006/02/04(土) 18:52:49Let'sTry!
0051デフォルトの名無しさん
2006/02/04(土) 19:17:09いんや、staticではない。
だからその匿名メソッドがGCの対象になったときに内部の変数も匿名メソッドからの参照がなくなる。
>>48
インスタンス作るだけなら基本的に問題ないよ。問題あるようにも作れるけど。
ハンドルを作るのがUIスレッドじゃないと駄目。
0052デフォルトの名無しさん
2006/02/04(土) 20:53:12C#教えてくれる人いないでしょうか。
時給1000円払います。
電話とMSメッセンジャーでやりとりします。(ですのでどこに住んでいてもかまいません。
電話代もこちら払いです。)
こっちが色々聞くので、それに答えてほしいです。
ゲームを作りたいので、描画関係の基本を分かってる方希望ですが、
私はC#始めて2週間くらいですので、そんなに高度な知識は必要ないです。
あと、多分時間中そんなに質問しないので、原則暇です。
テレビとか見ながらできる仕事なので楽かも知れません。
いい方なら、長く教えて欲しいです。
お金は始めたばかりの時は即日払いしますが、
長くおつきあい頂く場合は、まとめて週払いとかになっちゃうかもしれません。
何人か募集したいです。
とりあえず興味のある方はメール下さい<(_ _)> →ameri39@mail.じーおーおー.ne.jp
0053デフォルトの名無しさん
2006/02/04(土) 21:03:22なんだこりゃ
新手の出会い系詐欺か?
005547
2006/02/04(土) 21:24:03なるほど。
しかしいずれにせよ、匿名デリゲートが有効の間はすべて保存されるということは変わりがないので
あまりローカル変数は多用しない方がいいんですね。
#使用する変数だけ保存するという仕様だったらよかったんですが。
0056デフォルトの名無しさん
2006/02/04(土) 21:28:53断固違う。
すべてじゃない、使うものだけ参照を取ってあるんだ。ILDASMで見てみろよ。
そしてそれなら匿名じゃないデリゲートメソッドでも全く変わらん。
005747
2006/02/04(土) 21:43:00じゃあ安心して使っていいということですか。
どうもありがとうございました。
0058デフォルトの名無しさん
2006/02/04(土) 22:41:57∧∧
∧_∧ ( ゚д゚ ) .∧,,∧
( ゚д゚ ) ∧_∧O旦と) ミ ゚д゚ 彡
( つ旦 ( ゚д゚ ) O旦と ミ
と_/ ( つ旦 / (,,,(,,,,,,,う
|| ̄ ̄と__と_)  ̄||
0059デフォルトの名無しさん
2006/02/04(土) 23:08:420060デフォルトの名無しさん
2006/02/04(土) 23:11:13「高速に」
CPU換装
006159
2006/02/04(土) 23:15:480062デフォルトの名無しさん
2006/02/04(土) 23:18:21│△ >>52 Exceptionはハンドルされませんでした。 ×│
├─────────────────────────┤
│書き込みが厨じみています。 │
├─────────────────────────┤
│トラブルシューティングのヒント: │
│┌───────────────────────┐│
││普通はもう少し考えてから投稿します。 ││
││変な書き込みでないか確認してください。 ││
││この例外に対する一般的なヘルプを参照します。 ││
│└───────────────────────┘│
│ オンライン ヘルプで検索... │
├─────────────────────────┤
│アクション: │
│詳細の表示... │
│例外の詳細をクリップボードに追加 │
└─────────────────────────┘
0063デフォルトの名無しさん
2006/02/04(土) 23:40:52もまえも暇だなw
0064デフォルトの名無しさん
2006/02/05(日) 00:19:29そんなことをしなければならないプログラムの構造を見直す
いやマジで
0065デフォルトの名無しさん
2006/02/05(日) 00:26:28時給1000円じゃ安すぎる
何でも教えれるレベルの人間は時間単価5000円でも安い
途中暇だろうが何だろうが時間拘束を求める以上は対価を支払う必要があるからね
ということで月140時間300万円契約で時給20000円強の私で良ければ、特別価格時給20000円ジャストでお受けしますが
勿論Managed DirectXまで懇切丁寧に指導しますよ
0066デフォルトの名無しさん
2006/02/05(日) 00:29:09そんなにすごい人でなくてもいいので、1000円くらいでやってくれる人いないでしょうか…。
0067デフォルトの名無しさん
2006/02/05(日) 00:33:580068デフォルトの名無しさん
2006/02/05(日) 00:48:05おれおれ。おれやるよ。とりあえず前金500時間分振り込んでくれ
0069デフォルトの名無しさん
2006/02/05(日) 00:49:06たったの1000円で1時間拘束されるなんてまっぴらだ
しかも質問に対して貴様が理解できるまで回答する義務があるんだろ?
そんな糞面倒な義務に対して1000円って人を馬鹿にしてんのか?
0070デフォルトの名無しさん
2006/02/05(日) 01:08:04自分で本読んで勉強するのを放棄したレベルの奴に教えるには、
大手進学塾の専任講師なみのティーチングスキルが要求されるだろう。
時給1000円ってナメてるのか?
ちなみに、一般的なプログラマの時給は2000円前後。
0071デフォルトの名無しさん
2006/02/05(日) 01:30:38Bitmap コンストラクタ のオーバーロードで
[C#]
public Bitmap(
string filename
);
のfilenameは、
ビットマップ ファイルの名前。
とあるので、
�@private string strFileName;
�AstrFileName = "skin.bmp";
�BBitmap uhoho = new Bitmap(strFileName );
としたんですが、
見つかりませんと怒られてます。
実際には�@・�Aのプロジェクトから�BがコーディングされているDLLを呼び出してる感じです。
�Bのファイルってどこに置けばいいですか?
�@・�Aのプロジェクトの出力フォルダとか、全てにファイルを置いてみたんですが。。
あと�@・�Aのプロジェクトに既存項目の追加から"skin.bmp"を追加しています。
できれば�Bのソースはいじりたくないです。
0072デフォルトの名無しさん
2006/02/05(日) 01:32:21プロジェクト名\bin\Debugとか
プロジェクト名\bin\Releaseじゃなくて?
0073デフォルトの名無しさん
2006/02/05(日) 01:37:52大体思い当たる場所に置いてみたんですが、
全部怒られるので、
プロジェクト名\
以下のディレクトリ全部に配置してみたんですがだめでした。
試しに、参照先である�BのDLLのディレクトリにも置いてみましたが。。
ってそもそも�BのDLLの参照設定でローカルコピーがtrueなんで、
プロジェクト名\bin\Debug\�BDLL
って感じになってます。
はぁ。。。。
夜遅くにすみません。
0074デフォルトの名無しさん
2006/02/05(日) 01:49:280075デフォルトの名無しさん
2006/02/05(日) 02:05:01Environment.CurrentDirectoryの結果は、
プロジェクト名\bin\Debug\
でした。
そこにはもちろん該当ファイルをセットしてます。
今プロジェクトから既存項目の追加で、
プロジェクト名\bin\Debug\
にあるskin.bmpを追加してみたんですが、
追加をした直後に、プロジェクトファイルと同レベルのディレクトリに自動でコピーが作成されているんです。
これ、何か関係あるのかな。。
今は、新規プロジェクトの作成から始めて、
TestApp001(フォルダです)
TestApp001.sln
TestApp001.suo
とあって、
TestApp001(フォルダです)
の中身が、
TestApp001.csproj
TestApp001.csproj.user
bin(フォルダです)
obj(フォルダです)
のようになってます。
skin.bmpまでのパスは↓です。
\My Documents\Visual Studio Projects\TestApp001\TestApp001\bin\Debug\skin.bmp
です。
0076デフォルトの名無しさん
2006/02/05(日) 02:07:05もう大丈夫です。
もっと根本的に一個ずつ潰していきます。
ゆっくり寝ちゃってください。
夜遅くにすみませんでした。
&
ありがとうございましたっ。
0077デフォルトの名無しさん
2006/02/05(日) 02:12:02単純に考えたら3がおかしいんだろう。
コンストラクタ前でブレークして変数の中身見た方がいいよ
3はいじれないみたいだけど。
0078デフォルトの名無しさん
2006/02/05(日) 02:20:22あのぅ。
大変申し上げにくいのですが、
プロジェクトに追加したビットマップのプロパティで
ビルドアクションを埋め込まれたリソースにしたら、
いけちゃいました。
「埋め込まれたリソース」にするのが当たり前なんですかね。
無知なあまり、お手を煩わせてしまい、更にこんな結果に。
ほんとごめんなさい。
ゆっくりおやすみなさいませ。
ありがとうございましたっ。
0079デフォルトの名無しさん
2006/02/05(日) 02:21:45コレクションにとあるUriが存在するかどうかを高速に判断でき、
なおかつ挿入した順番にアクセスできるというコレクションなんですが
これって自分で作るしかないでしょうか?
0080デフォルトの名無しさん
2006/02/05(日) 02:35:57System.Collections.Generic.List<System.Uri>
0082デフォルトの名無しさん
2006/02/05(日) 02:41:36>List.Contains メソッド
>このメソッドは順次検索を実行します。したがって、このメソッドは、O(n) 操作です。
順次検索ってようするにfoeachするのと同じってことですかね・・・
0083デフォルトの名無しさん
2006/02/05(日) 02:46:19そもそも、「順次アクセス可能」と「高速検索可能」は両立しないから。
一般的に言って、よほど大規模なデータにならん限り、
順次アクセスしたいデータは素直に配列(C#ならList)に格納するのが無難。
0084デフォルトの名無しさん
2006/02/05(日) 02:47:20IComparerを実装して、Compareメソッドは常に同じ値を返す
これをSortedListかSortedDictionaryのコンストラクタに放り込む
いや適当に言ってみただけだからどうなるか分からんけど
0085デフォルトの名無しさん
2006/02/05(日) 02:48:060086デフォルトの名無しさん
2006/02/05(日) 02:59:28private class UriList : List<Uri> {
private Dictionary<Uri, object> dictionary;
}
こんなん作ってAddとかContainsとかオーバーライド。
・・・まぁ継承なんかせんで普通に外に二つもてば?
幸いにしてUriはImmutableなオブジェクトだし。
0087デフォルトの名無しさん
2006/02/05(日) 03:00:30より頻繁に要求されるのかで、最適解は変わる。
両方とも重要なら、>>85の言うように2つのコレクションを
注意深く使うしかない。
0088デフォルトの名無しさん
2006/02/05(日) 14:10:59staticキーワードはメソッド内の変数には使えないみたいなので。
void hoge(){
static int a;
a = (a + 1) % 5;
if(a == 0){
printf("OK\n");
}
}
0089デフォルトの名無しさん
2006/02/05(日) 14:12:18フィールド変数にしたらいいんじゃね。
0090デフォルトの名無しさん
2006/02/05(日) 14:43:14しょうもない内部変数のスコープがクラスにまで広がってしまうのがやだなぁと。
0091デフォルトの名無しさん
2006/02/05(日) 14:47:410092デフォルトの名無しさん
2006/02/05(日) 14:57:28オーバヘッドがいや。
とか言ってたらきりがないのでそうします。ありがとうございました。
0093デフォルトの名無しさん
2006/02/05(日) 15:29:18メソッドを実行するようなことはできますか?
ここでいう変数には、ArrayListなどのオブジェクトも含みます。
0094デフォルトの名無しさん
2006/02/05(日) 15:33:29デバッガでも作ろうとしてますか?
0095デフォルトの名無しさん
2006/02/05(日) 15:34:300096デフォルトの名無しさん
2006/02/05(日) 16:18:52変数の参照が変更されたときなら、フィールドの代わりにプロパティを使えばできるけどねえ
0097デフォルトの名無しさん
2006/02/05(日) 16:19:34プロパティって知ってる?
手を入れられない既存コードの精査のために必要ならデバッガで十分だと思うけど。
0098デフォルトの名無しさん
2006/02/05(日) 16:29:30漏れはMSMVPでもINTEAJ構成員でもない
GDNJやVSUGは肩書き無いと書き辛いし大御所が多いから気後れする
ここなら名無しで気軽に書けるから良い
0099デフォルトの名無しさん
2006/02/05(日) 16:58:32すまんが内部クラスでいったいどう解決出来るのか教えてくれんかの?
0100デフォルトの名無しさん
2006/02/05(日) 17:00:100101デフォルトの名無しさん
2006/02/05(日) 17:05:0492じゃないが変数とメソッドをその内部クラスのメンバにして
外からその内部クラスのメソッドを呼び出せばいいんじゃねの。
0102デフォルトの名無しさん
2006/02/05(日) 17:14:36それじゃプライベートフィールドのがましな気がする。
0103デフォルトの名無しさん
2006/02/05(日) 17:17:010104デフォルトの名無しさん
2006/02/05(日) 17:20:13内部クラスでいいわ。
0105デフォルトの名無しさん
2006/02/05(日) 17:20:42private static class FooLocal { public static int a; }
private void Foo() {
}
とでもするのかと思った
0106デフォルトの名無しさん
2006/02/05(日) 17:23:53そのメソッドの直上で宣言してるよ。
そうすればそのメソッドとの結びつきが強調されるし。
ただし当然ちゃんとした名前はつける。
0107デフォルトの名無しさん
2006/02/05(日) 17:27:23そこでパーシャルですよ。
で、パーシャルクラスの使い心地はどうよお前ら。
0108デフォルトの名無しさん
2006/02/05(日) 17:36:18実際のとこ、追加だけしか出来ないのでいまいちでもある。
デフォルトでGenerationGapパターンにしてくれんかな、とか。
0109デフォルトの名無しさん
2006/02/05(日) 17:37:54自分のコード単体では使わん。
0110デフォルトの名無しさん
2006/02/05(日) 17:42:150111デフォルトの名無しさん
2006/02/05(日) 17:59:05オブジェクト自身の一部とかをキーと見なすやつ。
なんていうクラスだっけか…
0112デフォルトの名無しさん
2006/02/05(日) 18:01:00Map?
0113デフォルトの名無しさん
2006/02/05(日) 18:12:020114デフォルトの名無しさん
2006/02/05(日) 18:41:53うむ。
それに気付くのにだいぶかかったが。
自前でリソースマネージャ宣言してた
0115デフォルトの名無しさん
2006/02/05(日) 20:27:18で、ODBCの設定もいらないしこりゃ楽でいいや、
生ならデータ再利用も簡単だし、と思ったんだけど、
実際のところどSystem.Xmlから生ファイルを読み書きする方法で
どのくらいの規模までなら実用可能なんだろうか。
せいぜいmdbの大体程度?
0116デフォルトの名無しさん
2006/02/05(日) 20:46:45ソース見せてくれ。
0117デフォルトの名無しさん
2006/02/05(日) 21:24:25何使ってるのか分からんが、使い勝手からいったらDOMだろ?
となるとファイルの入出力がかなり厳しいような気ガス。
メモリ上だけならいいんだが…
※もっと高度にやってるに決まってるだろ!!だったらすまん。
0118デフォルトの名無しさん
2006/02/05(日) 21:25:380119デフォルトの名無しさん
2006/02/05(日) 21:25:42XPathじゃないっすか?
0120デフォルトの名無しさん
2006/02/05(日) 22:29:41http://msdn2.microsoft.com/ja-jp/25zf0ze8(ja-jp,VS.80).aspx
プログラムの中からこのXMLファイルに設定を書き込むにはどうしたらいいんでしょうか
設定を保存しておきたいのです
0121115
2006/02/05(日) 22:29:48DB内にあるXmlデータをちょこっとインデックス化してXPathで検索できるってだけだし。
例えばXmlDocument を XPathで操作する方法もメモリ上でならかなり高速で動くよね。
でも当然のことながらファイルのIOがボトルネックになると。
メモリ上にインデックスを生成してデータファイルをうまく分散すれば
もっとましになるのかもしれないけど、
俺のトリ頭じゃその"うまく分散"の部分がエレガントに設計できんのさ。
DBのインターフェースからしか扱えないような分散方法では
再利用しやすい生ファイルのメリットがなくなっちまうし、
1ファイル内のデータ構造に"意味"を維持しようとすると
どうしても1ファイルがでかくなって無駄な検索が増えるジレンマ。
あぁ、なんか何言ってのか分らなくなってきたぁ。
0122デフォルトの名無しさん
2006/02/05(日) 22:46:26ああ、SQL Server2005 Expressだとローカルファイルならなんか動的にアタッチできるように
なったんだっけか。あれMVPか誰かの提案だったと思うけど、いいね。
0123デフォルトの名無しさん
2006/02/05(日) 23:07:22まぁそう言われれば、「その通り」でお終いなんだけどさ。
ちょっとXml DBに興味あっただけ。
結局生Xmlは設定ファイル〜小規模DBにしか使えんのかなぁ。
0124デフォルトの名無しさん
2006/02/05(日) 23:44:16組み込みXML DBならBerkeley DB XMLとかあるよ。
とりあえずホットな話題ではある。RDB方面からのアプローチとか
ネイティブXMLDBとかごにょごにょしてもう分からん状態。
0125デフォルトの名無しさん
2006/02/06(月) 01:37:280126デフォルトの名無しさん
2006/02/06(月) 01:48:30つかまず試してみろよそんなもん
0127デフォルトの名無しさん
2006/02/06(月) 01:53:09実用の範囲は使い方次第で変わってきちゃうから、もまいさんの使い方で実測したらいいんじゃない?
0128デフォルトの名無しさん
2006/02/06(月) 02:05:04いったん閉じたFormをまたShowModalするな、と聞いたような気がするが
PrintPreviewDialogって、Formを継承している割にはそう言う使い方
しますよね。いいんですか?
0129デフォルトの名無しさん
2006/02/06(月) 02:07:15試したいのですが、VB.netの使い方で難儀している段階でして・・・
インターフェイスを継承したら
「クラスは、ほかのクラスからのみ継承できます。」
なんて変なエラーメッセージが出てきますし・・・
なので試す前に質問をした次第です
0130デフォルトの名無しさん
2006/02/06(月) 03:28:47画像を自動的に切り替える事って可能?
0131デフォルトの名無しさん
2006/02/06(月) 06:50:53何かのやり方とか、本質的でない部分を調べるのに時間がかかるのがだんだんやになってきた。なんかすごい無駄な知識覚えるのに時間無駄にしてるのかなぁと。
0132デフォルトの名無しさん
2006/02/06(月) 07:28:59何か違いがあるんでしょうか。
前者は ImageAnimator でアニメーションできるんですが、後者は失敗します。
前者はファイルをロックしてしまうので後者を使いたいのですが。
0133128
2006/02/06(月) 09:47:260134128
2006/02/06(月) 10:15:42ttp://support.microsoft.com/default.aspx?scid=kb;ja;841074
この文書によるとやはり、同じインスタンスは複数回ShowDialogするなという
ことで確定ですが、じゃあPrintPreviewDialogはどうしてるんだろ・・・
Disposeすると直前の入力値が全部パーになるので面倒くさいです。
ちなみに自分は、入力値とFormクラスを管理するコンポーネントクラスを
作って、そっちにShowDialogメソッドを書いて、ペアでクラスを使ってます。
おまいらはどうしてますか?
0135デフォルトの名無しさん
2006/02/06(月) 10:20:49(scv形式は、csv形式のカンマが(一個以上の)空白文字に変わったもので、次のようなものです
1 "234 5" 6 7
正規表現として次のものを考えてみましたが、
Regex r1 = new Regex("^(?:(?<1>\"[^\"]*\")\\s+?|(?<1>[^\\s]+)\\s+?|\\s+)*");
Match m = r1.Match(line);
これだと m.Groups[1].Captures.Countが3になり最後の7がマッチしません。
正しい正規表現を教えてください
0136デフォルトの名無しさん
2006/02/06(月) 11:47:14自動的っつーのが意味分からんが
MouseDownとMouseUpでやれば可能
0137デフォルトの名無しさん
2006/02/06(月) 11:54:58string unko= @"1 ""234 5"" 6 7 ";
Regex re = new Regex( @"""[^""]*""|[^\s]+" );
Match mt = re.Match( unko );
while( mt.Success )
{
MessageBox.Show( mt.Value );
mt = mt.NextMatch();
}
0138デフォルトの名無しさん
2006/02/06(月) 15:46:07ウィザードを使って作成したデフォルトのwinowsアプリケーションに
private void Form1_Closing(object sender, CancelEventArgs e)
{
MessageBox.Show("さようなら");
}
を追加したのですが、終了時にメッセージボックスがでません。
0139138
2006/02/06(月) 15:50:14InitializeComponent()メソッド内に
this.Closing += new CancelEventHandler(Form1_Closing);
を記述して解決でした。
0140デフォルトの名無しさん
2006/02/06(月) 16:00:440141デフォルトの名無しさん
2006/02/06(月) 16:20:370142デフォルトの名無しさん
2006/02/06(月) 16:21:520143デフォルトの名無しさん
2006/02/06(月) 17:01:18Panelを継承したクラスCustomControlがRichTextBoxを保持する形や、
Controlから派生したCustomControlがPanelとRichTextBoxを持つ形が思い浮かんだが
しかし、コントロールの主体はRichTextBoxにしたい、
要はRichTextBox固有のプロパティ等を、CustomControlのそれとして定義し直すのは面倒
かといって、customControl.richTextBox.(ry とするのは何か違うような気がするという事
RichTextBox派生がPanelを持つ形が良いが、
panel.Controls.Add(this); ではうまくいきません
なにか良い方法は無いでしょうか?
0144138
2006/02/06(月) 18:31:120145デフォルトの名無しさん
2006/02/06(月) 18:36:58ArrayListをそっくりそのままDataSetとして扱う事はできますか?
0146デフォルトの名無しさん
2006/02/06(月) 18:38:310147デフォルトの名無しさん
2006/02/06(月) 18:46:280148デフォルトの名無しさん
2006/02/06(月) 18:55:12DataTable生成してコピー汁。
0149デフォルトの名無しさん
2006/02/06(月) 18:55:56ArrayList al = new ArrayList();
string[] str;
//-------------------
for ~~~~
{
al.add(str);
}
みたいな感じでちょうどテーブルのカラムとレコードみたいになってます。
これをフォームの各項目にバインドするのに、
一度datasetにしてみたいなぁと思い、
alをDataSetに代入(?)みたいな方法はないかなぁと。
とりあえず死んできます。
0150デフォルトの名無しさん
2006/02/06(月) 18:56:42あ、入れ違いですんません。
ありがとうございました。
逝ってきます。
0151デフォルトの名無しさん
2006/02/06(月) 20:03:23もしそれらの中に同じ名前のメソッド(例えば Start() とか)が存在していた場合、
競合してしまってうまくインターフェイスを実装できませんよね?
このような時、どのようにすれば良いのでしょうか?
(一方のメソッド名を実装段階で変更できれば手っ取り早いのですが・・・)
0152最凶VB厨房
2006/02/06(月) 20:13:580153デフォルトの名無しさん
2006/02/06(月) 20:34:39ありがとうございます。
さっそく調べてみます。
0154デフォルトの名無しさん
2006/02/06(月) 21:25:45Public Sub Quit() Implements Hoge.Exit
みたいなことはC#ではできないの?
0155デフォルトの名無しさん
2006/02/06(月) 21:30:41015649
2006/02/06(月) 21:35:02csvなどの数値データを配列に読み込むプログラムの
サンプルはありますか?
自分で作ったものでは配列の中に文字コードが入力されてしまい
正しく元データが認識されませんでした。
0157デフォルトの名無しさん
2006/02/06(月) 21:41:11お前はcsvじゃなくて普通のテキストファイルも読めないんだろ
0158最凶VB厨房
2006/02/06(月) 21:41:29認識されないっていうソースさらせや。
そもそも配列って何の型の配列やねん。
数値データの形式もどないやねん。
エンコーディングはどないやねん。
0159デフォルトの名無しさん
2006/02/06(月) 21:41:45サンプル待ってる間に作ったほうが早いんじゃね?
0160デフォルトの名無しさん
2006/02/06(月) 21:44:050161デフォルトの名無しさん
2006/02/06(月) 21:50:43int ch=reader.Read();
tx[0]=System.Convert.ToInt32(ch);
配列はfloatで宣言しています。
以前ファイル読み取りのサンプルソースが本にあったので
それを利用して作ろうとしたのですが、型に関する知識が
十分でないためうまくいきませんでした。
0162デフォルトの名無しさん
2006/02/06(月) 21:52:290163デフォルトの名無しさん
2006/02/06(月) 21:53:08うまくいきました!
0164デフォルトの名無しさん
2006/02/06(月) 21:55:10>>161
それは、テキストファイルから文字コードを読み取って配列に代入するコード。
つまりプログラムしたとおりの動作は行われてるよ。安心汁。
0165デフォルトの名無しさん
2006/02/06(月) 21:55:39多次元のListみたいなのってないよね
0166デフォルトの名無しさん
2006/02/06(月) 21:57:16そりゃCVSだしなぁ
0167デフォルトの名無しさん
2006/02/06(月) 21:57:22List<List<List<int>>> ……で上手くいかなかったっけ?
0168デフォルトの名無しさん
2006/02/06(月) 21:58:000169最凶VB厨房
2006/02/06(月) 21:58:26入力した文字をintで。ほぅ。
そのintをintに変換ってなんじゃ。
それをfloatで受け取るんかい。
何したいのやw
0170デフォルトの名無しさん
2006/02/06(月) 21:59:45dictionary.add(key, null);
って感じでいつもnull入れてるけどなんかなあ。
0171デフォルトの名無しさん
2006/02/06(月) 22:01:20マジレスするとStreamReaderにはCSVを扱う機能はない。
017249
2006/02/06(月) 22:01:55もう少し勉強し直してから出直したいと思います。
本当にありがとうございました。
0173デフォルトの名無しさん
2006/02/06(月) 22:03:340174最凶VB厨房
2006/02/06(月) 22:10:25using System.IO;
using System.Text;
public class Entry
{
static void Main()
{
float[] tx=new float[10000];
string path="a.txt";
StreamReader reader=new StreamReader(path,Encoding.ASCII);
while(reader.Peek()!=-1)
{
int i=0;
string s=reader.ReadLine();//1行読む
string[] ss=s.Split(',');// コンマで分割
tx[i]=float.Parse(ss[0]);//とりあえず先頭だけ
Console.WriteLine(tx[i++]);
}
}
}
適当に作っといた。
017549
2006/02/06(月) 22:21:42わざわざありがとうございます。
ご助言を無駄にせぬよう努力させていただきます
0176デフォルトの名無しさん
2006/02/06(月) 22:43:18ようはC#で作るクライアントアプリの可能性が知りたいのです。
想定しているのは.NET非対応のVBです。
C++ではありません。
C#で作るクライアントアプリが.NET非対応VBで作ったクライアントアプリ並のパフォーマンスがあるのかどうか知りたいのです。
0177デフォルトの名無しさん
2006/02/06(月) 22:50:140178デフォルトの名無しさん
2006/02/06(月) 23:36:08ObjectModelだったかにそれっぽいのがあるが、
自分で継承して作る必要があったような…
0179デフォルトの名無しさん
2006/02/06(月) 23:38:440180170
2006/02/06(月) 23:49:06>>178
KeyedCollection ですかね
この名前空間は見たこと無かったです。盲点でした。
これみる限りこれだけでよさそう・・・
class HashSet<T>:KeyedCollection<T,T>{
public HashSet():base(){}
public HashSet(IEqualityComparer<T> comparer):base(comparer){}
public HashSet(IEqualityComparer<T> comparer,int dictionaryCreationThreshold):base(comparer,dictionaryCreationThreshold){}
protected override T GetKeyForItem (T item){ return item;}
}
これはもしかしたらすげえ便利???
0181デフォルトの名無しさん
2006/02/06(月) 23:55:48パフォーマンスって一言で言っても、開発パフォーマンス、応答速度的なパフォーマンス、メモリを効率的に使うパフォーマンス、各種ハードリソースを上手く使うパフォーマンス・・・などなど。
可能性がどうのってのも意味不明。何が作れるかって話?
.NET非対応VBとかも意味不明。ランタイムとかFrameworkと言語は別もん。
まずは貴様の脳内を整理して、一般的な言葉に直せ。
0182デフォルトの名無しさん
2006/02/07(火) 00:04:15C#の場合はどうですかという話ですよ。
そしてVB6と比べてどうですかということですよ。
0183デフォルトの名無しさん
2006/02/07(火) 00:05:16JavaはVB6のかわりになりません。
C#はどうですか?
0184デフォルトの名無しさん
2006/02/07(火) 00:10:080185デフォルトの名無しさん
2006/02/07(火) 00:12:19COM相互運用機能の登録をON にしてビルドしたら、
「COM相互運用機能に登録できる型を含んでいません」って警告がでます。
以下のソースなんですが、何がまずいでしょうか?
--------------------------------------------
using System;
namespace UtilityMethods
{
interface IAdd
{
long Add(long i, long j);
}
public class AddClass : IAdd
{
public long Add(long i, long j)
{
return (i + j);
}
}
}
--------------------------------------------
ちなみに、同じソースでVS2003で作ったDLLでは、ちゃんと動作しました。
0186デフォルトの名無しさん
2006/02/07(火) 00:20:010187デフォルトの名無しさん
2006/02/07(火) 00:31:27DataSet myDataSet = new DataSet();
myDataSet.ReadXml(baseURL);
のようにやれば http で xml をデータセットに展開する事ができますが、
この HTTP の通信を proxy 経由で行なう方法がわかりません。
明示的に proxy を通過させるにはどのようなメソッドを使えばよい
でしょうか?
アドバイスよろしくお願いします。
0188デフォルトの名無しさん
2006/02/07(火) 00:35:27COMに公開するクラスにComVisible属性をtrueで指定する。
AssemblyInfo.csでアセンブリ全体としてはComVisible(false)にしてるから。
0189デフォルトの名無しさん
2006/02/07(火) 00:43:07デバッグでコンソールが勝手に閉じるんだけど
開きっぱなしにするにはどうすれば良いのですか?w
0190句読点書けないバカをサマージャンボする俺 ◆9NQzQ21lx.
2006/02/07(火) 00:44:050191デフォルトの名無しさん
2006/02/07(火) 00:51:15うまくいきました!
マジ ありがとうございます。
0192デフォルトの名無しさん
2006/02/07(火) 00:54:41HttpWebRequest使ってアクセスして、レスポンスのストリーム使えば良いんじゃね
0193キタコレ
2006/02/07(火) 01:02:390195デフォルトの名無しさん
2006/02/07(火) 02:12:19俺はC#の真ん中に入り込んで身動きが取れないのだ。
0196デフォルトの名無しさん
2006/02/07(火) 03:20:07ビーコンは無いのか?
0197デフォルトの名無しさん
2006/02/07(火) 04:43:53private void 終了XToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
0198デフォルトの名無しさん
2006/02/07(火) 11:08:27調べてる人がいる。
ttp://d.hatena.ne.jp/siokoshou/
0199デフォルトの名無しさん
2006/02/07(火) 11:23:02ある状況でPanelを破棄することを考えていてPanelをDispose();するのですが、メモリがうまく解放されません
Bitmapの方もDispose();してみましたが、やはり解放されません
今はこういう感じの流れです
PanelのBitmapをDispose()
PanelをFormからRemove()
PanelをDispose()
PanelをArrayListで複数保持しているのでArrayListのClear()
またBitmapはpublic Bitmap(int, int, int, PixelFormat, IntPtr);タイプのコンストラクタを用いて作っています
どこかおかしい点や改善点などありましたら教えてください
よろしくお願いします
0200デフォルトの名無しさん
2006/02/07(火) 11:29:20ま、その辺はほっとけばGCがそのうち片づけてくれる領域だ。そんな気にすんな。
// Panelへの参照が残ってれば駄目だけど。
0201デフォルトの名無しさん
2006/02/07(火) 11:41:50>PanelのImageって何だ?
これはどういうことですか?質問の意味が把握できません。すいません
後Panelへの参照ですか
ArrayListをクリアした時点で消えてると思っているのですが…
コードはこんな感じです
for(int i=0;i<List.Count;i++)
{
Panel p = (Panel)List[i];
p.deleteBitmap(); //BitmapのDispose
Controls.Remove(p);
p.Dispose();
}
List.Clear();
0202デフォルトの名無しさん
2006/02/07(火) 12:02:49Windows フォームのモーダル表示で、SDKのドキュメントをほぼぱくり、
親画面となるForm1に以下のように書きました。
private void mnuAbout_Click(object sender, System.EventArgs e)
{
Form2 f = new Form2();
f.ShowDialog(this);//�A
}
で、「f」のフォーム、つまりForm2で、以下のように書きました。
public void SetParentText()
{
((Form1)this.ParentForm).Text = "uho"; //�@ここで落ちる
}
�@のthis.ParentFormが未割当で、NULL参照だって怒られています。
どちらのフォームもSystem.Windows.Foms.Formを継承していて
�Aで渡しているthisをForm2で受けてると思うんですが、
�@で落ちるので、明示的に受け取ったthisを処理する必要があるのかなぁ?
と思っているのですが、ShowDialogをoverrideするのかな?と思ったのですが、
[C#]
public DialogResult ShowDialog(
IWin32Window owner
);
だそうで、無理でした。
厨ですんません。暇な人教えてください。
0203デフォルトの名無しさん
2006/02/07(火) 12:09:330204デフォルトの名無しさん
2006/02/07(火) 12:20:14ありがとうございます。
いや、すんませんでした。
0205デフォルトの名無しさん
2006/02/07(火) 13:09:01つまりお前さんは今C丼になってるってわけだな?
0206初心者B
2006/02/07(火) 15:21:03MicrosoftからVC#Express Edition落としてきて、ツールを作ったんだけど、
セットアップ/配置プロジェクトでインストーラ作ってインストール先をユーザに指定させたい。
って思ってます。
MSDN見ながらセットアップ/配置プロジェクトを追加したくても、新しいプロジェクトのダイアログには
それが見つからんのです。
(Windowsアプリケーション、クラスライブラリ、空のプロジェクト、スクリーンセーバースタートキット、ムービーコレクションスタートキットのみ)
http://msdn2.microsoft.com/ja-jp/library/996a3fxs.aspx
ググってみたり、MicrosoftのHPで調べたりしましたが、それらしい情報が無くて困ってます。
プレビュ版の制限なんでしょうか。
よろしくお願いします。
0207デフォルトの名無しさん
2006/02/07(火) 16:03:22http://www.atmarkit.co.jp/fdotnet/special/vs2005compare/vs2005compare_02.html
0208デフォルトの名無しさん
2006/02/07(火) 16:33:45お願いします
0209デフォルトの名無しさん
2006/02/07(火) 16:38:23ありゃりゃ、すんません。
製品版買います。なんかスッキリした。
0210デフォルトの名無しさん
2006/02/07(火) 16:53:02読み込みたいのですが、これは可能ですか?
構成ファイルで、<appSettings file="huga.config">を指定、というのも
使わずに読み込む方法があったら教えて下さい。
0211デフォルトの名無しさん
2006/02/07(火) 17:11:00要は気にすんなってことだ。
>>210
それはもう構成ファイルである必要が無いような気がするのだが。
XmlSerializerでシリアライズじゃ駄目なの?
0212210
2006/02/07(火) 17:33:33ご返答ありがとうございます。おっしゃるとおりですorz
ConfigurationManagerとかであっさり出来るだろうと思い込み、
調べてみてビックリな感じですた。
0213デフォルトの名無しさん
2006/02/07(火) 17:33:46そうですか…わかりました
結構メモリくってしまうんで、どうにかしたかったんですけどね
基本的にはメモリ使用量は上昇していくのですが、ごくたまに使用量が減っているのを確認しました
たまになんで、ほとんど意味がありません><
0214デフォルトの名無しさん
2006/02/07(火) 17:40:03form2はform1のインストラクタ内で
form2 = new Form2();
で割り当てています。
form1のボタン1が押されたらform2を表示したいのです。
そこで
private void button1_Click(object sender, System.EventArgs e)
{
form2.Show();
}
と書きました。
ところが、ボタンを一度押してからフォームを閉じ、再び押すと
"Form2" という名前の、破棄されたオブジェクトにアクセスできません。
という例外が発生します。
これは、フォームが閉じられる際form2に割り当てられていたForm2()のインスタンスが
が破棄されたということでいいのでしょうか?
そうならば、解決法がしりたいのですが、ご教授願います。
0215デフォルトの名無しさん
2006/02/07(火) 17:43:50Form2のClosingイベントを拾って
ウィンドウを閉じるのをキャンセルして
代わりにHide()してウィンドウを隠す。
あるいはボタンが押されるたびにnewする。
0216デフォルトの名無しさん
2006/02/07(火) 17:50:160217デフォルトの名無しさん
2006/02/07(火) 18:26:30if (form2.IsDisposed)
{
form2 = new Form2();
}
form2.Show();
0218デフォルトの名無しさん
2006/02/07(火) 18:40:03public void test( DataTable dt)
{
ArrayList al = new ArrayList();
for (int i=0; i<dt.Rows.Count; i++)
{
al.Add(dt.Rows[i]);
}
。。。
。。
。
。
みたいな感じで、ArrayListのalにレコードとカラムを取得しました。
クイックウォッチで見ると、
al
├[0]
├[1]
├[2]
├[3]
├。。。
├ItemArray
├[0] "0010019"
├[1] "テスト太郎"//←�@ここ
のような感じで、alの4行目([3])の、ItemArrayの2要素目([1])のテスト太郎を
取得する為には、ArrayListに対してどのようにアクセスすればよいですか?
よろしくおねがいします。
0219デフォルトの名無しさん
2006/02/07(火) 18:43:340220デフォルトの名無しさん
2006/02/07(火) 18:56:280221デフォルトの名無しさん
2006/02/07(火) 19:02:33>>220
どしよどしよ。。
うれしすぎてリアクションとれない。
ありがとうございました。
0223デフォルトの名無しさん
2006/02/07(火) 20:27:44メンバに持っとく必要がどこにあるんかと。
0224デフォルトの名無しさん
2006/02/07(火) 20:49:18どうしてでしょうか?
=======================================================
Form1
=======================================================
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
}
public string Label1
{
set
{
label1.Text = value;
}
}
=======================================================
Form2
=======================================================
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.Label1 = textBox1.Text;
}
}
0225デフォルトの名無しさん
2006/02/07(火) 20:55:25Form2のf1.Label1 = textBox1.Text;の下にf1.Show();って入れてみれば分かるよ
0226デフォルトの名無しさん
2006/02/07(火) 21:15:39解決しちゃった
0227224
2006/02/07(火) 21:19:30解決しました。
ありがとうございます。
もう1つ質問が・・・
できれば、最初に開いているForm1に
文字がでるとうれしいのですが、その
ようなことは可能でしょうか?
0228デフォルトの名無しさん
2006/02/07(火) 21:26:50余裕で可能
元の Form1 の参照を渡しとけ
0229デフォルトの名無しさん
2006/02/07(火) 22:02:05これはオブジェクトとかの概念が理解できてないからなのか?
0230デフォルトの名無しさん
2006/02/07(火) 22:03:57そういう人たちのためのふらっとC♯スレなんだがあんまり利用されんのう
0231デフォルトの名無しさん
2006/02/07(火) 23:11:28.NET Frameworkの扱いに慣れてないだけだと思うが
0232句読点書けないバカをサマージャンボする俺 ◆9NQzQ21lx.
2006/02/07(火) 23:14:550233デフォルトの名無しさん
2006/02/07(火) 23:33:40アレを少しでも速くする方法ってありませんかね?
0234デフォルトの名無しさん
2006/02/07(火) 23:38:160235224
2006/02/07(火) 23:43:45元のForm1を参照の渡し方ですが・・・
Form1 f1 = new Form1();
f1.Label1 = textBox1.Text;
で渡してるつもりだったりします。。。
参照の渡し方を教えていただけない
でしょうか。。。
0236デフォルトの名無しさん
2006/02/07(火) 23:54:28Form1 f1 = this;
0237デフォルトの名無しさん
2006/02/08(水) 00:58:08> f1.Label1 = textBox1.Text;
> で渡してるつもりだったりします。。。
渡してるのは、textBox1のTextプロパティの内容である文字列の参照だ。
Textプロパティを一種の「箱」とみなすと、箱の中身を触らせただけだ。
箱そのものには触れないから、箱に別のものを入れることもできない。
0238デフォルトの名無しさん
2006/02/08(水) 01:07:53Form1が2つできるぞ。
参照渡すなら
Form2のコンストラクタで受け取れ
例:
private Form f1;
public Form2(Form form){
f1 = form;
}
Form1でForm2をnewするときに
Form2 f2 = new Form2(this);
0239デフォルトの名無しさん
2006/02/08(水) 01:15:30Save("*.jpg")でjpgとして保存すると透過が含まれた画像が作成されちゃうんですけど
どうにか24bitで保存する方法はないものでしょうか?
0240デフォルトの名無しさん
2006/02/08(水) 01:17:28ていうかその前の>>229書いたのも俺だってのに
何を錯乱してんだ、俺はorz
0241デフォルトの名無しさん
2006/02/08(水) 01:25:21アレを少しでも速くする方法ってありませんかね?
Win32APIを使ってチューニングすれば速くなります。しかしそれならば最初からC++を使えばよいということになってしまうのです。
0242デフォルトの名無しさん
2006/02/08(水) 01:28:350243デフォルトの名無しさん
2006/02/08(水) 01:29:060244デフォルトの名無しさん
2006/02/08(水) 01:30:29ngenの使い方。
0245デフォルトの名無しさん
2006/02/08(水) 01:35:310246デフォルトの名無しさん
2006/02/08(水) 01:35:40え? Jpegは透過をサポートしてないから自動的に24bppになるはずだけど?
実際試した限り24bppRgbだし。
0247132
2006/02/08(水) 03:25:30アニメーションGIFの表示ができずに困っています。
別件ですが、Image.FromStream(stream, true, false) としてイメージを取得し、
DrawImageで表示しようとするとエラーになります。
(Image)Image.FromStream(stream, true, false).Clone() とするとちゃんと表示できますが、
Image.FromStream(stream, true, true) としたときと速度がほぼ同じになり、
本末転倒の結果になってしまいます。
このことについてもわかる方がいたらお願いします。
0248デフォルトの名無しさん
2006/02/08(水) 04:20:51これだろ。
FromStream使ったからってStream閉じていいわけじゃないぞ。
0249132
2006/02/08(水) 05:35:59そういう制約があったんですか。
しかし Image.FromStream(stream, true, false) 以外の方法 ( Image.FromStream(stream), Image.FromStream(stream, true, true) )
では、Stream を閉じても普通に表示できています。
これは「たまたま」うまくいっているだけで、仕様上は正しくない使用方法なんですかね。
というと、P/Invokeなどを使わずにImageクラスだけを利用する限り、
ファイルをロックせずにイメージを取得するというのは不可能ということなんでしょうか。
あと、
> Image の有効期間の間は、このストリームを開いておく必要があります。
この記述についてMSDNで調べてみたんですが、Image.FromStream(Stream, bool, bool) のオーバーロードには
この記述がないようです。
reflectorで調べたところ他のオーバーロードは単にこのオーバーロードを呼び出しているだけのようなので、
これは単にミスということなんでしょうか。
0250デフォルトの名無しさん
2006/02/08(水) 05:57:24.NETを利用したシステムでは、一般的にはどんな方法で行いますか?
やりたいことは単純に画像ファイルを
pdfファイルにコンバータできればよいのですがご意見いただきたく。
com.lowagie.text.pdf名前空間のクラスを使えば
pdf帳票が出力できそうなのはわかったのですが、
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/309aspgenpdf1/aspgenpdf1.html
反面、.NET開発用にツールも各種出回っているようです。
用途としては、画像がpdf化できればよいだけです。
アプリは複数台のWinXP端末に入れる予定です。
小規模な社内システムを自社で構築しており、
VB.NETやC#で財務管理を行う小規模アプリだったので、
何とか今まで社内の素人何人かで(元SEは1名)
勉強しながら開発して来ました。
画像ファイルをpdf変換するツールはライセンスの額も
けっこうなお値段で、うちのような会社では
ちょっと躊躇してしまい、
0251251
2006/02/08(水) 07:08:27一般的にはどうしているのか気になりまして。
ご教授いただければと思います。
0252デフォルトの名無しさん
2006/02/08(水) 07:17:40「 ̄ `ヽ、 ______
L -‐ '´  ̄ `ヽ- 、 〉
/ ヽ\ /
// / / ヽヽ ヽ〈
ヽ、レ! { ム-t ハ li 、 i i }ト、
ハN | lヽ八l ヽjハVヽ、i j/ l !
/ハ. l ヽk== , r= 、ノルl lL」
ヽN、ハ l ┌‐┐ ゙l ノl l
ヽトjヽ、 ヽ_ノ ノ//レ′
r777777777tノ` ー r ´フ/′
j´ニゝ l|ヽ _/`\
〈 ‐ lト、 / 〃ゝ、
〈、ネ.. .lF V=="/ イl.
ト |お前の態度が とニヽ二/ l
ヽ.|l 〈ー- ! `ヽ. l
|l気に入らない lトニ、_ノ ヾ、!
|l__________l| \ ソ
0253デフォルトの名無しさん
2006/02/08(水) 07:53:41へこーw
0254デフォルトの名無しさん
2006/02/08(水) 09:17:24ずこーですたいwwそんなコメントじゃ
0255デフォルトの名無しさん
2006/02/08(水) 11:38:59一度ファイルからバイト配列に読み込んでMemoryStreamにする。
または
Bitmapを新規に作成。
Image.FromFileで作ったImageをつかってBitmapにDrawImage。
Imageを破棄。
0256デフォルトの名無しさん
2006/02/08(水) 12:05:52自己解決したのですが
//bはBitmap;
b.Save("test1.jpg",ImageFormat.Jpeg); //こっちは透過なし
b.Save("test2.jpg"); //こっちは透過あり
この引数の違いで作成されるjpgが違ったようです
0257デフォルトの名無しさん
2006/02/08(水) 12:09:38標準機能で無い以上は一般的なやり方なんてない。
標準機能で無い以上は「単純に」なんて言えるやり方はない
標準機能で無い以上は金か時間を費やして実現するしかない。
0258デフォルトの名無しさん
2006/02/08(水) 12:18:37それ拡張子がjpgなだけで実際はpngだから。
0259デフォルトの名無しさん
2006/02/08(水) 13:43:36イメージのファイル形式に対応するエンコーダが存在しない場合は、PNG (Portable Network Graphics) エンコーダが使用されます。
0260デフォルトの名無しさん
2006/02/08(水) 14:43:45ありがとうございます
0261デフォルトの名無しさん
2006/02/08(水) 15:58:55WPARAMやLPARAMはSystem.IntPtr型なのですが、この型の使い方がイマイチ分かりません。
例えばWPARAMに 1 を、LPARAMにshort型の変数 st を入れようとしたときこう書いてみました
SendMessage(this.Handle, msg, new System.IntPtr(1), new System.IntPtr((int)st));
しかしうまく動作しません。
どうすれば良いか教えてください。。。
0262デフォルトの名無しさん
2006/02/08(水) 16:00:59IntPtrではなくshort型のSendMessageも宣言する。
0263デフォルトの名無しさん
2006/02/08(水) 16:02:27あとうまく動作しないってのは意味不明なのでどううまく動かないのかを書け。
ちなみに忘れがちだがSendMessageは返値もIntPtrだ。影響はないだろうが。
0264261
2006/02/08(水) 16:29:30その方法でできました!ありがとうございます!
VB6の時代と一緒なんですね。でもオーバーライドがある分で同じ関数名でできるのは楽ですね。
>>263
説明不足ですみません。
メッセージの動作はC++版で確認していたので、それと同じ結果を得られないことを「上手く動作しません」と曖昧に表現してしまいました。
戻り値も関係したので影響ありまくりでした orz
0265デフォルトの名無しさん
2006/02/08(水) 17:08:24プロポーショナルフォントで表示されたWebページのテキストをコピペしてもMSゴシックで半角英数が表示されるのですが、直接入力だとダメです。
これってRichTextBoxのバグなのでしょうか・・・
ぐぐっても同じような問題が見つからないので、私の環境かな・・・
0266デフォルトの名無しさん
2006/02/08(水) 17:12:56ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=11440&forum=7
ttp://groups.google.co.jp/group/microsoft.public.jp.dotnet.vsnet/browse_thread/thread/45779ced7d052b2e?hl=ja&lr=&ie=UTF-8&oe=UTF-8&c2coff=1&seekm=uguC%23FyMDHA.2788%40TK2MSFTNGP10.phx.gbl&frame=off
それなりに有名なバグ(あるいは仕様)。
0267デフォルトの名無しさん
2006/02/08(水) 17:31:29>Resolved as Fixed by Microsoft on 2005-09-29 at 16:38:07
>I've updated the documentation to clearly document that this behavior is not currently supported.
これどこに書いてある?
FileInfoのAttributesやFileのSetAttributesやFileAttributes列挙体には見つからない
0268デフォルトの名無しさん
2006/02/08(水) 18:01:46有名な仕様(あるいはバグ)。ですか。。。
教えていただいたページを元に出ないようにすることができました。
でもデザイナでWordWrapやScrollBarsを設定すると元に戻ってしまいました。
いくつかのプロパティは設定を戻してしまうようです。
とりあえず今回は限定目的なのでコンストラクタに突っ込むことで対応しました。
public partial class CustomControl1 : RichTextBox
{
private const uint IMF_DUALFONT = 0x80;
private const uint WM_USER = 0x400;
private const uint EM_SETLANGOPTIONS = (WM_USER + 120);
private const uint EM_GETLANGOPTIONS = (WM_USER + 121);
[DllImport("USER32.dll", EntryPoint = "SendMessageA")]
private static extern uint SendMessage(System.IntPtr hWnd, uint msg, uint wParam, uint lParam);
public CustomControl1()
{
InitializeComponent();
this.WordWrap = false;
this.ScrollBars = RichTextBoxScrollBars.ForcedBoth;
uint dwLangOptions = 0;
dwLangOptions = SendMessage(this.Handle, EM_GETLANGOPTIONS, 0, 0);
dwLangOptions &= ~IMF_DUALFONT;
SendMessage(this.Handle, EM_SETLANGOPTIONS, 0, dwLangOptions);
}
}
コンテナのInitializeComponent呼び出しが終わった後に自動的に呼び出す方法ってあるのでしょうか?
それがあれば上手くできそうですが。。。
0269デフォルトの名無しさん
2006/02/08(水) 18:12:39これはスタイルに関する問題だから、ハンドルが再作成されるとリセットされる。
なのでHandleCreated辺りでやれば多分うまくいくはず。
0270デフォルトの名無しさん
2006/02/08(水) 18:31:34できました!
これで汎用版も行けそうです。
public partial class CustomControl1 : RichTextBox
{
private const uint IMF_DUALFONT = 0x80;
private const uint WM_USER = 0x400;
private const uint EM_SETLANGOPTIONS = (WM_USER + 120);
private const uint EM_GETLANGOPTIONS = (WM_USER + 121);
[DllImport("USER32.dll", EntryPoint = "SendMessageA")]
private static extern uint SendMessage(System.IntPtr hWnd, uint msg, uint wParam, uint lParam);
public CustomControl1()
{
InitializeComponent();
}
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
uint dwLangOptions = 0;
dwLangOptions = SendMessage(this.Handle, EM_GETLANGOPTIONS, 0, 0);
dwLangOptions &= ~IMF_DUALFONT;
SendMessage(this.Handle, EM_SETLANGOPTIONS, 0, dwLangOptions);
}
}
0271デフォルトの名無しさん
2006/02/08(水) 19:37:240272デフォルトの名無しさん
2006/02/08(水) 21:58:590273デフォルトの名無しさん
2006/02/08(水) 23:09:360274デフォルトの名無しさん
2006/02/08(水) 23:12:55コピーってどういうコピーさ。
0275デフォルトの名無しさん
2006/02/08(水) 23:18:27new してクラス変数の値を書き換えた後、
実体のコピーを取って、片方だけまた書き換える。
説明不足ですみません。
0276デフォルトの名無しさん
2006/02/08(水) 23:20:280277デフォルトの名無しさん
2006/02/08(水) 23:21:490278デフォルトの名無しさん
2006/02/08(水) 23:23:56Object.MemberwiseClone()あたりとか。
説明をよく読んで参照型のフィールドをコピーするときは気をつけろよ。
0279デフォルトの名無しさん
2006/02/08(水) 23:24:070280デフォルトの名無しさん
2006/02/08(水) 23:26:33ありがとうございます。
Cloneメソッドについて調べてみます。
0281デフォルトの名無しさん
2006/02/08(水) 23:27:080282デフォルトの名無しさん
2006/02/09(木) 00:20:380283デフォルトの名無しさん
2006/02/09(木) 00:29:080284132
2006/02/09(木) 00:37:04レスどうもです。
ざっと試してみたんですが、MemoryStreamに読み込む方法だと
普通に Image.FromStream(stream, true, false) で読み込んだ場合とほとんど変わらないパフォーマンスで
実現できました。
この方法でいきたいと思います。
どうもありがとうございました。
あと、ImageAnimator についてもこの方法にしたらうまく動くようになりました。
#何故かぎくしゃくしてはいますが・・・
0285デフォルトの名無しさん
2006/02/09(木) 10:25:410286デフォルトの名無しさん
2006/02/09(木) 13:52:390287デフォルトの名無しさん
2006/02/09(木) 15:32:15今は、Encodingクラスを使って
バイトASCIIから一旦、文字列UTFにしてバイトUTFに変換してます
直接バイトASCIIからバイトUTFに変換ってできますか?
0288デフォルトの名無しさん
2006/02/09(木) 15:39:22結局やることは変わらんが
0289デフォルトの名無しさん
2006/02/09(木) 16:21:120290デフォルトの名無しさん
2006/02/09(木) 17:04:18別にどちらが良いかを聞いてるわけじゃありません
だってここはC#スレ
私自身はC#派なので推したいのですが、多くのメンバーがVB6のみの経験者で強行にVB8を推してきます
VB8ってもVB6とは訳が違うと言っても思い込みから理解してくれません
「VB6時代の大量の資産(社内クラスライブラリとか)があるから生産性も高い」とか言いますが、ADO用とか、.NET Frameworkにより高機能で実装されているとか、VB6標準以外(MSXMLとかScriptRuntimeとかのCOM)の機能をラップして意味がないとかばかりなのです
コーディングルールもあるのですが、VB8どころかVB7.1にすら使えません(私と数人でやった別件の小規模開発で使えないことが露呈してます)
社内事情はさておき、C#2.0がVB8より優れている点を教えてください
IDEはVS2005を使うので、VS2005+C#2.0ならではの優位点もあればお願いします
0291デフォルトの名無しさん
2006/02/09(木) 17:06:240292デフォルトの名無しさん
2006/02/09(木) 17:27:55全員がスペシャリストならそれでも構いませんが、そこまで信用できる人々ではないです
今後の拡張で人員追加の可能性もあるので、技術は絞っておきたいという理由もあります
私を含めた技術リード3人はC#2.0とVB8の両方で開発経験がありますが、プログラム技術ばかりを担当するわけではないので脳内整理のためにも単一にしておきたいわけです
0293デフォルトの名無しさん
2006/02/09(木) 17:32:31VB8の優れたところ……VBユーザーをもっと苦しませることができる
0294デフォルトの名無しさん
2006/02/09(木) 17:36:01IDEの使い方3割、クラスライブラリの理解5割、文法2割くらいで
VB6の経験が生かせるのは文法の半分以下。
それをアドバンテージと考えるかどうかだね。
いっそUI周りは古参の人たちにVB6風に作ってもらって、
中間層をC#でもVB.NETでもいいけど.NETらしいつくりにするのがお勧めかな。
0295デフォルトの名無しさん
2006/02/09(木) 17:43:360296デフォルトの名無しさん
2006/02/09(木) 17:45:25オブジェクト指向が分からなければどちらも書けない。
VB6しかやってない奴は・・
0297デフォルトの名無しさん
2006/02/09(木) 17:57:19C#を先に覚えたので、VB8で書くときは脳内でC#->VBの翻訳をしながらコーディングしていたりする。
知り合いに話したらそいつはその逆だそうだ。
0298デフォルトの名無しさん
2006/02/09(木) 18:04:53Visual C#でポトペタでプログラミングしてると
オブジェクト指向的なプログラミングって無理じゃないですか?
デザイナーが生成したコードはいじれないので、無理が生じるというか。
特に描画関係でFormのソースがやたらと長くなってしまうし
皆さんどんな感じでオブジェクト指向のプログラミングしてます?
0299デフォルトの名無しさん
2006/02/09(木) 18:10:09Java、C#、C++、VBを使って開発してるけど、それぞれ脳内翻訳なんてしない
それぞれ使うときに合わせて切り替わる感じ
だからC#やってるときにJavaの事聞かれると直ぐに答えられない
例えば英語話すときも日本語から翻訳しないでしょ?
英語話すときは英語で考えない?
0300デフォルトの名無しさん
2006/02/09(木) 18:16:37C#とC++は切り替わるなぁ。
0301デフォルトの名無しさん
2006/02/09(木) 18:17:39英語のときはyahooかエキサイトの翻訳を使ってるよw
0302デフォルトの名無しさん
2006/02/09(木) 18:23:09j#でjava.*を使うときはネイティブjavaで思考しますが、
System.*を使い出すととたんにC#からの翻訳モードにかわってしまいます。
0303デフォルトの名無しさん
2006/02/09(木) 19:45:32あるあ・・・J#ねーよwww
0304デフォルトの名無しさん
2006/02/09(木) 20:08:320305デフォルトの名無しさん
2006/02/09(木) 20:32:410306デフォルトの名無しさん
2006/02/09(木) 20:38:020307デフォルトの名無しさん
2006/02/09(木) 21:29:330308デフォルトの名無しさん
2006/02/09(木) 22:10:47コアになるDLLを作って
データベースアクセスDLLを作って
それらの制御用DLLを作って
最後にGUIを作る。
0309デフォルトの名無しさん
2006/02/09(木) 22:15:15.NETではそのボトペタを可能にしてるのがオブジェクトとコンポーネント
0310デフォルトの名無しさん
2006/02/09(木) 22:19:46ナイスジョーク
0311デフォルトの名無しさん
2006/02/09(木) 23:21:040312デフォルトの名無しさん
2006/02/09(木) 23:45:060313デフォルトの名無しさん
2006/02/10(金) 00:28:26PATHが通っていれば話は早かったんですが、そうでないみたいなので。
0314デフォルトの名無しさん
2006/02/10(金) 01:08:22%windir%\Microsoft.NET\Framework\(バージョン)\
0315デフォルトの名無しさん
2006/02/10(金) 01:18:140316デフォルトの名無しさん
2006/02/10(金) 01:36:50RuntimeEnvironment.GetRuntimeDirectory()でパスが取得できるようですので、これを使おうと思います。
0317デフォルトの名無しさん
2006/02/10(金) 09:01:24今いち使いどころがわからないです。
newしなくていいから楽って事ですか?
0318デフォルトの名無しさん
2006/02/10(金) 09:03:35その型のインスタンスを引数に受け取ってなんかするメソッドとか。
0319デフォルトの名無しさん
2006/02/10(金) 09:09:56System.Int32型の列があり、それをプレフィックスとして "0x" を付与した16進数8桁で表示したいのです
例えば 10000であれば "0x00002710" です
Formatに "X08" と設定すれば数値部分は表示できますが、当然 "0x" は付与されません
stringのFormatのように "0x{0:X08}" としてもダメでした
もしできる方法があれば教えてください
0320デフォルトの名無しさん
2006/02/10(金) 09:11:11ステートレスな処理のとき
0321デフォルトの名無しさん
2006/02/10(金) 09:46:07その場合もインスタンスにする事もあるが。
0322デフォルトの名無しさん
2006/02/10(金) 09:52:28そういうときは.NET Frameworkの実装を参考にすると良い
どういうメソッドがstaticなのかを見れば思想が見えてくる
0323デフォルトの名無しさん
2006/02/10(金) 10:01:170324317
2006/02/10(金) 10:10:53結局クラスライブラリを参考にするって事は、
自分の脳内だけでの解釈になりそうです。
暇でしたら具体的にお願いします。
0325デフォルトの名無しさん
2006/02/10(金) 10:15:01他人の脳内解釈を聞きたいって事?
staticの絶対的な指針が無い以上は十人十色
経験で自分なりの使い方を会得(脳内解釈)するか、一緒に開発する人々とルールを作るかのどっちかしかない
それを理解した上で他人の脳内解釈を聞きたいって事?
0326デフォルトの名無しさん
2006/02/10(金) 10:34:55MSDNの関連ドキュメントは熟読したのかよ
staticと関連するそれ以外のドキュメントも一通り
それらを読まないで聞いても基礎が無いから理解できない
少なくとも「newしなくても良いから楽?」とかって聞いてるようじゃ話にならん
0327デフォルトの名無しさん
2006/02/10(金) 10:42:21Format プロパティでは無理だと思う
DataGridView.CellFormatting イベントハンドラで e.Value を string.Format でフォーマットすればOK
0328デフォルトの名無しさん
2006/02/10(金) 10:51:24ありがとうございます!できました!
新しく追加されたイベントがあったのですね、見逃していました orz
よく見たらMSDNライブラリに詳細な説明文が載っていました orz
一応できたコードを置いておきます
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 4)
{
e.Value = string.Format("0x{0:X08}", e.Value);
}
}
0329デフォルトの名無しさん
2006/02/10(金) 14:50:12SQLサーバからSqlDataAdapterで取得したデータセットに
テーブルが一個入っています。
そのテーブルには10カラムあるとして、
その内5カラムがNULLです。(ヘッダがNULLではなくて何も値が入っていないフィールドって事です。)
//dsはDataSetです。
このデータセットをds.WriteXml(stream);
で書き出すと、値が入っていないフィールドを書き込んでくれないのですが、
コレをちゃんと書かせるにはどうしたらよいでしょうか?
0330デフォルトの名無しさん
2006/02/10(金) 15:03:53WriteXmlのときスキーマも書き込んどけ
0331デフォルトの名無しさん
2006/02/10(金) 15:15:13ありがとうございます!
0332デフォルトの名無しさん
2006/02/10(金) 18:46:260333デフォルトの名無しさん
2006/02/10(金) 18:49:24OSは基本的にXPで動かすことを考えています
0334デフォルトの名無しさん
2006/02/10(金) 19:13:53.NET 2.0のSystem.Net.NetworkInformation.NetworkInterfaceが近いのかな。
あとはWMIかWin32APIレベルでできるなら可能だが、どうするかは知らん。
0335デフォルトの名無しさん
2006/02/10(金) 19:14:59不可能ではないけど、C#でやるようなもんじゃない。
0336デフォルトの名無しさん
2006/02/10(金) 19:35:56.NET2.0ですか…LANの件抜きにして1.1からバージョンアップしたほうがいいですかね?
0337デフォルトの名無しさん
2006/02/10(金) 21:14:00ところでVS2003で.NET2.0って使える?
その辺りの設定やったことないからわからんorz
0338デフォルトの名無しさん
2006/02/10(金) 21:14:57それぞれのVSで使える.NETバージョンは固定。
0339デフォルトの名無しさん
2006/02/10(金) 21:18:250340デフォルトの名無しさん
2006/02/10(金) 21:19:140341デフォルトの名無しさん
2006/02/10(金) 21:23:52・・客先に1.1で動作するソフト配ってしまっているとかな。
0342デフォルトの名無しさん
2006/02/10(金) 23:08:12やっぱそんな感じか。
NDISとか言うので、ある程度NICの情報を得る事は出来るみたいだ。
ただ、資料も少ないし、結構面倒だと思う。
.NETについては何か問題を抱えてるわけでもない限り、2.0に移行したほうがいい。
どうせすぐ3.0が出るんだ…。
0343デフォルトの名無しさん
2006/02/10(金) 23:32:38ありがとうございます
C#でやるのはとりあえずやめておきます
0344デフォルトの名無しさん
2006/02/10(金) 23:48:450345デフォルトの名無しさん
2006/02/11(土) 00:14:57それぞれのVSで使える.NETのバージョンは固定なんですか…
初めて知りました
じゃあ2.0使うにはVS2005買うしかないってことですねorz
0346デフォルトの名無しさん
2006/02/11(土) 00:18:28ListViewItemCollection に履歴として保存したいのですが
新しく作った ListViewItemCollection に追加するとき
ListView.SelectedItems[0].Clone() で新しく ListViewItem を
作って追加しているのですが、
なぜかもとの ListView にもコピーが追加されていました。
これを防ぐ方法はないでしょうか?
0347デフォルトの名無しさん
2006/02/11(土) 00:28:02ListViewItemCollectionがそういうクラスだから。(同じListViewに対してリストを共有する)
ArrayListかList<ListViewItem>にでもつっこんどけ。
0348デフォルトの名無しさん
2006/02/11(土) 00:39:22Framework SDK + Eclipseかメモ量
0349デフォルトの名無しさん
2006/02/11(土) 00:41:550350デフォルトの名無しさん
2006/02/11(土) 00:52:12MDC06では、C#3.0はCLR2.0上で動くMSIL吐くようにするって言ってたよ。
なのでしばらくは2.0で行くんじゃないかな。
0351デフォルトの名無しさん
2006/02/11(土) 00:54:19使用例は何十行にもなってるし・・・
1〜3行で簡素な使用例にしてくれ・・・
ヘルプにはGoogle搭載して欲しい・・・
MSDNの無駄に広大な情報に溺れそうです・・・
0352デフォルトの名無しさん
2006/02/11(土) 01:16:460353デフォルトの名無しさん
2006/02/11(土) 01:16:570354デフォルトの名無しさん
2006/02/11(土) 01:22:58おお、勘違いしてた。ありがとう。
C# 3.0の仕様ももう決まってるし、Vistaが出る頃にヒョイっと出されるのかと思ってた…。
0355デフォルトの名無しさん
2006/02/11(土) 01:31:57Orcasもあるんだし
// WinFX対応版はOrcasの次になるのか?
0356デフォルトの名無しさん
2006/02/11(土) 01:51:01そうなんですか。List<ListViewItem>に入れることにします。
ありがとうございました。
0357デフォルトの名無しさん
2006/02/11(土) 08:01:39速いですか?もしそうなら、乗り換える予定なんですが。
0358デフォルトの名無しさん
2006/02/11(土) 08:05:10あと色んな意味で速いかどうかと言われても答えようがない。
0359デフォルトの名無しさん
2006/02/11(土) 08:53:390360デフォルトの名無しさん
2006/02/11(土) 08:58:59申し訳ない。
>>359
サンクス。一応VS2005は購入予定です。
0361デフォルトの名無しさん
2006/02/11(土) 09:41:35そういう人向けにこういうシリーズがあるわけだが
C# ユーザーのための「300 秒でズバリ !!」&「10 行でズバリ !!」シリーズ
http://www.microsoft.com/japan/msdn/thisweek/wednesday/csharp.aspx
0362デフォルトの名無しさん
2006/02/11(土) 10:26:39MSのセキュリティアップデート情報なんかも明らかに愚民対策
0363デフォルトの名無しさん
2006/02/11(土) 11:41:410364デフォルトの名無しさん
2006/02/11(土) 12:59:360365デフォルトの名無しさん
2006/02/11(土) 13:05:200366デフォルトの名無しさん
2006/02/11(土) 15:59:40KB見てこい。
機械翻訳と断り書きがあるドキュメントが見られるから。
0367デフォルトの名無しさん
2006/02/11(土) 16:03:41そんな雑誌あるの?
0368デフォルトの名無しさん
2006/02/11(土) 16:06:15あと>>367は開発には向いてないと思う。
0369デフォルトの名無しさん
2006/02/11(土) 16:27:34あんな精度で機械翻訳できるソフトがあったらバカ売れだろうな
0370デフォルトの名無しさん
2006/02/11(土) 18:45:46人の手で直してあるのに比べるともちろん読みにくいけど、
それなりに読めないこともない。
0371デフォルトの名無しさん
2006/02/11(土) 19:02:450372デフォルトの名無しさん
2006/02/11(土) 19:10:45なにを当たり前なことを。
0373デフォルトの名無しさん
2006/02/11(土) 19:17:08Win32APIの関数でnotの適用範囲を間違ってて正反対の結論になってたことが。
0374デフォルトの名無しさん
2006/02/11(土) 19:58:26とはいえ、まあこれだけ網羅されてるのは有りがたい。
0375デフォルトの名無しさん
2006/02/11(土) 20:27:26先ほどC#2.0Expressをインスコして、
適当に動きを試してみました。
一緒にインスコされたSQLExpressも触ってみようと
接続先を指定したら、
データファイルをプロジェクトにコピーする場合は、、、
などというメッセージが出たので、
この詳細について小一時間ドキュメントを読んできました。
しかし、熟読っぷりが足りないのか理解できなかった事があります。
それは以下の通りです。
�@メリットは?(「早いから」・「本物のデータが壊れないから」は、なんとなくわかります)
これが、特にドキュメントに発見できなかった点なのですが、
�Aプロジェクト内のデータを本物のサーバに更新するには?
�B「ローカル データの一般的な問題」という項にあった、以下の問題って。。。「コピーしない」に設定するしかないって事?
「アプリケーションをテストしてデータを変更し、次回アプリケーションを実行すると必ず変更内容が失われる」
現在上記の疑問があり、表示されたメッセージボックスで「はい・いいえ」どちらを選ぶかで止まってます。
なので、実際にやってみたら普通に解決するような質問だったらすみません。
ローカル内の↓にIEでアクセスすれば参照できると思います。
ms-help://MS.VSExpressCC.v80/MS.NETFramework.v20.ja/dv_raddata/html/d6afa5ac-2bb8-49f2-a50e-f71f611ed506.htm
0376デフォルトの名無しさん
2006/02/11(土) 20:30:14インスコってなに?
プログラム言語以前に日本語勉強し直せ
0377デフォルトの名無しさん
2006/02/11(土) 20:33:55MSDNに立派な資料がいっぱいあるからそれ見てから出直せ。
0378デフォルトの名無しさん
2006/02/11(土) 20:34:23きみ、通知表に「周囲から孤立している」とか書かれてたでしょ
0379375
2006/02/11(土) 20:40:05インスコとはインストールの事として書き込みました。
>>377
本当にありがとうございました。
>>378
そんな事ないと思います。
0380デフォルトの名無しさん
2006/02/11(土) 23:32:40//変数sourceのバイトデータを変数copyにコピーする
copy = new byte[source.Length];
source.CopyTo(copy, 0);
一発で領域の確保とコピーができる方法とかご存知ですか?
今は自作の関数で対応していますが、ありそうな気がするものの見つけられていません
0381デフォルトの名無しさん
2006/02/11(土) 23:37:520382デフォルトの名無しさん
2006/02/11(土) 23:46:08>>381はつまり、
copy = (byte[])source.Clone();
0383デフォルトの名無しさん
2006/02/11(土) 23:51:37目から鱗です!
ありがとうございます m(_ _)m
0384デフォルトの名無しさん
2006/02/11(土) 23:57:26byte配列の一部を切り出して別のbyte配列にしたいのですが、System.Array.Copy以外に方法は無いでしょうか
今はこうしています
//変数sourceに切り出し元のバイトデータが入っている
byte[] NewBytes = new byte[10];
System.Array.Copy(source, 5, NewBytes, 0, 10);
これもまた自作関数で対応していますが、Cloneのように簡単な方法があれば知りたいです。。。
0385デフォルトの名無しさん
2006/02/12(日) 00:01:340386デフォルトの名無しさん
2006/02/12(日) 00:08:130387デフォルトの名無しさん
2006/02/12(日) 00:22:23それだとオーバーヘッドが心配でちょっと
#場合によっては1MB超のバイトデータも扱うのです
>>386
同じような感じになっちゃうんですね
でもSystem.Bufferは知りませんでした orz
これはこれで別の目的に使えるので知る事ができて嬉しいです!
0388デフォルトの名無しさん
2006/02/12(日) 01:10:360389デフォルトの名無しさん
2006/02/12(日) 01:14:430390デフォルトの名無しさん
2006/02/12(日) 01:14:56当然、ListViewのどこで右クリックしてもContextMenuStripが表示されます。
なにかを選択した状態じゃないとContextMenuを表示したくないんですがこの場合は
ListViewのマウスのクリック関係のイベントを使ってContextMenuStripのShowメソッドを呼んだりするしかないですか?
0391デフォルトの名無しさん
2006/02/12(日) 01:17:540392デフォルトの名無しさん
2006/02/12(日) 01:20:32俺が答えようと思ったのに。
この無駄になったプロジェクトどうしてくれる!
0393デフォルトの名無しさん
2006/02/12(日) 01:22:170394デフォルトの名無しさん
2006/02/12(日) 01:27:030395デフォルトの名無しさん
2006/02/12(日) 01:36:06とりあえず http://pc8.2ch.net/test/read.cgi/tech/1139417216/154
としておいて後から使え
0396デフォルトの名無しさん
2006/02/12(日) 11:37:53cmd = new System.Data.OleDb.OleDbCommand("alter table 既存テーブル rename to 新テーブル",コネクション);
cmd.ExecuteNonQuery();
このクエリーを実行すると「alter table 文のエラーです」って出るんですけどAccessだからなんでしょうか。
0397デフォルトの名無しさん
2006/02/12(日) 14:01:23mdbはSQLではテーブル名変更はできない。
DAOまたはADODB & ADOXをCOM参照して使えばできる。
0398デフォルトの名無しさん
2006/02/12(日) 14:25:05そうだったんですか・・・
「出来ないっぽい」とは思ってましたが、「出来ない」ってはっきりと言われると
あきらめがつきます。
ADODBあたりを調べてみます。
ありがとうございました。
0399デフォルトの名無しさん
2006/02/12(日) 14:38:37ADODB & ADOXで行くんならADOXを調べたほうがいいよ。
ADODBはConnection開くのに必要なだけだから。
0400デフォルトの名無しさん
2006/02/12(日) 14:42:140401デフォルトの名無しさん
2006/02/12(日) 14:44:000402デフォルトの名無しさん
2006/02/12(日) 15:01:54これはなんでこうなる?
class xx{
private ArrayList list = new ArrayList();
byte[] b = new byte[]{1,2,3};
static xxx{
list.Add(b);
}
listはフィールドを意味しますが、クラスでなければなりません。
0403デフォルトの名無しさん
2006/02/12(日) 15:03:08クラスの終わりにセミコロンがない。
0404デフォルトの名無しさん
2006/02/12(日) 15:03:51static xxxに戻り値と引数がない。
0405デフォルトの名無しさん
2006/02/12(日) 15:04:27に static がついてないからなんじゃね?
0406402
2006/02/12(日) 15:05:03ちなみに訂正
誤:static xxx
正:static xxx()
ですた。
0407402
2006/02/12(日) 15:06:49それでした。
ありがとうございます。。
0408デフォルトの名無しさん
2006/02/12(日) 15:07:190409デフォルトの名無しさん
2006/02/12(日) 15:08:400410デフォルトの名無しさん
2006/02/12(日) 15:12:20MSDN見てこい
0411デフォルトの名無しさん
2006/02/12(日) 15:13:21自分が分からなかったらすぐコレだ。
0412デフォルトの名無しさん
2006/02/12(日) 15:14:25MSDNの見方をしらないとすぐコレだ
0413デフォルトの名無しさん
2006/02/12(日) 15:18:34411は偽物?です。
どのあたりに載っているか、または検索キーワードをご教示ください。
0414デフォルトの名無しさん
2006/02/12(日) 15:21:32delegateで検索しろよ。
0415デフォルトの名無しさん
2006/02/12(日) 15:24:12delegate、デリゲートで検索を行っていますが数が多く、それらしきトピックには的を射た回答がありません。
具体的に項目を教えて頂けると助かります。
0416デフォルトの名無しさん
2006/02/12(日) 15:24:53あとちょっと不安になったのですがMSDNに載っているのは確実なのですよね?
0417デフォルトの名無しさん
2006/02/12(日) 15:26:35お前は何様だ?
MSDNが検索しづらく、役に立つ情報がないと言うのか?
0418デフォルトの名無しさん
2006/02/12(日) 15:30:07何も知らずにMSDNを読めと言ってしまった。だって俺は部活ではC#博士と呼ばれているから。
でも、載っていないと質問者に追求されて逆ギレしてしまった。バカのくせに俺に盾突くからだ。
0419デフォルトの名無しさん
2006/02/12(日) 15:54:16全くの勘だけど、呼び出し側のスレッドで実行されるんじゃね?
C#のdelegateはコンパイルされた段階でクラス化される。
だから、クラス内でdelegate型を宣言するとインナークラスになる。
この形はJavaと同じだから、多分動作もJavaと同じだと思うんだ
けど・・・・・・
0420デフォルトの名無しさん
2006/02/12(日) 15:58:24オフィシャルドキュメントなんだから絶対的な真と言いたいところだが、人間が書いたのだからミスはある
最終的にはVSの挙動が真
VSの挙動自体がバグっていても、それが最終的な結論なので、真
0421デフォルトの名無しさん
2006/02/12(日) 15:59:38実験してみましたがその通りのようです。
DirectoryWatcherの様な非同期で動作するコンポーネントを作成したかったのですが
イベントハンドラからコントロールの操作ができずに困っている状態です。
実現手段が分からなくなってきました。
0422デフォルトの名無しさん
2006/02/12(日) 16:27:250423デフォルトの名無しさん
2006/02/12(日) 16:43:18http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpovrAsynchronousProgrammingOverview.asp
0424デフォルトの名無しさん
2006/02/12(日) 16:43:41ありがとうございます。
クライアントがコンポーネントのスレッド使用有無を意識しなければいけないというのは
あまり美しくないのでやり方を探している最中です。
0425デフォルトの名無しさん
2006/02/12(日) 16:44:38http://www.microsoft.com/japan/msdn/library/ja/cpguide/html/cpovrAsynchronousProgrammingOverview.asp
0426デフォルトの名無しさん
2006/02/12(日) 16:49:17メソッド
→→
生成
→→
コントロールの操作
X ←←←←←←←←←←イベントハンドラ実行
0427デフォルトの名無しさん
2006/02/12(日) 16:49:17毎回毎回コールバックでEndiInvokeを呼び出すのを書くのが面倒くさい・・・
0428デフォルトの名無しさん
2006/02/12(日) 18:38:05ISynchronizeInvoke
0429デフォルトの名無しさん
2006/02/12(日) 18:46:45を実装してもComponent1.Invokeメソッドをスレッドから呼んだらそれはスレッドで実行されてしまいませんか?
0430デフォルトの名無しさん
2006/02/12(日) 22:46:12デリゲートがコンポーネントの作成されたスレッドで動くなんて何で思った?
コンポーネントのInvokeってなんだ?
普通はISynchronizeInvoke実装しといて、
贅沢言うならデザイナで自動設定されるようにしとけば十分だと思うが。
0431デフォルトの名無しさん
2006/02/12(日) 22:53:49もっと勉強して下さい。
はい、次の有益情報どうぞ。
0432デフォルトの名無しさん
2006/02/12(日) 22:58:160433デフォルトの名無しさん
2006/02/12(日) 23:04:34俺の書き込みのどこら辺が勉強不足なのかをきっちり指摘してくれ。
0434デフォルトの名無しさん
2006/02/12(日) 23:04:36C#のプロジェクトの一部をVB.NETで書くにはどうすればいいですか?
0435デフォルトの名無しさん
2006/02/12(日) 23:05:420436デフォルトの名無しさん
2006/02/12(日) 23:06:58無理ですか?
0437デフォルトの名無しさん
2006/02/12(日) 23:07:170438デフォルトの名無しさん
2006/02/12(日) 23:08:210439デフォルトの名無しさん
2006/02/12(日) 23:11:30その方法ではDLLファイルができてしまうのでいやです。
0440デフォルトの名無しさん
2006/02/12(日) 23:11:43同じプロジェクトでないといけないのなら厳しいかも。
0441デフォルトの名無しさん
2006/02/12(日) 23:15:110442デフォルトの名無しさん
2006/02/12(日) 23:16:462005ならできますか?
0443デフォルトの名無しさん
2006/02/12(日) 23:17:100444デフォルトの名無しさん
2006/02/12(日) 23:19:230445デフォルトの名無しさん
2006/02/12(日) 23:20:27できませんか?
0446デフォルトの名無しさん
2006/02/12(日) 23:25:08もはや私の問いに答えられてないので問題外です。
>>434
480 - 160= ?
0447デフォルトの名無しさん
2006/02/12(日) 23:25:340448デフォルトの名無しさん
2006/02/12(日) 23:29:39できませんか?
0449デフォルトの名無しさん
2006/02/12(日) 23:36:38お前誰やねん。
お前の問いってなんやねん?
あれか?component1.Invokeって得体のしれんやつを呼んだときに
スレッドで実行されない(意味不明)ようにする方法ってやつか?
0450デフォルトの名無しさん
2006/02/12(日) 23:40:12さっきから何遍もひつこいんだよ。
MSDN読んでこい。
0451デフォルトの名無しさん
2006/02/12(日) 23:43:16もうほっとけ。
俺流理解でその間違いに気づきもしないやつは放置
0452デフォルトの名無しさん
2006/02/12(日) 23:45:35いや、ひつこいとかじゃなくて、できませんか?と訊ねてる。
0453デフォルトの名無しさん
2006/02/12(日) 23:54:04自己紹介乙
0454デフォルトの名無しさん
2006/02/12(日) 23:56:53ああ、そらそこだけしか読んでないなら意味不明ですね。
2chには初心者板があるのでそこで勉強されては銅でしょうか。
0455デフォルトの名無しさん
2006/02/13(月) 00:02:49全部呼んでも意味わからんわ。
だから>>430ではどう駄目なのかかけ。
デザイナの自動設定で足りないってんなら
どんなのを期待してんだ?
勝手に何に同期すればいいか判断しろってか?
だったらForm.ActiveFormあたりか、
それでは怪しいなら、いっそコンストラクタでスタックフレーム
取得して、呼び出し側のコントロールを探して、
SynchronizingObjectに自動設定でもしてやれよ。
0456デフォルトの名無しさん
2006/02/13(月) 00:04:09知識の無い>>454に遊ばれてるだけ。はよ気づけや。
0457デフォルトの名無しさん
2006/02/13(月) 00:05:140458デフォルトの名無しさん
2006/02/13(月) 00:19:25delegateと実行スレッドは何の関連性もない。以下のコードのように
どっちでも出来る。
MethodInvoker invoker = delegate { Console.WriteLine(".."); };
invoker(); //これでこのスレッドで実行される
invoker(delegate (IAsyncResult r) { invoker.EndInvoke(r); }, null);
//これでスレッドプールを使う(別スレッド)
んで >>430
当然のごとく型システムの上にあるコンポーネントもスレッドに依存など
標準ではしないしだから同期する仕組みが必要になる。
そして、WinFormsはMessageLoopのスレッドに依存する。だから別スレッドから
操作することが出来ない。これを解消するために用意されている方法が
ISynchronizeInvokeとSyncObject。FileSystemWatcherあたりがこれを使用する。
>>409の「完全に間違った」前提で話すから「わけ分からん」といわれるのよ。
分かったらもうくるな屑が
0459458
2006/02/13(月) 00:21:24invoker.BeginInvoke(delegate (IAsyncResult r) { invoker.EndInvoke(r); }, null);
//これでスレッドプールを使う(別スレッド)
0460デフォルトの名無しさん
2006/02/13(月) 00:29:19BeginInvokeって書かんでもいけたっけ?俺なんか勘違いしてる?
しかし匿名デリゲート使えばこんな風にできるか、そうか…
Fire&Forgetがやりやすくなるな…
0461デフォルトの名無しさん
2006/02/13(月) 00:29:580462デフォルトの名無しさん
2006/02/13(月) 00:34:16で、それを標準的なイベント呼び出しと同等に使えるわけ?
0463デフォルトの名無しさん
2006/02/13(月) 00:39:30…
イベントの呼び出しを必要に応じてInvokeで実行するんだよ。
ってか非同期イベントもった標準のコンポーネントはみんなそうなってるだろ。
0464デフォルトの名無しさん
2006/02/13(月) 00:40:42「イベントを発行する」コンポーネント側でInvokeするんだよ。
だから使う側からは普通とおんなじだ。
0465デフォルトの名無しさん
2006/02/13(月) 00:44:51以下ループ
0466デフォルトの名無しさん
2006/02/13(月) 00:45:32なるほど、ようやく有識者が現れてくれました。ありがとうございました。助かりました。
0467デフォルトの名無しさん
2006/02/13(月) 00:46:030468デフォルトの名無しさん
2006/02/13(月) 00:47:26騙りは見苦しいです。
0469デフォルトの名無しさん
2006/02/13(月) 00:47:540470デフォルトの名無しさん
2006/02/13(月) 00:49:020471デフォルトの名無しさん
2006/02/13(月) 00:51:48少しは自分で考えろ屑。eventも大体delegateを使って実装するんだし、んなもの実装者が勝手に
決める。
TcpListenerあたりを使ってなんかのサーバーをやるコンポーネントを実装する例でも挙げてやる
Listenするスレッドでイベント処理もやってもいいがその場合処理が時間かかると普通はよろしくない
こういう場合にThreadPoolを使用する実装にしたいとしてこんなコードを書いてもいい。
public event EventHandler Request;
protected virtual void OnRequest(EventArgs e) {
lock(this) {
if(SyncObject!=null) {
if(Request!=null)
SyncObject.Invoke(Request, new object[] { this, e });
} else {
if(Request!=null)
Request.BeginInvoke(delegate(IAsyncResult r) { lock(this) { Request.EndInvoke(r); } }, null);
}
}
}
結局のところ実装者による。
0472デフォルトの名無しさん
2006/02/13(月) 00:53:14冷静に読んだ。
当然のごとく型システムの上にあるコンポーネントもスレッドに依存など
標準ではしないしだから同期する仕組みが必要になる。
そして、WinFormsはMessageLoopのスレッドに依存する。だから別スレッドから
操作することが出来ない。これを解消するために用意されている方法が
ISynchronizeInvokeとSyncObject。FileSystemWatcherあたりがこれを使用する。
0473デフォルトの名無しさん
2006/02/13(月) 00:53:57>こういう場合にThreadPoolを使用する実装にしたいとしてこんなコードを書いてもいい。
俺はそう言う実装にしたくないので前提が崩れてしまいます。
0474デフォルトの名無しさん
2006/02/13(月) 00:56:000475デフォルトの名無しさん
2006/02/13(月) 00:57:05>Request(e);
作ったスレッドでメソッドが動こうとする。
>SyncObject.Invoke(Request, new object[] { this, e });
WinFormのスレッドでメソッドが動く。
こういう事?
0476デフォルトの名無しさん
2006/02/13(月) 00:57:32やめたらいいってことすら分からないのか、それとも
ただただ書き込んでるだけなのか?
0477デフォルトの名無しさん
2006/02/13(月) 00:59:10>>Request(e);
>作ったスレッドでメソッドが動こうとする。
「作った」スレッドじゃなくて「今まさに動いてる」スレッド。
「今ここを実行してる」スレッド。
0478デフォルトの名無しさん
2006/02/13(月) 01:06:33この実装はほとんど屑の言っている要件を満たす目的でかいてる。
SyncObjectがセットされている場合はそれに同期したスレッドで実行し、
そうでない場合はThreadPoolを使う。まぁ標準的な実装だ。
ちなみに、実行スレッドと何の関係性もないことを示した先の書き込みの
意味を含めて、実際に実装者が勝手に指定できることを示すために
ThreadPoolを使っている。
>SyncObject.Invoke(Request, new object[] { this, e });
WinFormのスレッドでメソッドが動く。
これが同期する場合のすべてだ。この場合SyncObjectはプロパティな。
ちなみに、これのセット用のコードを直接コードジェネレータに吐き出させる
ことも出来るだろうがその話は長くなるので省略。
0479デフォルトの名無しさん
2006/02/13(月) 01:30:05問題はComponentからではWinFormに属するオブジェクトを取得できないことですな。
0480デフォルトの名無しさん
2006/02/13(月) 08:43:09みょんなことはない。
Designerを作ってInitializeあたりでGetServiceでIDesignerHost取って
RootComponentを取ってISynchronizedInvokeにasキャスト。
んでそれを渡されたコンポーネントのSyncObjectプロパティにセット。
もちろんそのコンポーネントのクラスにDesignerAttributeを指定すること。
プロパティ側はきちんとした値がセットされた場合にSerializeしてちょと
指定。でいけるはず。みょん。
0481デフォルトの名無しさん
2006/02/13(月) 11:07:42永久に悩んでろクズ野郎
0482デフォルトの名無しさん
2006/02/13(月) 14:54:38なんか、命令一発で出来そうな気もするんですが、ググっても見当たらないんで、
自分で実装するしかないかないかなとあきらめ気味なんですが。
0483デフォルトの名無しさん
2006/02/13(月) 15:19:000484デフォルトの名無しさん
2006/02/13(月) 16:47:090485デフォルトの名無しさん
2006/02/13(月) 18:42:10Process.start()で、標準出力に1秒おきに1行適当な文字列を出力するプログラムを実行しています。
Process.StandardError.ReadToEnd()、ReadLine()では、そのプログラムが終了するまでストップしてしまい、リアルタイムに1行ずつ読み取ることができませんでした。
void Run() {
while(!this.process.HasExited) {
Thread.Sleep(50);
this.process.StandardOutput.ReadToEnd(); // ←ここでストップ
}
}
リアルタイムにReadしたい場合はどうすればよいのでしょうか?
0486デフォルトの名無しさん
2006/02/13(月) 18:49:08とりあえずReadで一文字ずつ読んでけば?
あとRead系は読みとれるまでブロックしてくれるので、Thread.Sleep呼ぶ必要はないはず。
0487デフォルトの名無しさん
2006/02/13(月) 19:55:34レスありがとうございます。自力で実装します・・・。
>>484
レスありがとうございます。笑わせて頂きました・・・・。
0488デフォルトの名無しさん
2006/02/13(月) 19:56:26EPSファイルを、GIFファイルに、変更するフリーのDLLないでしょうか。
できれば、EPSを読み込んだあと、GetPixel()とかできるのがよいです・・。
(VC++とWIN32APIとのスレとの重複投稿です、どこに投稿すればよいのかわからなかったんで、
大変恐縮ですが、3つのスレに投稿させていただきました。)
0489デフォルトの名無しさん
2006/02/13(月) 20:12:50レスありがとうございます。
どうしても、ReadLine、Readでとまってしまいます。変なことはしていないはずなのですが…
private void button1_Click(object sender, System.EventArgs e) {
MyThread mt = new MyThread(this.textBox1);
Thread t = new Thread(new ThreadStart(mt.Run));
this.textBox1.Clear();
t.Start();
}
public class MyThread {
ProcessStartInfo psi;
TextBox tb;
public MyThread(TextBox tb) {
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = @"C:\MyCode\C\out.exe"; // C言語で1秒おきに4回puts()するプログラム
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
this.psi = psi;
this.tb = tb;
}
public void Run() {
Process p = Process.Start(this.psi);
StreamReader errs = p.StandardError;
StreamReader outs = p.StandardOutput;
while (!p.HasExited) {
//while (outs.Peek() > 0) {
this.tb.Text += outs.ReadLine() + "\r\n";
//}
}
0490デフォルトの名無しさん
2006/02/13(月) 20:29:01KeyDownまたはKeyPressイベントをコードで
生成したいのですが、どのように書いたらよろしいでしょうか?
Clickはbtn.PerformClickでできると思うのですが、
同じように「txtBoxに対してF8キーが押された」というような
「txtBox.SendKeys(Keys.F8)」みたいなことがしたいのですが...。
どなたかアドバイスご教授よろしくお願い致します。
0491485=489
2006/02/13(月) 20:35:05要は、Start()したProcessをProcess.StandardOutput/Error.ReadLineする時、489の方法ではProcessが終了するまで固まってしまうので、それを回避する方法を探しています。
何かよい方法はありませんか?
0492デフォルトの名無しさん
2006/02/13(月) 20:37:02ほぼコピペしただけだけど再現しないね。
// 問題ありまくりなコードだな。
>>490
冷静に考えてみれば実行したいメソッドを呼べば済む話だったりしない?
SendKeysクラスもあるけど。
0493デフォルトの名無しさん
2006/02/13(月) 22:00:49C#とどう関係あるか説明してから質問しろ
0494デフォルトの名無しさん
2006/02/13(月) 22:04:46Fire-and-Forgetで非同期デリゲートを使うときにコールバックを使うのは理解できているのですが、
Control.BeginInvokeではコールバックを指定することができないようです。
Control.BeginInvokeでFire-and-Forgetをしたいときはどういう手段があるのでしょうか。
0495デフォルトの名無しさん
2006/02/13(月) 22:08:030496デフォルトの名無しさん
2006/02/13(月) 22:52:23ISynchronizeInvokeは「同期」するための機構であって「非同期」するための
機構じゃないんだな。
というかメソッドの名前が同じなのが勘違いのすべての原因な気がするが。
Fire-and-Forgetは非同期なわけで使えないと。したいんならそれ自体を
delegate.BeginInvokeに組み込みなされ
MethodInvoker invoker = delegate {
this.Invoke(new MethodInvoker(delegate {
//同期コード
}));
};
invoker.BeginInvoke(delegate(IAsyncResult r){ invoker.EndInvoke(r); }, null;);
まぁまず使うことないんだけどな。ワーカースレッドは普通ステップ的だし
UIスレッドと対話するなら大抵レスポンスは必要だ(いらんでもUIの更新が
終了して普通Completeだろうよ)。
0497デフォルトの名無しさん
2006/02/13(月) 23:55:50そこまでせんといかんですか。
Delphiならコンストラクタで親のTComponentが渡ってきてたのですが、
ここまで来るともはやクラスライブラリの設計ミスですね。
0498デフォルトの名無しさん
2006/02/14(火) 00:19:17そこまで?クラスコードを入れてせいぜい20行ぐらいでできるけど…。
実装だけなら数行。
というか5分で作って確かめて投稿したんだけど。
Delよりもデザインやらコンポーネントのフレームワーク自体大掛かりだから
クラスは確かに多くて複雑だけど、設計ミスってのは感じないな
0499485=489=491
2006/02/14(火) 03:45:13http://www.t-server.net/clip3/file/14.zip
これは動作しますか?私の環境ではうまくいきません…
0500デフォルトの名無しさん
2006/02/14(火) 06:33:08現在のスレッドのProcessThreadのインスタンスを取得したいのですが、MSDNを読んでもいまいち方法がわかりません。
ProcessクラスやThreadクラスにも取得するメソッドがないようです(コレクションは取得できるようなのですが)。
どなたかわかる方いますか?
0501デフォルトの名無しさん
2006/02/14(火) 07:18:44GetCurrentThreadIdはAppDomainにあったんだが、.NET 2.0でObsoleteになったのでWin32APIの方で。
0502500
2006/02/14(火) 07:58:42どうもです。
うーんやっぱりそれしかないんでしょうか・・・
スマートとは言い難い方法なので、できればもっと直接的に取得する方法を知りたいのですが。
まあないのなら仕方ないですが
0503デフォルトの名無しさん
2006/02/14(火) 08:29:49うまく動かないねぇ。
原因までは追及できないけど、Cの実行ファイルの問題のようだ。
.NETでない標準出力リダイレクタでも最後にまとめて出力される。
0504デフォルトの名無しさん
2006/02/14(火) 09:52:02API使ってまでobsoleteは避けるべきなの?
このobsoleteの理由からも意味ないと思うんだが。
0505デフォルトの名無しさん
2006/02/14(火) 10:01:35warningが鬱陶しいってのもある。
0506デフォルトの名無しさん
2006/02/14(火) 10:42:180507デフォルトの名無しさん
2006/02/14(火) 12:06:540508デフォルトの名無しさん
2006/02/14(火) 14:47:47partialキーワードでFormクラスを二つに別けてますよね。
画面上のコントロールに対する独自の初期化処理って
みんなどっちに書いてます?
どっちかが推奨されているとか無ければ、
InitializeComponent呼び出しの後に追加したいんですが、
どうでしょう?
0509デフォルトの名無しさん
2006/02/14(火) 14:49:450510デフォルトの名無しさん
2006/02/14(火) 14:51:44よく分かりました。
ありがとうございました。
0511デフォルトの名無しさん
2006/02/14(火) 16:17:04入れるものの型を指定できるリストは無いですか?
0512デフォルトの名無しさん
2006/02/14(火) 16:17:420513デフォルトの名無しさん
2006/02/14(火) 16:19:15詳しく
0514デフォルトの名無しさん
2006/02/14(火) 16:20:59詳しくもくそも.NET 2.0の目玉機能だ。2005Expressを落とせ。
0515デフォルトの名無しさん
2006/02/14(火) 16:21:350516デフォルトの名無しさん
2006/02/14(火) 16:23:51>>515
System.Collections.Genericが出ない・・・
古いからかorz
0517デフォルトの名無しさん
2006/02/14(火) 17:10:35だから 2005 入れろって。
Express ならただだから。
0518デフォルトの名無しさん
2006/02/14(火) 18:08:50そこで、PerformanceCounterクラスの説明を読んだのですが、
windowsのタスクマネージャのような
プロセス毎のCPU使用率を取得したい場合、
何秒か毎に全プロセスのCPU使用率を取得したら、
メモリかなり食うと思うのですが、
他に方法は無いのでしょうか?
(タスクマネージャは家の環境では概ね平均4Mbyte程度のメモリしか使わないので)
厳しく導いてください。
0519デフォルトの名無しさん
2006/02/14(火) 18:28:560520デフォルトの名無しさん
2006/02/14(火) 18:33:43今実際にProcessクラスを利用して5秒おきに
プログラムへのフルパス
プログラム名
会社名
このファイルを含む製品の名前
プロセスID
プログラムの説明
メモリ使用量
を取得してます。(実際には毎度取得するのはメモリ使用量だけにしてます)
フォームに上記の機能だけ持たせて実行すると15メガ位メモリを使っています。
これに更にCPU使用率のロジックを追加したら。。っと思いました。
タスクマネージャは軽いのになぁと言う思いから質問させていただきました。
0521デフォルトの名無しさん
2006/02/14(火) 18:36:570522デフォルトの名無しさん
2006/02/14(火) 18:51:02コアルーチンとGUI.csを分けるしかないですよね。
コアルーチンを1つ作って
1.1用のGUIと2.0のGUIをVS2003とVS2005で作るのがベター?
0523デフォルトの名無しさん
2006/02/14(火) 18:54:150524デフォルトの名無しさん
2006/02/14(火) 18:56:07つか1.1のアセンブリを2.0しか入ってない環境で動かしたら自動的に2.0で動くんだからそれで良いんじゃね?
0525デフォルトの名無しさん
2006/02/14(火) 19:13:030526デフォルトの名無しさん
2006/02/14(火) 19:28:20仕事だからさ、開発環境決められてるんだよ・・・・
まぁObject型で入れてキャストして使えばいいんだけどさorz
0527デフォルトの名無しさん
2006/02/14(火) 19:30:51そりゃ駄目だ。
つーか、2.0のこと全く調べてなかったのかよ
0528デフォルトの名無しさん
2006/02/14(火) 19:32:06新規じゃないから・・・・
1.1からの変更だからorz
0529デフォルトの名無しさん
2006/02/14(火) 19:35:08ならあきらめて object からダウンキャスト。
ジェネリクス使いたかったら .NET Framework 2.0 必須。
0530デフォルトの名無しさん
2006/02/14(火) 19:38:01そうします
0531デフォルトの名無しさん
2006/02/14(火) 19:39:00C#は初めて触るのですが
マウスのドラッグで範囲選択したものをコピーするアプリを作ろうと思ったのですが
慣れのせいもあるんでしょうが、C#のクラスライブラリの見方がいまいち分かりません・・・
ドラッグしたものをクリップボードに格納するのに必要なMethod等を調べたいのですが
どなたかヒントをいただけないでしょうか?
ちなみに作ろうと思っているものは、たとえば
例:A
a:link { text-decoration:none;color:gray; }
a:visited { text-decoration:none;color:gray; }
a:active { text-decoration:none;font-size:11pt;color:gray;}
a:hover { text-decoration:color:gray;}
というのがあったとして以下を範囲指定してコピー、カット、ペーストが出来る物を作りたいんです。
例:B
{ text-decoration:none;color:gray; }
{ text-decoration:none;color:gray; }
{ text-decoration:none;font-size:11pt;color:gray;}
{ text-decoration:color:gray;}
エディタにまで仕上げるのは流石にしんどいので外部エディタ上から
例Aを本アプリ上にコピペ、本アプリ上でドラッグで範囲選択してコピー
と、いうような手法をとろうと思ってるのですが・・・
0532デフォルトの名無しさん
2006/02/14(火) 20:09:550533デフォルトの名無しさん
2006/02/14(火) 20:13:08お返事ありがとうございます。
出来ないのですか・・・
SQLplusで使える機能で痒いとこに手が届く感じで
便利だと思ったのですが(´・ω・`)
0534デフォルトの名無しさん
2006/02/14(火) 20:17:260535デフォルトの名無しさん
2006/02/14(火) 20:20:21自分で '{' 〜 '}' とか欲しいところを
決められるのがキモなのではないかと
第三者が推測してみる。
俺はGUIプログラミングしないから
実現方法はシラネけど。
0536デフォルトの名無しさん
2006/02/14(火) 20:28:59それなら
> 例Aを本アプリ上にコピペ、本アプリ上でドラッグで範囲選択してコピー
というのが意味不明になっちゃうしねー。
テキストボックスに文字列貼り付けてその中の条件に合う文字列をピックアップ、なら簡単に可能だけどさ。
0537デフォルトの名無しさん
2006/02/14(火) 20:31:09エディタはSakura使ってます。
ただ勉強がてらっていうのと
自分で何かひとつWebアプリとかではない作品を作ってみたかったんですよね。
>>535
ポイントはやっぱし矩形ですねぇ・・・
'{' 〜 '}' ←これだと正規表現で出来ますしね。
0538デフォルトの名無しさん
2006/02/14(火) 20:39:270539デフォルトの名無しさん
2006/02/14(火) 20:52:27ただし、オーナードロー必須だしマンドクセ要素はたくさん。
.NETよりもWin32APIの使い方の方を知る必要があるから.NETの勉強にはならない。
Win32API用の記述となればC#らしい書き方もそんなにできないからC#の勉強にもならない。
勉強でやるとするなら方向を間違ってるからやめとき。
0540デフォルトの名無しさん
2006/02/14(火) 21:29:12なるほど・・・
.NET、C#を勉強したいのも確かなんですが
ひとつのアプリを作ってみたいっていうのが第一ですね。
普段作ってるのがWebアプリとかなんで
一つの形になるものが作ってみたいんですよねぇ(´・ω・`)
頑張ってみます。
0541デフォルトの名無しさん
2006/02/14(火) 21:58:50Initializeは.Designer.csに書かなくてもコンストラクタの続きに書けばほとんど問題ないんですけど。
partialで分かれたComponentクラスのDispose処理ってどう書いてます?
自分はDesigner.csのDispose(bool disposing)の中に処理追加してるんですけど。
(Designerじゃないほうのコンストラクタの下にコメントをつけてDesignerを変更したことは分かるようにしてある)
0542デフォルトの名無しさん
2006/02/14(火) 22:08:450543デフォルトの名無しさん
2006/02/14(火) 22:09:470544デフォルトの名無しさん
2006/02/14(火) 22:50:12はしっこに入りきらなかった分を表示するプルダウンが現れるが、
ボタンが入り切らなくなったら2段にするとかできんのかな。
Windowsのタスクバーはそうなるんだけど。
0545デフォルトの名無しさん
2006/02/14(火) 23:16:310546デフォルトの名無しさん
2006/02/14(火) 23:27:28そうしたいのはやまやまなんですけど
他のDLLと連携するようなカスタムコンポーネントを作っててとDisposeで処理が必要な事が結構出てきてしまって
継承した場合、自分のイベントを使うんじゃなくて、overrideするようにしているからなぁ。
該当箇所だけ、Disposedイベント使おうと思います。
ところでみなさんはForm継承やUserControl継承のときは自分のイベントを使う派? override OnXXX派?
自分は制御が明示的にわかるのでoverride派。デザイナ使うの面倒だし
0547デフォルトの名無しさん
2006/02/14(火) 23:42:29例えば以下のようなコードで、現在動いている全てのプロセスを取得したいとします。
ArrayList al = new ArrayList();
// Get all processes running on the local computer.
Process[] localAll = Process.GetProcesses();
for (int i = 0; i < localAll.Length; i++)
{
al.Add(localAll[i].Id.ToString());//プロセスID
al.Add(localAll[i].WorkingSet.ToString());//メモリ使用量
al.Add(localAll[i].MainModule.FileName);//FileVersionInfo のこのインスタンスが記述するファイル名を取得します。
al.Add(localAll[i].MainModule.ModuleName);//プロセス モジュールの名前を取得します。
al.Add(localAll[i].MainModule.FileVersionInfo.CompanyName);//開発会社名
al.Add(localAll[i].MainModule.FileVersionInfo.ProductName);//プロダクト名
}
この時、今のところ以下の四つのプロセスには存在しないプロパティがあります。(MainModuleなど)
winlogon.exe
csrss.exe
System Idle Process
System
この為、ループ中に上記のプロセスのプロパティを取得しようとすると例外が発生します。
上記4つだけという確証が無いのですが、
例えば通常のデスクトップアプリケーションには必ず、
Id
WorkingSet
MainModule
MainModule.FileVersionInfo
は、存在するものとしてよいのでしょうか。
0548デフォルトの名無しさん
2006/02/14(火) 23:51:07僕もoverride派。
こだわりというか最初の仕事のコーディング規約になってたから、慣れちゃったです。
>>547
どうなんだろう。。(じゃ、レスすんなって)
0549544
2006/02/14(火) 23:52:20orz
実は自分で作ったのあるけど、ちと重いんだよね・・・
あと、ControlPaintってXP風のコントロール描画には対応してないみたいだし。
0550デフォルトの名無しさん
2006/02/15(水) 00:04:21try-catchすれ。そうすれば存在するかどうか悩まなくて済む。
0551デフォルトの名無しさん
2006/02/15(水) 00:26:53ありがとうございます。
今のところ発生している例外が2種類ありまして、
System.ArgmentExceptionと
Win32Exceptionなのですが、
他の例外があったとして、発生するかもしれない例外を
全てキャッチするという作業は、例外の切り分けが発生し、(プロセスによって存在するプロパティがまちまち)
結局、汎用性ゼロになってしまわないかと思い、
悩んでしまっていました。
そこで、プロセスIDはどのプロセスにも存在するので、
winlogon.exe
csrss.exe
System Idle Process
System
だけ(もしくは他数種類)なのであれば、条件分岐してしまおうかと思ってしまった次第です。
夜遅くにすみませんでした。
もう少し考えて見ます。
ありがとうございました。
0552デフォルトの名無しさん
2006/02/15(水) 01:34:45コンボボックスかラジオボタンを表示して
ユーザーに操作させたいんですけれど
オーナードローでどうにかするもなんでしょうか?(できるのかはわからないけど)
それともリストビューを使うことが間違ってる?
だれかご教示お願いします
0553デフォルトの名無しさん
2006/02/15(水) 01:47:21でーたぐりっどびゅー
0554デフォルトの名無しさん
2006/02/15(水) 01:47:400555デフォルトの名無しさん
2006/02/15(水) 01:50:15そしてそう言う用途なら.NET 2.0ではDataGridViewの方が楽。
0556デフォルトの名無しさん
2006/02/15(水) 03:58:00了解しました、ありがとうございますた
0557デフォルトの名無しさん
2006/02/15(水) 04:07:19なんていう命令使えばいいですか
0558デフォルトの名無しさん
2006/02/15(水) 04:08:420559デフォルトの名無しさん
2006/02/15(水) 10:40:27DataGridView以外だとサブアイテムの位置を取得して、編集のときだけ事前に準備したコンボボックスやらラジオボタンを表示すればいいかと。
オーナードローなんて最終手段であって、別の方法を探せばなんぼでもある。
もしやるとしても、ListViewのオーナードローは.NET的な方法じゃなくWin32API的な方法でやったほうが良い。
0560デフォルトの名無しさん
2006/02/15(水) 12:55:36アホっておれのことだけど。
「Windows フォーム DataGridView コントロールを拡張するための推奨される手順」
読んでようやく使える速度になってきた
0561デフォルトの名無しさん
2006/02/15(水) 17:19:17というのは、画面にボタンとプログレスバー、リストビューを置いて、
ボタンクリック時にRunWorkerAsyncを呼び出して、
DoWorkイベントでループで0〜10000まで回して、
ループの中で別の自分で作った関数を呼び出して(引数にはBackgroundWorkerとDoWorkEventArgs)
そこで、GUIの更新(リストビューにアイテムを追加)して、ReportProgressを呼び出す。
そして、ProgressChangedイベントでプログレスバーの値をカウントアップ。
思いっきり、メインのGUIの操作(画面の更新)が出来なくて固まったようになるんだが・・・
確かにプログレスバーはちゃんと更新されるが、他の操作が出来ない。
キャンセルボタン置いても、イベントが発生しないから止まりゃしない。
0562デフォルトの名無しさん
2006/02/15(水) 17:21:24作り方が間違ってる。
0563562
2006/02/15(水) 17:25:12リストビューなどを更新しろって事かな?
つまり、BeginInvokeつかって非同期でやれって事?
いまいち、BackgroundWorkerの使い方が分からん。
BackgroundWorkerを使った場合、どうすりゃいいんだ?
0565本物の562
2006/02/15(水) 17:32:25バックグラウンドスレッドで処理
フラグ立てる。
GUIタイマーでフラグチェック。必要なら描画。
0566561
2006/02/15(水) 17:39:19>暇だからいうと画面の更新を500ミリ秒ごととかにする。
これ、意味が良く分からない。
とりあえず、ループの中でSleep(1)とかしたら、いい感じで更新されたが、
いまいち納得できない。
>バックグラウンドスレッドで処理
BackgroundWorkerってバックグラウンドスレッドじゃないの?
>フラグ立てる。
>GUIタイマーでフラグチェック。必要なら描画。
これも、俺には理解できない。(無知ですまん)
ちなみに、リストビュー操作部分をコメントアウトしてみたが、結果は同じだった。
GUIスレッド云々というか、そもそも for でループしてるのが悪いみたいだ。
そういや、BackgroundWorkerのサンプルプログラムって再帰(フィボナッチ)とかSleepしてるのぐらいしか
見たことないなぁ・・・
0567562
2006/02/15(水) 17:48:39BackGroundWOrkerやよく知らんけどたぶんそう。
・バックグラウンドはフルに仕事していい。
・仕事する中、GUI画表示するのに必要なデータを場合に応じて更新。データ変わったよ変数trueに。
・GUIスレッドでタイマー動かしておく。タイマーイベントでデータ変わったよ変数チェック。
・trueなら必要なデータ見て画面更新。
基本はバックグラウンドはフルに処理。
GUIはフルに表示することに意味がない(人間の反応速度はそれほど速くない)ので適当な間隔500ミリぐらいで更新すれば十分。
いまバックグラウンドで画面更新処理を直接呼んでいるため必要以上にGUIを更新してる->反応しないようになってる。
0568デフォルトの名無しさん
2006/02/15(水) 17:50:40そのスレッドが他のスレッドを全く気にせずループ回しゃあ、そりゃ他のスレッドは動けない。
0569デフォルトの名無しさん
2006/02/15(水) 17:57:000570561
2006/02/15(水) 18:01:25>いまバックグラウンドで画面更新処理を直接呼んでいるため必要以上にGUIを更新してる->反応しないようになってる。
なんか、納得したかも。
確かに、プログレスバーの更新部分も呼ばないようにしたら、動作は問題なくなった。
でも、別の疑問が。
処理が長い場合、プログレスバーとかで状況が確認できるようにしたり、
GUIを操作する場合、例えばあるディレクトリをルートとしてサブディレクトリやファイルを
再帰的に取得したものをツリービューに表示させたりする場合とかだと、
スレッド使って画面が固まったように見せることが出来ないってことなのか?
0571デフォルトの名無しさん
2006/02/15(水) 18:10:40ちょっとは自分で調べろ
それ以前に言葉の使い方を勉強し直せ
0572デフォルトの名無しさん
2006/02/15(水) 18:14:440573561
2006/02/15(水) 18:26:39使ってないよ。
というか、プログレスバーを使った更新サンプルがMSにある。(フィボナッチ使うやつ)
ProgressChangedでプログレスバーを更新してるのはサンプル通り。
ワーカースレッドからGUIは操作自体出来ないんじゃないのか?(エラーになるだろ)
0574デフォルトの名無しさん
2006/02/15(水) 18:50:40というかそのために作られた。
大体1万回も画面に通知するのが間違い。
例えば100ループで1回にするとか、調整がいる。
0575デフォルトの名無しさん
2006/02/15(水) 18:55:14BackgroundWorkerはそういう設計にはなってない。
基本は、ワーカー側から通知という考え方になってる。
0576561
2006/02/15(水) 18:57:57>大体1万回も画面に通知するのが間違い。
>例えば100ループで1回にするとか、調整がいる。
いや、プログレスバーの更新とかはそれで良いかもしれないが、
さっきも書いたようにディレクトリを再帰的に・・・といった場合、
ツリービューにアイテム追加するとかは、そうもいかないんじゃ?
0577562
2006/02/15(水) 19:05:37すまない。もう少しわかりやすく行ってくれ。
ツリーとかにひとつずつ追加するしかなく、画面更新が頻繁になるということ?
ツリーの仕様がそうならそう。
画面更新せず追加できるモードがあるならそれ使え。
0578デフォルトの名無しさん
2006/02/15(水) 19:08:301万回「画面」を更新するのかね?
BackgroundWorkerの通知は、あくまで進捗状況のユーザへの通知が目的。
0579561
2006/02/15(水) 19:13:21いや、ツリービューとかはただの例え話だよ。
>BackgroundWorkerの通知は、あくまで進捗状況のユーザへの通知が目的。
これも言ってる事は分からなくはないが、
進行状況をプログレスバーに表示するだけなのに、画面が使い物にならなくなるんじゃ、
身も蓋も無いって事ね。
進行状況のプログレスバーは1万回画面を更新する必要はあると思うけどね。
確かに100回に1度、更新するって話も分かるが、
実際問題として、更新状況ってのはちゃんと更新されてるアプリのほうが多いよね。
0580562
2006/02/15(水) 19:16:430581デフォルトの名無しさん
2006/02/15(水) 19:17:35CPUバウンドな処理をバックグラウンドでやりたいならスレッドのプライオリティを下げればいいが、
BackgroundWorkerはThreadPoolを使ってるようだから勝手にいじっちゃいけないのかな。
0582デフォルトの名無しさん
2006/02/15(水) 19:28:55プログレスバーを一万回更新しても、実際にGUIが変わったように見えるのはその1%あるかって程度だと思うんだけど。
独自プログレスバーでピクセル単位で更新できたとしても精々4、500ピクセルだろ?
0583デフォルトの名無しさん
2006/02/15(水) 19:32:310584デフォルトの名無しさん
2006/02/15(水) 19:57:23そりゃ1時間かけて1万個処理するなら1万回更新してもおかしくないが、
更新処理だけで固まってしまうような頻度の処理毎に
画面を更新なんてありえんだろ。
仮に画面というかウィンドウの更新が間に合ったとしても、
実際に表示されてない速さじゃ無意味。
0585デフォルトの名無しさん
2006/02/15(水) 20:45:010586562
2006/02/15(水) 20:54:510587デフォルトの名無しさん
2006/02/15(水) 21:08:38普通コレクションとかにつっこんどいてあとでまとめて追加するんじゃないの?
0589デフォルトの名無しさん
2006/02/15(水) 21:43:37例えばもし画面のリストに追加していく処理なら
きっとその処理も同じとこでやってるだろう。
0590デフォルトの名無しさん
2006/02/15(水) 21:51:530591デフォルトの名無しさん
2006/02/15(水) 21:54:09メインのGUIにユーザーがフォーカスを当ててもプログレスバーがフォーカスを奪ってしまっているとかは?
プログレスバーの更新処理を行っているメソッドで適当に時間管理して、何秒経ったらプログレスバーを更新汁、みたいなフラグ入れればいいんじゃない?
ちょっと試してくる。
0592561
2006/02/15(水) 22:00:25あのさ、もう少し流れ読もうよ。
確かに最初はProgressChangedで全部書いてた。
でもって、これじゃ動作がおかしいから、ProgressChangedにプログレスバーの更新処理だけにした。
だけど、それでも動作がおかしい。(つまり、ここにリストビューの処理を書いていた事が原因じゃない)
試しにプログレスバーの更新処理もコメントアウトしてみた。(ここで予期した通りの動きになった)
そこで沸いたのが別の疑問。
進行状況を知るためのイベントで進行状況を視覚的に分かるように
プログレスバーを使用したら動かない。
これってどういうこと?
って事。
理解できたか?
>>591
プログレスバーにフォーカスって・・・
既に書いたけど、for ループの中にThread.Sleep(1)とでも入れると問題無かった。
0593デフォルトの名無しさん
2006/02/15(水) 22:04:08これだけ説明されて何が原因かわかってないのか?
0594591
2006/02/15(水) 22:18:440595デフォルトの名無しさん
2006/02/15(水) 22:28:49この馬鹿。
お前がちょっとおかしい人だから
ここの他の知識ある奴がいきり立って
俺が質問しにくくなるだろうが。
という理由から、
俺はお前に対して「迷惑なやつだな」と感じている。
お前が「俺はできる方なんだぜ」って暗にアピールしてるのを
俺はちゃんと感じ取ったから、
もうその辺で態度改めてください。
0596デフォルトの名無しさん
2006/02/15(水) 22:33:17誰かここまでのやりとりをまとめてください
0597デフォルトの名無しさん
2006/02/15(水) 22:39:05脳ROM者現る
0598デフォルトの名無しさん
2006/02/15(水) 22:50:58もう大丈夫なので安心汁。
0599デフォルトの名無しさん
2006/02/15(水) 23:38:25Visual Studioみたいにグレー調にしたんだけど、
やっぱToolStripRendererをちゃんと作らないと駄目かな・・・
0600デフォルトの名無しさん
2006/02/16(木) 01:13:07N番目からRemoveしてからInsertするという書き方以外に良い方法
がありましたら、教えてくださいませんか。
0601デフォルトの名無しさん
2006/02/16(木) 01:15:15String.Format("{0");
0602デフォルトの名無しさん
2006/02/16(木) 01:16:190603デフォルトの名無しさん
2006/02/16(木) 01:17:34つ クラシックモード
0604デフォルトの名無しさん
2006/02/16(木) 01:18:02つまり、String.Format("{0}{1}",a.Substring(0,N),"上書きしたい文字列")とかどうよ。
0605デフォルトの名無しさん
2006/02/16(木) 01:19:48なにはともあれ、おまい優しいな。
愛してはないけど好きだ。
おやすみ。
>>600の為に言っとくけど別人だからw
0606デフォルトの名無しさん
2006/02/16(木) 08:28:17レスありがとうございます。
言葉が足りなくてすみません。
あいうえおかきくけこ←任意の文字列
を
AAA←別の文字列で3番目から上書き
あいAAAかきくけこ
とこういうふうな処理をしたいわけなんですが
Replaceは、検索文字列がいるし
Remove→Insertではスマートじゃないかなあ
と思ってるわけなんですが…、いい方法はありますでしょうか?
0607599
2006/02/16(木) 10:17:38さすがに今更それは見栄えがしない・・・
てかなんでOfficeXP風がデフォなんだよ。
せめてstaticで用意してよ、ゲイツタン。
0608デフォルトの名無しさん
2006/02/16(木) 10:33:10string s = "あいうえおかきくけこ";
Microsoft.VisualBasic.CompilerServices.StringType.MidStmtStr(ref s, 2, 3, "AAA");
えーとMidステートメントをC#で使うにはこれでいいんだっけ・・・
0609デフォルトの名無しさん
2006/02/16(木) 11:32:12ToolStripRenderMode.Systemじゃダメなん?
0610デフォルトの名無しさん
2006/02/16(木) 11:51:15ハイライトの色になるってのもなんとかしてほしい
0612デフォルトの名無しさん
2006/02/16(木) 14:06:00標準に文句があるなら自分で作るべし
開発者だろ?
0613599
2006/02/16(木) 14:26:19言いたいのはなんでダサいOfficeXPスタイルがデフォなんだということだ。
0614デフォルトの名無しさん
2006/02/16(木) 14:29:21なんか意味あるとおもってるのか?このちんかす。
0615デフォルトの名無しさん
2006/02/16(木) 14:55:04Visual DeveloperのMVPになって直接MPDの開発者に言えよカス
そこまで行けない豚脳がブヒブヒ言ってんじゃねーよ
0616デフォルトの名無しさん
2006/02/16(木) 15:14:32何がデフォルトかは、お前がダサいと思うかどうかと関係ねえんだよ。
ピザでも食ってろデブ。
0617デフォルトの名無しさん
2006/02/16(木) 16:15:50オレはダサいとは思わない
ビジネスデスクトップ向けアプリを作る上ではOfficeと同じルック&フィールになった方が利益ある。
見栄えってのは個人のセンスではなく、広く普及しているものと同じかが重要。
0618デフォルトの名無しさん
2006/02/16(木) 16:18:150619デフォルトの名無しさん
2006/02/16(木) 20:35:010620デフォルトの名無しさん
2006/02/16(木) 20:47:100621デフォルトの名無しさん
2006/02/16(木) 21:37:32どうすればいいのでしょうか?
Heightプロパティがなくて困っています
0622606
2006/02/16(木) 21:42:54遅レスですがありがとうございました。
あれから少し調べてみたのですが、
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/dnguinet/htm/drguinet5_update.asp
ここのホームページを見るに
608さんのやられたように、VBのmidステートメントを
使うか、substringかremoveやinsertを使用して
処理をするしかないようですね。
0623デフォルトの名無しさん
2006/02/16(木) 21:54:44Word12とかのリボンとツールバーは別物
Outlook12とかInfoPath12は相変わらずツールバー
今見てみたから間違いない
0624デフォルトの名無しさん
2006/02/16(木) 21:57:37ってどんな感じでつかうのでしょうか?
Webを探してもサンプルがみつかりま
せんでした。。。。
C#初心者なもので、ご教授お願いし
ます。
0625デフォルトの名無しさん
2006/02/16(木) 22:13:41.NET 2.0のヘルプではSocketOptionName列挙体のメンバで、
> サポートされていません。使用すると SocketException がスローされます。
というのしか見つからないが。
0626デフォルトの名無しさん
2006/02/16(木) 22:15:50これ見て出直して来い
真・技術系メーリングリスト FAQ
http://www.geocities.co.jp/SiliconValley/5656/
0627デフォルトの名無しさん
2006/02/16(木) 22:19:430628624
2006/02/16(木) 22:28:14ソケット通信で、サーバ側でクライアントの接続数を
制限したいのですがどのようにすればよいでしょうか?
MaxConnectionsは.NETのヘルプで"Listen"を調べた
時に知って、検索してみると
"http://www.microsoft.com/windows2000/ja/advanced/iis/default.asp?url=/windows2000/ja/advanced/iis/htm/asp/apro66pf.htm"
がでてきたんですが、使い方がよくわからず、質問さ
せていただきました。
C#では使えないようですね。。。
0629デフォルトの名無しさん
2006/02/16(木) 22:29:09次はC#をやってみようと思うのですが,C MAGAZINEから出ている『詳説C++第2版』のような感じの本ってありますか?
「あーコレ,C#使ってる人なら大体持ってるよ…」って感じの本
0630デフォルトの名無しさん
2006/02/16(木) 22:35:05IISのページじゃねーか……。
どうやって通信を実装させてるのかも分からずに答えられるか。
0631デフォルトの名無しさん
2006/02/16(木) 23:18:36勉強は良いから物作れや。
0632デフォルトの名無しさん
2006/02/16(木) 23:35:34hogehogeボタンをクリックしたときだけ
hogehogeテキストを表示させるようにしたいのですがどうすれば良いですか
0633デフォルトの名無しさん
2006/02/16(木) 23:38:47MS系の開発で最初に読むべきは「MSDNライブラリ」
IDEの支援機能も強力だから、Javaとかの経験があるならヘルプ無しでもある程度いける
あとはMSDNオンラインも見とけ
正直、MSの開発ドキュメントに対する力の入れ方は史上最高だと思う
書籍はMSDNライブラリの補足とかケースバイケースな事例を知るために後で買えば十分
0634デフォルトの名無しさん
2006/02/16(木) 23:39:070635デフォルトの名無しさん
2006/02/16(木) 23:40:06WindowsアプリですかWindowsコンソールですかASP.NETですか
貴様は何をどこまでやってその疑問が生まれましたか
0636デフォルトの名無しさん
2006/02/16(木) 23:41:02hogehogeボタンのイベントハンドラ
0637デフォルトの名無しさん
2006/02/16(木) 23:41:04意味が全然わからんぞ。どこに表示したいんだ。
hogehogeボタンの表面から北極星の瞬く夜空までいろいろあるだろが。
0638デフォルトの名無しさん
2006/02/16(木) 23:42:45根本的に基礎知識が不足してる
System.Net関連をざっと見てから出直せ
0639デフォルトの名無しさん
2006/02/16(木) 23:43:470641デフォルトの名無しさん
2006/02/16(木) 23:44:55>>637
重要なのは表示先じゃなくイベントのハンドリングだと思うが。
0643デフォルトの名無しさん
2006/02/16(木) 23:50:11MSDNはそんなに大きいんですか..分かりました.それでいってみようと思います
あの,全くの初心者のする質問になっちゃうんですが
VS2005 は .NET の開発環境なんですよね?
あと, .NET はあと何年くらいもつのでしょうか?
0644デフォルトの名無しさん
2006/02/16(木) 23:50:352
年ちょい。
0645637
2006/02/16(木) 23:50:560646デフォルトの名無しさん
2006/02/16(木) 23:51:36C#によるプログラミングWindows(上/下)
Perlにおける駱駝本、JavaにおけるコアJAVAに相当する。
C++とJavaが使えるならC#はこの2冊で万全。
あとは必要性と習熟に応じてプログラミングMicrosoft ADO.NETや
.NETエンタープライズWebアプリケーション開発技術大全辺りを…
0647632
2006/02/16(木) 23:56:45どんなイベントでどこになに表示させるか言ってないのが悪かったね
ただどうやったら表示を隠したりできるのかが知りたかったけど何かそれっぽいソース探りあてたのでもうおk
0648デフォルトの名無しさん
2006/02/16(木) 23:58:11一生笑ってろ。
0649デフォルトの名無しさん
2006/02/16(木) 23:58:470650デフォルトの名無しさん
2006/02/17(金) 00:16:42そしてCrystal Reportのライブラリとhoge.dllをパッケージ化したセットアップファイルを
作成して別マシンにインストールしました。
今度はその別マシン上で、hoge.dllを参照してそれ経由でCrystal Reportの帳票を
出力する業務アプリfoo.exeを作り、コンパイルしました。
ところがそのfoo.exeをその別マシン上で実行しようとすると以下のエラーが出ます。
System.IO.FileNotFoundException: ファイルまたはアセンブリ名 System.Data、
またはその依存関係の 1 つが見つかりませんでした。
Fusion log follows:
=== Pre-bind state information ===
LOG: DisplayName = System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 (Fully-specified)
LOG: Appbase = C:\Test\
LOG: Initial PrivatePath = NULL
Calling assembly : foo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: Publisher policy file is not found.
LOG: Host configuration file not found.
LOG: Using machine configuration file from C:\WINNT\Microsoft.NET\Framework\v1.0.3705\config\machine.config.
LOG: Post-policy reference: System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
LOG: Attempting download of new URL file:///C:/Test/System.Data.DLL.
LOG: Attempting download of new URL file:///C:/Test/System.Data/System.Data.DLL.
LOG: Attempting download of new URL file:///C:/Test/System.Data.EXE.
LOG: Attempting download of new URL file:///C:/Test/System.Data/System.Data.EXE.
0651デフォルトの名無しさん
2006/02/17(金) 00:17:26このfoo.exeをVS.NETの同プロジェクトの中に含めてパッケージ化→配布すると
上手く実行されます。たぶん署名関係が原因だと思うのですが、foo.exeは
VS.NETで作った同じプロジェクトに含めて配布する必要があるものなのでしょうか?
それだとfoo.exeを直す度にいちいち修正していない他のライブラリも一緒に
リリースすることになってしまい、あまり好ましくないのです。
foo.exeは修正頻度がおそらく高いので、修正したfoo.exeだけを単純コピーで
リリースできる運用にしたいのですが、そうするにはどのような作成方法で
作ればよいのでしょうか?
0652デフォルトの名無しさん
2006/02/17(金) 07:02:14ClickOnce
0653デフォルトの名無しさん
2006/02/17(金) 07:33:56よくわからないが .NETの1.0を探しにいってるな。
0654デフォルトの名無しさん
2006/02/17(金) 09:10:35>>652
ClickOnceって2005からの機能なんですよね・・・残念ながら無理です。
>>653
実行させるマシンには1.0が載っているので1.0で動作させる必要があるのです。
なのでパッケージも1.0のランタイムを指定して作成しています。
0655デフォルトの名無しさん
2006/02/17(金) 09:23:11いや、VS2003だよね?
じゃ1.1しか作れないはずなんだけど…。
0656デフォルトの名無しさん
2006/02/17(金) 09:57:28その腐った環境に合わせてバージョンリダイレクトを適切に設定しろ
もしくはVS2002を使え
.NETにDLL HELLは無いと言っても無設定でなんでもできるわけじゃない
楽しようと思ったら全てにおいてバージョンを合わせるべし
0657デフォルトの名無しさん
2006/02/17(金) 10:44:08いえプロジェクトの設定で1.0を指定できました。セットアップも1.0指定で作っています。
実際に別マシンには1.0しか乗っていないにも関わらずVS2003で作成したアセンブリが
動作することはできました。
これはバージョンの問題なのでしょうか?認証とかの問題ではないってことですか?
0658デフォルトの名無しさん
2006/02/17(金) 10:52:09ちょっと脱線話
だけど
開発元(のようなもの)が書いた本って
何故あんなに分かりにくいのだろうか。
読む気しねえ。
って言うと、
でも一番詳しいとか批判受けそうだけど。
俺>>629じゃないよ
0659デフォルトの名無しさん
2006/02/17(金) 11:31:09MSが書いてるのはMSDNだけ
他は外部ライター
MSDNの中身も外部ライターが多いけどな
0660デフォルトの名無しさん
2006/02/17(金) 12:22:04そんな設定があった気がしないが…。そもそもクリレポも2003付属のやつなら
1.1のやつのはずだ。まぁそっちの環境なんて分からんので何かしたのだろうが。
原因はSystem.Data.dllの1.0.5000.0やつは1.1付属のやつだ。1.0の環境では当然ない。
どれかが参照しているはずだからその辺直せ。
ttp://www.atmarkit.co.jp/fdotnet/technology/idnfw11_05/idnfw11_05_02.html
0661デフォルトの名無しさん
2006/02/17(金) 23:01:191.何らかの処理(範囲チェック、文字列⇔数値変換など)がない場合は、プロパティを使用せず
フィールドをpublicで公開するか
2.自分自身のクラスのフィールドにアクセスするときでも必ずプロパティ経由でアクセスするか
3.自分自身のクラスの(1)フィールド(フォームデザイナが作成したコントロールのメンバも含む)
(2)プロパティ(3)メソッドを呼び出すときに this.を頭につけるかつけないか
ぜひ教えてください。
0662デフォルトの名無しさん
2006/02/17(金) 23:08:162)フィールドに直アクセス。
privateならフィールドをプロパティに書き換えても影響ないから後で変更できるし。
3)thisは必ず。
0663デフォルトの名無しさん
2006/02/17(金) 23:11:48参考にしたいので、(1)の理由を教えてください。
0664デフォルトの名無しさん
2006/02/17(金) 23:17:48プロパティの場合PropertyDescriptorであれこれしたりするとかの利用者の便宜が得られるので初めからそうしとく。
リフレクションをたまに使うので混乱しないように。
0665デフォルトの名無しさん
2006/02/17(金) 23:27:300666デフォルトの名無しさん
2006/02/17(金) 23:35:37(3)ですが、VS2005だと「フィールドのカプセル化」で自動生成させると
thisがつきませんが、手動でつけてるんでしょうか?またメソッドや
フォームのコントロールもthisをつけてるということですよね。
結構大変なので、自分の場合つけたりつけなかったりで逆に読みづらいorz
0667デフォルトの名無しさん
2006/02/17(金) 23:44:160668デフォルトの名無しさん
2006/02/17(金) 23:57:120669デフォルトの名無しさん
2006/02/18(土) 00:18:32publicフィールドは特殊な構造体や非同期結果保持クラス、Xmlシリアライズデータクラスなどのデータを保持するだけのクラスにしか用いない。
フィールド云々というより、むしろ、クラスはプロパティ(特性)を頭に浮かべて設計するので(I/Fにpublicフィールドなどない感じ
(2)
変更可能性が高いと肌で感じたものやLazyInitializeなど特殊な処理をするもの)は
自分専用のプロパティをprivateプロパティで定義する
(3)
-プロパティにはthisをつける。
理由:プロパティの命名規則は先頭大文字だからクラス名と区別をつきやすくするため。
-フィールドにはthisをつけない。
理由:フィールドは_始まりでやってるため、thisをつけると冗長。Intelisenceが一文字で効くため
0670デフォルトの名無しさん
2006/02/18(土) 08:01:41そんなことはまだやったこと無いから、結構publicプロパティも使ってる。
ただ、VS2005になってプロパティ作るのそんなに面倒じゃなくなったから最近はきちんとプロパティにしてたりする。
privateなクラスやinternalなクラスは相変わらずだけどね。
2ほとんどプロパティ使ったこと無いな。必要なのはどっちかって言うとメソッドになってたり。
3全部thisはつけない
0671デフォルトの名無しさん
2006/02/18(土) 10:01:57ただしPrivate P/Invokeを除く。Internal P/Invokeはプロパティにする。
こうしとかないとそのクラスListBoxに突っ込んだりもできないじゃん。
2.フィールド直アクセス。
個人的にプロパティ経由アクセスと揺れてたんだけど、経験からこっちの
ほうがきれいに書ける場合が多いと判断したのでこっちで。
3.大体つける。でも見通しが悪いと思ったらはずす。
0672670
2006/02/18(土) 10:02:43↓
結構publicフィールドも使ってる
0673デフォルトの名無しさん
2006/02/18(土) 11:08:12いやぁ助かる。
0674デフォルトの名無しさん
2006/02/18(土) 12:11:40それをP/Invokeを使ってモードレスで表示すると、いろいろおかしくなるんですが
モーダルで表示すると問題は発生しないです。
いろいろおかしい点:
ダイアログを閉じれない。
推しても反応しないボタンがある。
ダイアログの中のタブを切り替えるとAccessViolationExceptionが発生する
マネージド側で、モードレスダイアログを表示する関数をP/Invokeで呼び出す場合の一般的な注意点ってなにかありますか?
0675デフォルトの名無しさん
2006/02/18(土) 12:16:420676デフォルトの名無しさん
2006/02/19(日) 02:25:37モーダルなら自前ループがあるからね。
0677デフォルトの名無しさん
2006/02/19(日) 10:17:59半透明のイメージを描画したいのですが、
DoubleBuffered = false; の状態で
ImageAttributes.SetColorMatrix() を使って描画するとイメージの描画過程が目で追えるほどに遅くなります。
メモリ上のビットマップに描画してから画面に描画しても結果は同じでした。
DoubleBuffered = true; の状態では遅くなりませんでした。
この件について解決方法や代替手段などあったらよろしくお願いします。
0678デフォルトの名無しさん
2006/02/19(日) 13:11:22DirectX
0679デフォルトの名無しさん
2006/02/19(日) 13:23:310680デフォルトの名無しさん
2006/02/19(日) 13:33:220681デフォルトの名無しさん
2006/02/19(日) 13:51:44むしろDoubleBufferedで軽い理由が知りたい。
半透明処理ってのはPerPixelで計算せんといかんからCPUでやると
SIMD使ってるんならまだしもろくな結果にならんはずだが…。
いや、処理自体はDoubleBufferedだろうが変わらんのだからそこじゃないな。
んー…ああ、わかった。たぶんあれだ。DoubleBufferedだと、システムメモリ上で
計算した上でbitblt(単純転送)できるからだ。
ビデオメモリ上でCPUからそれをやりゃ重くもなる罠。
0682677
2006/02/19(日) 16:23:15よく考えたらその通りですね。
半透明イメージを描画するときは何らかの形で画面上のイメージと演算処理をしなければならないわけで、
そのためのバッファがなければ遅くなるのは当然でした。
メモリ上のビットマップに描画してもだめだったと書いたんですが、
ビットマップを適当な色でクリアしてから描画したら高速に描画できました。
空のビットマップに半透明イメージを描画してもアルファのデータが残るようです。
というわけこの方法でうまくいきました。
どうもありがとうございました。
0683677
2006/02/19(日) 16:32:24上の方法は単なるテストで、実際は別の内容を含んだバッファの上に描画してます。
0684デフォルトの名無しさん
2006/02/19(日) 16:50:24Shift + Alt + F10はきつい。
しかもクラス名大文字小文字間違わず全部打ってからでないと出ないし。
EclipseみたくCtrl+Shiftで入力補完候補が出る時に、
usingしてないnamespaceのクラスも候補として出て、
それを選んだら、usingを自動的に出力するような風にはならんかなぁ。
0685デフォルトの名無しさん
2006/02/19(日) 19:07:590686デフォルトの名無しさん
2006/02/19(日) 20:44:41お前みたいな香具師のために各種カスタマイズ機能があるわけですが
Eclipseとほぼ同じインタフェースにすることもできますが
0687684
2006/02/19(日) 21:35:39どうもやりかたがわかりません。。。
先輩方、へたれなおいらにやり方教えてください。
0688デフォルトの名無しさん
2006/02/19(日) 21:52:36オプション→環境→キーボード
「ショートカットキー」にフォーカスを当ててShift+Alt+F10を押す
「現在使用されているショートカット」に割り当てられているコマンドが出るから、その文字の一部を「以下の文字列を含むコマンドを表示」
に入力
#今回なら「スマートタグの表示」で十分
表示されたコマンドへのショートカットをお好きなように割り当てる
0689684
2006/02/19(日) 22:20:50盲点だった。リストから検索したけど出てこなくて・・・アリガトン!
0690デフォルトの名無しさん
2006/02/20(月) 01:14:05delegate+thread+invoke辺りが目新しくて面食らった。
あとプロパティはフィールドも宣言しないとダメなんだな。
public String Test { set { Test = value; } }
とかして無限ループ。原因に気付くまで30分も掛ったよorz
て言うか、プロパティ書くのが面倒くせー!ウィザードはどこ行った?
意外と行数食うし使うのには便利だけど記述性はあんまりよくないような?
でも一番ビクーリしたのはbyte[]。なんじゃこれ?スゲー
プリミティブ型みたいな顔してれっきとしたオブジェクト型。
変なの〜、キモ便利〜wwwww
0691デフォルトの名無しさん
2006/02/20(月) 01:32:37プロパティはEclipseの「setter/getterを生成する」みたいな機能があると便利だよね。
0692デフォルトの名無しさん
2006/02/20(月) 01:33:010693デフォルトの名無しさん
2006/02/20(月) 01:41:25アドインでプロパティを勝手に作ってくれるのもあるし
0694デフォルトの名無しさん
2006/02/20(月) 01:48:282005の一番の恩恵はフィールドのカプセル化だとおもた。
正直初めてコレ使ったとき、感動した。
0695デフォルトの名無しさん
2006/02/20(月) 01:53:58お〜〜〜!プレビュー見て一瞬ハァ?とか思っちゃったけど
実行してみたらちゃんとプロパティが自動生成される。
いつもの習慣に従ってSNTP鯖&倉書きつつ学習中なんだ
けど、BeginReceiveに渡すユーザー定義オブジェクトを書く
のが面倒で面倒で泣きそうだったんだ、超サンクス激感謝。
できればプライベートフィールドを纏めてプロパティ化して
くれると嬉しいんだけど・・・・・・
そのアドインというのは、もしかしてそういう事をしてくれたり
なんかはするのかな?
0696デフォルトの名無しさん
2006/02/20(月) 01:54:530697デフォルトの名無しさん
2006/02/20(月) 01:56:430698デフォルトの名無しさん
2006/02/20(月) 02:56:17配列はJavaでもObjectだったことない?
0699デフォルトの名無しさん
2006/02/20(月) 03:05:350700デフォルトの名無しさん
2006/02/20(月) 14:25:10本質的な違いはないけど名前は残ってるみたい
0701デフォルトの名無しさん
2006/02/20(月) 22:49:33の中にあるindex.datをパースする便利クラスはないかな・・・
0702デフォルトの名無しさん
2006/02/20(月) 23:04:240703デフォルトの名無しさん
2006/02/22(水) 10:35:49一度しかこないため「押されつづけている間」というのが判定できません。
マウスが押されたらスレッド起こして、離されたらスレッド終了みたいなことを
しないとだめでしょうか。
0704デフォルトの名無しさん
2006/02/22(水) 10:39:400705デフォルトの名無しさん
2006/02/22(水) 10:51:28エンターキーが押されてる間 ってことならイベントが何度もくるので
特に何も考えなくてもいいんですが、マウスの場合は特別なことをしないといけない
というのが本当に悩ましい。
0706デフォルトの名無しさん
2006/02/22(水) 11:17:36そういうこと?
0707デフォルトの名無しさん
2006/02/22(水) 11:19:270708デフォルトの名無しさん
2006/02/22(水) 12:02:21「押され続けている間」と一言で書いてますが、どう定義するつもりですか?
・アプリがアクティブな状態でマウス押下から押上まで
→MouseDown/Upで判別
・アプリ上でマウス押下状態なら全て(アプリ外でマウス押下されてポインタが移動しても対象とする)
→MouseDown/Upとドラッグ系のイベントを併用
・アプリ上に限定せずマウス押下から押上まで
→ポインタをキャプチャ
質問が漠然としすぎ。
0709デフォルトの名無しさん
2006/02/22(水) 12:10:59ボタンが押されてる間って書いてあるじゃん
0710703
2006/02/22(水) 12:34:32ボタンがクリックされた時のイベントハンドラの中でループで回してマウスの状態を
調べるってことでしょうか?
それだとその間は再描画されないのでちょっと不都合です。
とりあえずスレッドで処理するようにしますが、何かいい案がありましたら
お知恵をお借りしたい。
0711デフォルトの名無しさん
2006/02/22(水) 12:41:41大体「処理」ってなんだ「処理」って
そんな曖昧なので案も出せるか
0712デフォルトの名無しさん
2006/02/22(水) 12:58:08なんの処理かは関係ないだろ?直行性も理解できないアホか?
0713デフォルトの名無しさん
2006/02/22(水) 13:00:58アプリ内でのボタン押下→押上
と
アプリ外でのボタン押下→アプリ上に移動
は
別の処理だってゲイツ君が言ってたぉ
0714デフォルトの名無しさん
2006/02/22(水) 13:04:04自分でPaintを呼ぶとか
0715デフォルトの名無しさん
2006/02/22(水) 13:05:47どういう処理したいの?
ゲームでありがちな処理したいってこと?
もしそうならフレームの概念とアルゴリズムを勉強したほうが良いよ
0716デフォルトの名無しさん
2006/02/22(水) 13:12:21得意げに答えて満足感を得るのは止めてください。
例えば、
>もしそうならフレームの概念とアルゴリズムを勉強したほうが良いよ
ですが、そのような抽象的な指摘で、
>>710が今からフレームの概念の本とアルゴリズム入門の本を買いに行くと思いますか?
よって、>>715のレスはこのスレ始まって以来の駄レスと考えます。
私は、それを指摘したのでセーフだと考えます。
0717703
2006/02/22(水) 13:16:19なるほど。それでいいですね。
GetAsyncKeyState()でマウスの状態を調べて、押されてる間ループで回して
そのなかで描画もするようにすればいいだけですね。
ありがとうございました。
なんか荒れてる気がしますがスルーしときます。
0718デフォルトの名無しさん
2006/02/22(水) 13:18:34否定は何も生まない
尊大な態度は真実を遠ざけると知ろう
で、どういう処理したいの?
それに回答しなきゃみんな漠然とした回答しかできないんだけど
ありがちな処理なら定石がある
漠然とした質問には漠然とした回答しかできないから>>715の回答も一つの解だと思われ
0719デフォルトの名無しさん
2006/02/22(水) 13:19:58Paintを呼ぶよりは
Application.DoEvents()を読んだ方がいいんじゃ?
0720715
2006/02/22(水) 13:21:20は?自己満足で回答しちゃいかんのか?
平日日中に無料で知識を曝すのに自己満足も得ちゃいけないとは厳しいね
ここではもう二度と回答側にはなりません
0721デフォルトの名無しさん
2006/02/22(水) 13:23:34ゲームみたいなを作ってるならDirectXの仕組みを真似るって手もあるよ
WindowsフォームでDirectXを使う場合はメッセージループを自力で作るから、同じようにマウス確認用のループをフォームとは別に持つって考え方もある。
0722デフォルトの名無しさん
2006/02/22(水) 13:24:55アルゴリズムがどうこういう話になるんだか。
>>720
その約束絶対守れよ。みんなよろこぶぞw
0723デフォルトの名無しさん
2006/02/22(水) 13:26:270724デフォルトの名無しさん
2006/02/22(水) 13:27:39まぁまぁ、IDが付かないスレでいきり立ってもしょうがないでしょ。
気にするな。
ただ、>>715のレス内に知識と呼べるものは無かったが。
ストレスイクナイ。
0725デフォルトの名無しさん
2006/02/22(水) 13:28:300726デフォルトの名無しさん
2006/02/22(水) 13:31:59こんな感じかな。
勘違いしてたらスルーしてください。
bool flag = false;
void button_MouseDown(oject sender, MouseEventArgs e)
{
flag = true;
while (true)
{
Application.DoEvents();
if( !flag ) return;
処理;
}
}
void button_MouseUp(object sender, MouseEventArgs e)
{
flag = false;
}
0728デフォルトの名無しさん
2006/02/22(水) 20:22:11内部にIDisposableを実装するクラスのインスタンスを使用して、
なおかつそのインスタンスには外部から直接アクセスできないクラスについてなんだけど
例えばこんな感じ
class Class1{
MemoryStream ms = new MemoryStream();
}
MemoryStreamがきちんとデストラクタが実装されているという前提の場合は
Class1はIDisposableは実装する必要ありだけどデストラクタは必要ないですよね?
0729デフォルトの名無しさん
2006/02/22(水) 20:28:31StreamWriter / StreamReader なんかがそうだ。
0730デフォルトの名無しさん
2006/02/22(水) 22:55:08もちろんDisposeの中ではSuppressFinalizeだかなんかして
0731デフォルトの名無しさん
2006/02/22(水) 23:05:37普通はそうなんだが、包含してるクラスの Dispose が必ず呼ばれるとまずい、と言う場合がある。
>>729が挙げたのなんかまさにそうだが。
例えばFileStreamを開いて、Streamを要求するメソッドに渡す。
メソッドは内部でStreamReaderを使って文字列を返す。
このとき、StreamReaderのファイナライザでDisposeを呼んじゃうと、呼び出し元で突然FileStreamを使えなくなってしまう。
だからStreamReaderはファイナライザを定義しない。
明示的にユーザがDisposeを呼んだときだけストリームを閉じる。
0732デフォルトの名無しさん
2006/02/22(水) 23:08:17デストラクタで呼ぶのはDispose(false)
Dispose()はDispose(true)呼んでSuppressFinalizeだねぇ。
0733728
2006/02/22(水) 23:09:10んで、デストラクタを定義して、Disposeを呼び忘れたときでもMemoryStreamが解放されるようにしろって
解説している人がいたんで疑問に思って質問しました。
なんでデストラクタを定義する必要がないと思ったかと言うと、Class1のインスタンスがGCになったときに
その内部のmsもGCが回収するからです。
0734デフォルトの名無しさん
2006/02/22(水) 23:20:58デストラクタでのアンマネージドリソースの開放はセーフティネットだから、
アンマネージドリソースを管理しているクラスを包含しているならDisposeは実装しとかないといかんと思う。
もっともMemoryStreamはメモリしか使っていないから放置していてもいいのかもしれないが。
ちょっと例が悪いかも。
0735デフォルトの名無しさん
2006/02/22(水) 23:25:51その理解で間違ってないよ。
基本的にマネージクラスはマネージとして扱いなさい。
ファイナライザまで、つまりDispose(false)で処理しなくてはならないレベルは
private IntPtr ptr;
みたいに直接そのクラスがアンマネージ情報を持っている場合。
ところがこの場合も2.0になってSafeHandleみたいなのが出来ちゃったしなぁ、
あまりすることもなくなったかも。
ちなみにそれはJ○tta?
0736デフォルトの名無しさん
2006/02/22(水) 23:53:30実装した方がいい場合はたまにある
0737デフォルトの名無しさん
2006/02/23(木) 00:05:03IDisposable実装クラスのインスタンスを持つ場合は、必要に応じてDisposable(true)を実装する。
「アンマネージドリソースを持つ」っていう解説は良く見かけるけど、Streamは*アンマネージドリソース*ではないので注意
0738デフォルトの名無しさん
2006/02/23(木) 00:11:330739730
2006/02/23(木) 00:19:55ですね。参考になりました。
0740728
2006/02/23(木) 00:24:29レス見ていろいろ調べたら、>>738さんの言うとおり、むしろ実装してはいけないんだね。
don't need to じゃなくて must not だとは思わなかった(;^▽^)
>>735
>ちなみにそれはJ○tta?
ええw
ブログ読んで疑問に思って、指摘しようと思ったんだけど自信がなくて
んでいま調べてたら「例を間違った」とコメントしてました。
0741デフォルトの名無しさん
2006/02/23(木) 00:41:03if (disposing) ms.Dispose();
}
つまりこういうこっちゃね。
0742デフォルトの名無しさん
2006/02/23(木) 00:42:48Dispose(false)な制御フローでは参照マネージオブジェクト触っちゃダメだったってことか
0743デフォルトの名無しさん
2006/02/23(木) 01:45:39そもそも気に入らない。
だったらComponentのDisposeってなんやねんとか。
必要である事情は分かるが、いきなり前提崩してるし。
0744デフォルトの名無しさん
2006/02/23(木) 02:30:21MVP菊池氏のような発言だなw
0745デフォルトの名無しさん
2006/02/23(木) 02:32:24MSDN Forumでもまた同じ事が繰り返されそうな悪寒
0746デフォルトの名無しさん
2006/02/23(木) 17:13:14public void Dispose()をvirtualにしていません。
これはDataTableを継承したらDispose()はいじらなくていいですよ、
ていうかむしろいじるな、やらせはせんっていうことですか?
どうせDispose()はDispose(true)しているだけだから、
いじるならprotected virtual void Dispose(bool)をいじれ、
ということでしょうか?
0747デフォルトの名無しさん
2006/02/23(木) 17:16:23virtualなのは全部protected Dispose(bool)のはずだけど。
0748デフォルトの名無しさん
2006/02/23(木) 17:33:270749デフォルトの名無しさん
2006/02/23(木) 20:38:43多次元配列を引数に使うことはできないのでしょうか?
文字列の2次元配列を渡して並べ替えたり、値を変更したりしたいのですが、
C#.NETから空の配列に値を入れて返す事は出来ても、VB6.0から配列を受け取ることが出来ません。
「値をNullにすることはできません」というエラーが出てしまいます。
何か回避方法は無いでしょうか?
VB6.0側
obj = New CDll.CClass
ReDim s(10, 10) As String 'ReDim s(0, 0) As String の場合だけ成功します
i = obj.func(s) 'ここでエラー発生
C#.NET側
public int func(ref string[,] s)
{
// s[*,*]をいじる処理
}
0750デフォルトの名無しさん
2006/02/23(木) 20:44:430751デフォルトの名無しさん
2006/02/23(木) 22:43:08string [][] sではどうですか?
VBの配列はSAFEARRAYだからC++でCOM作るときも結構面倒だった記憶があります。
0752デフォルトの名無しさん
2006/02/24(金) 00:37:54IntPtr から IntPtr へデータを直接コピーをしたいのですがどうすればよいのでしょう。
System.Runtime.InteropServices.Marshal.Copy には相当するオーバーロードがないようです。
0753デフォルトの名無しさん
2006/02/24(金) 00:47:04・CopyMemory を DllImport
0754デフォルトの名無しさん
2006/02/24(金) 01:10:37なるほど。速度重視でいきたいのでCopyMemoryのほうにしたいと思います。
どうもありがとうございました。
0755749
2006/02/24(金) 01:33:59refをはずしても同じエラーが出ました。
ちなみにs(0, 0)を渡してC#内でReDimして値を入れて返すというのは成功したのですが、
この時はrefを付けていました。
>>751
試してみたのですが、C#側の変更だけでは引数の型が違うといわれます。
VB6.0では配列の配列はどのように記述すれば良いのでしょう?
SafeArrayを調べてみたのですが、System.Arrayなら何とかなる・・・のかな?
0756デフォルトの名無しさん
2006/02/24(金) 01:36:360757デフォルトの名無しさん
2006/02/24(金) 01:38:190758デフォルトの名無しさん
2006/02/24(金) 09:56:47なるほど納得安心しました。今日から快眠です。
0759デフォルトの名無しさん
2006/02/24(金) 22:11:12なんか見つかんない...onz
0760デフォルトの名無しさん
2006/02/25(土) 01:44:55明日も何もないよい一日でありますように。
0761デフォルトの名無しさん
2006/02/25(土) 01:53:19置いてましたよ。
0762デフォルトの名無しさん
2006/02/25(土) 02:15:12その代わり休日は厄介な日曜プログラム厨が沸きます
0763デフォルトの名無しさん
2006/02/25(土) 02:16:06今日見かけたよ
でももうアマゾンで注文済み
0764デフォルトの名無しさん
2006/02/25(土) 16:22:41vs2003のaxWebBrowserならやり方わかるんですけど、どうもいろいろかわってしまったようで。
頑張ってぐぐったりMSDN Libaryと睨めっこしてみたんですが、お手上げです。
だれかわかる人いたら教えてください。
またはwebrowserの扱い方で参考になるページなどありましたら幸いです。
0765デフォルトの名無しさん
2006/02/25(土) 16:27:200766デフォルトの名無しさん
2006/02/25(土) 16:28:050767デフォルトの名無しさん
2006/02/25(土) 16:59:10ありがとうございます!
browser.Document.GetElementById("submit").InvokeMember("Click");
で、クリックすることができました。
分かりにくいですね、これ(汗
0768デフォルトの名無しさん
2006/02/25(土) 22:50:29なぜ event がキーワードとして
使われているのかが分かりません。
delegate と event の違いは何ですか?
event では += と -= としか使えなくなるとか?
ほかにどんな違いがありますか?
0769デフォルトの名無しさん
2006/02/25(土) 23:09:30event は プロパティの一形態。主にデリゲートインスタンスをカプセル化したもの。
event が用意された理由はまあ色々あるが、簡単なところとしては
・孫クラスが勝手に子クラスや曾孫クラスの登録したイベントハンドラを消したら困る
・であるにも関わらず、デリゲートインスタンスを公開するプロパティではこれに対応できない
0770デフォルトの名無しさん
2006/02/26(日) 00:37:10ある整数、例えば41を2進数で表示すると"101001"ってなりますよねぇ。
これは、Convert.ToString(41, 2) で簡単に実現できるんですけど、
頭を0埋めして全体で8桁にする、つまり"00101001"って表示するための
書式指定ってないでしょうか?
10進数や16進数なら
String.Format("{0:D8}", 41) とか String.Format("{0:X8}", 41) とか
指定できるんですけど。。。
どなたか頭冴えてる方、よろしくお願いします。。。
0771デフォルトの名無しさん
2006/02/26(日) 00:50:460772デフォルトの名無しさん
2006/02/26(日) 01:44:25コンポーネントのインターフェイスとしての側面というか。
現実としては、例えばコントロールなど大量のイベントをどう実装するのか、など。
この辺の柔軟性は、言ってみればメンバフィールドとプロパティの関係にも似てる。
0773デフォルトの名無しさん
2006/02/26(日) 08:47:48【.NET】 C++/CLI について語ろうぜ 【最適】
http://pc8.2ch.net/test/read.cgi/tech/1126450441/
447 :デフォルトの名無しさん :2006/01/03(火) 00:38:44
>>444
あー、イベントというものが根本的に分かってないんだろう。
メンバで表現されるものを他の言語と比較すりゃわかると思う。
CLRでのクラスメンバにもてるものはフィールド、メソッド、「プロパティ」、「イベント」なのよ。
後者二つがあることがいわゆるC#が「コンポーネント指向言語」っていわれる理由でも
あり、ただのdelegateフィールドとは「まったく」別のもの。
こうやって特殊化したことによってTypeDescriptorやらで動的にコンポーネント情報を取得できる。
ちなみに 446 も言ってるが、イベントはフィールドとアクセサ(とメタデータ)でなるんだな。
public event EventHandler TextChanged;
と書いたときに生成されるのは
・privateなdelegateフィールド
・publicなadd, removeアクセサメソッド。
・イベントメタデータ
を生成している。
0774デフォルトの名無しさん
2006/02/26(日) 12:22:29ToolStripを動かすときに
MenuStripの上にToolStripを配置させない方法はどのようにすればよいでしょうか?
(MenuStripはアプリのタイトルの下に常にいてほしい)
0775デフォルトの名無しさん
2006/02/26(日) 12:42:03PadLeftなんて関数があったんだ!
長いことStringクラス使ってって初めて気が付きましたw
ありがとうございました(・∀・)
0776デフォルトの名無しさん
2006/02/26(日) 12:58:00- FormにMenuStripを単品で追加(MenuStripControlの上に追加しない)
- MenuStripのDockをTopにする
- FormにMenuStripContainerを追加しDockをFillにする
あとは移動しても良いToolStripはMenuStripContainerに追加すればよし。
0777デフォルトの名無しさん
2006/02/26(日) 13:04:020778デフォルトの名無しさん
2006/02/26(日) 14:04:19Graphics::MeasureStringで文字列が占める領域が分かりますが、
ある領域に収まる文字列長を取得するメソッドは無いのでしょうか。
2分探索の要領でMeasureStringを何回も呼ぶと言うのは面倒かつ速度が出ないようなので
これ以外の方法をお願いします。
0779デフォルトの名無しさん
2006/02/26(日) 14:16:07長さはフォントと文字列によるんだからぶっちゃけ無理だろ。それ以上の
ことがしたいんなら直接Fontを使って調べろ。
というか、Graphics.DrawStringにRectangle指定するやつがあるだろ、それ
使えば折り返しもやってくれるぞ。
モードはStringFormatで指定。
0780デフォルトの名無しさん
2006/02/26(日) 14:26:24自動に頼ってしまうと今度は何文字表示できたかが分からんくなるんですよ。
0781デフォルトの名無しさん
2006/02/26(日) 14:32:44んなのMeasureCharacterRangesでも使えばええやないか
0782デフォルトの名無しさん
2006/02/26(日) 14:44:18Graphics.MeasureString メソッド (String, Font, SizeF, StringFormat, Int32, Int32)
で何とかなりそうです。超ありがとうございました。
0783デフォルトの名無しさん
2006/02/26(日) 16:39:03s パラメータによって表されるテキストは、 layoutRectangle パラメータによって表される四角形の内部に描画されます。四角形の内部に収まらないテキストは切り捨てられます。
騙さないでください。。。。
0784最凶VB厨房
2006/02/26(日) 17:01:140785デフォルトの名無しさん
2006/02/26(日) 17:07:38嘘か間違いのドッチ家でしょ。
0786デフォルトの名無しさん
2006/02/26(日) 17:09:160787デフォルトの名無しさん
2006/02/26(日) 17:14:50それを対処にGraphics#MesureStringの引数が最も多いメソッド使って何とかした覚えがある。
たとえば、[label-text]を表示させるときに幅が足りないと左のようになってた
[label- --> [label-tex
text] t]
0788デフォルトの名無しさん
2006/02/26(日) 21:10:46Win32のLOWORDとHIWORDマクロみたいな
0xFFFFで論理積取ったり0x10000の商を取ったりで算出はできるんですが、一発関数があるかなと思いまして
System.Convertあたりにあるかなと思いましたが見つけられませんでした
0789デフォルトの名無しさん
2006/02/26(日) 21:39:35やり方分かってるならそれでやればいいじゃん。そんなに細かい
処理に対してライブラリがいちいち関数を提供してたら、肥大化して
どうしようもなくなる。
0790デフォルトの名無しさん
2006/02/26(日) 22:31:150792デフォルトの名無しさん
2006/02/26(日) 22:33:58何をしたいかによるんだけど。
0793デフォルトの名無しさん
2006/02/26(日) 22:34:390794デフォルトの名無しさん
2006/02/26(日) 22:37:18改行
0795デフォルトの名無しさん
2006/02/26(日) 22:45:30列の幅ならColumnHeader.Widthだが。
行の高さは無理。
0796788
2006/02/26(日) 23:03:53Win32SDKには標準でマクロがあったので、.NET Frameworkにも無いか疑問に思った次第です
>>792
上記理由意外に、できるだけリテラル値をコードに埋め込みたくないという思いがあります
また、定型的な処理なのに毎回計算式を埋め込むのも気持ち悪いという思いも
#現在は上記2点をできるだけクリアするため自作の関数で対処しています
このような発想からFrameworkで関数が準備されていないかなと思いました
こういう発想は一般的じゃないんですね orz
0797デフォルトの名無しさん
2006/02/26(日) 23:31:24できたらクレクレ
0798デフォルトの名無しさん
2006/02/27(月) 02:21:37C#の関数は基本的に動的バインディングだから、作ってないだけじゃない?
クリティカルな部分で使うと遅いし。
0799デフォルトの名無しさん
2006/02/27(月) 03:05:35くわしく
0800デフォルトの名無しさん
2006/02/27(月) 09:47:30#defineで定義されてるだけのLOWORDとかは展開されてからコンパイルされるわけだし
呼び出しのオーバーヘッドを無視してもコードの見通しを良くしたいなら関数化してもいいだろうけど、そういうのが看過できない処理ならリテラルと計算式を埋め込むのも仕方なしかと
0801デフォルトの名無しさん
2006/02/27(月) 09:59:43そのレベルのチューニングしなきゃならん開発ならMFCでやれってことだ。
0802デフォルトの名無しさん
2006/02/27(月) 10:12:050803デフォルトの名無しさん
2006/02/27(月) 10:22:58#define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xffff))
#define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16))
こういうのがC#で必要になるのはP/Invokeを使ってるか、
固定レコードタイプのネットワークパケットを扱ってるかくらいしか思い浮かばない。
0804デフォルトの名無しさん
2006/02/27(月) 13:21:58滅多に使われないような関数を作るくらいなら、Win32SDKにあったマクロを実装してもいいだろうに
0805デフォルトの名無しさん
2006/02/27(月) 13:36:48つか「大したもんじゃないから実装しよう」をやると果てしなく膨れあがるだろ
0806デフォルトの名無しさん
2006/02/27(月) 13:38:350807デフォルトの名無しさん
2006/02/27(月) 13:40:190808デフォルトの名無しさん
2006/02/27(月) 15:12:48へ?何が古臭いの???
バイト操作・ビット操作って古臭いとかそういう次元で語ることなの?
0809デフォルトの名無しさん
2006/02/27(月) 15:25:31>>803の言う感じに
0810デフォルトの名無しさん
2006/02/27(月) 15:27:11ちゅーより一つの値に二つぶち込むって発想はまぁ、なんだ、
その、あれだ。ビット演算程度ならいいんだけどさ。CLRなら
Enumもあるし。
あと、P/Invokeとかの互換部分って普通internalにして隠すんだわ。
0811デフォルトの名無しさん
2006/02/27(月) 15:27:500812デフォルトの名無しさん
2006/02/27(月) 15:55:47なんなら構造体定義すりゃいいし・・・
0813デフォルトの名無しさん
2006/02/27(月) 16:30:12ドライバとかDLLと通信するとDWORDで来てWORDやBYTEを切り出すとか普通の処理
業務アプリやテキスト操作だけがプログラムじゃないよ
0814デフォルトの名無しさん
2006/02/27(月) 16:43:580815デフォルトの名無しさん
2006/02/27(月) 16:50:33どっちも C#/.NET とはほぼ関係ない話だな
>>814
24bit と言えばビットマップデータも
0816813
2006/02/27(月) 17:13:08おいおい関係ないわけないだろw
うちはC#+.NET1.1でそういうアプリ組んでるんだし
ライブラリが充実してるからC/C++でゴリゴリ書くより楽でいいよ
その上で普通にビット/バイト操作があるって言ってるわけで
逆を言えばC/C++でも業務アプリ書いてりゃ滅多にビット/バイト操作は無い
型のありのままでのデータ操作がほとんど
色々なアプリケーションの形があるんだから、操作の種類によって古臭いとか新しいとか無関係とかないわけですよ
所詮メモリ上のデータを操作するのがプログラムなんだから
0817デフォルトの名無しさん
2006/02/27(月) 18:11:24Visual C# のインストール中に
インストールコンポーネントを読み込んでいます。この処理には1〜2分かかる可能性があります。
って表示されたまま永久放置なんだけど、なんで?
常駐ソフトもサービスも全部切っても先に進まないんだけど・・
0818デフォルトの名無しさん
2006/02/27(月) 18:18:11・環境も書いてない
・β等のインストール履歴も分からない
結論:氏ね
0819デフォルトの名無しさん
2006/02/27(月) 18:35:21反応がありそうないくつかの場所で質問するのは当たり前。
解決したら当然全部にお礼して回るよ。
なんでもマルチって書けばいいと思ってる人は言葉の意味を考え直した方がいい。
環境は XP Pro SP2、
Visual C#をインストールするのはこれが初めてです。
0820デフォルトの名無しさん
2006/02/27(月) 18:36:390821デフォルトの名無しさん
2006/02/27(月) 18:37:170822デフォルトの名無しさん
2006/02/27(月) 18:38:29>常駐ソフトもサービスも全部切っても先に進まないんだけど・・
常駐ソフトやサービスを切ることが好影響としか考えられないの?
それとそんなのこのスレで聞いても分からないからM$に聞いてくれ
0823817
2006/02/27(月) 18:41:18了解
>>821
んじゃいってくる
1000行きそうだったから変に書き込まない方がいいかなと
>>822
ぐぐったらPart10くらいでアンチウィルス切ったら通ったとか書いてあったので。
とりあえず無関係そうなのから切っていって最終的にMSのサービス以外は全部切ったけどダメだった。
まー色々試してみます。thxでした。
0824デフォルトの名無しさん
2006/02/27(月) 20:40:44異常な状態と言うのは普通の人には起きないから異常
であればできるだけ詳細な情報を提供すべし
例えばこの辺り
・ハードウェア構成
・OSのインストールバージョンとサービスパック
・Microsoft Updateをどれだけ当てたか
・システムに影響しそうなソフト(OfficeやIEなど)のバージョン
・インストール時に実行していたソフト
・インストールしたVC#のバージョンと入手先(MSDNでは稀にアップされた版が間違っている場合がある)
あとそのメッセージは一体どこまで進行したかを明記
「インストール中に」だけではエスパー以外は分からない
また、インストールオプションも明記しないと何が怪しそうか見当もつかない
最も大事なのはその異常に対してどこまで原因調査の絞込みを行ったか明記すること
例えば「インストールオプションを○○まで絞りました」とか「ウィルス対策ソフトは○○で、メニューから無効にしています」とか
とにかく「今自分に起きている状態は他人には滅多に起きない異常事態」と認識し、情報を提供せよ
超能力者に聞くような質問をするから煽られる
これを自業自得と言う
0825デフォルトの名無しさん
2006/02/27(月) 21:32:320826デフォルトの名無しさん
2006/02/27(月) 22:03:33例えば以下のような文字列がTextプロパティに設定されているとすると
---------------------
12345678
2345
345678
---------------------
横幅は半角8文字分、縦幅は3文字分の四角の中と分かりますが、これの具体的なピクセル数を知りたいです
MS ゴシックなどの固定幅であれば掛け算で算出できますが、プロポーショナルフォントを使っている場合が分かりません
全ての文字の幅を調べて足し算するしかないのでしょうか?
0827デフォルトの名無しさん
2006/02/27(月) 22:04:58はい。
0828デフォルトの名無しさん
2006/02/27(月) 22:30:02C♯で独自のウインドウメッセージを送りたい、また受信したいのですが
Cで言う所のWM_APPみたいなのって、C♯にはないのでしょうか?
あと、WM_APP+1みたいに使っていくのも嫌なので、何か空いてるメッセージIDを生成してくれるような関数はないのでしょうか?
0829デフォルトの名無しさん
2006/02/27(月) 22:31:32ないです。RegisterWindowMessage() を使いましょう。
0830デフォルトの名無しさん
2006/02/27(月) 22:48:49任意の時点で動的にアセンブリを読み込み、解放する必要のあるソフトウェアの設計を行っています。
上の機能を実現するために、読み込むアセンブリごとに AppDomain を生成し、それにアセンブリの保有する
型を持たせる、という手段を検討しています。
そのために、System.Collections.Generic.Dictionary<System.String, System.AppDomain> 型のメンバを
用意することを考えました。しかし、AppDomain 生成 -> アセンブリをロード -> ディクショナリに追加、という
複雑な流れ (さらに解放の際も) を踏む必要がありながら Dictionary の Add や Remove が触れるというのは
あまりよい状況とは思えません。
ここで、
1) Add / Remove をオーバーライドした Dictionary のサブクラスを使用する
2) Dictionary を private にし、操作をラップするメソッドを実装する
の、どちらの解決方法をとった方が .NET のライブラリ設計として妥当なのでしょうか?
0831デフォルトの名無しさん
2006/02/27(月) 22:50:47俺なら後者。
0832デフォルトの名無しさん
2006/02/27(月) 23:01:430833デフォルトの名無しさん
2006/02/27(月) 23:10:27Dictionaryは、データの本質がDictionaryな場合にのみ外に見えるべきであって
アセンブリのロードだの解放だのって機能は、Dictionaryデータ構造を持つのが
本質ではない気がするから。
0834デフォルトの名無しさん
2006/02/27(月) 23:11:55BOOL WINAPI foobar(HWND hWnd, UINT Msg);
こんな関数を作って
C♯側から、
[DllImport("foobar.dlll", CharSet = CharSet.Auto)]
public static extern bool foobar(IntPtr hWnd, uint Msg);
こんな感じでインポートしようとしたんですが
間違ったフォーマットのプログラムを読み込もうとしました
って出て、形式が違うと怒られます。
どういう形式に書き換えれば良いのでしょうか?
HWNDをIntPtrにしたのが行けなかったのでしょうか?
0835デフォルトの名無しさん
2006/02/27(月) 23:20:290836デフォルトの名無しさん
2006/02/27(月) 23:44:10迷う余地はない
0837デフォルトの名無しさん
2006/02/27(月) 23:44:21Dictionaryのインタフェースを使ってイロイロできるので使いやすい。かもしれない。
といいつつ、俺も後者。
用途的に使用するインタフェースが少なそうだから。&ほぼ>>833と理由同じ
2)みたいに継承はしない 仕様みるとis-a関係っぽくないし。
0838デフォルトの名無しさん
2006/02/27(月) 23:48:000839830
2006/02/27(月) 23:54:55ありがとうございます。後者にします。
# Dictionary に限らず、便利なクラスを眺めていると、どうしても
# 本来の意味付けから外れたような使い方ばかり浮かんでしまいます。
# これからは気をつけるように心がけようと思います。
0840817
2006/02/27(月) 23:57:42参考までに>>824に答えておくと、失敗したセットアップファイルの入手元は
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/
このページの「Webからインストール」
ハードウェア構成は
CPU: Athlon 64 3200+(939pin)
M/B: MSI K8N Deluxe BIOS v1.4 Driver 忘れたけど2006年1月頃に最新
VGA: Radeon X800 Pro
Sound: Creative Sound Blaster Audizy 2 ZS
OSはXP Pro SP2 アップデートは更新通知が来る物は全部適用済み
Officeは未導入、IEは6.0.2900.2180
インストール時にはほとんど何も起動してませんでした
というかOS自体最近入れましたしSP2は今日インストールしました
具体的に止まる箇所は
exeファイルを実行→一時ファイルをコピー→セットアップが起動
セットアップのウィンドウに
「インストールコンポーネントを読み込んでいます。この処理には1〜2分かかる可能性があります。」
が表示されて、その下にゲージが表示される所で、ゲージが約8割進んだところで止まる
CPUの使用率が95〜99%で張り付いたままでPC全体の動作がかなり重くなる
んで、同じページからisoってファイルをダウンロードして、それからインストールしたら出来ました。
正直すまんかった。
ひょっとしてVC#使いの間では有名な現象で、聞いたらすぐわかるかもって思ったんだよね
0841デフォルトの名無しさん
2006/02/27(月) 23:57:470842デフォルトの名無しさん
2006/02/28(火) 00:02:20最初から入手先とインストール形態を明記していたら違った回答が来たに違いない
無料のExpress版は色々と報告されていたはずだし
#最初はWebインストールをすると公開しときながらiso公開でこれも問題になったそうだ
0843デフォルトの名無しさん
2006/02/28(火) 00:04:31http://www.google.co.jp/search?complete=1&hl=ja&q=c%23+%E5%85%B1%E7%94%A8%E4%BD%93&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
c# 共用体でググりなさい。
0844834
2006/02/28(火) 00:06:02え〜と、
C++で
main.cppで
#define DllExport extern "C" __declspec (dllexport)
と
DllExport BOOL foobar(HWND hWnd, UINT Msg);
がありまして。
C♯側から、>>834と同様に書いて呼び出しても同じ結果になります。
0845デフォルトの名無しさん
2006/02/28(火) 00:13:16COMの相互運用チェックしてたC#のライブラリコンパイルして
ASP側でぺたっと貼り付ければいいんだっけ?
0846デフォルトの名無しさん
2006/02/28(火) 00:15:48ありがとうございます
0847デフォルトの名無しさん
2006/02/28(火) 00:34:29うーん?なんかC++のほうが間違ってそうなメッセージなんだよね。
Dependency Walkerできちんとexportしてるか確認してみて。
まさかCLRバイナリでコンパイルしたわけではないよね?
0848デフォルトの名無しさん
2006/02/28(火) 00:45:46Dependency Walkerでもちゃんとexportされてますし
CLRオプションはつけてません。
0849デフォルトの名無しさん
2006/02/28(火) 00:47:20[DllImport("foobar.dlll", CharSet = CharSet.Auto)]
dlllってのはただのタイプミス?
0851デフォルトの名無しさん
2006/02/28(火) 00:59:58dumpbin /exports foobar.dll
で期待してる名前でExportされているか確認
0852844
2006/02/28(火) 01:07:29ordinal hint RVA name
1 0 00001200 foobar = _foobar
Summary
2000 .data
2000 .rdata
1000 .reloc
6000 .text
こんな感じです。
0853デフォルトの名無しさん
2006/02/28(火) 02:53:10WebBrowserコントロールへ移行しています。
従来のAxWebBrowser.GetOcx()で得ることができたOLE?オブジェクトを
WebBrowserから得たいのですがどうすればよいでしょう?
本来の目的はjavascriptでウィンドウが閉じられたときに
WindowClosingイベントを受け取りたいだけなんですが。
0854デフォルトの名無しさん
2006/02/28(火) 03:00:59もしかしてC++ってボーランドC++だったり?
昔ボーランド系で勝手に関数名の前にアンダースコア付けられて
難儀した覚えが
0855デフォルトの名無しさん
2006/02/28(火) 03:08:52HtmlWindow.AttachEventHandler で対応できないか?
ActiveXインスタンスはWebBrowser.ActiveXInstanceやらHtmlDocument.DomDocumentやらHtmlWindow.DomWindowで取れるが。
0856デフォルトの名無しさん
2006/02/28(火) 03:12:06*.def 使うのが確実
0857デフォルトの名無しさん
2006/02/28(火) 03:27:56exportはきちんと出来ていそうですが…
.defはもう使うなって扱いだと思ったんですがどうでしょう。
エラーメッセージからするとERROR_BAD_FORMATのようだけど
なんかC++側で出てるような気がするんですが。
DLLが自作なら、DLL側のプロジェクトを立ち上げて
プロセスにアタッチして、トレースかけられませんか?
(CLRで可能かどうか知りませんが)
切り分けの為に、DLLを呼び出すだけの簡単なプログラムを作って
「C++から」DLLの呼び出しが可能かどうかチェックするのも良いかもです。
0858834
2006/02/28(火) 03:52:11どういうわけか、C♯側でCPUタイプをANYに設定していたのを
x86に変えたら直りました・・・。
実は私の環境、x64のWinXPなんです。
恐らくANYにした事で、X64環境では64bitモードとして、X86環境では32bitモードで動くバイナリが出来てしまったのではないかと・・・。
で、参照しているDLLは32bitなので、フォーマットが違う と言う風になったのだと思います。
お騒がせして申し訳ありませんでした。
0859デフォルトの名無しさん
2006/02/28(火) 03:57:03C#のプログラムに、文字列としてstring型ではなく、char型の配列として
ポインタをウインドウメッセージとして送るプログラムがあるのですが
この場合、C#側のプログラム内でアンマネージドモードに変えて、そのcharのポインタをstring型に変えて処理する必要があるのでしょうか?
具体的には
protected override void WndProc(ref Message m){
string = m.WParam.ToString()
base.WndProc(ref m);
}
こういう感じの変換では、出来ないのでしょうか?
単純にアドレスがstring型になってしまうだけですかね?
0860デフォルトの名無しさん
2006/02/28(火) 04:05:07そういうとき何でまずMarshalクラスをみんかね…
つ Marshal.PtrToStringAuto
0861853
2006/02/28(火) 10:25:05たぶん、これで良さげ。
- DocumentCompleteイベントでDocument.Window.Unloadイベントを登録
- Unloadイベントで、Documentがnullになっていたら、ウィンドウが閉じられたと判断
AttachEventHandler("onunload", OnUnload);でもできるけどね。
てか、こっちはDOMレベルのメソッドだから、.NET1.1でもこの方法でいけたな。
このめんどいやり方してたけど・・・
http://groups.google.com/group/microsoft.public.dotnet.framework.windowsforms/browse_thread/thread/14f153d28278a0cc?hl=en&lr=&ie=UTF-8&oe=UTF-8&frame=right&seekm=074001c2a082%24d2924870%24cef82ecf%40TK2MSFTNGXA08
0862853
2006/02/28(火) 14:41:32てか、そもそもなんでWindowClosingイベントが呼ばれないんだ・・・
0863デフォルトの名無しさん
2006/02/28(火) 15:06:27.NETではグローバル・フックはできないからね(・∀・)
0864デフォルトの名無しさん
2006/02/28(火) 16:31:44誤爆?どれにかかるの?
0865デフォルトの名無しさん
2006/02/28(火) 21:31:35WindowClosing呼ばれないの?それは、DWebBrowserEvents2の
WindowClosingだよね?
違うんならそっちを使ってみれば?拡張の仕方はんーと、
ttp://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=7228&SiteID=1
この辺参考にしてみて。
0866853
2006/02/28(火) 23:39:15(SHDocVw.WebBrowser)webBrowser.ActiveXInstance;
ってキャストしてWindowClosingハンドリングしても、
IEEventsでWindowClosingハンドリングしてもイベントがきません。
結局、タイマーで監視してDocumentがnullになったら
ウィンドウが閉じられたと判断しようかとおもいます。
0867デフォルトの名無しさん
2006/02/28(火) 23:58:40キャストしてイベント登録でいけるんかな?してるとして、どこでしてる?
一応ドキュメントにはCreateSinkでConnectionPointCookieつくるように
かいてあるんやけど。イベント登録にそのコードが入っている?
0868デフォルトの名無しさん
2006/03/01(水) 00:03:02SHDocVw参照してるんだよ。意味ないじゃん。
0869デフォルトの名無しさん
2006/03/01(水) 00:06:21めんどいんだよ。手動で全部定義する必要があるから(動くことを確認したら
これにしたほうがいいけど)。拡張したことないんなら黙ってろ。
0870デフォルトの名無しさん
2006/03/01(水) 00:06:34ttp://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=c5aa05c2-73ce-40af-b6b1-7b5900cf4e9f
俺が参考にしてる情報はこれだ。内容は同じだと思う。
0871デフォルトの名無しさん
2006/03/01(水) 00:07:36ちょwww
0872デフォルトの名無しさん
2006/03/01(水) 00:15:41ttp://www.bosaijoho.go.jp/radar.html#a_top
0873853
2006/03/01(水) 00:30:32そこに書いてあることもやったけど、WindowClosingはこなかったよ(´・ω・`)
,NET2.0のWebBrowser.ActiveXInstanceで渡しているところを
AxSHDocVw.AxWebBrowserならGetOcx()を渡すのだが、
それだとWindowClosingが取れる。以前はそうやってた。
てか.NET2.0のWebBrowserを使いたかったのも、
AxSHDocVw.AxWebBrowserで、
HTMLドキュメント内のコントロールをXPスタイルにする方法が
わからなかったからなんだけどね。
それができたらAxSHDocVw.AxWebBrowserに戻しても良いかな。
0874デフォルトの名無しさん
2006/03/01(水) 01:02:48うーん?
he default behavior of Microsoft Internet Explorer is to close windows that
were created by script without asking the user. If an attempt is made to
close the main InternetExplorer or WebBrowser control window through
script, the user is prompted.
これは満たしてる?よなぁたぶん
0875874
2006/03/01(水) 01:06:290876853
2006/03/01(水) 01:16:29どっかの記事でVBなら取れるとか見た・・・
ちなみにその記事はBeforeNavigate2でURLを取ることが目的ですよね?
それは単純にこれで実現できる。
SHDoc.WebBrowser wb = (SHDoc.WebBrowser)ActiveXInstance;
wb.BeforeNavigate2 += new SHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(axWebBrowser_BeforeNavigate2);
0877デフォルトの名無しさん
2006/03/01(水) 01:33:570878デフォルトの名無しさん
2006/03/01(水) 01:58:40これかな?
0879デフォルトの名無しさん
2006/03/01(水) 14:11:41ReadOnlyだけでは選択が可能ですし、SetStyleでControlStyles.UserMouseを有効にしたりキー操作を無効にしてもカーソルは表示されてしまいます。
コードからの選択やスクロールは行わせたいので、Labelなどでは実現できません。
選択は無理でも最悪スクロールだけでも行わせたいです。
Win32APIを使う方法でも良いですので、実現方法をご存知の方は教えてください。
0880デフォルトの名無しさん
2006/03/01(水) 14:52:02Enabled = false;
0881デフォルトの名無しさん
2006/03/01(水) 17:31:06それじゃスクロールできないじゃん
0882デフォルトの名無しさん
2006/03/01(水) 17:45:03コードからのスクロールは出来るだろ
0883デフォルトの名無しさん
2006/03/01(水) 17:50:550884デフォルトの名無しさん
2006/03/01(水) 18:53:39確かに、
Enabled=falseにしてスクロールバーを別途配置。
スクロールのイベント取ってコードからRichTextをスクロールでいけないかな?
0885デフォルトの名無しさん
2006/03/01(水) 19:20:09パネルよりでっかいサイズにしたら駄目?
0886879
2006/03/01(水) 19:24:48それも考えたのですが、スクロールバーまでdisableになってしまいます
また、色もグレーアウトしてしまいますので。。。
先に書いておくべきでした、すみません
>>882
すみません、「コードから」が掛かるのは「選択」だけです
スクロールはマウスからも行いたいのです
>>884
スクロールバーとの組み合わせですか
色を解決できれば使えそうですね
色の変更方法と合わせて調査してみます
0887デフォルトの名無しさん
2006/03/01(水) 19:28:00ん?ユーザーからは選択もスクロールもさせたくないんじゃないのか?
コードからのみしたいって話で。
0888デフォルトの名無しさん
2006/03/01(水) 19:30:13何、つまりスクロールはさせたいが選択はさせたくない?
選択って何?ハイライトさせたいだけ?
ならんなものPanel継承して自分で作れ。それのほうが早い。
0889デフォルトの名無しさん
2006/03/01(水) 20:41:17それも考えたのですが、そうすると、選択してもスクロールしない、テキストに合わせたサイズにできない、など動作の違いが出るので止めました。
内部のテキストのサイズを計測して同じサイズにすれば良いかとも思いましたが上手く解決できませんでした(>>826は私です)
>>887
不明確な言葉ですみません
スクロールはユーザにさせたいのです
>>888
RichTextBoxと同等の描画機能(RTFによるフォーマット)を実装する必要があるので工数的に厳しいです
というかRTFのパーサを組むと考えるだけでも頭がクラクラします・・・
0890デフォルトの名無しさん
2006/03/01(水) 20:58:06RichTextBox を継承したコントロールを作って、WndProc をオーバーライドして
WM_LBUTTONDOWN 等を捨ててしまえばいいのでは・・・
0891デフォルトの名無しさん
2006/03/02(木) 13:17:30private void richTextBox1_SelectionChanged( object sender, EventArgs e )
{
richTextBox1.SelectionLength = 0;
}
カーソルは表示されるけど
0892デフォルトの名無しさん
2006/03/02(木) 17:10:071.ReadOnlyプロパティをtrueに設定
2.TabStopプロパティをfalseに設定
3.Enterイベントで適当なコントロールのFocus()を呼んでフォーカスを飛ばす(次のタブインデックスのコントロールなど)
4.SelectionChangedイベントで現在の選択範囲を維持するようにする(Enterの時点で選択が解除されるため/コードで選択した範囲はクラス内で保持しておく)
・タブオーダーに影響しない
・ユーザ操作では選択されない
・ユーザ操作でスクロールできる
・コードから選択範囲を変更可能
・RTFテキストが使用できる
0893デフォルトの名無しさん
2006/03/02(木) 17:41:43答えの3は/で使えました
0894デフォルトの名無しさん
2006/03/02(木) 17:46:45「演算子」で検索すればでてくるよ。
とりあえずShiftキーを押さえながら5を押すんだ。
0895デフォルトの名無しさん
2006/03/02(木) 17:51:037%3
0896デフォルトの名無しさん
2006/03/02(木) 18:30:35「演算子 [C#]」に%演算子というものがありました
7%3にすると1が使えました
ありがとうございました
>895さん
7%3でも1が使えました
ありがとうございました
0897デフォルトの名無しさん
2006/03/02(木) 18:31:28まちがえました
まえのは7%2でつぎのが7%3でした
どちらも1がとれました
ありがとうございました
0898デフォルトの名無しさん
2006/03/02(木) 18:33:52あなたのはまちがっていました
7%2があたりでした
7%3はかきまちがいですか?
ざんねんです
0899デフォルトの名無しさん
2006/03/02(木) 19:05:54レコードが追加できません。(コンパイルエラー・実行時例外共になし)
煮詰まって、お手上げです、どの様に修正すればよいのでしょうか。
環境はVisualStudio2005Pro+SQLServer2005Express+WinXpProです。
(adapter.SelectCommandでSELECTはできました。)
command = new SqlCommand(
"INSERT INTO test (SEQ, Message) " +
"VALUES (@seq, @message)", connection);
command.Parameters.Add("@seq", SqlDbType.Int, 4, "SEQ");
command.Parameters.Add("@message", SqlDbType.NVarChar, 20,"Message");
command.Parameters["@seq"].Value = 3;
command.Parameters["@message"].Value = "Hello?";
adapter.InsertCommand = command;
0900デフォルトの名無しさん
2006/03/02(木) 19:42:46SqlCommandBuilder
0901デフォルトの名無しさん
2006/03/02(木) 19:43:50それだけじゃわかんね。
DataTableに追加するところと、Updateするところはどないになっとる?
0902デフォルトの名無しさん
2006/03/02(木) 20:01:590903デフォルトの名無しさん
2006/03/02(木) 20:08:22C#の初心者専用スレが見つからなかったので、ここでよろしいかわからないのですが、質問があります。
PanelのAutoScrollをtrueにし、その上にピクチャーボックスを貼り付けています。
うまいぐあいに「大きい画像には自動的にスクロールバーがつき、スクロールさせて見られる」という仕組みができました。
ただ、Panelに十分な横幅を持たせているのにも関わらず、横幅がPanel幅未満の画像をロードしても
横スクロールバーが無効になってくれません。
無効になってくれないだけではなく、ちょびっとだけ画像のが隠れてしまい、スクロールしないと全横幅が見られなくなってしまいます。
どうも縦スクロールバーの幅の分だけ隠れてしまうようなのですが、これに対処するプロパティなどはありますでしょうか?
0904最凶VB厨房
2006/03/02(木) 20:14:16SqlDataAdapterを使う意図が感じられんのだが。
0905988
2006/03/02(木) 20:25:09>>900
>SqlCommandBuilder
>>901
>DataTableに追加するところと、Updateするところはどないになっとる?
すみません、C#で書く、初めてのプログラムなので、このあたりのことが
判っていません。(このコードもMSDNの使用例をコピーして作っています。)
ソースとしては、次のように書いています。
static void Main(string[] args)
{
DataSet dataset = new DataSet();
SqlCommand command;
// データベースへの接続を作成
SqlConnection connection = new SqlConnection(
"Data Source=.\\SQLEXPRESS;Initial Catalog=TestDB;User ID=hoge;Password=hoge;");
// SQL Server データベースの更新に使用する、データベース接続アダプタを作成
SqlDataAdapter adapter = new SqlDataAdapter();
// INSERTを実行してみる
command = new SqlCommand(
"INSERT INTO test (SEQ, Message) " +
"VALUES (@seq, @message)", connection);
command.Parameters.Add("@seq", SqlDbType.Int, 4, "SEQ");
command.Parameters.Add("@message", SqlDbType.NVarChar, 20,"Message");
command.Parameters["@seq"].Value = 3;
command.Parameters["@message"].Value = "Say Hello";
adapter.InsertCommand = command;
}
テーブルは、SEQ(int)とMessage(nvarchar(20))のみです。
0906デフォルトの名無しさん
2006/03/02(木) 20:31:26下記のようなフォルダがあった場合、「555」を「222」に変更すると例のように表示されます。再度"LocalFilelistを読み込むと正常に表示されるのですが、名前を変更した時に一緒に正常に表示できるようにしたいです。ご教授お願いします。
---------------------------
111 111
333 →222
555 222
---------------------------
private void LocalFileList(string path){
listView_Local.Items.Clear();
tbox_LocalPath.Text = path;
ListViewItem listViewItem;
//フォルダ一覧
DirectoryInfo DI;
DI = new DirectoryInfo(path);
foreach(DirectoryInfo dir in DI.GetDirectories()){
listViewItem = new ListViewItem(dir.Name,1);
listView_Local.Items.Add(listViewItem);}}
//アイテムを改名する
private void menuItem2_Click(object sender, System.EventArgs e){
Temp = lvi.Text;
lvi.BeginEdit();}
private void listView_Local_AfterLabelEdit(object sender, System.Windows.Forms.LabelEditEventArgs e){
string filename = e.Label;
Directory.Move(Temp,filename);
LocalPath = Directory.GetCurrentDirectory();
LocalFileList(LocalPath);}
0907デフォルトの名無しさん
2006/03/02(木) 20:35:44再現しないんだが。
PictureBox のサイズはどうやってるんだ?
0908デフォルトの名無しさん
2006/03/02(木) 20:53:01回避も何も、どっかで変なことやってるんだろう。
ブレークポイント設置してどこでListViewItemのラベルが変更されてるかチェックしていってみろよ。
//恐ろしく読みづらく且つ意味のない例示コードだな。
0909デフォルトの名無しさん
2006/03/02(木) 20:56:27listView_Local_AfterLabelEditの最後で listView->Invalidate();
でもしてみたら?
0910デフォルトの名無しさん
2006/03/02(木) 21:18:20いや、そのコード根本的な部分で間違いまくってるから。
ADO.NET周りのドキュメントやらチュートリアルやら@ITあたりの入門記事やらを
読んで最低限の知識ぐらいはつけて。
0911デフォルトの名無しさん
2006/03/02(木) 21:25:58お返事ありがとうございます。
AutoSizeを指定しています。
ずばり
ttp://dobon.net/vb/dotnet/graphics/scrollimage.html
のサンプルコード(URLはvbですが、c#のコードもあります)を試しています。
このとおりにやり、横幅は小さめ。縦幅が大きめの画像を読み込めば際限するかと思います。
こちらの環境は
Microsoft Visual C# 2005 Express Edition です
0912デフォルトの名無しさん
2006/03/02(木) 21:41:59(200,200) の Panel に乗った PictureBox に (190, 210) のイメージを読み込ませたらスクロールバーが両方出ちゃうってこと?
そりゃ当たり前の動作だが。
縦スクロールバーが表示されて、その縦スクロールバーのために横表示領域が 200 より小さくなるからな。
(200 - SystemInformation.VerticalScrollBarWidth, 210) のイメージなら当然縦スクロールバーのみだし。
0913デフォルトの名無しさん
2006/03/02(木) 21:50:22はい。
ただ、Panelが十分横に大きいのだから「横スクロールバーは消える」「縦スクロールバーだけになる」というのが最も望ましい結果です。
もしそれは(縦スクロールバーのせいで)難しいのであれば、「バーが消える」のではなく「バーが無効になる」動作でも構わないと思っています。
横に十分な大きさがあるのに、スクロールしないと横の全景が見えないのは不満かと思います。
(そういえばIEでフレームが使われているページにいくと、十分横にIEを広げても同じ現象になりますね)
0914898
2006/03/02(木) 21:56:27static void Main(string[] args)
{
DataSet dataset = new DataSet();
SqlCommand command;
// データベースへの接続を作成
SqlConnection connection = new SqlConnection(GetConnectionString());
connection.Open();
command = new SqlCommand(
"INSERT INTO test (SEQ, Message) " +
"VALUES (3, 'SayHello')", connection);
// INSERTを実行しる
Int32 recordsAffected = command.ExecuteNonQuery();
}
0915デフォルトの名無しさん
2006/03/02(木) 22:04:24それはつまり(画像を表示できる幅を減らさないように)
幅ゼロで縦スクロールバーを表示して欲しいということですか?
プログラムは簡単になるでしょうけれども、実現不可能なような気がします。
0916デフォルトの名無しさん
2006/03/02(木) 22:19:160917デフォルトの名無しさん
2006/03/02(木) 22:28:24いえ。縦スクロールバーを考慮に入れた上で、十分な横幅を確保して欲しいということです。
■が画像
□がスクロールバーだとします。
横4■, 縦10■ の画像をセットすると↓こうなってしまいます。
■■■□
■■■□
■■■□
■■■□
■■■□
□□□
私としては
■■■■□
■■■■□
■■■■□
■■■■□
■■■■□
こうなって欲しいわけです。それができるくらい十分に横幅がある(それくらいスペース空けてる)のですから。
もしくはせめて
■■■■□
■■■■□
■■■■□
■■■■□
■■■■□
□□□□
こうなって欲しいのです。横スクロールバーは、いわゆる触れない「無効なスクロールバー」ですが。
0918デフォルトの名無しさん
2006/03/02(木) 22:30:59そう言う解決で良いのなら画像変えるときに Panel のサイズ変更すれば良いだけだろ。
0919デフォルトの名無しさん
2006/03/02(木) 22:39:45AutoScrollでは無理
ユーザコントロールで自力でスクロールバーの表示制御をするコントロールを作るべし
0920デフォルトの名無しさん
2006/03/02(木) 22:46:32AutoScrollをTRUEにしていると、Panelのサイズがかわったごとき動作になるようです
実際はPanelは十分に横幅をもっており、AutoSizeはFALSEです
>>919
Autoでは無理ですか。がんばって自作してみることにします
車輪の再発明って感じですが、C#を理解するステップとしては丁度いいかもしれません。
>ALL
ありがとうございました。
0921デフォルトの名無しさん
2006/03/02(木) 23:01:04何が不満なのかさっぱりわからん。
0922デフォルトの名無しさん
2006/03/02(木) 23:12:510923デフォルトの名無しさん
2006/03/02(木) 23:21:360924デフォルトの名無しさん
2006/03/02(木) 23:57:510925デフォルトの名無しさん
2006/03/03(金) 00:11:42C#でマップエディタでも作ろうと思い
・まず町の全景をImageに作りました。5120*5120ドットくらいで、かなり大きいです
・次にPictureBoxを作成。256x256程度です
・マウスドラッグでスクロールできるようにし、1/60秒で画面を再描画するようにしました
ところがこれが物凄く重いのです。
{
Graphics g = pictureBox1.Image;
g.DrawImage(imgMap, 0, 0, new Rectangle(nScrollX, nScrollY, 256, 256), , GraphicsUnit.Pixel);
pictureBox1.Invalidate();
}
これが1/60秒で呼ばれるようになっています。
ためしに町の全景を512*512にしてみたところ、とてもスピーディーになりました。もたつきはありません。
ということは、画像の転送元の大きさに影響を受けてしまうということなのでしょうか。
C#を使い始めたのはつい最近なのですが、C++時代には考えられない遅さです。やり方を根本的に勘違いしているのでしょうか?
アドバイスお願いいたします。
C#はGDI+を使っているのでハードウェアアクセラレーターが効かないのは重々承知なのですが、転送元の画像がでかいと遅くなるというのは…
0926デフォルトの名無しさん
2006/03/03(金) 00:17:18ていうか街の全景って一枚絵にするもんなの?
0927デフォルトの名無しさん
2006/03/03(金) 00:21:52はい。いわゆる水彩画のようなタッチで描いたでかい1枚の町絵を背景としたRPGとなります。
どうもある一定の大きさを境に、ガクっと速度が落ちるようです。
Imageを読み込んだあと、分割して持つしかないですかね…。
0928デフォルトの名無しさん
2006/03/03(金) 00:23:280929デフォルトの名無しさん
2006/03/03(金) 01:13:08画面を256*256ずつに分割したらちょっぱやになりました。
手抜きで、256*256を全部DrawImageしてるんですけどね…。参照元の大きさが一定以上いくと激遅になる。と記憶しました
ただ、分割する時にすら信じられないほど遅くて、5120*5120を256*256に分解すると30秒くらいかかりましたわ…
0930デフォルトの名無しさん
2006/03/03(金) 01:17:120931デフォルトの名無しさん
2006/03/03(金) 08:06:10Google Map見てきたほうが良いよ
あれはピクセル数で言えば億単位以上の画像をスクロール可能にしてる
どうすれば巨大画像を効率良く扱えるか見えてくる
別に物理的に画像を分割しなくてもビットマップをヘッダとデータで分割してランダムシークとか方法は色々ある
ファミコン時代のドラクエなんかも仕組みは同じ
表示する箇所だけ描画
スクロールするときはスクロール量(ドラクエだったら一歩/一マス)の分だけ先に書いておいてスクロール
スクロールアウトした箇所は描画から落ちる
時代が変わってもやることは一緒
で、単に表示ではなく60fpsものフレームレートが必要な理由って何?
そんだけのフレームレートを出すならDirectXを使うべき
意固地にGDI+に執着するは勝手だが苦労するだけなので、適材適所の製品選択を
単に表示して再描画だけならGDI+で十分だと思うけど60fpsも出すとなるとハードリソースに頼りすぎだと思う
0932デフォルトの名無しさん
2006/03/03(金) 08:08:47C++で同じプログラム書いて速度計測してみた?
0933デフォルトの名無しさん
2006/03/03(金) 08:13:095120*5120*32だとすると約800MBだよね
それだけをメモリ上に確保してってやってりゃスワップも発生しないか?
あとDrawImageがどういう実装か分からんけど、効率的にメモリ上のビットマップにアクセスできてるのかね。
C++時代は考えられないとか書いてるけど、C++の時は自力でそのあたりも実装したんでしょ?
だとすればC#でも同じコード書いてみ。
0934デフォルトの名無しさん
2006/03/03(金) 08:44:14100MBだろ
0935933
2006/03/03(金) 09:47:00色に32バイトもかけてる贅沢な画像はまだ無いよね orz
0936デフォルトの名無しさん
2006/03/03(金) 09:52:34MouseMoveイベントで描画で十分じゃないの
マップエディタであってゲームじゃないよね
0937デフォルトの名無しさん
2006/03/03(金) 10:21:09> 転送元の画像がでかいと遅くなるというのは
普通だろ
転送元がどう格納されているかなんてC#じゃ制御できないし
60fpsものパフォーマンスを求めるならC++とDirectXでフルスクラッチ
0938デフォルトの名無しさん
2006/03/03(金) 12:00:29私も本来なら描画範囲だけ動的に作ればいいと思っていたのですが
描画範囲をチップで構築するのがこれまた遅いのです。
マウスクリック&ドラッグによるスクロールを実装しているのに
FPSがガタオチでスクロールがスムーズに行なえません。
FPS60にこだわっていたのは、このクリック&ドラッグスクロールがあるためです。
0939デフォルトの名無しさん
2006/03/03(金) 12:05:58単に変数に盛っておいて、pictureBox の Image に入れなけりゃ早くなるんじゃないの?
pictureBox1.Image にでかい画像いれて、pictureBox1.Invalidate(); なんて
したら大変なことになるのは当然のような・・・
0940デフォルトの名無しさん
2006/03/03(金) 13:03:28いえ。925の実装ではpictureBoxのImageには描画範囲分しか持たせておりません。
(今よくみたら、Graphics gへの代入が変ですね)
最初はpictureBox.Imageに町の全景を持たせていたのですが、ちょっとした大きさでもすぐ重くなってしまって使えませんでした。
ネットで調べたところ、.Imageへの代入はあくまで簡易に表示するためとありましたので、今回の実装に変更しました。
pictureBoxの大きさ(256*256)のImageをもたせる。
そのImageに、256*256分だけ町全景ImageからDrawImageで転送する。
0941デフォルトの名無しさん
2006/03/03(金) 13:13:55MouseMoveイベントでクリップ描画すれば事足りるだろ
ドラッグ操作と描画を分けて考えるからそんな面倒が実装になる
1200dpiのA0画像を編集するツールを作って客に出してるけど、DirectX使わずとも現行機レベルなら実用レベルで動いてるよ
0942デフォルトの名無しさん
2006/03/03(金) 13:48:05MouseMoveイベントで行いましても、描画自体の重さが解消されるわけではありません。
また、移動させたあとに余韻をもったスクロール(マップを滑らせながら離した場合、しばらくスクロールが続く)をさせるためにもTimerは必要となります。
ところでMouseMove中に描画処理をするようにしましたところ
画像の転送が遅すぎてInvalidateのWM_PAINT(がとんでると思っています)よりさきにWM_MOUSEMOVEが大量に溜まり、ほとんど再描画されないようになりました。
描画はタイマーに逃がしてしまわないとまずいのではないでしょうか?
0943デフォルトの名無しさん
2006/03/03(金) 14:18:46あのさ、最初にこう書いてるじゃん
> C#を使い始めたのはつい最近なのですが、C++時代には考えられない遅さです。
C++時代はどう組んでたの?
それと同じ組み方すればいいんじゃないの
ImageとかGraphicは巨大なデータの最適化より利便性優先だから遅くても仕方ないと思うし
0944デフォルトの名無しさん
2006/03/03(金) 14:20:33DirectXみたいに別の描画面があるわけじゃないから、描画はOnPaintでいいんでは
0945デフォルトの名無しさん
2006/03/03(金) 14:35:27しかし方法が全く分かりません
検索でも上手く見つかりません
何かヒント教えてください
0946デフォルトの名無しさん
2006/03/03(金) 15:03:28C++時代は画像元が大きいと転送速度ガタオチという現象はありませんでした。
仮に32*32のようなチップを並べて画面を構築するタイプだとしても、描画必要範囲分をその時その時で構築してあまりあるスピードでした。
>>944
私としてはTimerだろうとOnPaintだろうとどちらでも良いと思っています。
ただ、描画速度の遅さというボトルネックが解決できないことには変わりません。
ついで
>>945
C#相談室ではなく、アルゴリズムスレとかで質問したほうがいいぞ
0947デフォルトの名無しさん
2006/03/03(金) 15:21:39プロファイラさえあれば、C# 2.0 に移行できるのに
0948デフォルトの名無しさん
2006/03/03(金) 15:52:47> C++時代は画像元が大きいと転送速度ガタオチという現象はありませんでした
それはC++/CLIで同じロジックを組んだものですか?
ビットマップへのアクセスをフルスクラッチした、全く違うアルゴリズムのものではありませんか?
描画はGDI直ですか?GDI+ですか?DirectXですか?
> 仮に32*32のようなチップを並べて画面を構築するタイプ
それは違う話ではないでしょうか
小さな画像を並べるのと巨大画像からクリップして貼り付けるのではアルゴリズムもメモリ上の扱いも違うと思います
> TimerだろうとOnPaintだろうとどちらでも良い
Timerではメッセージキューに描画命令が次々と入れられます
OnPaintであれば描画できるタイミングでの描画になります
もしかして描画が遅いのではなく、Timerから刻々とくる描画命令の負荷に耐えられないのでは無いのでしょうか
それが見かけ上描画遅延に見えるとか
まず、C++時代の十分に有り余る処理能力のコードを検証してみてはいかがでしょうか?
それとC#のコードがどう違うか、それを検証してはいかがでしょう
0949デフォルトの名無しさん
2006/03/03(金) 16:29:06>もしかして描画が遅いのではなく、Timerから刻々とくる描画命令の負荷に耐えられないのでは無いのでしょうか
この可能性を考え、検証コードを組んでみたいと思います。
ちなみにC++の時はGDI直でした。GDI+も使えますが半透明などを使うつもりはないもので。
0950デフォルトの名無しさん
2006/03/03(金) 16:29:39逆に問題スピードのC++実装を見てみたい
それをC#に移植する助言できる人は沢山いると思うよ
0951デフォルトの名無しさん
2006/03/03(金) 16:34:25CLR Profiler for the .NET Framework 2.0 じゃあかんの?
0952デフォルトの名無しさん
2006/03/03(金) 16:51:53描画まわりをペイントがわに移し、MOUSE_MOVEでInvalidateを呼ぶスタイルにしてみました。
速度は変わらないようです。
>>950
単純にGDIリソースにチップ(ある程度小さい画像に分けてある)として読み込み
描画領域に移っているチップだけその場でBitBltしていただけです。
ハードウェアアクセラレーターがきくので滅茶苦茶速かったです。
0953デフォルトの名無しさん
2006/03/03(金) 17:01:48同じように組めばいいんでは
OSネイティブではない.NET Frameworkでは不得手なこともあるわけで
それと、GDI直でやるよりDirectXでやるべき仕様のような気がする
Managed DirectX使えばコードも簡単だしGDIより速いし文句の付けようが無いと思うよ
0954デフォルトの名無しさん
2006/03/03(金) 17:16:12なるほど。私もC++時代に使った経験がありますし、DirectXを検討してみようと思います。
Managed DirectXというものを調べて実装試してみます。
アドバイスありがとうございました。
0955デフォルトの名無しさん
2006/03/03(金) 19:02:37確かGraphics.DrawImageってソフトウェアレンダじゃなかったっけ?
DirectXでもいいけど、単純にpinvokeしてBitBlt使えば速くなると思うよ。
0956デフォルトの名無しさん
2006/03/03(金) 20:33:21コラムだかを見たような気がして探してみたが見つからなかった。
結局は直接ごりごりやらんとムリって結論だったような気がしたが。
0957デフォルトの名無しさん
2006/03/03(金) 20:37:17このスレの流れ的には多分意味がない結論だな。
0958デフォルトの名無しさん
2006/03/03(金) 21:36:03BitBltも悪くは無いけど餅は餅屋に任せるべき
0959デフォルトの名無しさん
2006/03/03(金) 21:45:490960デフォルトの名無しさん
2006/03/03(金) 21:50:38今時どんな環境だよw
それ言い出したら.NET Framework入れてなきゃC#使えないわけで
あらゆるWin32環境で動くのを作ろうと思ったらC#は選べないよ
0961デフォルトの名無しさん
2006/03/03(金) 21:51:32今話しに上がってるような大きな画像はテクスチャにできないのでダメだと思うけどな。
システムメモリのサーフェスから転送するんだったらCPUで処理するのと大差ないし。
0962デフォルトの名無しさん
2006/03/03(金) 22:07:390963デフォルトの名無しさん
2006/03/03(金) 22:32:470964デフォルトの名無しさん
2006/03/03(金) 22:49:090965デフォルトの名無しさん
2006/03/03(金) 22:56:25うーん・・ITmediaか@ITだったか。
結論は4バイトまとめてドン。とかそんな感じ。
0966デフォルトの名無しさん
2006/03/03(金) 23:01:240967デフォルトの名無しさん
2006/03/03(金) 23:09:51そんなに単純な話でもない。
細かいフューチャーはサポートしているかどうかチップによっても違う。
だから「使うなら確認せよ」っていうんがDirectXの方針。
今回の場合でかいサイズのテクスチャだからDXTCあたり使うとよさげ。
でもDirectX云々抜きにしてメッセージループで60fpsは無謀です。みょん。
ゲームでよくPeekMessageぶん回すけどそのせい。
それにここまで上げるとティアリングの問題も出てくるし(無視すりゃいいが)、
「60fps絶対いる!」とかいうのでもない限り求めるな。そういうのはWindowsは
死ぬほど向いてない。Vistaでマシになるけども。
0968デフォルトの名無しさん
2006/03/03(金) 23:22:40細かい違いって言うけど、救いようのない違いってそんなにあるか?
大概代替手段が提供されていて、パフォーマンス低下するけどなんとかなる的に組まれてると思うが
そりゃサウンド無いのに音出せって言っても無理だが、それが一般的かと言われりゃそうじゃない
100%は無理でも代替でほぼ100%いけるのがDirectXの良さ
でなきゃDirectXでゲームは作れない
0969デフォルトの名無しさん
2006/03/03(金) 23:27:26まさかC♯で最新技術を使ったFPSやらを作るわけじゃあるまいし
0970デフォルトの名無しさん
2006/03/03(金) 23:38:020971デフォルトの名無しさん
2006/03/03(金) 23:40:340972デフォルトの名無しさん
2006/03/03(金) 23:54:16なんだと
0974デフォルトの名無しさん
2006/03/04(土) 00:14:33サポートしていない機能を使おうとするとエラーです。
っていうかつまり「代替機能」は「アプリケーションプログラマがやる」のが
基本スタンスなんす。
まぁ挙げている程度のことなら大丈夫だと思うけどね。注意するところは
サポートフォーマットとサイズぐらい?D3DXで吸収されるかな。
0975デフォルトの名無しさん
2006/03/04(土) 00:22:41だから「C#特有の部分が分からない」んじゃなくて「微分する関数」そのものが
分からんのでしょ?
「微分する関数」そのものがわかっていればあまり悩むこともないやろうし。
そのレベルならアルゴリズムスレ。んで、「〜するためにこうこうした(こういう
コードを書いた)んですが、よく分かりません」ってレベルになったらここ。
0976デフォルトの名無しさん
2006/03/04(土) 00:26:330977デフォルトの名無しさん
2006/03/04(土) 00:30:16> っていうかつまり「代替機能」は「アプリケーションプログラマがやる」のが
> 基本スタンスなんす。
DirectXの環境依存対策の基本は代替手段の“選択”
普通ハード環境に合わせて最適なDirectXドライバを使うようにプログラム組む
もしくはユーザにドライバを選択するためのインタフェースを提供する
これらはDirectXが提供しているものを選択するだけで、機能を実装する必要は無い
特定のハードでしかサポートしていない機能“だけ”を使って組むことはDirectX開発の基本から外れてる
その場合は“特異”であるものとして別途明記すべきレベルの話になると思うが
極論を持ち出せばどうとでもいえるが、今は一般論で十分じゃないか?
ちなみに“代替機能の提供”となると、DirectXでできないならGDIで実装とかDirectPlayできないならSocketで実装とかそういうレベルでしょ
貴方的にはそこまで実装すべきで、自分は今までそうしているから書いたというのであれば、貴方の言葉足らず
・・・もうC#の話題じゃないなw
0978945
2006/03/04(土) 00:32:56> だから「C#特有の部分が分からない」んじゃなくて「微分する関数」そのものが
> 分からんのでしょ?
そうです、微分する関数をどう作るか分からないのです
> そのレベルならアルゴリズムスレ
すみません、他の言語は分からないので、最初からC#で組みたくてこちらに投げました
微分などの処理はアルゴリズムで書くのが一般的なのですか?
もしそうだとしたら移植しようにもアルゴリズムが分からないので難しいです orz
0979デフォルトの名無しさん
2006/03/04(土) 00:47:11すれ違い
http://pc8.2ch.net/test/read.cgi/tech/1141400056/
0980945
2006/03/04(土) 01:01:34すみません、茶化さないで下さい
本当に困っています... orz
アルゴリズムというキーワードと微分というキーワードで検索してみました
非常に難しい話が多く、まったくチンプンカンプンです
もしかして大学レベルでやることなのでしょうか?
授業でやる微積とは全然違うのですね orz
0981デフォルトの名無しさん
2006/03/04(土) 01:09:33一体何がわからんのかがわからん。
式を微分する方法を聞きたいなら、スレ違い。まずそいつをどっか適切なスレで
解決しれ。
式が判っててプログラム化がわからないなら、こういう入力でこういう出力を
したいって書いてくれ。
正直、ここの連中は人の宿題を代ってやってやる義理などないんで。
0982デフォルトの名無しさん
2006/03/04(土) 01:34:400983デフォルトの名無しさん
2006/03/04(土) 02:00:18PictureBoxつかうより、Panelに直に描いたほうがだいぶ速いはず。
(再描画処理は自前でやることにはなる。)
PictureBoxは高速に書き換える用途には向かない。
0984デフォルトの名無しさん
2006/03/04(土) 02:02:410985デフォルトの名無しさん
2006/03/04(土) 02:13:21多分最終的にプログラムそのものを書いてやんないとわかんないレベルだろ。
そんなん課題にならんがな。
0986983
2006/03/04(土) 02:18:11それから街の全景の読み込みにImage.FromFileを使ってないか?
こいつは必要に応じて画像をメモリから廃棄したりファイルから読み直したりするから、
頻繁にファイルの読み直しが発生してるかも知れないな。
0987デフォルトの名無しさん
2006/03/04(土) 09:03:290988デフォルトの名無しさん
2006/03/04(土) 09:15:05東芝/Dynabook Satellite 4360
などはダメ
0989デフォルトの名無しさん
2006/03/04(土) 10:43:07VB6にあるReDimのようなものはないのでしょうか?
0990デフォルトの名無しさん
2006/03/04(土) 10:53:04無いのでArrayList使った方が良い。
0991デフォルトの名無しさん
2006/03/04(土) 11:05:35VB6 の ReDim はよく知らないが、C#2.0 なら Array.Resize かな。
0992デフォルトの名無しさん
2006/03/04(土) 11:21:49>>990 ありがとうございます
0993デフォルトの名無しさん
2006/03/04(土) 11:37:55本屋さんに行って、おまいさんの理解できる本を探すか、
一番良いのは課題出した先生か同級生に相談することじゃないかな。
数学忘れたから微分判らんが、
どういうレベルの話をしてるのか、おまいさんの脳味噌がどんなぐあいか、
その人達が一番よく知ってるだろう。
0994デフォルトの名無しさん
2006/03/04(土) 12:21:11係数と累乗を文字列で入力させてごにょごにょすればいいよw
0995デフォルトの名無しさん
2006/03/04(土) 12:31:06発行、インストールはできるのだが
LAN上の他のPCにインストールしようてして
publich.htmのインストールボタンをクリックすると
***.applicationのライセンス認証に失敗しました。次の失敗メッセージが検出されました。
+h**p://******.aplicationのダウンロードに失敗しました。
+リモートサーバに接続できません。
+接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、・・・
とエラーがでます。
XPにも2Kのマシンにも同じ表示がでます。
エロイ人、助けて!
0996デフォルトの名無しさん
2006/03/04(土) 13:46:580997デフォルトの名無しさん
2006/03/04(土) 13:47:500998デフォルトの名無しさん
2006/03/04(土) 13:48:330999デフォルトの名無しさん
2006/03/04(土) 13:55:591000デフォルトの名無しさん
2006/03/04(土) 13:56:47(`・ω・´)
.ノ^ yヽ、
ヽ,,ノ==〆ノ
/ l |
"""~""""""~"""~"""~"
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。