C♯相談室 Part8

このエントリーをはてなブックマークに追加
1名無しさん♯

   ∧_∧____
  /(#゚ー゚) ./\
/| ̄∪∪ ̄|\/    C#,.NET関連の話題はこちらでどうぞ。
  |____|/
   ,,,,∪∪,,, ,,


ソース置き場.NET
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&rm=10

過去スレは>>2-5あたり
2名無しさん♯:02/09/20 11:27
関連スレ

VisualStudio.NET (MSDN Dexlue) part6
http://pc3.2ch.net/test/read.cgi/tech/1024746501/l50

くだスレC#
http://pc3.2ch.net/test/read.cgi/tech/1023766485/l50

【老若】VB.net質問スレ【男女】
http://pc3.2ch.net/test/read.cgi/tech/1025848458/l50

managed C++ やろうぜ!!
http://pc3.2ch.net/test/read.cgi/tech/1014486422/l50

【Terrarium】4世代目 最終局面 決戦は金曜日♪
http://pc3.2ch.net/test/read.cgi/tech/1024319607/l50

フリーの.NET統合開発環境「SharpDevelop」
http://pc3.2ch.net/test/read.cgi/tech/1023727377/l50

消しゴムじゃない方のMONOを使ってみるスレ
http://pc3.2ch.net/test/read.cgi/tech/1020215602/l50

♯♯♯Shared Source CLI ♯♯♯
http://pc3.2ch.net/test/read.cgi/tech/1024222901/l50
5デフォルトの名無しさん:02/09/20 11:57
C#でInt32やInt16をbyte型の配列に直すには
どうしたらよいでしょうか?

>>5
System.BitConverterクラスを見てちょ。
>>1
#タン おつかれ。サンスコ(・∀・)
8デフォルトの名無しさん:02/09/21 00:25
最近思うんだけど、
もしかしてC#ってすっげえマイナー言語?
けっこう勉強してるんだけど、
なんかVB.NETのほうがぜんぜん情報多い気が・・・
>>8
すっげぇかどうかは知らないけど、今までVB使ってた企業はVB.NETを選択する傾向がある
>>8
んー,今のところあんまり興味の対象になってないね。
次期Windowsが一般に知れ渡ってからじゃないと何とも言えんねぇ。
11デフォルトの名無しさん:02/09/21 10:36
1.1手に入れた人いる?
24時間経っても音沙汰なし・・・。(´・ω・`)
12デフォルトの名無しさん:02/09/21 10:43
>>8
C#によるWindowsPrograming
13デフォルトの名無しさん:02/09/21 11:08

C#.NETに出来て、VB.NETに出来ない事ってあるの?
VBではポインタが使えないよ。
もう少し正確に書くとunsafeがありません。
>>14
>>15
大したアドバンテージじゃないんだね。
正直、VB.NETがどうだとかは興味ないな。
VBは.NETになってからやたらとコードが冗長な感じで見づらいなぁ。
VB.NETの情報でも、固有の言語というより.NET共通の情報って感じだから、
読み替えればC#で情報不足になるということはないかも。。。
19デフォルトの名無しさん:02/09/23 03:19
2019:02/09/23 04:07
一番下のを注文しちゃいました・・・
>>19

一番上のは持ってるが、極めて良書であると思う
2221:02/09/23 04:44

3番目のも良さそうだね。オレも注文しようかな
23デフォルトの名無しさん:02/09/23 10:08
VB.NETで出来るような仕事ばかりじゃなくてC++やJAVAやらCも
あるから書き方の特異なVB.NETは避けてC#にしてます。
25デフォルトの名無しさん:02/09/24 21:03
こういうのも出てるんだね。
http://www.amazon.co.jp/exec/obidos/ASIN/4774115533/
http://www.microsoft.com/japan/msdn/columns/csharp/csharp04192001.asp
にある「起動順序をより厳密に制御する場合、・・・・」
みたいなことがたっぷり書いてある本が欲しいなぁ。
質問です。
StreamWriterのClose時(Flush時)時にディスクの容量が
いっぱいだった場合に例外が発生ししますが、Catchしたあとに
OpenしっぱなしのStreamWriterはどのように処理すればよいのでしょうか?
コードは以下のような感じです。

FileStream fs = null;
StreamWriter sw = null;
try
{
fs = new FileStream("a:/nanashi.txt", FileMode.Create);
sw = new StreamWriter(fs);
for (int i = 0; i < 100; i++)
sw.Write("nanashi");
}
catch (Exception er)
{
//とりあえずなにもしない
}
finally
{
if (sw != null)
sw.Close(); //ここで例外発生

if (fs != null)
fs.Close();
}
SqlCommandBuilderなるものを今日はじめて知った。これは便利だね・・・。
>>29
DataSetの自動生成とSqlCommandBuilderを使えばEntityBeanみたいな感じで扱えるね。
>>28
漏れもそれで困って色々と調べたんだが、、
フラッシュしないでオブジェクトを破棄したいができないよね。
ワーカースレッドでの処理でそんな状態が起こった時、
気づかずにアプリケーション終了してプロセスが残ったりする危険なことになっちゃう。
結局、HDD開けくれって警告出すしかないのかなぁ。
.NET Framework 1.1βキタ━━(゚∀゚)━━ !!!!



>>32
漏れはZip Codeも書いてくれっていうメールが来た。(´・ω・`)ショボーン
34デフォルトの名無しさん:02/09/26 03:42
1.1でライブラリはどれくらい変わったの?
35デフォルトの名無しさん:02/09/26 08:09
> finally
> {
> if (sw != null)
> sw.Close(); //ここで例外発生
>
> if (fs != null)
> fs.Close();
> }

これってさあ、fs.Close()する意味あるの?
sw.Close() って元になるストリームを閉じるためのものじゃないの?

「現在の StreamWriter と基になるストリームをクローズします。」
と書いてあるんだけど。俺はだまされてるのか?
>>35
あなたが正しい。
3728:02/09/26 08:50
>>31
>>35
31さんのおっしゃっているように、
「フラッシュしないでオブジェクトを破棄したい」ってことが結局やりたい
んですよね。(Closeする時にFlushしてしまう。)
Closeしないでそのまま放っておくと、プロセスが開いたままなので何かと
やばいとおもうんで。

破棄するなんか良い方法ないですかね?
38デフォルトの名無しさん:02/09/26 12:39
IEコンポーネントを使うと下の2つのDLLが生成されます。

AxInterop.SHDocVw.dll
Interop.SHDocVw.dll

当然のようにこいつらがないとEXEファイル単体では動きません。
正直EXEファイルと同じディレクトリにDLLが散らばってるのは
気に入らないので何とかしたいんですが。

理想としてはEXEファイル1ヶでアプリを完結させたいです。
環境はVisual C#.NETです。
>>38
aximp.exe には /source オプションがあるからソースだけ取り出せるけど、
tlbimp.exe にはないからどうしても Interop.SHDocVw.dll だけは別にするしかないみたいね。
40デフォルトの名無しさん:02/09/26 12:50
>>38
namespace MyApp
{
[ComImport]
[Guid("64AB4BB7-111E-11D1-8F79-00C04FC2FBE1")]
public class ShellUIHelper{}

[ComImport]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
[Guid("729FE2F8-1EA8-11D1-8F85-00C04FC2FBE1")]
public interface IShellUIHelper
{
void AddFavorite( [In, MarshalAs(UnmanagedType.BStr)] string URL, object Title);
}
}
とか?
4138:02/09/26 12:54
>40
うわ、さっぱり分からん。
決定的に勉強不足のようです。
週末にでもペゾルト本買いに逝ってきます。
>>37
ん〜 どうしても見つかんないね。なんでないんだろうね。
Finalize はprotectedだし、、、
結局HDDが一杯でCloseできないとき、それをエラーとしてフラグたてといて
エラーがある時にアプリ終了する場合
System.Diagnostics.Process process = System.Diagnostics.Process.GetCurrentProcess();
process.Kill();
とかしてアプリ強制終了とかするしかないかもね。
それか、HDD空けてくれるまでアプリの終了を拒否するとか、、、・゚・(ノД`)・゚・
ここで何回か紹介されている黄色本をネットで注文して、今日
本が来たんだけど、カバーがオレンジ色になってた。
色が変わったのかな。
カバーの色なんてどうでもいいんだけど、荷物を開けた瞬間違
う本が間違って送られてきたのかと思ったよ。
プロファイリングしてて気づいたんだけど、
ArrayList(ほかのも?)の foreach って結構オーバーヘッドが大きいんだね。
頻繁に呼ばれるところだと for でぐるぐる回したほうがよさそうなんだけど、どうなの?
>>44
ILコード見て比較してみれ。forの方が単純で速い。
寝ようと思ったら1.1βのメールキタ━━━━━━(゚∀゚)━━━━━━ !!!!!
でも明日にするか・・・。(´・ω・`)
>>46
俺んとこにもメール来た
キター!!と思って見たらKlezだったよ・・・・(´д`;)
>>47
落差にワラタ。すまん。
1.1入れてみたけど、変わり具合は地味ですな・・・。
1.1でWebBrowser(shdocvw.dll)のBeforeNavigate2イベントちゃんと直ってる。
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
51デフォルトの名無しさん:02/09/27 15:08
ListViewコントロールの詳細表示で特定の列だけサイズ変更を禁止するには
どうすりゃええんじゃろか。

関係ありそうなイベントに引っ掛けてサイズを再設定すりゃいいかと思ったが
どうにもうまくいかんのじゃよ。
>>51
MinSize、MaxSize、Sizeを同じ値にすればいいんじゃないの?
>52
ところがどっこいColumnHeaderクラスにはそれらのプロパティがないのじゃよ。
サイズ関連であるのはWidthだけでな。
54デフォルトの名無しさん:02/09/27 20:09
>>28 
ガイシュツならスマソ。

その手のリソースの明示的な開放が必要クラスは、
大概System.IDisposableインターフェースをサポートしているよ。
だから、こんな感じでいいんじゃない?(動作確認してない。スマソ)

try
{
using (FileStream fs = new FileStream("a:/nanashi.txt", FileMode.Create))
{
  using (StreamWriter sw = new StreamWriter(fs))
{
sw = new StreamWriter(fs);
for (int i = 0; i < 100; i++)
sw.Write("nanashi");
}
}
}
catch (Exception er)
{
//必要に応じて例外処理
}

usingブロックからスコープから外れたら(例外発生を含む)、
オブジェクトのDisposeメソッドが自動で呼ばれて、
マネージドリソース、アンマネージドリソース両方開放されるはずだよ。

usingステートメントは地味だけど、とても便利なステートメントだ。
http://www.microsoft.com/japan/msdn/library/ja/csref/html/vclrfusingstatement.asp?frame=true
5554:02/09/27 20:12
アレー 
ソースの字下げが消えてる。
なんでた?
もいっっちょ。(今度は全角スペースで字下)
try
{
 using (FileStream fs = new FileStream("a:/nanashi.txt", FileMode.Create))
 {
  using (StreamWriter sw = new StreamWriter(fs))
  {
   sw = new StreamWriter(fs);
   for (int i = 0; i < 100; i++)
   sw.Write("nanashi");
  }
 } 
}
catch (Exception er)
{
 //必要に応じて例外処理
}
56デフォルトの名無しさん:02/09/27 20:39
ドットNet用のグラフコンポーネントのトライアル版を見つけたの
ですが、SDKでの使い方が全く分かりせん(涙)
ttp://www.softwarefx.com/GetChartFXLite/
でトライアル版をダウンロードしてセットアップ?したのですが
説明では(Windows Formで使う場合)
Deploying Chart FX with your Windows Forms applications

Chart FX consists of several compiled assemblies that must be redistributed along with your application. This assembly (DLL) does not require registry entries and can be copied to the application's directory.

登録とか必要ないと読み取れるのですが、
ドットNet専用のコンポーネントの使い方の基本が理解出来ていません
どなたかこのグラフコンポーネントはSDKから使用している方いません
でしょうか?
>>56
コンパイルオプションに r:DLL名 とかでないの?
そのDLLを参照に追加してみるのが最初の一歩だと思った
アセンブリってexeにスタティックリンクに出来ないのかな?
既出かな。。
>>54
28じゃないけど同じことで困ってた者です。
using忘れてました。鬱。
確かにDisposeが呼ばれるのでワーカースレッドでその状態が起こった時に
アプリを終了してプロセスが残るといったことは無くなりました。
ありがとう(・∀・)

でもやっぱりその場でファイル閉じてないのでアプリ終了するまで
ファイルをロックしっぱなし、、鬱。
61デフォルトの名無しさん:02/09/27 22:16
56です。
57,58,59さんどうもありがとうございます。
/r:****.dll指定で取りあえず使えそうです。
ドットNet専用コンポとCOMなどの違いがまだ
よく分かってないから頭ん中ごちゃごちゃです。(汗)
6259:02/09/27 22:48
59のは56へのレスではなくて新規の質問なのでした。
紛らわしくてすみませぬ。

SDKではなくてVS.NETを使っているけれど、ライブラリ アセンブリ
をexeに含める方法がわからないです。最初からDLLになっているし
無理なのですかね…。
6359:02/09/27 22:59
マルチファイル アセンブリというのがそれなんでしょうか?
C#の場合はコマンドラインでしか出来ないんですね。
っておそらく既出なんだろうなぁ…。
オレも >>59 と同じように1つのexeにしたいと思ってたけど
ずっと方法がわからず…。
>>63-64
残念ながら、ソースがない限り1つの.exeにまとめることはできません。
>>65
あ,やっぱりそうなの?
俺もそうかなーって思ってたけど自信無かったから言わなかった。
>>65
そうなんだ、どうもありがとう。
dllにした自作コントロールでツールボックスからD&Dして、
このdllを参照設定からはずして、dllのソースを追加で
exeのみになるようだからこれでガマンします。
原理的に出来ないわけじゃないけどね(出来ない場合もあるが)
そういうツールって需要あるのかな?
リリースするときにひとつにまとめたい、とかいう需要はあるかも
70デフォルトの名無しさん:02/09/28 03:25
別のスレッドでも質問したのですが、
はかばかしい回答が得られなかったので、
こちらに書かせていただきます。

C#とCOM(C++)の相互運用の問題です。

void SomeClass::AAA(VARIANT FAR* var);
という関数をVS.netにインポートしたところ
SomeClass {
void AAA(ref Object obj){}
}
となりました。

これを以下の通り使用すると「種類が一致しません」
という例外が発生してプログラムが中断してしまいます。

Byte b; // 上記のVARIANT型はcharとしてつかわれているので、
Object obj = b;
AAA(ref obj); // ここで例外が発生します。

この関数はVARIANT型のポインタを渡して
値を取得するものです。同じような関数が複数あり
大変困っています。どうかよろしくお願いします。

>>67
お、こうすれば出来ますね。ありがとう。
でもそのソースが使っている参照の追加は当然必要…。
参照を右ドラッグでコピー出来たらいいなぁ。

自作コントロールのDLLは参照設定から消さなくても、
ローカルコピーのプロパティをFalseにするだけでよさそう。
知ってたらスマソ。
72デフォルトの名無しさん:02/09/28 13:25
外の比較的マイナーな文学作品を翻訳出版する
小さな出版社がある。そして文学ファンはこういった出版社を
潰さないため、今後も翻訳を続けてもらうために
1人で同じ本を2・3冊買うことが良くある。

我々もこういう時だからこそDelphi7を買って
ボーランドを支えるべきなんじゃないだろうか。
Delphi7の売り上げはDelphi8以降の開発資金となるし、
ボーランドジャパンの今後に大きな影響をもたらすだろう。

Delphi7の出来のみを云々するのは
あまりにも近視眼的ではないだろうか?
>>72
このスレにまで貼り付けんな。(ワラ
なぜ72はこんなスレをつけるのか。

その謎は以下のスレに...
http://pc3.2ch.net/test/read.cgi/tech/1031668744/536-538

ここにかかれている内容を信じるかどうかはあなた次第。
Delphi7 を注文してしまった人は、すぐに答えが出るでしょう。

以上、Del厨の自爆テロでした。
>>72
72の書き込みによりDelphiの人気がさらに下がりました。
77デフォルトの名無しさん:02/09/29 13:11
.NETテクノロジー発売あげ
Version 1.0 to Version 1.1 API Changes Document (ZIP File)
http://www.gotdotnet.com/team/upgrade/v1.1/v1.0tov1.1changes.zip
79デフォルトの名無しさん:02/09/29 14:16
コントロールを配列化するにはどうすればいいのですか?
VB6.0ではコントロールをコピぺすると配列にしますか?
って聞いてきた気がするのですが。

質問ですが、
Cを大体マスターしたのですが、あまりにも生産性が低いため次の言語へ
いきたいと思います。
C#なんかよさそうだと思ったのですが、C++を1秒もやらずにC#を習得することは
現実的でしょうか。
C#はC++を改良したものだそうなので、どうしてもC++をやるのが無駄に見えてしまうのですが、
C++をやっておいたほうがよいのでしょうか。それとも、まったくの無駄足になるのでしょうか。
○○をやるのは無駄でしょうか?とか言うやつにプログラム上達は無理。
C#にそのまま行っていいと思うけど、多分君はCをマスターはしていない。
>>79
手作業でControl[]型の変数に代入
>>83
どこがw
>>83
おお。(w
日本的ですなあ。
プロパティの値を設定、または取得するデリゲートって作れないんでしょうか。

delegate bool GetBooleanValue();
GetBooleanValue m = new GetBooleanValue( obj.get_BooleanProperty );

なんて直接 get アクセサを呼んでもコンパイルとおりませんし。

メソッドを一枚かませればすみますが、使用するオブジェクトとプロパティの数だけ必要になるし、
リフレクションでは実行時まで問題が見つけにくくなってしまいます。
>>86
C#・VB.NETではダメで、VJ#ではできるみたいね。
>>87
JScript.NETでもできますた
8986:02/09/29 21:06
無理っぽいですかねぇ。
何とかなりません?>MSさん

そういえばMC++だと任意の名前のインデックス付きプロパティがサポートされてるっぽいのに C# では this[] だけ
C# って .NET 最強じゃなかったの(;д; )
>>78
おぉ〜1.1でフォルダ用ダイアログが用意されたねー。
System.Windows.Forms.FolderBrowserDialog
System.Windows.Forms.ApplicationクラスのEnableVisualStyles()も気になる。
>>91
.manifestがなくてもXPスタイルになっていい感じ。
ただし、FlatStyle.Systemは必要。
1.1で盛り上がっているところ申しわけないのですが質問です。
親ウィンドウと子ウィンドウがあって、両方表示している時、
どんな時でも、子ウィンドウの上に親ウィンドウを表示しておきたいのですが
どうすればいいでしょう?
TopMostは他のアプリケーションの邪魔になるので避けたいのですが、、、
よろしくお願いします。
> どんな時でも、子ウィンドウの上に親ウィンドウを表示しておきたいのですが
> どうすればいいでしょう?

親子関係と所有関係を混同してる。とりあえず、君の言う親と子の関係を
反対にしたら
>>94
そうですね。混同してました。すいません。逝ってきます、、、
所有関係逆にすると今度はフォーム操作の連動(最小化など、、)が、
逆になってしまい、希望する動作になりません。
メインで使用するフォームを常に上に表示しながら、フォーム操作の連動も
メインで使用しているフォームに、たまにしか使わないフォームを連動させたいんですが、、
無理なんでしょうか。やっぱり。
>>93
BringToFront()、SendToBack()は?
どんな時でもってことで工夫、常にこのメソッドを意識する必要があるが。
>>93
後ろにあるFormのOnActivate(EventArgs e)で
前に出したいFormをActivate()してやれば?
.NET1.1でSystem.EnterpriseServicesの変更が多いけど、これってCOM+1.5対応なのかな?
>>98
Right. SWC is gonna be great!
Services Without Components でつか?
WindowsFormアプリの配布に関して詳しく解説しているページって知りませぬか?
イントラ限定で、小物配布するのに、exeをIISの仮想フォルダに置いてみたら、
クライアント側のセキュリティ設定触る必要あったりで色々試行錯誤中です。

MS謹製のオートアップデータコンポーネントなんか良さげだけど、
英語読むのタリーから和訳欲しい (゜д゜)
>>101
がんばれ、このスレ及び、VB.NETすれのみんなが応援してる。
よい結果報告をすれば君は英雄だ。
長いループ中にボタン等が押せなくなったりするのを防止
する為にDelphiにはApplication.ProcessMessagesがあり
ますがC#ではどのようにするのでしょうか?



104デフォルトの名無しさん:02/10/01 16:32
STLのVectorに似ているのはArrayListだと思うのですが、
ArrayList使いの詳しい方で分かる人いたらお願いします。
SDKのみなので間違っているかもしれませんが、
このクラスにはSizeとかResizeというプロパティやメソッド
がないようなのですが、要素数をサッと変えるプロパティ
やメソッドはないのでしょうか?Countはリードオンリーで
すし、Addメソッドでぐるぐるやるしかないでしょうか?
初心者向けなのでくだスレかどちらか迷ったけどこちらに
書きました。
>>104
RemoveRange,AddRange ぐらいしか思いつかん。

106デフォルトの名無しさん:02/10/01 17:13
>105
104です。最初自分もAddRangeとか使うのかなとか
いろいろ試したのですが、AddRangeはちょっと意味
が違うようですね。TrimToSizeはCapacityを合わせる
だけみたいですし・・やっぱりないみたい。
STLは極楽だったんですね。
>>103
Application.DoEvent()では?
>>106
Resize は欲しいけど、ないみたいだから
減らすなら RemoveRange、
増やすなら AddRange( new type[ newSize-arrayList.Length ] )
で我慢
>>104
STLを知らないのではずしまくってるかもしれないけど、
Capacityプロパティじゃだめ?
#Size、Resizeを調べてみて容量の変更と思ったんですが
110デフォルトの名無しさん:02/10/01 23:53
>>109

いや、capacityはstlにもあるだろ
そうじゃなくて ようは一気に要素を追加してなんかの値で初期化したいって
ことだろ

addでぐるぐるするのが一番じゃねーの? そんな手間でもないと思うけどなぁ。
俺はそんなに頻繁に使うようなシチュエーションがないので、ありゃ便利程度
にしか思えないが、必要ならarryalist継承してsize resizeを実装すりゃいいんじゃ
ないの?
111デフォルトの名無しさん:02/10/02 00:03
>108さんレスありがとう
AddRange( new type[newSize-arrayList.Length])
うう、いまいち分からない。
んんん?もしかしてnew double[10]とかにして
配列を入れるって事?
なんかこれで行けるみたい。でもこのやり方
すぐに思いつくなんて凄いなぁ

でもやっぱりResizeなりSizeなりのプロパティは
欲しいっすよね。
しかもArrayListってコンストラクタではCapacityの
設定しか出来ないっすよね?
ArrayListを継承してClearAndResize(int _size)などの
メソッド付け足して拡張型ArrayList作るってのも
ありでしょうかね。

>109
Capacityは要素数ではなくて可能容量の決定だから
ちょっと違いますね。
STLはホントによく出来たライブラリで感動ものです。
まぁ逆に使いすぎでバグたくさんってパターンもあり
えますが。

112デフォルトの名無しさん:02/10/02 00:23
>110
そうです。よく分かっていらっしゃる(笑)
> addでぐるぐるするのが一番じゃねーの? そんな手間でもないと思うけどなぁ。
そうです。手間じゃないからこそResizeやコンストラクタ(サイズ)とか
付けておいて欲しかったって事です。Resizeは普通あるはずだーとか思い込んで
探したりしてれば時間かかるし(^^;)

> にしか思えないが、必要ならarryalist継承してsize resizeを実装すりゃいいんじゃ
> ないの?
う、アップする前に書かれてしまった。
Delphiやってた時は配列本体まで独自で作ってていろんなメソッド付けて
工夫してやった後にC++へ行ったらSTL見つけて「ガーン。これりゃ独自に作っ
たのでは勝てんわー楽チン楽チン」なんて喜んでました。
どーせalgorithmみたいなものも欲しくなるから
継承しないでArrayListToolクラスとか作ってメソッドで対処するって手もありますね。
113[]:02/10/02 12:09
>>107
助かりました。ありがとう。
114デフォルトの名無しさん:02/10/02 13:56
マネージドコードで書かれたプログラムはフレームワークに
バグが無い限り、バッファオーバーフローしないって聞いたの
ですが、本当でしょうか?

>>114
別にマネージドで無くても、ポインタ演算が無くて、配列のアクセス時にチェックしてくれる環境なら
バッファオーバーフローは無いと思いますが…とりあえず回答はTrue
116デフォルトの名無しさん:02/10/02 16:43
C#でjavaのJtableクラスみたいなものはないでしょうか?
ListViewクラスは使いづらいのでいやなのです。

117デフォルトの名無しさん:02/10/02 22:05
DLLを動的にリンクするにはどうすればいいのでしょうか?
下記のようなイメージでプログラムの状態によって2つのdll
を使い分けたいのですができますでしょうか?
if (a == 1) {
dllimports("hoge1.dll");
} else {
dllimports("hoge2.dll");
}
そのdllはOnCLR?普通の?
119117:02/10/02 22:20
C#で作ったDLLを使い分けたいと考えています。
120無知:02/10/02 22:33
じゃあReflectionでやってくだちぃ
利用者の言語は何?
122デフォルトの名無しさん:02/10/03 02:59

●●●●●●●●「オセロさえ納期内に作れない=OO役立たず 」祭り●●●●●●●
/|         |  |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ
  |         |  | ̄ ̄ ̄ /|                    ||
  |         |  |   / /|TTTTTT   TTTTTTTTTT||TTTTT
  |        /\ |  /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|
  |  /  /  |文|/ // /
  |/  /.  _.| ̄|/|/|/         Λ_Λ
/|\/  / /  |/ /           (___)
/|    / /  /ヽ            /〔 非OO 〕〕つ
  |   | ̄|  | |ヽ/l            `/二二ヽ
  |   |  |/| |__|/   Λ_Λ     / /(_)
  |   |/|  |/      ( ´∀`)   (_)    Λ_Λ
  |   |  |/      // /  ^ ̄]゚        (`   )
  |   |/        ゚/ ̄ ̄_ヽ         ⊂〔〔 非OO 〕
>>96
遅レスごめんなさい。
試してみましたが、所有関係があるとダメみたいでした。
124デフォルトの名無しさん:02/10/03 10:06
>>123

所有関係や親子関係は z-order を決めているので臨時に変更するのは
できるのかね?
125デフォルトの名無しさん:02/10/03 18:23
http://www.shoeisha.com/mag/vbm/info2.asp
Dotnetマガジンに変わったんだってね(既出?)

見てみたけどVBマガジンのままで良かったような内容でした。
もしくはVB.netマガジンかな。

ここのスレの人は何か雑誌かってんの?
126デフォルトの名無しさん:02/10/03 18:34
第三者認証機関によるサーバー認証でHTTPS(SSL)を使用して
通信を行う方法についてサンプルソースなどありましたら
教えてください。
ついでに第三者機関を使用しない独自のものについても
お願いします。
マチガイタ
C#.NETでソリューションとかプロジェクト開くのに恐ろしく時間がかかることが
あるんだけど何でかな。つーか今まさにこれまでになく時間がかかってて
タスクマネージャで見ても応答なしで困ってるところ。
バックアップからソリューション丸ごとバックアップしたりするとこの現象に
遭遇するような気がする。
130デフォルトの名無しさん:02/10/03 20:58
質問なのにsageちまったよ。
.sln に対応する .suo と .ncb を消してみるというのはどうか
Refrectionを使って生成したオブジェクトをUnboxingできないのですが
どうしてでしょうか?なんか技があるんですか?
object o = t.InvokeMember("", System.Reflection.BindingFlags.CreateInstance, null, null, new Object[0]);
hoge = (Hoge)o;

コンパイルは通るのですが、指定されたキャストは有効ではありません。
という例外が発生します。
デバッガで見る限りoはHogeクラスのオブジェクトのようです。
C#からたとえば
unsigned long foo(char* bar);
のようなCの関数を持ったdllで、barにNULLが入りうる場合
(NULLを与えるか、通常の文字列を与えるかで処理内容が変わる関数
を呼び出したい場合)にはどうしたらいいのでしょうか。

public static extern ulong foo(
[MarshalAs("unmanagedType.PTStr")]
string barString);
として、
foo(null);
とかしても、大丈夫なんでしょうか。
stringのnull -> (char*)NULL
にマーシャリングしてくれるもんなんですか?
>>132
o.GetClass(だっけ?)は何を返す?
135132:02/10/04 07:17
System.Console.WriteLine(o.GetType().ToString());
からはHogeを返します。
136132:02/10/04 07:48
すいません。間違いました。
System.Console.WriteLine(o.GetType().ToString());
からはHogeHogeを返します。
HogeHogeとHogeは継承関係にあり、Hogeが基底クラスになっています。
138デフォルトの名無しさん:02/10/04 18:32
アゲ
139Yos:02/10/04 20:02
C#製プログラムを.NetFrameworkの適用なしに、
インストールせずに、
ファイルのコピーで、
実行ファイルを動かすことはできるのですか?

普通はできないと思いますが、何か解決策はあるでしょうか。
>>139

ありません。って、某MLで回答もらったでしょ?
C#でアクティブなアプリケーションの切替え実行したい
(Alt+Tabでできる操作を実行したい)のですが
どうやってやればよいのでしょうか?
>>136
つまらないことだけど、それはUnboxingじゃなくてDownCastだね。
>>139 大久保陽司 さん

> あるサードパーティのコンポーネントを使ったプログラムを、
> そのラインタイムをインストールせずに、
> ファイルのコピーで、
> 実行ファイルを動かすことはできるのですか?
>
> 普通はできないと思いますが、何か解決策はあるでしょうか。

と同じです。
>>1
/|         |  |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ
  |         |  | ̄ ̄ ̄ /|                    ||
  |         |  |   / /|TTTTTT   TTTTTTTTTT||TTTTT
  |        /\ |  /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|
  |  /  /  |文|/ // /
  |/  /.  _.| ̄|/|/|/         Λ_Λ
/|\/  / /  |/ /           (___)
/|    / /  /ヽ            /〔 非OO 〕〕つ
  |   | ̄|  | |ヽ/l            `/二二ヽ
  |   |  |/| |__|/   Λ_Λ     / /(_)
  |   |/|  |/      ( ´∀`)   (_)    Λ_Λ
  |   |  |/      // /  ^ ̄]゚        (`   )
  |   |/        ゚/ ̄ ̄_ヽ         ⊂〔〔 非OO 〕
>142
基底 <- 派生 の代入なんだから Up Castでそ。

>136
>132の代入先の hoge が Hoge型ではないと見た。
>147
(゚Д゚)ハァ?
149デフォルトの名無しさん:02/10/06 10:30
SDK + コマンドラインで開発してるんですが、
スタックトレースを出力したときに、ソースの行番号を出すにはどうしたらいいんですか?
なんか、出ないので・・・。
VisualStudio使うと出るんだけどさ
コンパイルオプションに行番号を埋め込むというのがない?
>>149
/debug+ でコンパイルすれば出てくるよ。
>>151

ありがとうございます!
BinaryFormatterでシリアライズしたファイルをデシリアライズする時
以下のような例外吐いて失敗してしまいます。どうしたらいんでしょう?

System.Runtime.Serialization.SerializationException: 解析が完了する前に、ストリームの終わりに達しました。
例外吐く個所のコードは以下のような感じです。
(SortedList)formatter.Deserialize(stream);
>>153 あ、すいません。SortedListをシリアライズした時です。
ファイルでなくメモリにシリアライズしてもダメッスか?
>>155
streamにMemoryStreamを使用してみましたが、シリアライズはできますが、
デシリアライズする時に同じj例外がでてしまいます。
Hashtableではうまくいってたのですが。
>>153
こちらの環境では問題ないっす。
何か別のところに原因があるのでは?
>>157
ありがと〜 そうですか。ちょっとまた調べてみます。
159132:02/10/06 15:35
キャストの件は解決しました。
DLL内のクラスをEXE内のクラスにキャストしようとしてました。
同じソースから一部をDLL化し、それを含んだEXE作成していました。
同一ソースから作成されたクラスでも別クラスと判断されるようです。
ご迷惑をおかけしました。
ひょえー、アセンブリが違うと同名でも別クラスなのか・・・
>>159-160
そりゃそうだろ
162デフォルトの名無しさん:02/10/06 16:33
.NETFrameworkって、Javaで言うByteArray*Stream見たいなのってないんですか。
byte配列を溜め込むのにどうやりゃいいか悩んでるんですけど。
あんだけ高級なAPIが揃ってるのに、これだけ自前でつくれって?
>>160
アセンブリが違うのに名前が同じってだけで同じクラスになったら困るって。
>>162
MemoryStream とかいうのなかったっけ
>>162 は直前のやりとりすら見てないアフォ
166デフォルトの名無しさん:02/10/06 17:45
DLLのセキュリティチェックを行うことはできますか?
誰が作ったかわからないDLLを読み込む場合に
ローカルディスクのファイル操作等を禁止できますか?
できます。
168162:02/10/06 17:54
>>164,165
ありがとう。
169166:02/10/06 17:54
どうすればいいの?
または、どこ調べればいいの?
171166:02/10/06 18:43
Internetのパーミッションセットを設定したいのですが、
どうやって設定するのですか?
A Primer to the Office XP Primary Interop Assemblies
http://msdn.microsoft.com/library/en-us/dnofftalk/html/office10032002.asp
173デフォルトの名無しさん:02/10/06 21:21
あげ
174デフォルトの名無しさん:02/10/06 22:34
ListBoxの最後のItemを表示するにはどうするの?
>>174
ItemsのCountプロパティ見ればいいでしょ。
アプリケーションが終了する時に,あるクラスのメソッドが必ず呼ばれるようにしたいんですけど,
何を使えばいいのでしょうか?
Finalize()は呼ばれないことがあるし,普通のメソッドだと明示的に呼ばなきゃならぬのですが。
いささか古い本からの引用だけど、
「C# 実践プログラミング(インプレスの赤本)」には
>クリーンアップ処理用のメソッドをClose()で呼び出し、
>またオブジェクトを二度と利用しないのであればDispose()で
>呼び出すように推奨している
ってあるよー
>>177
サンクス。
ってことはアプリケーション側からClose()やDispose()を明示的に呼び出すということですよね?
(Dispose()はusingステートメント使えば勝手に呼ばれるけど)
>>178
そーです。
>クリーンアップ処理を特定の個所で必ず実行させる必要があれば、
>プログラマが明示的に呼び出せるメソッドを用意しておくべきだ
で、MSが推奨する方法としてClose()/Dispose()が挙げられてました。
180デフォルトの名無しさん:02/10/07 10:49
>>174
> ListBoxの最後のItemを表示するにはどうするの?

int lastItemIndex = listBox1.Items.Count -1;
listBox1.SelectedIndex = lastItemIndex;
181デフォルトの名無しさん:02/10/07 18:12
Javaで言うところのSystem.arraycopyってありますか?
182181:02/10/07 18:15
System.Array.Copyだった・・・。
WinCVでアセンブリの中身を見ようと思ったのですが,

$ WinCV /r:アセンブリ

で見ることができません。

$ WinCV /h

を見るとできそうなのですが。
184183:02/10/07 20:24
ひょっとして勘違いしてる?
ildasmで一応目的のもの見られました。
WinCVは何者?
>>184
WinCVはWindows Forms関連クラス専用のビューア。
186183:02/10/07 22:55
>>185
ああ,そういうことですか。ありがとう。
C#で実行中の自分のファイル名(アプリケーション名)を取得
するにはどうすればよいでしょうか。

ここで言う、ファイル名というのは、例えば、
hogepage.exe というexeを実行していたならば、
hogepage.exe という名前をプログラム中で取得
したいということなのですが、、、

どうやればいいでしょうか?
>>187
Application.ExecutablePath
フルパスだけど。
ちなみに Application.StartupPath はそのフォルダ名。
コーディングスタイルの質問なんですけど,
みなさんthisってどういう時につけてます?
1. 常に
2. 曖昧さをなくす必要がある時
3. そのクラスに記述されているものだけ
4. そのクラスに記述されていないものだけ(記述されているものは明示的に書かない)
  baseだろって突っ込まれそうだけど
5. その他

ぼくは今不定でふらふらしてます
>>189
コード補完が楽なように 1.
VS.NET 2003に標準装備されるとの噂。
http://www.preemptive.com/dotfuscator/DotfuscatorFAQ.html
>>190
ああなるほど。
俺はEmacs使ってるんでそもそもコード補完ができない…(ただの文字列補完ならできるけど)
で,話ずれますがMeadowでC#(.NET)のコード補完やってる人います?
193192:02/10/08 09:46
コード補完はJDEE(JAVA)ぐらいしか知らないのですが。
http://jdee.sunsite.dk/
>>188
Thanks!!

ところで、ConfigurationSettings.AppSettingsを使って、設定ファイル
を読み込む時に、設定ファイルがあるかどうかを判定する方法ってある
でしょうか?File.Exists()とか使うしかないのでしょうか?

それから、ConfigurationSettings.AppSettingsを使って設定ファイルを
いじるれますが、このファイル名や保存場所を任意に変えることはできる
のでしょうか?なんか無理っぽいですが。。。

>>143
だれ?それ?
196デフォルトの名無しさん:02/10/08 16:23
>191

そっかー標準装備か。。じゃ待ちだな。
ところで皆さんは現在、ildasm対策?とかしてますか?
RichTextBoxのTextプロパティにURLらしき文字列を設定し、
そのURLをクリックすると、LinkClickedイベントが発生しますが、
これをURLではなく、任意の文字列でできるようにする方法は
ないのでしょうか?
Formを最大化するにはどうすればよい?
>>199
Form.WindowState = FormWindowState.Maximized;
>>200
ありがd!
202デフォルトの名無しさん:02/10/09 11:50
RTFコードの一覧表ってどこで見れますか?
203デフォルトの名無しさん:02/10/09 12:24
>>202

ほれ
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnrtfspec/html/rtfspec.asp

ただ、何に使うのかはしらんが、リッチテキストボックスのRTFプロパティを自分で
書いて、書式付き文字を表示されるなんて考えはおこさん方がいいぞ。
204202:02/10/09 12:46
>>203
ありがとうございます。

>ただ、何に使うのかはしらんが、リッチテキストボックスのRTFプロパティを自分で
>書いて、書式付き文字を表示されるなんて考えはおこさん方がいいぞ。

なんでですか?
205デフォルトの名無しさん:02/10/09 13:45
>>204

・RTFの仕様自体が糞。とても使う気になれない。
・リッチテキストボックスはRTF1.0相当なので、メソッド、プロパティを通じて
操作できる以上のことは RTFを生で書いてもほとんど無理。

表とかリンクとか画像を入れたいというだけなら、webbrowserコントロールを
使った方が気楽だよ。
時代はリッチテキストよりHTMLだと思ってみたり?

そういえば.NETでHTMLダイアログを簡単に扱えたりするの?
System.Windows.FormsやSystem.Web.UIと同じように扱えたら
すごーくハッピーなんだけど、無理?
207202:02/10/09 13:59
>>205
>表とかリンクとか画像を入れたいというだけなら、webbrowserコントロールを
>使った方が気楽だよ。

タグの色分けができるHTMLエディタを作ろうと思ってます。
コントロールを自作しようと思ってSharpDevelopのソースも見たんですが無理っぽいので
RichTextBoxを使ったらどうかな?と思ったんです。
やっぱり厳しいですか。。。
UDPサービスの使用のところにあるサンプルって動きますか?
ms-help://MS.VSCC/MS.MSDNVS.1041/cpguide/html/cpconusingudpservices.htm

UDPMulticastListener の方で、まったくメッセージが出てきません。
動いた方がいたら動かし方を教えてください。
> SharpDevelopのソースも見たんですが無理っぽいので

無理っぽい?あんな読みやすいソースもそうそうないぞ。
少なくとも漏れはあのソースをかなり参考にしてC#のカラ
ーリングエディタを作った。(あれはGraphics.DrawString
を素で使ってるから日本語表示したり単語が多くなるとも
う速度的にボロボロだから本当に参考にしただけだが)
もっとがんがれ〜!
>>209
役に立ちそうなソースは公開キボンと書いてみたり。(w
211209:02/10/10 01:06
スマンがソースは公開できない。代わりにもう一つ参考に
したサイトを置いとく。バグがあるまま公開されてるから、
改造しながら自分で直すと良いと思う。BitBltの方はもっ
と速くなるが、その辺はWindowsの描画関係をあたってくれい。

http://www.codeguru.com/cs_graphics/flicker_free.html
212デフォルトの名無しさん:02/10/10 09:24
十進BASICで連立一次方程式を説く、プログラムを教えてください!!
>>212
とりあえず、すれ違い
2つのbyte配列を結合した1つのbyte配列を作るには
どうしたらよいのでしょうか?

こんなやり方しか思い浮かばないのですが、、、

byte[] hoge = {1, 2, 3};
byte[] page = {4, 5};

byte[] total = new byte[hoge.Length + page.Length];
hoge.CopyTo(total, 0);
page.CopyTo(total, hoge.Length);

なんか、もっといい方法はないでしょうか?
例えば

byte[] total = {hoge, page};

とかができるとうれしいのですが。。。

>>208

その URL の先読む気はないので適当に言うけど、Winsock の場合
multicast group に join するには、事前に適当に bind しておく
必要がある。その辺どうなってますか?

 あと送出側が同じ PC で動いてるなら、loopback できるように
setsockopt だかなんだかで設定しとく必要がある。
216デフォルトの名無しさん:02/10/10 20:57
Linux用の.NET Freamworksはいつ頃出る予定なんでしょうか?
GNUとM$でゴタゴタが起きていてなんちゃらかんちゃらという記事を読んだことがあります。
その辺のことご存じの方いらっしゃれば教えてください。

自分もグーグル等で検索してみましたが、分かりませんでした。
>>216
monoを使ってみるスレとかで聞いて見れば?
http://pc3.2ch.net/test/read.cgi/tech/1020215602/l50
NetworkStream.Writeというメソッドは戻り値を
返さないのですが、このメソッドで指定したbyte[]
は、きちんと全て送信するまで、ブロッキングして
くれるのでしょうか?

socketとかだと、100byte送信ってやっても、50byte
しか送信できないことがあったりして、結局何byte
送信できましたっていう感じで、送信できたbyte数が
戻り値として戻ってきていましたが、どうなのでしょう?

NetworkStream.Writeで100byte送信ってやった場合は、
100byte送れるまで、ブロッキングするの?

>>218
する。Readはしない。以上。
>>216
Mono、Portable.NET以外にBorlandから出るよ。
Kylix .NETからだし、まだ先だけど。
>>219
>Readはしない

http://impress.tv/msec/event/te2002/

「7-411 .NET Framework におけるスレッディング」
(の「非同期プログラミング モデルの実装」)
だと
Begin〜-End〜系じゃないメソッドは
実行が完了するまで処理がブロックされるって説明が
あるんだけど、実際の挙動はそうなってないってこと?
完了の定義によると思われ
なるほど、了解。
224218:02/10/10 22:16
>>219
なるほど。よくわかりました。

>>221
どうも、実験してみると、1byteも受信できないうちは、
ブロッキングするようですが、1byte以上、何らかのデータを
受信した時には、何バイト読み取れって指定したデータ全部を
受信しなくても、処理が次に移ってしまうようです。

その代わり、何バイトだけ受信しましたよ。っていう戻り値が
帰ってくるようです。

なんで、こんな実装なんでしょうね?

>>224
いわゆるbsdソケットのrecvと同じ挙動に見えるがどうか。
だったらsendも同じにしてもいいのに、とは思うけど・・・
と思ったらSocket.Sendがあるやんけー
どこで聞けばいいのかよく分からないんですが,
.NET Framework SDKについてくるドキュメントブラウザで
たとえば
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/browser_control_node_entry.asp
のようなページをFrameworkSDKドキュメントのように表示することはできないですか?
目次のところに該当ページの目次が出て欲すぃ
>>221

この映像の喋ってる奴の喋り方ムカツク。
なんでだろ。
>>227
Microsoft Document Explorer 7.0なら
ヘルプ(H)-目次の同期(Y)
かと。

違ったらスマソ。
>>229
ああ,Microsoft Document Explorer 7.0ですた。

で,http//〜 は目次の同期はできないのです。
>>230
もしかしてURL欄に「http://以下略」を直接入れて・・・って話?
それなら無理かと。。。
>>231
そういうことです。
そんで,ms-help://〜形式にできないものかなーと思いまして。
>>209
FSFに通報しますた
タブブラウザ作ってるんですが、AxWebBrowserの初期化方法がよく分かりません。
一応よくわからないままに下のようにやってるんですが、表示してみるとフォントサイズが
IEの設定(小)と一致しません(たぶん中)。最初のうちはちゃんと表示されていたような
気もするんですが、明示的に設定する方法ってありますか?

> page = new TabPage(title);
> browser = new AxSHDocVw.AxWebBrowser();
> browser.BeginInit();
> browser.Dock = DockStyle.Fill;
> page.Controls.Add(browser);
> this.TabPages.Add(page);
> browser.EndInit();

235デフォルトの名無しさん:02/10/11 19:07
sageちゃった。
>>234
http://www.k-nextage.co.jp/ame/soft/wfc/
WebBrowserコントロールを利用してブラウザーを作るための方法

これで出来ると思う。
>236
ありがたふ。見てみます。
238デフォルトの名無しさん:02/10/11 21:16
オブジェクトをコピーするにはどうすればいいですか?
Memcpyみたいなものでつかってコピーするのでしょうか?
>>238
まずは
Object.MemberwiseClone メソッドと
ICloneable インターフェイス
について調べてみてちょうらい
厳密名つきアセンブリのレイトバインドってヘルプのどこら辺りみたらいいんでしょうか。
Assembly.Loadメソッド辺りかと思ったのですが、具体的にどうやればいいのかわかりません・゚・(ノД`)・゚・
よろしくお願いします。
241デフォルトの名無しさん:02/10/11 23:40
System.IO.File.Exit(strPath);
みたいにクラスインスタンスを作らなくても値を返せるようなメゾットって
どうやって作ってるんでしょうか?
>>241
staticメソッド
>>241
間違いが多い質問はネタ率高し。
244241:02/10/12 00:37
>>242
ありがとうございます。解決しました。
>>240
解決しますた。
>>245
教えて。情報へのリンクだけでも・・・
The .NET Show: The Developer Roadmap
http://msdn.microsoft.com/theshow/Episode028/default.asp
例外処理で、ある特定の例外に関してだけ、同じ処理をしたい
場合は、特定の処理をしたいcatch句のところに同じ処理を繰り
返しかかなければならないのでしょうか?なんか、AとBとCの例外
の場合は、この処理を実行してください。ってな感じで一度に指定
することは可能なのでしょうか?

単純にcatch(Exception e)でキャッチしてしまうと、全部ひっかかって
しまうのでダメなのですが。。。
アプリで作った例外?
それとも規定の例外?
>>249
規定の例外です。
少しは頭使えよ
>>250
その二つの例外が継承関係に無い以上同じコードで扱うのは無理っぽい。

catch( Exception ) で全部捕らえて、if/else で我慢するしかないかな?
バーカ
ヴヮーカ
ブノレヮーカ
キリヴァーン
>>252
やっぱりそうなってしまうのでしょうか?
なんか、コードが例外処理だらけになりそうです。

みなさんも、やっぱりそういう風に書いてるの?
バーカ
>>257
catch使おうがif/elseだろうが、コード量はほとんど変わらない気がするんだけど
あと、例外に関して、もう一つ質問があるのですが、
catch(Exception e)はなるべく使わない方がいいと
言われたのですが、なぜ?

同じ例外処理をするなら、catch(Exception e)で問題
無いですよね?
261ネタだけど:02/10/12 13:31

  catch (Exception x) {
    switch (x.GetType().Name) {
      case "FileNotFoundException":
        ...
        break;
    }
  }
>>261
caseは羅列できるね。

  case "FileNotFoundException":
  case "IOException":
    break;
>>260
真意は言った本人にしかワカランけど
catch( Exception e )はご存知の通り全ての例外を補足するから、
すごく便利なことに即刻プログラムをアボーンしなければならないようなちょー重大な
例外も漏れなくキャッチして何事も無かったかのようにプログラムを継続してくれるうれしい機能だ。
catch (Exception e) ならともかく、catch (Exception) は確かに問題だ。
           ↑                  ↑
>>264
そういう書き方をしたいときもあるんじゃん。
266248:02/10/12 13:51
>>262
そうそう、そういうのがやりたいんですよ。
でも、try catchじゃできないみたいなので、みんなどうしてるの
かなって思ってた分けです。

わざわざ例外用の関数つくって、同じ例外処理の場合はそれを
読み出したりするようにしてるのでしょうか?
>>265
んで、ログには「エラーが起きますた」と一言だけ・・・。
>>266
try〜catchのスコープを小分けにして、そんなにcatchの羅列にならないようにする。
269デフォルトの名無しさん:02/10/12 14:49
ファイルを読み込むさいのEOFはどうやって判断するんですか?
Whileかなんかでループしながらsr.ReadLine()で一行づつ読み込み
たいのですが。
>>269
TextReaderでできるじゃん。ReadLineの戻り値がnullだったら終了。
MSのC#言語、ISO標準獲得へ
http://www.zdnet.co.jp/news/0210/12/nebt_12.html
272269:02/10/12 14:55
>>270
Thank you
>>246
ms-help://MS.NETFrameworkSDK.JA/cpguidenf/html/cpconreferencingstrongly-namedassembly.htmms-help://MS.NETFrameworkSDK.JA/cpguidenf/html/cpconreferencingstrongly-namedassembly.htm
>>273 間違えた。
ms-help://MS.NETFrameworkSDK.JA/cpguidenf/html/cpconreferencingstrongly-namedassembly.htm
>>269
NULLで。
標準化すると利便性が高まるからじゃなくて、標準化すると売りやすくなるから、
ISOに出すのね。まあいいけど、時代は変わったのね。
277デフォルトの名無しさん:02/10/12 15:30
byte[]をstringに変換したいんですが、
よい方法ありますか?
>>277
MSDN・・・読もうぜ・・・
>>277
System.Text.Encoding.GetString
>>278-279
ありがとうございます。まさにこれです。
ぜんぜん違う方向探してました。
>>276
どっちみち標準化すると利便性が高まるからいいだろ。
282デフォルトの名無しさん:02/10/12 16:41
超ド級の低レベルの質問でもうしわけないです。
今win95 C でプログラミングしてます
そこでsleep関数を使うとエラーがでてしまうのですが、使えないのでしょうか?
使えません。
使えます。
使える。
たぶん使えると思う。
使えるんじゃないかな。
ま、ちょと覚悟はしておけ。
使えない。
たぶん使えないと思う。
使えないんじゃないかな。
ま、ちょと覚悟はしておけ。
287デフォルトの名無しさん:02/10/12 17:56
あれ?、ここC#相談室だよね?
そうだよ。
たぶんそうだと思う。
そうなんじゃないかな。
ま、ちょと覚悟はしておけ。
みつけたぞ288!
親の仇じゃ、覚悟!
なんなんだ・・・
291デフォルトの名無しさん:02/10/12 23:49
292デフォルトの名無しさん:02/10/12 23:55
過去すれ全部HTML化された。
ファイルを読み込もうと思いfilestreamを使ってみたのですが
ブラウザが「[セキュリティ]タブの設定がよくありません。」
といってきます。

わたしのWinXPにはファイルのプロパティに
セキュリティタブが見つからないのですが
どうしたらよいのでしょうか?
ブラウザって何...
295デフォルトの名無しさん:02/10/13 16:09
ASP.NETです。
会社のWin2000にはファイルのプロパティに
セキュリティタブというのがあるのですが
WinXP(Pro)にはないのです。
>>295
フォルダ・オプションの
「簡易ファイルの共有を使用する(推奨)」のチェックを外せ
>>296
俺もこれにはさんざん悩まされたよ
どこが推奨なんだか激しく問い詰めたかった
Multilineのテキストボックスで、指定した位置に表示を
スクロールすることは可能なのでしょうか?

例えば、テキストファイルを読み込んで表示した後に、一番
最後に表示したいような場合があるのですが。

どうでしょうか?
>>298
そのものズバリの質問がこのスレにあったと思う
>>299
このスレにはないようですが、、
過去ログの方でしょうか?
webブラウザコントロールのBeforeNavigate2っていうのは、リンクをクリック
して、新しいページを読み込む直前に呼ばれると思うのですが、なぜか、
呼ばれないのです。
VS.NET上からイベントを追加したのですが、何か足りないのでしょうか?

追加されたメソッドは次のようなものなのですが、、、
axWebBrowser1_BeforeNavigate2(object sender, AxSHDocVw.DWebBrowserEvents2_BeforeNavigate2Event e)
}
302C ◆dq2PerGLN. :02/10/14 04:34
CFileのMFCにあるファイルを開くダイアログはC#だとどのクラスでどのメソッドにあたるのですか?
>>302
OpenFileDialogクラス
ShowDialogメソッドで呼び出す
>>301
>>50 .NET 1.1に。
>>301
現時点で暫定的に対処したいなら、
ttp://www.syncfusion.com/FAQ/WinForms/FAQ_c100c.asp#q842q
これがよろしいかと。
306301:02/10/14 13:20
げげげっ、バグなのですか!?
どうりで動かないわけですよ。。。

でも、これじゃぁ、2ちゃんブラウザをC#で作ることはできないじゃ
ないですか、、、せっかくC#で作ろうと思ってたのに。
なんで、 .NET Framework Service Pack 2 までだしているのに、直して
ないのでしょうか??
ホントにC#普及させようと思ってるのか???>MS

>>304
ちなみに .NET 1.1 って、まだ、ベータ版ですよね。そうすると、これで
ソフト作っても配布できないですよね。。。
ちなみに、.NET 1.1 の正式版リリースはいつごろを予定しているのでし
ょうか?なんか、MSのページみても情報無いのですが。。

>>305
この方法ってのはイベント部分だけ古いコントロールのやつを使うという
ことになるのでしょうか?なんかIE3コンパチブルというのがいやな予感が
するのですが、この方法を使った場合の弊害ってなんかあります?
>>296-297さん
激しく感謝m(・w・)m
308301:02/10/14 13:33
>>305
とりあえず、この方法できちんと動くようですので、
.NET Framework 1.1 の正式版が出るまでは、これで対応
したいと思います。

MSのアホ!!ボケ!!カス!!

ところで、みなさんはこういう情報をどうやって仕入れるのでしょうか?
2ちゃんの過去ログや@ITとか、某UGMLとか、MSDN日本語版とか、一通り
あたってみたのですが、こんな解決策は載ってなかったです。

やっぱり、アメリカとかの情報サイトとかMLを読んだ方がいいのでしょうか?
海外のC#系の情報でお勧めの場所があったら教えてもらいたいのですが、
どこら辺がいいでのしょうか?
309デフォルトの名無しさん:02/10/14 14:01
>303
サンキューです。さっそくやってみまーす
>ところで、みなさんはこういう情報をどうやって仕入れるのでしょうか?
>2ちゃんの過去ログや@ITとか、某UGMLとか、MSDN日本語版とか、一通り
>あたってみたのですが、こんな解決策は載ってなかったです。

C#相談室 Part xxでは激しくガイシュツだけど・・・
最低でも3度以上はでてる。MSのサポート情報にもでてるし。
海外サイトにもでてる。
>>308
漏れはひたすら google で検索。
関係ありそうなサイトがヒットしたら、そこからリンクを辿るとかね。
312310:02/10/14 14:21
>>308 へのレスね。

で、MSのサポート情報のURL
http://support.microsoft.com/default.aspx?scid=kb;JA;JP311298
こっちはまぁ回避法は載っていないが、
ttp://www.syncfusion.com/FAQ/WinForms/FAQ_c100c.asp#q842q
このページはかなり早い時点からあったしな。
313310:02/10/14 14:23
ちなみに漏れが最初にこの情報を知ったのはここだよ。
beta2のころはサイトもあんましなかったし。(海外別にして)
314301:02/10/14 14:52
>>310-313
あらら、結構情報載ってますね。。
スンマソ。

ところで、.NET Framework 1.1の正式版はVisual Studio .Net(Everett)
と同時になるようですね。果たしていつになることやら。。。
>>262
C♯でそんなことできたっけ・・
switch は no fall-through じゃなかったっけ?
(つまりすべての case に break を書かなければ文法エラーになる)
>>315
羅列ができるだけ。
1行でもコードを書くと compile error になりますよん。
317C ◆Iei1i2BWho :02/10/15 01:58
パラメータとしてPaintEventArgs fをメソッド button1_Click(object, System.EventArgs)に追加するには、デリゲートを作成して追加するらしいのですが、どのようにするのでしょうか?
よろしかったらだれか教えてください。
>>317
基本的には不可能(例外的にどうなのか知らないけれど)。
名前から察するにbutton1_Click(object, System.EventArgs)はボタンコントロールのClickイベントのメソッドだと思うけれど、
Graphicsクラスを取得したいならControl.CreateGraphics()やGraphics.FromHwnd()を使ったほうがいい(使い終わったらDispose()も忘れずに)。
319デフォルトの名無しさん:02/10/15 09:47
Cは知ってるがC++やJava知らないんで
いまいちクラスの概念が理解できないんだが
クラスって、構造体と全く同じと考えていいの?
320C ◆Iei1i2BWho :02/10/15 10:58
>317
迅速なレスありがとうございまーす、さっそくトライするっす
321C ◆Iei1i2BWho :02/10/15 10:59
あっ
×>317
○>318
鬱だ(゚д゚)
2ch専用ブラウザ作成についての質問です(厨質問なのでsage)。

WebBrowserコントロールにHTMLを書き出して表示するところまでは
なんとか漕ぎ着けたんですが、表示したHTML中のリンク(「>>1」など)
をクリックしたときに該当するレスに飛ぶ方法がわかりません。

バグってるというBeforeNavigate2イベントが何か関係するんでしょうか。
>>322
その質問は、次のうちのどれが聞きたいの?

・リンクをクリックしたイベントをどうやって取るかわからない。
・BeforeNavigate2を実装したがきちんとうごかない。
・イベントは取れたが、画面のスクロールの仕方がわからない。

>323
> ・イベントは取れたが、画面のスクロールの仕方がわからない。

です。
325デフォルトの名無しさん:02/10/15 17:04
>322

>>1」 に単純に飛びたいなら、レス番号にアンカー仕掛けて、ドキュメント内で
飛べば?

htmlのソースに細工して、ジャンプ先を<a name="menu:1></a>、
リンクは <a href="#menu:1> >>1</a> みたいにしておけばわざわざイベント取ら
なくてもブラウザが勝手に飛んでくれるんでは?

どうしてもイベント使いたいなら、document.all.itemで飛び先のIHTMLElement
取って、IHTMLElement.ScrollIntoView()あたりでいけるとおもうが。

webborwserコントロールはnavigate2に限らずいろいろバグがあって、aximpで
自動的にラッパ作ったやつはまともに動かんぞ、と警告してみる。
326322:02/10/15 17:22
>325
ありがとうございます。もう少し調べてみます。
327デフォルトの名無しさん:02/10/15 18:56
最小化されたフォームを再び表示させようとする場合は
this.Show();
で表示するんでしょうか?

this.FormWindowState = FormWindowState.Normal;
じゃ表示されないみたいなんす・・・。
328322:02/10/15 19:40
結局下のようにしました。
まだイベントに絡めては動かしてないんですが、クリックイベントを横取りして
やればいけるかなと思ってます。

string label = "Res1";  // リンク先
IHTMLElement element = this.hdoc2.anchors.item(label, 0) as IHTMLElement;
element.parentElement.scrollIntoView(true);

※hdoc2はIHTMLDocument2型でAxWebBrowserから取得してます。

最初に末端のレスにスクロールしてから上の処理をやるとちょうどリンク先が
表示領域の上端にくるので具合がいいです。

ただ、横スクロールバーが出ていると微妙に右にスクロールしてしまうのが
気持ち悪いですね。hdoc2.parentWindowは型がサポートされてない旨の例外が
飛ぶのでscroll()は使えないようです・・・。
>>327
そのフォームのプロパティみたらわかるけど
最小化したらフォームのLocationがX=-1、Y=-1ってなってるはず。
だからWindowStateをそのままNormal にしてもフォームの位置が
画面外だから表示されないように見えるの。
Normalにする前にLocationを元に戻してすれば表示されるはず。
>>329
ほんとじゃん!!
最小化って画面なくすんじゃなくて、見えないところに移動する機能だったんか?
ありがとう。
>>330
Win95からそうなったのよ・・・
一応Closeというのはあるんだけどね・・・
332デフォルトの名無しさん:02/10/16 02:37
質問ですが、NetworkStreamクラスだけから、接続の切断(向こう側がShutdownしたなど)を検知する方法というものはありますか?
>>332
タイムアウトを設定しておけばいい。
>>332
接続中に切断されたなら、そこで例外が発生するからそれをキャッチすればいい。
接続しているか常にチェックしたいならちょっと無理かも。
TcpClient使ってるならTcpClientを継承したクラス作って
SocketもらってConnectedプロパティをチェックするしかない。
335デフォルトの名無しさん:02/10/16 08:42
メソッドの呼び出し元を特定できますか。
コールスタックみたいに。
336デフォルトの名無しさん:02/10/16 13:08
BeforeNavigate2関係の質問です。

http://www.syncfusion.com/FAQ/WinForms/FAQ_c100c.asp#q842q

ここ↑にある方法に従って普通のリンクのクリックは拾えるようになったんですが、
例えば

<a href="about:blank../test/read.cgi/tech/1032488831/1 target="_blank">>>1</a>

をクリックしてもイベントが発生せず問答無用でIEが起動してしまいます。
何か対処方法はあるのでしょうか。
>>335
StackTraceクラスからMethodInfoが引けたはず。
338デフォルトの名無しさん:02/10/16 14:14
>328

> ただ、横スクロールバーが出ていると微妙に右にスクロールしてしまうのが
> 気持ち悪いですね。hdoc2.parentWindowは型がサポートされてない旨の例外が

場当たり的だが、scrollintoviewのあとに
document.parentWindow.scrollBy(-1000,0);
ってやって、左に戻しておけばどうかと
>338
残念ながら型がサポートされていないという例外が飛んでしまうので
document.parentWindowが評価された時点で落ちます。トホホ。
>>339
キャッチすれば良いじゃん。
341デフォルトの名無しさん:02/10/16 14:33
>339
> >338
> 残念ながら型がサポートされていないという例外が飛んでしまうので
> document.parentWindowが評価された時点で落ちます。トホホ。

俺はdocument.parentWindow.scrollBy(-1000,0); で普通に使えて
いるが。WebBrowser_V1 を使っているせいかな?
342336:02/10/16 16:15
自力で解決できそうかな? つーわけでメモ。

■ IHTMLDocument2のリンククリックイベントを横取りする方法(一部未確認)

1.write()で必要なものは全部書き出す

2.こんな↓感じでリンクエレメントにイベントハンドラを設定する
  Close()の前にやったほうがいいような気がするけど細かいところは未確認
foreach (HTMLLinkElement le in this.hdoc2.links)
{
  ((HTMLAnchorEvents2_Event)le).onclick += new TMLAnchorEvents2_onclickEventHandler(OnClickTest);
}

3.イベントハンドラ
private bool OnClickTest(IHTMLEventObj o)
{
  //o.srcElement.innerTextなりを見て好きに処理する
  return false;// trueだとイベントが生きたまま
}


もしかしてこの方法だったらBeforeNavigate2は要らないのかな。
なんか問題があるようだったら誰か指摘してください。
343C ◆Iei1i2BWho :02/10/16 17:03
Graphics formGraphicsをクラスのコントロールのメンバとしてグローバル変数(いろいろなメソッドで共通に使えるように)宣言したいのです。
しかしあるメソッドの中では
Graphics formGraphics = this.CreateGraphics();
としてますので、これを利用して"this"を抜かし、
Graphics formGraphics = CreateGraphics();
と宣言するとエラーが出ます。
どのように宣言をすればよいのでしょうか?
わかる方お願いします

344デフォルトの名無しさん:02/10/16 17:14
全角と半角が混ざっている可能性のある数字文字列を半角のみに変換する
簡単な方法はありますか? 具体的には下のようなイメージです。

"0123456789" -> "0123456789"

今のところひたすらReplace()で変換してます・・・(効率悪〜)
345336:02/10/16 17:35
>342
自分で問題点発見。
細かいことは分かりませんが、HTMLを部分出しにしている場合、
全文が完全に出力される前にリンクをクリックされるとイベントを
横取りできないみたいです。

当然といえば当然だけど回避策はないのかなー。
>>343
フィールドでGraphics formGraphics;としといて、
コンストラクタで formGraphics = this.CreateGraphics(); とするのは
だめなのかい?
347デフォルトの名無しさん:02/10/16 19:12
>342
「HTMLを部分出し」 っていうのがよく意味わからんけど、
document.close()の前にイベントハンドラの処理をやってるなら
本来はちゃんとイベントが接続されるはず。

anchorElementのonclickを捕まえる方法は俺もやったことがあるが
挙動が不審なんだよ。

interopかmshtmlのPIAのバグのせいなのか、わからんのだが、
ちゃんとイベントハンドラ接続しているのに、ランダムに全く原因不明で
イベントがファイアしないことがあってあきらめたことがある。

document.HTMLDocumentEvents2_Event_onclickを捕まえて、
IHMTLEventObjのfromelementをみてやる方法もあるが、こっちも
なんか挙動がおかしかったように記憶している。
DelphiとC#ってC#の方が速いんですか?
JITはCLR持ちだから、同等になりそうな気がするが、試してくれ。
>347
> document.HTMLDocumentEvents2_Event_onclickを捕まえて、
> IHMTLEventObjのfromelementをみてやる方法もあるが、こっちも
> なんか挙動がおかしかったように記憶している。

この方法ではたしかホイールが利かなくなったような記憶が。。。
あとこれは想像だけどイベントハンドラの不発はmshtmlのHTMLパーシングが
非同期(多分)で遅いことが原因じゃないかな。foreachで回す時までにlinkに
すべてのアンカーが入っていないような気がする。ケツから後方一致でやってる
みたいでハンドラ不発はランダムじゃなくてある個所から手前(ファイルの先頭)
までが全滅している。
writeで書き込んだ後、何らかの方法でmshtmlのパーシングが完了したことを
確認する手段があればいいんだけど。。。
READYSTATEとかかなあ
>>344
VB.netのStrConvを使うとか。
353デフォルトの名無しさん:02/10/17 01:04
GetPixel()メソッドで取得したRGB値をR,G,Bの各値を取得する関数はありますか?
それとも自分で作らないといけないのでしょうか?
わかる方お願いします
>>352 のStrConvなどここに書いてある。
http://www.atmarkit.co.jp/fdotnet/csharptips/013vb/013vb_02.html
>>353
Color構造体で返って来るので、
普通に各プロパティ(R,G,B)を見ればいいのでは?
356デフォルトの名無しさん:02/10/17 03:26
>346
サンクスです。コンストラクタでthisが使えるのですね。
357350:02/10/17 09:58
すんませんあやふやな記憶だけで大嘘ぶっこいてました。
ちゃんとコードを書いて確認してみましたが、mshtmlのlinksを参照したときに
アンカーの漏れが発生するという事実は確認できませんでした。

イベント不発の原因は接続のタイミングを計ればどうにかなるというものでは
なさそうです。。。
358デフォルトの名無しさん:02/10/17 10:52
>350

> この方法ではたしかホイールが利かなくなったような記憶が。。。

あ、たしかにそうだったかもしれない。

> あとこれは想像だけどイベントハンドラの不発はmshtmlのHTMLパーシングが
> 非同期(多分)で遅いことが原因じゃないかな。foreachで回す時までにlinkに

これはありうるな。俺も同じ経験ある。
ただ、単に非同期処理が追いついていないだけなら、writeで書き込んだ後、thread.sleepで
逃げられそうなもんだが…。
たとえばリンク1〜リンク100まであって、リンク100→OK リンク99→OK…
……と試していって リンク16あたりで挙動がおかしくなると、さっきまでOKだった筈の
リンクまで挙動がおかしくなったりしてたから、それだけが原因なのかどうか
今ひとつはっきりしない。

ちなみにwriteの直後にMessageBox.Show(wb.ReadyState.ToString())を入れて
チェックしてみても俺んとこではreadystate_completeになってた。

ほかにイベント接続先のメソッドでIHTMLEventObjの特定メンバにアクセスすると
なんのエラーも出ずにそこでメソッドがリターンしてしまい、勝手にリンク先に飛んで
いってしまうとか、妙ちきりんなことが多い。
(x だかoffsetXだかclientXだか、マウス関係のメンバだったと思うが…。)
S.W.Forms.Control の OnImeModeChanged ってどういうときに使うの?
>>359
ImeModeプロパティが変更された場合に発生します。
WebBrowserコントロールでリンクにマウスポインタを合わせたときに
ツールチップを表示させたいんですが、ToolTipクラスはコントロール
依存みたいでアンカーエレメントに対応付ける方法がわかりません。
仕方がないので今はtitleプロパティを代用にしてますが、これだと
マウスポインタの座標を基点に右下方向に表示されてしまいます。
出来れば右上方向に表示したいのですが方法が分かりません。
ご存知の方がいたらぜひご教示ください。
>>361
消極的で悪いけど、一般的に知られている方法以外で情報を提示するとユーザは混乱するよ。
Webサイト見てて急に広告が落下してくるとビビるだろ?あれと一緒。
広告は貼り付けてあるもので降ってくるものではない、と言うブラウザの常識を越えた方法だから。
363デフォルトの名無しさん:02/10/17 18:57
>361

title属性ででティップが表示されるのはブラウザの機能だから、
いじるのは無理じゃないかな? とりあえずDHTMLのなかでは
それらしい物は見つからないけれど

あえてやるなら、
・textboxをwebbrowserの前面においてvisible=false readonly=true
borderStyle=none、backcolor=好きな色 multiline=true scrollbars=noneにする

・各リンクエレメントのmouseoverイベントでtextbox.visibleをtrueに。
表示位置はIHTMLEventObjでマウス座標をとって 好きな位置にする
textboxの大きさは表示する文字列に合わせて調整。

・mouseoutイベントでtextbox.visibleをfalseに

てな具合にすればtoolTipライクなものをマウスの右上に出すこともできると思うが…。
(ダサダサな方法だが…。)

>>362
???急に落下してくるもんってなに?
タグにタイトル属性付ければなんでもティップが表示されると思うが。
C#からのwebブラウザコントロールの使い方なら、このソースを見ると、参考になるよ。http://www.geocities.co.jp/SiliconValley-Sunnyvale/5386/ちなみに、2ちゃんブラウザ作ってるの?
365デフォルトの名無しさん:02/10/17 19:25
新しいThreadを作る時に引数をもった関数でThreadStartできますか?
>>365
ThreadStart デリゲート見るとダメっぽいね。
>>385
アドホックinvokeを使えばできるよ。クラスライブラリではなく、C#のデリゲート
自動生成機能なんで探すのはめんどうだが。
threadプール使えと言わんばかりの仕様に見えるのよねー
>>367
アドホックinvokeって初耳ですがなんですか?
別に引数なくても困りませんが。スレッドクラス作るし。
370367:02/10/17 21:32
ms-help://MS.VSCC/MS.MSDNQTR.2002JUL.1041/cpguide/html/cpconcompilersupplieddelegatebegininvokeendinvokemethods.htm
これだけど、書けば勝手に作られてスレッドプール使われるからアドホック。
でも、本当は、アドホックデリゲートとおいらは書きたかったんだが、書き間違えたスマソ。
371367:02/10/17 21:37
>>369
こんなのもあるが、おいらは、Threadクラスから派生するほうが良いと思う。
・データの局所化(クラスのフィールドにパッケージング)
・テンプレートメソッドパターンが使える
とか、そんな理由から。
1ショットならアドホックデリゲートでも良いかも。
>>367
詳しそうだから聞いてみちゃうけど、スレッド間のメッセージのやりとり
はどうやるのがいいですかね?
メッセージキューで調べるとシステムワイドのメッセージキューサービス
なんてのがでてきやがる・・・
>>370
なるほど、それアドホックデリゲートって言ってたのね。
知らずに使ってたよ。
>>371
Threadクラスから派生かぁ。考えてもみなかったけど、
あまり必要に迫られていなかったなぁ。
でも考えてみれば、派生したほうが便利な場面あるね。
ありがとう。
>>373
と思ったがヘルプみてみると、Threadクラスはsealedだわ。
継承できんがな・・・
漏れが意図を汲み取れなかったのだな・・
>>372
非同期デリゲートつかうんじゃなかったっけ?
まあ場面によって色々あるけど、
ヘルプで「スレッド化チュートリアル」で引けば基本はわかるかと。
うーん、一応スレッド関連は眺めてみたんですが、スレッド間通信という
のはありませんですた。
377デフォルトの名無しさん:02/10/18 00:25
>376

単にデータのやりとりをするなら非同期デリゲートでIAsyncResultのasyncStateん
中に放り込むとか?

単純なThread.Startに比べると、非同期デリゲートは なんかいちいち面倒で、
気軽に使えん。
C#のツールバーってなんか退化してません?
ReBarとか、ドッキング可能なツールバーってなくなっちゃったの
でしょうか?
379367:02/10/18 02:41
>>374
ごめん。JavaのThreadとごっちゃになってた。.NETのThreadは継承できないね。逝ってきます
380359:02/10/18 04:52
>>360
>ImeModeプロパティが変更された場合に発生します。

いや、発生要因は Help は見ているからわかっているんだけど。
いつ呼ばれるのか、では無くて、どういうときに使うことを想定しているのか。
という質問なの。

IME 自身のモードを切り替えても呼ばれないし。
俺が常用しているThreadの小技。使い方は MyThread.GetThread(スレッドに渡したい引数※).Start();
(※サンプルではstring strとint a)

一種のSingletonなんでstatic areaに生成したスレッドを格納するフィールドを用意したり適切な静的
メソッドを追加すればスレッドの多重生成禁止とかアボートとか自由自在で便利。

public class MyThread
{
  // static area ------------------------------------------
  public static Thread GetThread(string str, int a)
  {
    MyThread mythread = new MyThread(str, a);
    return mythread.GetThread();
  }
  // instance area ----------------------------------------
  private string str;
  private int a;
  private MyThread(string str, int a)
  {
    this.str = str;
    this.a = a;
  }
  private Thread GetThread(string str, int a)
  {
    return new Thread(new ThreadStart(MyMethod));
  }
  private void MyMethod()
  {
    // this.strとthis.aを使って何かする
  }
}
382381:02/10/18 09:44
今気付いたけどスレッド間通信も簡単に出来ると思う。
送信側は MyThread.SendMessage(受信側スレッド名 送りたいデータ) とかするだけで
受信側スレッドの状態管理なり排他制御なりは MyThreadクラスに任せてしまえる。

もしかしてデザインパターンとしてとっくに名前ついてる?
383381:02/10/18 11:37
すまん、間違い発見。
インスタンスメソッドの方のGetThreadだけど、引数要らんわな。
#と♯って何が違うの?
スレッドの話が出ているので便乗質問なのですが、
lock(this) {
  ....
  ....
}
って書いた場合、lockの{}で囲まれた処理だけが
排他的にスレッドによって実行されるってことなの?
それとも、(this)って書いてあるから、{}の中の処理
を実行中は、thisで示されたインスタンス自体がロック
されるってこと?

>>380
コントロール表示時のIMEモードをどうするか設定しておくプロパティじゃないの?

つまり、ユーザが「半角/全角」キーを押すことは関係なく
>>386
>>359-360読むと
そのプロパティが変更された時に発生するイベントが
何の役にたつのだと、言いたいわけだろう。

全部のプロパティにChangeイベントがいるか?
>>387
ないよりはいいかと思う漏れは逝ってよし?
誰が何に使うかわからんわけだし、放置でいいでしょ。
>>388
同意。
>>385
thisがロックされるのではなく、(厳密な言い方ではないが)thisがさしている
オブジェクトにロック済みのマークが付けられる。そのため、
lock(this) {
を実行しようとするすべてのスレッドは、マークを付けたスレッド自身を除き、
そこでブロックされます。つまり、lockブロック抜きで
this.setxxx(xx);
する、スレッドを止める手段は無しです。
したがって、「インスタンス自体がロック」のほうに近いかな。lock(this)な
ブロックであれば、どこであっても影響を受けるから。
>>390
つまりcooperative lockであってmandatory lockではないということですか
392385:02/10/18 21:24
大変よく分かりますた。
うわ〜ん。IHTMLDocument2のイベントは onclickに限らず不発が多いよ〜。
これってC#特有の問題?バージョンがあがれば解決の望みあり?
>>384
#は電話のボタンの右下のマーク
♯は音楽記号のシャープ
>>393
ちなみに、どんなイベントがダメなの?

うわさによると、次期VS.NETに付属する.NET Framework1.1では直って
いるらしいが。
>>395
どこで聞いた噂ですか?
397デフォルトの名無しさん:02/10/20 01:14
>>395
過去ログみてみ。β版でちゃんと治ってるって報告あり。
>#は電話のボタンの右下のマーク
読み方は?
>>398
たてたてよこよこ
ま〜るかいてちょん
(+。+)アチャー。
>>398 い!
403ネットワーク試験遅刻しそう:02/10/20 09:06
BitmapメンバのSetPixelメソッドははPaintEventArgs eを取得して処理しないといけないのでしょうか?単独で使うとエラーがでます。
これはあるBitmapにピクセルをセットするとVC++のOnPaint()などの処理を呼び出さないといけないのでしょうか?
わかる方宜しくお願いします
>>403
いや、早く行けよ。がんばれよ。
405デフォルトの名無しさん:02/10/20 09:48
>>398
いげた。

そういえば大学でC教えてた教授が「いげた」って言ってた。「いげたインクルード」とか。
今、C#のことを「シーいげた」って言ってんのか確かめたい!
>>405
その理屈でいくと、「C++」は「シーくさかんむり」にでもなりそうなものだが。
407405:02/10/20 10:43
ちゃんと「ぷらぷら」って言ってた。「シー」は言わずに。
.<見えるかな?のことを、うちの会社ではみんなポツと呼ぶ。
unknownはアンノンと呼ぶ。
C++はシーププラだし、うちの会社変な奴ばっか(´д`;)
>>403
ちゃんと、サイズを指定してビットマップ作ってる?
C#で使えるデリゲートというものがありますが、
このデリゲートとイベントの違いは何でしょうか?

イベント機能はデリゲートを使って作られているそうですが、
何が、普通のデリゲートと違うのでしょうか?

何かあったら登録されているメソッドを呼び出すというのは
デリゲートとまったく同じだとおもうのですが、
フォームのボタンを押すと、別スレッドで重たい処理をやって、
その結果が出たら、フォームにあるテキストボックスに結果を
表示しようと思っているのですが、別スレッドから、フォームの
コントロールに直接アクセスしてはいけないそうです。

じゃぁ、いったいどうやったらいいのでしょうか?

すぐ上のレスでイベントの話が出ていますが、イベントを使っても、
やっぱりだめなんですよね?イベントとか実行しても、フォーム側の
スレッドで実行されないんですよね?

なんか、ここら辺がよく分かってないのですが、C#のイベントというの
はMFCとかのWindowsのメッセージによるイベント駆動のイベントとは違うのでしょうか?
あの昔のイベントなら、メッセージをキューに入れておけば、フォームのスレッド
が暇になったときに勝手に実行してくれたりしたのですが、、、

C++の

int x;
unsigned char buf[100];
int* p=(int*)&buf[x];

をC#で書きたいのですがどうすればいいのですか。
int buf[100];
int* p=buf;
ならばうまくいくのですが。
char*からint*への変換はできないのでしょうか。
なお、「fixed」「/unsafe」を使うことは分かっています。
413411:02/10/20 21:14
調べてみたら、なんとなく分かりました。
どうやらこの方法を使うようです。

ms-help://MS.VSCC/MS.MSDNVS.1041/cpguide/html/cpcondevelopingmultithreadedwindowsformscontrol.htm
>>413
というかカコスレに超既出なんだが、、
>>410
激しく既出。

フィールドとプロパティの関係と似たようなもの。

class Hoge
{
 int n; // フィールド
 int N { get { return n;} } // プロパティ

 HogeDelegate f; // 普通のデリゲート型のフィールド
 event HogeDelegate OnXXX; // イベント
}
416410:02/10/21 02:36
>>415
過去ログの方も読んでみました。大変参考になりました。

でも、>>415 ということは、なるべく、eventを使って隠蔽化した
方がいいということなんでしょうかね。
>>411
Control.Invoke
>>415
今まで何となくしか理解してなかったけど、
簡潔かつ分かりやすくて目の前が開けますた。
サンクス!
textBoxにWriteLineするにはどうしたらよいですか?
改行するってこと?MultiLineにして\r\nでいいのでは?
他には、Environment.NewLineとかあるけど、\r\nで良さそうだね。
MessageBoxの場合、\nでも大丈夫だった。
422デフォルトの名無しさん:02/10/21 15:08
>421

\rが必要だっていうのには俺もかなり悩んだなあ。
windows名前空間だから\r\nなわけぇ? とおもいきやmessageboxは
言われてみれば\nでもいけるし。なんかここら辺の不統一が気持ち悪いね。

宇宙仮面も怒ってたな
private void button1_Click(object sender, System.EventArgs e)
{
  textBox1.Text = textBox1.Text.Insert(textBox1.Text.Length, "\r\n");
  textBox1.Text = textBox1.Text.Insert(textBox1.Text.Length, "AAA" );
  textBox1.Text = textBox1.Text.Insert(textBox1.Text.Length, "\r\n");
  textBox1.Text = textBox1.Text.Insert(textBox1.Text.Length, "BBB" );
}
こんな感じ?
with 使うほうがよさそうですね。

>>422 Windowsの仕様依存なんでしょうね。
424デフォルトの名無しさん:02/10/21 15:12
おれも 怒ってる ゴラァ!
>>423
textBox1.Text += "\r\nAAA\r\nBBB";
じゃダメなのか? (;´Д`)
426デフォルトの名無しさん:02/10/21 16:04
>423

なぜにこんな回りくどいことを……????
425かtextBox1.AppendText("\r\nAAA\r\nBBB"); のどっちかっしょ。
(;´Д`)
(;´Д`) <書くのもメンドくさい
くだスレの方が質問レベル高いような気がする。
C#カンファレンス 2002
http://www.shoeisha.com/event/cs/
431デフォルトの名無しさん:02/10/22 00:19
たまにゃ土日に大阪でやってくれ。。。
>>432
インストール時にWindows認証も選べるようになったので、MSDE使いも楽に動かせるね。
「Panel」だと「OnMouseWheel()」って駄目なんでしょうか。
435433:02/10/22 14:19
と思ったら、やっぱり混合モードにしないと動かないみたいね。
ということで、ここを参照。
http://www.sqlpassj.org/bunkakai/begin/series/s01/0113.aspx
今月号は買いづらいなあ。(;´Д`)
http://dotnet.impress.co.jp/index_b.htm
>>435
そんなしちめんどくさいことを。。。レジストリいじればすぐになおるっしょ。
やり方は今月のDBマガジンの付録に書いてあった。
>>430
セッションを投票で決めるらしい。もうネタがないのか?(w
439433:02/10/22 16:29
>>437
ほんとだ。レジストリのLoginMode変えてDB再起動するだけでできた。ありがと。
>>438
マイナーなネタでもふるか。メッセージキューとか。
>>440
選択肢は3つらしい。
http://www.shoeisha.com/event/cs/vote/
出来レースだな、こりゃ。
ほんとにどれがきてもしゃべるのか?しゃべれるのか?
XmlObjectSpaceを使ったIBuySpy実装。なかなか面白そう。
http://www.gotdotnet.com/Community/Workspaces/Workspace.aspx?id=b706dc79-415d-45de-8a6c-eb518adb0075
やっぱりObjectSpacesでリレーション設定したオブジェクトは
XMLに出来ないのかなぁ・・・
446デフォルトの名無しさん:02/10/23 05:09
>>446
日付を見る限り、ベータっぽくない?
448デフォルトの名無しさん:02/10/23 08:11
MSDNどころかC#Standard買う金ないんで
60日の体験版で勉強したいんですが
あれって、60日過ぎても
また再インストールして使えないですか?
SharpDevelopは何故かうちの環境じゃ動かないんです。
449デフォルトの名無しさん:02/10/23 11:05
デザイン時に、コントロールのプロパティにデータソースを指定する際、
TypeConverter("System.Windows.Forms.Design.DataSourceConverter")
っていう属性を付けると、一覧から選ぶことが出来るけれど、標準のComboBoxや
ListBoxのDisplayMemberのように、列を一覧から選ぶことが出来るように
するには、どの属性を付ければいいんだろう?
Editor("System.Windows.Forms.Design.DataMemberFieldEditor", typeof(UITypeEditor)
とか
TypeConverter("System.Windows.Forms.Design.DataMemberFieldConverter")
つけても駄目だった。むむ〜。まぁ正しい列の文字入力すれば動くけれど。

だれかわかる人いますか?
450デフォルトの名無しさん:02/10/23 12:18
>>448
.NET Frameworkにコンパイラついてくるぞ。
無料で配ってる。
451デフォルトの名無しさん:02/10/23 12:40
.NETに陰りが出始めてるよ。
C#<<<JAVAが
C#<JAVA
にすらなっていない現状。
クライアントアプリを作るにも、C#クソだし
サーバーサイドやるにしても.netクソだし、
.netの設計者殺すしかないかも。
453デフォルトの名無しさん:02/10/23 23:47
http://www.ascii.co.jp/pb/msdn/toc/bn_no31.html
ちょっとよさげな内容。
>>453
これでつか?

> .NETセキュリティ
> エビデンス,ポリシー,パーミッション,施行サービスを提供するCLRの
> セキュリティインフラストラクチャ
> (September 2002 Vol.17 No.9)●Don Box
日経ナントカよりはマシだろうか
相変わらず訳が糞だねぇ。施行サービスってなんだよ?
457448:02/10/24 10:56
>>450
.NET Frameworkは一応コマンドラインで使ってるんだが
借りてきたC#の本に対応していないので勉強できない・・・
DelphiみたくStandardタダにするとか
機能限定無料版とか無いのがイタイ
60日間試用版って一回消していれなおして使えんのかなぁ・・・・
情報キボンヌ。
>>457
フリーの.NET統合開発環境「SharpDevelop」
http://pc3.2ch.net/test/read.cgi/tech/1023727377/
とかいうスレが立ってるから、見てみたら?
>C#Standard買う金ないんで
リアル小学生でも親にねだって
買ってもらえる程度の額を、出せないなら
生活保護を受けに逝った方がいいよ。
>機能限定無料版とか無いのがイタイ
正直、きみの方がずっとイタイ
460448:02/10/24 11:32
>>458
サンクス
実は、SharpDevelopスレの181が漏れなんですわ
未だにフォーム表示するだけの空アプリも作れんので凹んでます
VB6やVC6ならおもむろにF5押すだけで出来るのに・・・
立派な機能限定無料版だと思うのだが
出ルφなら何でも出来るがC♯は何も出来ないという認識でよいですか?
>>462
いいですよ。他で議論するところいっぱいあるから他でやってね。
質問です。Windowsを終了する時に、自作アプリケーションを起動しておくと
Windowsの終了処理が中断してしまいます。そこで、
Microsoft.Win32.SystemEvents.SessionEnding += new Microsoft.Win32.SessionEndingEventHandler( OnShutdown );
としてハンドラにはthis.Close();としてフォームを閉じる処理を記述して対応しようとしたのですが、
どうもうまくいってないようです。何か対処法はないでしょうか?
465デフォルトの名無しさん:02/10/24 17:57
>>457
アクティベーションが必要になるから無理では?
>>465
ウィンドウがアクティブじゃないと駄目なんですか・・・
役にたたないですね、それじゃ。
どうすればいいんでしょうね。シャットダウン処理とめるのがデフォルトだと困るなぁ。
>>465
アクティベーションが必要になるのは、
アカデミック版だけじゃないの?
試用版も必要なの?
>>466
何か、>>465のレスを勘違いしてない?
>>468
あ! 思いっきり勘違いしてますた。逝ってきます。鬱すぎる・・・
470デフォルトの名無しさん:02/10/24 21:15
>>467
ネットを使ったライセンス認証が必要。なんか本買った時とかに付録で付いてたのが
貯まってしまって三枚くらい体験版あるけど日経の「C#で始めるWINプログラミング」
にはアクチが必要と書いてある。
他2枚は特に注意書きはないけど、同じ体験版だし必要かと。
471467:02/10/24 21:38
>>470
なるほど、サンクスです
>>447
>借りてきたC#の本に対応していないので勉強できない・・・

君だめぽすぎ。C#の本に対応って・・・本末転倒じゃねぇか。
開発環境がらみのところは読み飛ばしちまいな。
473472:02/10/24 22:18
447じゃなくて、457。俺もだめぽすぎた・・・逝ってまいります。
474デフォルトの名無しさん:02/10/24 23:19
>>471
間違った。体験版入ってるのは「始めようC#」だった。
475デフォルトの名無しさん:02/10/26 00:26
>>460
SharpDevelopの0.92が出ているよ。試してみたら?
476デフォルトの名無しさん:02/10/26 00:30
お前らみんなダメポすぎんな
間違いだらけだぞ!

次に来るのは決まってABですが何か?
477デフォルトの名無しさん:02/10/26 03:41
::::::::::::::::::( ノ:::::::::::::::::::::::::::::   | 十   ┼   キ . 十   ┼   キ
:::::::::/::::::::::::::::::::::::::::::::::::::::::    |⊂ レ ヽ ノ こ (フヽ ⊂ レ ヽ ノ こ (フヽ
:::::::/\::::::::::::::::::::::::::::::::::::::    !
::::::/  \::::::::::::::::::::::::::::::   /. 十   ┼   キ . 十   ┼   キ
::::/    \:::::::::::( ノ:::   / ⊂ レ ヽ ノ こ (フヽ ⊂ レ ヽ ノ こ (フヽ
:::: ̄ ̄ ̄ ̄ ̄:::::::::::    '                 /l
:::::::::::::::::::::::::::::::::    / 十   ┼   キ       / .:|
:::::::::::::::::::::      -   ⊂ レ ヽ/  ̄ \ヽ  _ −'  .::└‐- .,/
::::::  _ ―  ̄         /  ..::::::::::..l /   ..::::::::::::::::::::......
. ̄ ̄    十   ┼   キ   |  ::::::::::::::ノ/   ::( ノ:::::::::::::::::::::::::::
    ∧ ⊂ レ ヽ ノ こ (フヽ  |  ::::::::::/ l   ::::::::::|::::::::::::::::::::::::::::
    /:. `,             |  ::::::::::| |  :::::::::::::::| ̄ '‐- ._/
   /::::. '、  十   ┼   キ .l  ::::::::::ヾ  :::::::::::::::|    /::::::
___/::::::::. `、⊂ レ ヽ ノ こ (フヽ !  ::::::::::::゙、  :::::::::::::::|  /::::::::::::
:::::::::::::::::::::  \          ヽ.  ::::::::::::\ ::::::::::::|/:::::::::::::::::::
:::::::::::::::::( )  ヽ  十   ┼   キヽ :::::::::::::::` -::::::::::::::::::::_ -''
:::::::_/:::::::::::::..   i⊂ レ ヽ ノ こ (フヽ \ :::::::::::::::::::::::::::::::::::::::::::::::::
 ̄  /::::::::::::::::::   l    _ ― 、     〉 ::::::::::::::::::::::::::::::::::::::::::::::
   /::::::::::::::::::::   |  /    \  ┼   キ . 十   ┼   キ
  /:::::::::::::::::::::   l  |  .::::::::::::. ヽ ノ こ (フヽ ⊂ レ ヽ ノ こ (フヽ
\/:::::::::::::::::::::   / / :::::::::::::::::: }
>>476
次に来たのはAAでした。
479デフォルトの名無しさん:02/10/27 04:33
質問です。
NotifyIconのContextMenuを使うとステータス領域を“右クリック”で
ポップアップメニューを表示させることができますよね。
でも、NotifyIconを使ってステータス領域に表示されたアイコンを“左クリック”で
ポップアップメニューが表示されるようにしたいのですが、
どうしても方法がわかりません。ご教授ください。
>>479
ContextMenu.Show()
481デフォルトの名無しさん:02/10/27 08:37
書かれてみると案外左クリックも便利かもね?
483デフォルトの名無しさん:02/10/27 18:24
疑問だったんですけど、なんで const なメソッドが無くなったんでしょう。
例が悪いけど、
void AssertValid() const;
とか
void Dump(...) const;
とかどうしたら良いんでしょうか。
484デフォルトの名無しさん:02/10/27 18:31
多重継承とかテンプレートとか、VB厨に理解できないようなものは、すべて外されたデス。
>>483
constをつけるまでも無くコンパイラが自動判別するから
486484:02/10/27 18:56
半分ネタで書いたんだが(俺もVB上がりだし)マジで理解してないやつもいるんだな。
>>486
まぁ、インターフェースでそれなりにカバーできるし。

テンプレートは激しく欲しいよ。テンプレート厨が沸くのはうざいが。
AssertValidがフィールドいじってるかどうかなんてきにすんな。
そう組んだやつがわるい。
489デフォルトの名無しさん:02/10/27 21:38
スレッドを強制的に終了する方法はありますか?
Abortとか使ってもSuspend中のスレッドは終了できないみたいなんですが・・・
>>485
const というのは、プログラムミス防止のためのものであるから
勝手にコンパイラに判断されては困ると思うのだが・・・
>>490
へぇ。
492483:02/10/27 23:37
私もそう思うんだけど。
実際には const は使えないんですよね。
なんでだろ…?
> 疑問だったんですけど、なんで const なメソッドが無くなったんでしょう。

必要ないから。

そもそもconstメソッドなんかに頼っている時点で、カプセル化の意味がなし。
# オブジェクト自体をimmutableにするとか、いろいろ方法がある。
例えばそのオブジェクト自体をimmutableにする場合に、
DBC的な用法でconstメンバ関数を使うことも十分あるのでは。

#どの言語でも原理主義者はいややね。
constというのはROMに配置するためにあるのだ!
まぁJavaと違って普通に関数作れるしね・・・。
497479:02/10/28 02:22
>>480
ありがとうございます。
ところが、Showメソッドは引数がControlなので、NotifyIconを引数に指定できません。
なにかうまい方法でもあるんでしょうか?
498デフォルトの名無しさん:02/10/28 02:41
>>483
C#ではObject型はすべて参照という点に注意して考えてみてください。
意味が薄くなってきたから、いっそ取り除いてシンプルにしてしまえと言う事だと思います。
C++ 見たいに class をオブジェクト型だけではなく、代数型や構造体のように使うことをやめ
オブジェクト型に特化しているので、オブジェクトがメンバとして実体配置されることが無くなって
そのオブジェクトが参照している先まで const か?
ということになってしまいます、そこを見ないなら、constの意義がないです。

>そもそもconstメソッドなんかに頼っている時点で、カプセル化の意味がなし。
貴方は論点はずしまくり
499デフォルトの名無しさん:02/10/28 09:31
漏れはいつもconst用のコメントブロックを作るスタイルなので
const無くてもへーき。
500483:02/10/28 18:32
>>498 意見どうもです。
オブジェクトを Dump すると、そのオブジェクトが参照(と言うより所有)しているオブジェクトもダンプする事がありえますよね。
元のオブジェクトが(C++で言うと)参照定数のコンテクストにあるとき、Dump 呼び出しは所有物に対しても通るけど、他の const でない操作はコンパイラがブロックしてくれる…
っていうのが存在価値なんじゃないかなと思ってるんです。

自分で面倒見やがれと言うスタンスで統一したと言う事でしょうかね。
>>497
おいおい。
ContextMenuにShowメソッドがあるって。
502479:02/10/29 00:09
>>501
度々すみません。

private void nIcon_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
   if (e.Button==MouseButtons.Left)
    {
    ContextMenu.Show();
    }
}

ということでしょうか?コンパイルエラーになるのですが・・・。
>>502
>ということでしょうか?コンパイルエラーになるのですが・・・。

で、エラーメッセージ書かないボケはどこのドイツですか?
>>502
つうかヘルプでShowメソッドのところみたか?
引数たんねーよ それじゃ。
エラーメッセージ書かないのはネタだと何回も何回も・・・(略
506479:02/10/29 02:33
>>503
すみません。コンパイルする以前の問題だったので、書きませんでした。
気をつけます。

>>504
ContextMenu.Show((Control)sender,new Point(e.X,e.Y));
とすると、senderがNotifyIconなのでキャストできないですよね。
かといって、NotifyIconコントロールを貼り付けたFormを指定すると、
「System.ArgumentException: 非表示のコントロールでは、ContextMenu を表示できません。」
になるし。
>>506
言っても書かない馬鹿一人。
いいなぁ、バカって。
人生、楽そうだ。
そのDLLを参照に追加してみるのが最初の一歩だと思った
510501:02/10/30 00:05
>>506
497での発言は、ContextMenuのShowメソッドを見た上でのコメントやったんね。
やっと意味わかったよ。

このShowメソッドは使えないね。
かといって、左クリックを右クリックとだまくらかす方法はないかと
考えてみたが、ちといいアイディアなしだわ・・・。

いけそうで、いけないな・・・むむむ。
タスクトレイに常駐するだけのアプリケーションはどのように書きますか?
512479:02/10/30 01:26
>>510
そうなんです。いけそうで、いけないんです。
あきらめてAPIでいこうかと思ったんですが、
面倒だからそのまま右クリックに逃げました。(苦笑

>>511
Form1にNotifyIconを貼り付けて、
static void Main()
{
Form1 form = new Form1();
Application.Run();
}
ではだめでしょうか?
Formはいらないのですが、そういうことはできますか?
514デフォルトの名無しさん:02/10/30 08:04
コンソールアプリケーション
TabControlにTabPageをAddしていって、表示がいっぱいになると
Tabをスクロールするのに右の方に[←][→]みたいな矢印がでますが
この矢印の大きさを変えることってできるのでしょうか?

>>514
どっちにしろウインドウ作らないとメッセージが飛んでこないわけで。
一瞬で終了ってアホっす。
http://homepage3.nifty.com/takubon_world/software/IMEWatcher/index.html
こういうソフトはどうやってつくるのでしょうか?
518デフォルトの名無しさん:02/10/30 21:46
516=511なの??
単にフォームがいらないだけならコンソールアプリケーション。
常駐したいならServiceBase継承してサービスアプリケーションかけ。

以上
知らない事だと"以上"と言って終わらせたい低脳がいるスレはここですか?
Windowsアプリでも >>511 はできるけど。
>>511
Application.Run()だけでOK。
Application.Exit()で終了!
522521:02/10/30 22:59
NotifyIconにFormは必須じゃないYO!
ListViewってタイマーなんか使って定期的にアイテムのテキスト更新すると絶対ちらつくね。
ちらつく頻度はまちまちだけど、駄目だね。
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
とかlistView.BeginUpdate();とかさ試したり、
control.BeginInvoke();とかさタイマーのイベントの中でやってみたのね。無駄なのわかってたけど。
駄目なんだね。仕様ね・゚つД`)゚・。

>>523
そう思うなら変更があったときだけ書き換えろや。アホか。
525名無しさん:02/10/31 19:05
>>523
変更されたアイテムだけをUpdateするようなメソッドを自作すれば?
ダウンロード状況表示するようなやつなんで、変更されたもんだけってわけにはいかなっす。
一秒ごとに経過時間加算して表示すんだし。
527デフォルトの名無しさん:02/11/02 21:58
VBのDoEventsみたいなのはどうやればいいんでしょうか?
528デフォルトの名無しさん:02/11/03 00:10
変数名に大文字使えなくするにはどうすればいいのですか?
>>527
Application.DoEvents
>>528
そういうことを考えた人を殺してください。
>>528
そうしたい理由がわからん。
君が気を付ければいいだけの話。
532デフォルトの名無しさん:02/11/03 00:46
>>523
変更したときだけ再描画するようにせーよ
533デフォルトの名無しさん:02/11/03 02:30
>>531
int a;
a=2;

これでaは空間に存在しないってエラーが出て数分間はまった気持ちがあなたにわかりますかあ?
>>533
どこに大文字があるんですか?(プ
大文字じゃなくて全角文字?
大文字と全角文字を勘違いしていたというオチですか?つまらん。
>>533
intとaの間に全角スペース?

全角スペースも使えなかったっけ。(使いたくはないが)
全角+も全角数字も使える。
ちゃんと1+1は2になる。
>>533
UNICODEで保存しないと全角文字は使えない。
全角スペースが入ってて悩むような馬鹿がUNICODEでソースを保存してたりはしないだろ。
>>538
特に初期設定から変えてなくても全角文字使えますけど・・・。
540538:02/11/03 11:57
>>539
今、確認してみたら確かに使える。
β1の頃は無理だったんだけど。
541538:02/11/03 12:05
ついでにちょっと 533 みたいなのも試してみた。
全角スペースを □、
半角スペースを _ で書くと、

a,□_b
見たいに、全角スペースと識別子が並んでない場合はOKで、

a,_□b
見たいに、全角スペースと識別子が並んでる場合はコンパイルエラーになった。
HttpWebResponse httpRes = (HttpWebResponse)httpReq.GetResponse();
Stream st = httpRes.GetResponseStream();
StreamReader sr = new StreamReader(st, Encoding.GetEncoding("Shift_JIS"));

上記のようにStreamReaderを使って、webからテキストを読み込む
際に、何バイト読み込んだかを取得する方法はあるでしょうか?
サーバがContent-Lengthを返さない場合なのですが、、、

自分なりに考えてみると、StreamReaderを使わず、直接、バイト
単位で読み込み、容量を計算し、随時、バイト列をテキストに直す
方法ぐらいしか思いつかないのですが、、、

何かいい方法があれば、教えてください。

C#でWebServiceの質問です。Windows2000上でIISを使ってます。
IISでセッションタイムアウト値を30(分)に設定しても、以下の
sumNumbersメソッドが返す値が20以外になりません。
どうしてでしょうか?

-------------------------------------------------
using System;
using System.Web.Services;

namespace SumService {

[WebService(Namespace="http://tempuri.org")]
public class SumEx : WebService {
[WebMethod(EnableSession=true)]
public int sumNumbers(int x, int y) {
lock(Session) {
return Session.Timeout;
}
}
}

}
-------------------------------------------------
544543:02/11/05 14:47
Global.asax の Session_Startハンドラで Sessionのタイムアウトを
初期化するしかないのかな??
うーむ。
そういやMSDNのドキュメントで読み取り専用な配列は無いから、
プロパティにしてそのまま返すと大変な事になる。
GetXXX系の関数にしてコピーを返すべきだ、とか書いてあったな。
もう、馬鹿かと、アフォかと。
だったらconst使わせろと。
まぁ、PointとかRectangleとかしょうもない物まで全部参照型で何が何でもコピーを返さなきゃいけないJavaよりははるかにマシか。
546デフォルトの名無しさん:02/11/06 12:47
SDKでのActiveX使用方法について疑問があります。
コンパイル時に
ActiveXのDLLをソースファイルと同じディレクトリにコピーして

csc MyApl.cs /reference:AAA.dll,BBB.dll
としてコンパイルすると正常にMyApl.exeが実行されるのですが、
AAA.dll,BBB.dllを違うディレクトリに置いた時(例えばc:\)

csc MyApl.cs /lib:c:\ /reference:AAA.dll,BBB,dll
とするとコンパイル自体は問題なく終了するのですが、
実行時に「ファイルまたはアセンブリ名AAA.dllまたはその依存関係の
1つがみつかりませんでした」
というエラーが出ます。
MyApl.exe実行時にAAA.dll,BBB.dllのパスを通してもダメ
なにか他に指定する事があるのでしょうか?
分かる方いらしたらよろしくお願いいたします。

>>545
>PointとかRectangleとかしょうもない物まで全部参照型で何が何でも
>コピーを返さなきゃいけないJava

ちなみにC#だったらどのように解決してくれるの?
548デフォルトの名無しさん:02/11/06 13:28
こんにちは。質問させてください。

構造体
struct main_data{
z[810000];
z1[810000];
}data;

があるとします。
そこでCで↓のように書かれた場合、
C++ではどのように書くのでしょうか?

for(int i=0; i<900; i++){
for(int j=0; j<900; j++){
(data+j+i*900)->z = nodata;
}}

どなたかよろしくお願いします。
549デフォルトの名無しさん:02/11/06 14:40
C#にて、ネットワーク関係のプログラムを勉強したいのですが
良い書籍、HP等はありませんか?
>>545
そこでの読取専用な配列とは、読み取られ側が読み取り側に対してかける制限であり、
読み取り側自身がかける制限であるconstとは違う。
>>548
すれ違い。後。書き直す必要ある?
>>549
MSDN

取りあえずSocket関係のクラス調べれば言いっしょ。
553548:02/11/06 15:15
>>551
スレ違いでした。すいませんでした。
あちらに質問してみます。
C#.NETには、javaのBigDecimal同様の機能を持ったクラスはありますか?
>>547
C#ならそう言うのは値型だから自動的にコピーされるYO
>>555
参照で返したくても、自動的にコピーされちゃうの?
モチロンダゼハニー
>>556
参照で返したいなら参照で返すように書けばいい。
559デフォルトの名無しさん:02/11/06 17:27
TcpClientとNetworkStreamを使っていて、相手がコネクションを切断してきたということ
を知るにはどうしたらよいでしょうか?
>>558
どーやってやるの? 教えてください。
>>559
TCPのお約束に従うなら、readしてみないと分からないんじゃないかな
562デフォルトの名無しさん:02/11/06 20:46
>>542
System.Text.Encoding.GetByteCount(char[]);
System.Text.Encoder.GetByteCount(char[], int, int, bool);

byte[] から文字列に直すなら
System.Text.Decoder.GetChars(char[], int, int, char[], int);

詳しくは System.Text.Encoding クラスを参照。
>>558
どーやってやるの? 教えてください。
>>563ms-help://MS.VSCC/MS.MSDNVS.1041/csref/html/vclrfRef.htm
>>562
えーと、それはつまり、

StreamReader sr = new StreamReader(st, Encoding.GetEncoding("Shift_JIS"));
string str = sr.ReadLine();

とかやった場合に
strのバイト数を
System.Text.Encoding.GetByteCount()
で計算すればいいということでしょうか?

しかし、
StreamReader sr = new StreamReader(st, Encoding.GetEncoding("Shift_JIS"));
とやってしまっているので、
string str = sr.ReadLine();
の段階では、UTF-16 なってしまっていると思うのです。
strを一度、サーバ側と同じShift_JISにコンバートしなおして、
GetByteCountをやればいいのかもしれないのですが、やはり
そういう方法しか無いでしょうか?

バイト数を数えるだけのストリームを間に挟むとか。。。
>>564
structを参照で返すことができるの? って話だと思うよ。
C++だと
mystruct& foo() {
return x;
}
みたいな。

これはC#で可能なの? ref,outが戻り値にも使えるの?
戻り値は暗黙にout。refは無理。
569デフォルトの名無しさん:02/11/07 09:23
>>565
Encoding sjis = Encoding.GetEncoding("Shift_JIS");

StreamReader sr = new StreamReader(st, sjis);
string str = sr.ReadLine();

int size = sjis.GetByteCount(str);

こうするとか。
570デフォルトの名無しさん:02/11/07 10:33
>565

結局はストリームで直にバイトを読んでいってstream.Readの返り値で
バイトを数えて、最後にstringにするのが一番楽なんじゃないかな?

int bufferSize = 1024;
int byteRead = 0;
byte[] buffer = new byte[bufferSize];
MemoryStream data = new MemoryStream();

do
{
byteRead = st.Read(buffer, 0, bufferSize);
data.Write(buffer,0,byteRead);
//読み込んだバイト数はbyteReadなので、好きなように使う。
}
while(byteRead > 0);

string html = Encoding.Default.GetString(data.ToArray());
data.Close();
st.Close();
>>569
なるほど、それだとスッキリ書けますね。
でも、速度的には >>570 の方が早いのでしょうか。
まぁ、でも、こんだけマシンパワーのある時代なので、
分かりやすく書ける方がよさそうですね。

というか、MFCにあるByteArrayみたいなクラスは無い
のかと思っていたら、MemoryStreamを使えばよかった
のですね。いま気づいたYo!

>>571
まあ、>>569 だと二度手間(?)になるから、>>570 のほうがいいとおもうね。
一回 byte[] から char[] や string にしたものをまた byte[] に
変換して(るのかどうかしらないけど)サイズ取得だから…
>>570のほうが(・∀・)イイ!!と思うよ。
573デフォルトの名無しさん :02/11/08 03:30
SHDocVwのBeforeNavigate関連で質問なんですが
ページを更新した場合呼ばれないのは仕様ですか?
呼ばれないのだとしたら更新を検知するには何を使えばよいでしょう?
更新時にもURLとかヘッダーとかの情報を取得したいです
574デフォルトの名無しさん:02/11/08 14:45
MenuのショートカットってWindows自体でもそうなのですが、
使いにくくないですか?

this.mainMenu = new System.Windows.Forms.MainMenu ();
MenuItem miFile = new MenuItem("&File");
mainMenu.MenuItems.Add(miFile);
miFile.MenuItems.Add(new MenuItem("&New"));
miFile.MenuItems.Add(new MenuItem("&Open"));

としておいてALT+Fを使うのが普通なんですが、KeyPressイベント
などを使ってF2押すとダイレクトにFileメニューの内容(New,Open)を表示
するようには作れないものなのでしょうか?
(メニューを避けてボタンを配置してダイアログを表示するって手はナシとして)
簡単そうに思えるのですが、どーもうまく行かない。
昔のDOSプログラムって画面の一番上にF1 F2 F3とか表示してあり
ましたよね。案外あの方が慣れると使いやすかった気がしてならない。
>>574
Winアプリのお作法ですから…
1つのアプリだけ操作体系が異なるってのも使いにくいし。
576デフォルトの名無しさん:02/11/08 23:35
MainMenuのMenuItemにはVS.NETのプロパティで
ショートカットキーを設定できるようにはなっている
んですが、なぜか機能しないですよね。たんなるバグ?
それともやり方がまずいのか
バグだったら希望者全員にVisualStudio買ってやるよ。
今からC#を始めようと思うのだが、お薦めの書籍は何?
>>574 のFileだとShortcutが効かないような。(New, Openは効く)
買って >>577
>>579
バグじゃなくて Windows の仕様じゃ...?
ショートカットとアクセラレータキーが混乱しているような……
582デフォルトの名無しさん:02/11/09 02:37
えーと質問お願いします。
ファイルで保存してあるDTSパッケージをC#から使いたいのですが、
コードの書き方がさっぱりわかりません。
参照設定→.LoadFromStorageFileを使うとこまではわかったのですが、
サンプルがVBしかなくどう記述していいのか。

DTS.Package myPackage = New DTS.Package("C:\test.dts");

と書いたのですが。

583デフォルトの名無しさん:02/11/09 02:59
>580
MainMenuのMenuItemにshortcutが設定できない(しても機能しない)
ならばプロパティでshortcutの項目を表示すべきじゃないでしょう。
ご丁寧にコードにも追加しちゃってるしね。
584デフォルトの名無しさん:02/11/09 10:49
system.type からその型のクラスのインスタンスを作ることってできますか?

class a
{
}

class b:public a
{
}

system.type st = typeof(b);
class a;
//a = new b();//これをtype からとりたい
a = new st(); //イメージとしてこんな感じ
みたいなかんじで。
>>584
こんな感じで。

  Type st = typeof(B);
  A a = (B) Activator.CreateInstance(t);
>>582

  Package myPackage = new PackageClass();
  myPackage.LoadFromStrageFile(〜);

ってな感じだと思うんだけど、
optのパラメータが多いときはVB.NET使った方が楽だと思うよ。
587586:02/11/09 11:14
Strage → Storage の間違いね。
588584:02/11/09 11:29
>585
ありがとうございます。
ブラウザのリンククリックイベント(URL)を拾うにはどうすればいいんでしょうか。
はじめたばっかでまだパニック中・・。
>>578
プログラム素人さんならば、日経ソフトウェアがイイ
>>589
・Generics → Rotorで体験済み。便利だけど、コレクション以外で
今ひとつ使い道が浮かばない。

・Iterators → foreachの無駄がなくなってよさげだけど、
yieldとかまた予約語が増えるのね...。

・Anonymous Methods → 構文的にちょっとJavaとは違うみたいね。
機能的には萌え。RADでちゃんとサポートしてくれるといいんだけど...。

・Partial Types → C++っぽくて激しく萎え。


っていうか、これってEverettじゃなくてYukon対応版の方だよね?
GenericsとIteratorsで無駄な box / unbox をなくして実行効率アップ。
コンパイル時に検出できるエラーも増えて(゚д゚)ウマー。

Anonymous Methodsで無駄なイベントハンドラを隠して、
Partial Typesで自動生成部とカスタムロジックを別ファイルにして読みやすさ(゚д゚)ウマー。
MS、Visual Studio .NET新版について説明
http://headlines.yahoo.co.jp/hl?a=20021109-00000011-zdn-sci
Generics
Iterators
Anonymous methods
Partial types

さっぱりわからん??
よっしゃ!上二つはわかった!!
anonymous methods
匿名メソッド? どんなのなんだろ。
クロージャーじゃなくて?
>>597
わざわざ名前をつけて定義しなくてもいい使い捨てメソッド。
イベントハンドラで効果大。

  button1 = new Button();
  button1.Size = new Size(96, 24);
  button1.Text = "Click!";
  button1.Click += new EventHandler(sender, e) {
    MessageBox.Show("button1 clicked!");
  }
600デフォルトの名無しさん:02/11/11 00:56
ところで、↓のキャラってJavaのDukeみたいなもんなの?

http://www.gotdotnet.com/team/csharp/
>>600
激しいほどに最低なデザインセンス。

これでは、Dukeの足元にも及ばぬ。



C#の普及は、まだまだだなぁ。
JavaのDukeみたいなもん、じゃないのに。
Control.MouseButtonsっていうので、マウスのどのボタンが押された
か取得できるらしいのですが、どのボタンを押しても、MouseButtons.None
が返ってきてしまいます。

FormのClickイベントの中でやっているのですが、何が悪いのでしょうか?
>>603
ネタ?
>>601
そのページの左上の手よりはマシかと。
>>603
MouseEventHandlerでMouseEventArgs.Buttonを見るんじゃないの?
どこかのスレでPropertyGridのローカライズがらみの
質問してませんでしたっけ?一応こんなの↓見つけたんだけど、、、
役に立つなら使ってあげてくださいな。

Globalized property grid
http://www.codeproject.com/cs/miscctrl/globalizedpropertygrid.asp
>>599
おお サンクス(・∀・)
なるほど。ハンドラ追加する時の面倒が軽減するね。
スレッドを実行するときにThread.IsBackgroundを
使ってバッググラウンドで実行するかフォアグラウ
ンドで実行するかが選択できるのですが、これは、
どんな意味があるのでしょうか?

ファオグラウンドだと現在の処理がブロッキングさ
れるのかと思ったら、そんなことは無く、バックグ
ラウンドで動いているようなのですが、何が違うの
でしょうか?

優先度の傾向がちょろっと変わるぐらいじゃなかろうか、と予想。
http://www.gotdotnet.com/team/csharp/images/Logo2.gif

このロゴかっこいくない?
612603:02/11/11 22:02
>>604
ネタじゃないのですが、、、

>>606
ClickイベントだとMouseEventArgsは送られてこないのです。
で、Petzold の本読んだら、ClickイベントでもControl.MouseButtons
はスタティックに使えるので、これで、どのボタンが押されたか
は取得できますと書いてあるのですよ。

ところが、なぜか、MouseButtons.Noneしか返ってこないというわけです。

なんででしょうか?

>>612

実験してないから確証はないが、
Clickはマウスのボタンを離したとき(つまりイベント発生時には、
すでにボタンは押されていない)に起きるイベントだからでは?
614デフォルトの名無しさん:02/11/12 00:25
>574
自己レスです。(^^;
MainMenuのItemであるFile項目のF2キーなどでの
一発ポップアップ?はAPIを使って可能でした。
615デフォルトの名無しさん:02/11/12 05:06
数日前にC#をはじめますた。
今まではVB使いだったので、違いに苦戦中です。
テキストボックスに入力された数字(1〜32767)をプログラム内で使用したいのですが
VBだと

dim intA as Integer // 整数型
intA = TextBox1.Text

これでintA(整数型)にきちんと代入されるんですが

C#で

int intA;
intA = textBox1.Text;

とやってもstringをintにキャストできないと言われてしまい、

inA = (int)textBox1.Text;
とやってもだめで、

object objA;
objA = (object)textBox1.Text;
int A = (int)objA;

ボックス化とかいうやつらしきものもやってみたのですがだめでした。

どうすればよいのですか?教えてください。
>>615
型変換メソッドはSystem.Convertクラスに用意されてる。
int intA;
intA = System.Convert.ToInt32(textBox1.Text);
617615:02/11/12 06:05
>>616

教えて頂いたとおりSystem.Convertクラスのメソッドを使用したところ
無事に出来ました。ありがとうございます!

MSDNとかWebで4時間ぐらい探し続けてわからなかったのに。。
やっぱこの板はイイ(゚∀゚)

616さんありがと〜
各クラスにParseというメソッドもある。
この場合はInt32.Parse( textBox1.Text )とか。
619デフォルトの名無しさん:02/11/12 16:36
「lstrcpy」の代替用のメソッドはありますでしょうか?
システムの制限上、「char*」は残したままで考えています;-<

【VC++】
int main(int argc, char **argv)
{
char* sz;
lstrcpy(sz, argv[1]);
}

【C#】
unsafe class abc
{
public static void Main(string[] args)
{
char* sz;
????????????
}
}
620デフォルトの名無しさん:02/11/12 19:15
Webページへのアクセス処理を作っていたのですが、うまく動作しません。
以前は同じプログラムが動作していたのですが、何かあるんですか?

string url = "http://www.....";
WebClient wc = new WebClient();
Stream st = wc.OpenRead(url);
StreamReader sr = new StreamReader(st, Encoding.GetEncoding("Shift_JIS"));
Console.WriteLine(sr.ReadToEnd());
sr.Close();
st.Close();
621デフォルトの名無しさん:02/11/12 23:09
System.Net.SocketsクラスのtcpClientを使っているのですが
Winsockコントロールを使用したときのDataArrivalイベントのようなものはないのでしょうか?
DataArrivalイベントというのは、データを受信したときに発生するイベントで
その中に受信データを処理する部分をかきます。

もし、DataArrivalイベントに代わるものがなければ
データ受信用のスレッドを別に作成して、毎回バッファをチェックするという
方法しかないうということでしょうか?
622デフォルトの名無しさん:02/11/12 23:12
>>620
>以前は同じプログラムが動作していたのですが、何かあるんですか?

以前ってのはいつだよ。以前から今までに何をやったのさ。
そんな質問じゃ誰もわからんって。
624デフォルトの名無しさん:02/11/12 23:19
EnumWindowsを使って取得したhwndからControlのインスタンスを作ろうとしたら
自分自身の分しかできませんでした。
どうしたら他のウィンドウも取得できるのでしょうか?
DataSetのテーブルの結合処理をするには、
コードでガリガリ書かなきゃなんないのかねぇ。

SQL文を与えて一発結合、みたいなのはできないものかな。
>>625
ビュー作ったら?
>>621

普通はブロッキングするので、毎回チェックする必要は
ないと思われ。

628621:02/11/13 02:33
>>627

ブロッキング?

やはり別スレッドで自前でチェックするものを作らなければいけないということですか?

質問ばかりですみません。
>>628
一般的には、データの送受信のところは別スレッドでやった方が
いいと思われ。

TcpClient使ってやるなら、読み出しはNetworkStream.Read使うんでしょ?

NetworkStream.Readっていうメソッドはデータが来ないと、その場で処理が
止まる。なので、いちいちチェックする必要とかは無い。データが来るまで待ってて
くれるのだから。

ただ、メインのスレッドで、これを使うと、ブロッキングのため他の処理が一切
できなくなってしまう。だから、普通は別のスレッドで行うのが一般的。


C#ってselectつかえないの?
631621:02/11/13 03:11
>>629
お察しのとおり、NetworkStream.Readメソッドを使うんです。
データが来ないとその場で処理待ちするとは知りませんでした。
それなら、別スレッドでやった方がいいという意味も納得がいきます。

助かりました。
ありがとー!
>>630
条件分岐のこと?
それなら switch-case 文。

セレクトボックスのことなら ComboBox。
>>632
わざとボケてる?

>>630
Berkeley socket interface は System.Net.Sockets.Socket。
public static void Select(
  IList checkRead,
  IList checkWrite,
  IList checkError,
  int microSeconds,
);
DirectX 9.0 RC 0 : Public Beta for End-User
http://www.microsoft.com/downloads/release.asp?ReleaseID=45160
LonghornでSystem.Windows.ShellとかSystem.Windows.Navigationとか
.NET-based Avalon APIs

http://www.winsupersite.com/images/reviews/lh_alpha_031.gif
http://www.winsupersite.com/reviews/longhorn_alpha.asp
Formから別のFormを表示した時に、表示したFormの方に
フォーカスが移ってしまうのですが、表示元のFormから
フォーカスが移らないようにする方法はあるでしょうか?
>>636
やったことないから、わかんないけど
CanFocus プロパティをFalseにすればいいのかも。
それやると不具合あるなら、根本的な解決方法じゃないけど
別FormをShow()した後に元のFormのフォーカスをFocus()で
セットし直すとか。
>別FormをShow()した後に元のFormのフォーカスをFocus()で
>セットし直すとか。
それだとウインドウが点滅したようになってしまうので、
だめなのです。

うーんと、つまりどんなことがやりたいかと言うと、ToolTip
のようなウインドウを表示したいのです。
なんかちょっとした情報を表示するときに、任意の位置に、
メインのウインドウのフォーカスをそのままにしてウインドウが
表示したいんですよ。

ToolTipクラスは任意の位置っていう指定ができないので、タイ
トルバー無し、枠無しのToolTipっぽいFormを作ってそれに情報
を表示してみたのですが、Show()をやったとたんにそっちのウイン
ドウにフォーカスが行ってしまうのです。

なんかいい方法ないでしょうか?

639デフォルトの名無しさん:02/11/16 00:54
C#には
http://java.sun.com/products/jdk/1.2/ja/docs/ja/api/
の様なAPIドキュメントはないのですか?

Directory dir = new Directory("c:\\");

こう書いたら
引数を '1' 個指定できる、メソッド 'Directory' のオーバーロードはありません。
とか言われて意味がわかりません!
>>639
ないわけない。
642親切な人:02/11/16 01:02

ヤフーオークションで、凄い人気商品、発見!!!

プランテック製の「 RX-2000V 」を改造済み
にした、アイティーエス製の「 RX-2000V 」↓
http://user.auctions.yahoo.co.jp/jp/user/neo_uuronntya

ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。

ヤフー ID の無い方は、下記のホームページから、
購入出来る様です↓
http://www.h5.dion.ne.jp/~gekitoku/#.2ch.net/
643デフォルトの名無しさん:02/11/16 01:10
>>641
ありがとうございます!

でもやっぱりnewの仕方がわからない…
644643:02/11/16 01:12
静的だからnew出来ないのかな?
>>643-644 そのとおり。ちゃんと読みなはれ。
>解説
>Directory クラスのすべてのメソッドは静的であるため、ディレクトリのインスタンスを
>作成しなくても呼び出すことができます。
646644:02/11/16 01:31
647騙されたって・・・:02/11/16 01:49
そこの文書の作成日・・・00/08/27って・・・
そりゃー仕様も変わるかもだ。

ちなみに初代C♯スレが
>1 名前: 名無しさん♯ 投稿日: 2000/12/18(月) 13:06
か。
>>638
漏れも以前、色々試してみたが駄目でしたなぁ。
なんで、マウスポイントしたらステータスバーに説明を表示するってのにした。
>>648
だめでしたか、、、

これは.NET Frameworkだからだめなのでしょうか?
API直たたきならできるのでしょうか?

実際、こういうフォーカスを移さないでウインドウを表示
しているアプリケーションって結構あるのですが、どうやって
るのだろう。。。

例えば、MSNメッセンジャーとかは友達リストに登録している人
がログインすると、画面の右下に「○○さんがログインしました」
ってな感じで情報表示用ウインドウが出るけど、その時作業して
いたウインドウからフォーカスははずれないです。

あと、何のメーラだったかは忘れたのですが、新着メールが
あると、画面の下の方に新着メールのタイトルだけをそっと表示
してくれるようなソフトもありました。これもウインドウは表示
するけど、フォーカスは移動しないです。現在作業中のウインドウが
あれば操作は続行できるのです。
>>649
window開くつうか直に描画してるのだと思われ。
ディスプレイのデバイスコンテキスト取得してね。
>>649
よく知らないけどCBTフックを調べてみたら?
API直叩きならできる。直描きもフックも不要。
ShowWindow APIにフォーカスを移さずに表示する選択肢があるから。
653デフォルトの名無しさん:02/11/16 06:37
C#のコンパイラは無料で手に入るときいたのですが

どこへ行けばダウンロードできるでしょうか?
654マジレスしてみる:02/11/16 07:04
655デフォルトの名無しさん:02/11/16 09:02
複数のビットマップを並べて描画&一部を移動などを
するときに画面がちらついてしまいます。
これをちらつかせなくするのにいい方法はありますか?

いちおう複数のビットマップから一個のビットマップを
作ってそれを描画すれば解決かとも思うけど
もっときれいに楽にできる方法があれば教えてください。
よろしくお願いします。
ダブルバッファリングくらいしろい。
>>652
うぉ〜ほんとだ!!
APIのShowWindow()っていう関数だと、

> SW_SHOWNA
> ウィンドウを現在のサイズと位置で表示します。
> SW_SHOW と似ていますが、この値を指定した
> 場合は、ウィンドウはアクティブ化されません。

っていうのがありますね。
これならできそうです。C#からAPIの叩き方を調べてみます。
ありがとさんです。

でも、なんでC#では.NETではできないんですかね。
.NETヘボすぎです。。。
658657:02/11/16 15:35
今API直叩きで組んでみたのですが、なんかやっぱりだめです。
なんででしょう?

とりあえず、
[DllImport("user32.dll")]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);

ていうメソッドを定義しておいて
Form2 form2 = new Form2();
IntPtr p = form2.Handle;
ShowWindow(p, 8);

を呼び出してみたのですが、やっぱり、表示されたウインドウがアクティブ
になって、表示もとのウインドウはフォーカスを失ってしまうようです。

ちなみに、ShowWindow(p, 8);の8という数字の根拠は、下記の定義から見つけて
きました。

/*
* ShowWindow() Commands
*/
〜省略〜
#define SW_SHOWNA 8
〜省略〜

何がダメなんでしょうか?やはり、>>650さんのいうような方法しかない?
でも、MSNメッセンジャーとかが表示しているやつはウインドウっぽいんですよねぇ、
だって、クリックできるし。。。
どうか、分かる方がいたら、おながいします。
659658:02/11/16 16:07
いろいろ調べてみたら

ShowWindowというAPIは

nCmdShow
ウィンドウの表示方法を指定します。アプリケーションがほかの
プログラムから STARTUPINFO 構造体を渡して起動された場合、
初めて ShowWindow 関数を呼び出したときには、このパラメータ
は無視されます。構造体が渡されていない場合、ShowWindow 関
数を初めて呼び出すときには、WinMain 関数の nCmdShow パラ
メータで取得した値を指定してください。以降の呼び出しでは、次
のいずれかの値を指定できます。

だそうです。なんで、初回起動時に1度表示してから、
このAPIをたたいてみたところ、なんと!、フォーカス無しで
ウインドウが呼べました。

でも、初回に無駄に1度表示するというのがちょっとかっこわるいような。。。
まぁ、しょうがないですかねぇ。

とりあえず、解決しますた。みなさんありがとです。
>>655
PaintBackground イベントをオーバーライドして何もしないようにしろ。
そしたらちらつき消える。

っていうかさ、画面の再描画時のちらつきに関する質問、多すぎ。
Users のメーリングリストで4回くらい同じ質問見たことある。
C#のドキュメント、なんでメンバの返り値の型書いてないんだ?
>>661
(゚Д゚)ハァ?
書いてあるけど?
>>661
VB厨とみた。~~~~で示したところが戻り値だ。

[Visual Basic] Overloads Public Shared Function FromFile(String) As Image
                                   ~~~~~~~~
[C#] public static Image FromFile(string);
          ~~~~~~
664663:02/11/17 01:47
ちとずれたな。
665661:02/11/17 02:16
添付されてる、HTMLなリファレンスマニュアルの事だよ?
javadocには返り値の型書いてあったのに。
>>661
具体的に戻り値の書いてないメソッドをあげてみなよ。
どこみたって、きちんと書いてあると思うが?

例えば、String.IndexOf メソッドはこんな感じで書いてある。
ms-help://MS.VSCC/MS.MSDNVS.1041/cpref/html/frlrfsystemstringclassindexoftopic1.htm
戻り値はintである。

書いて無いというメソッドを上記のように具体的に示してくれ。
667デフォルトの名無しさん:02/11/17 07:17
SDKいれたら何Mぐらいになる?
もれのおかしいかも…
おまえら、いい加減「放置」をおぼえろよ。
誰にだって勘違いはあるんだし。な、661
結局放置できない668。

       -―-          |
     〃      ヽ     .|
     i   ノノノ))) ))    | >>669も放置出来ない人ですか?
.    i i ( 'l_] l]〈リノ    .<
     ヽヽ >  />      \_____
     Y/ヽ!ェl〉        /ヽ/ヽ
      !! l卯 l         / // /
      i ll8| !       / // /
.       l l「| l       , ´-‐ ‐- ヽ
        /!_」l|_j、    {   l ,,  } ぅん
.      / /゙´l"ヽ >   ゝ. ‐  ノ
     'ーr‐ r r ´       l !
.       l  l. |           | |
.       |  ! |           l. |

       -―-
     〃      ヽ
     i   ノノノ))) ))   / ̄ ̄ ̄ ̄ ̄
.    i i ( 'l_] l]〈リノ < >>669ほうちー
     ヽヽ > n/>    \_____
     Y/ヽ!ェl〉        /ヽ/ヽ
      !! l卯 l         / // /
      i ll8| !       / // /
.       l l「| l       , ´-‐ ‐- ヽ
        /!_」l|_j、    {   l   U } ……
.      / /゙´l"ヽ >   ゝ. っ  ノ
     'ーr‐ r r ´     ⊂ニl !
.       l  l. |        | |
.       |  ! |        l. |
671669:02/11/17 10:15
>>670
くすっ。最初っから俺は放置しろとか言ってないもん(w


====================リセット====================
ぼうけんのしょ 1 がきえました
674デフォルトの名無しさん:02/11/17 13:25
ハイ!先生!!
冒険の書が消えたところで質問です。

Form1にあるテキストボックスにForm1クラス以外のクラスから
アクセスするにはどうしたらいいんですか?

class Form1
{
public System.Windows.Forms.TextBox TextBox1;
.....
this.TextBox1.Text = "ABC"; //これは普通に値を書き換えられるが
...
Class1 class1;
...
}

public class Class1
{
Form1.TextBox1.Text = "ABC"l //これができません。
}

両方とも同じ名前空間に属しているクラスです。
これを実行するとClass1の中でエラーが発生してしまいます。
Class1の中でForm1のインスタンスを作成すればアクセス
出来るような気がしますが、やり方がよくわからないうえに、
もともと Class1 はForm1クラスの中で作成して使用するものなので
Class1の中でForm1クラスのインスタンスを作成することは
出来ないような気がします。

VBだと何の問題もなくどこからでも Form1.TextBox1 の値を
変更できただけに、とても困惑しています。
教えて頂けないでしょうか?
static void Main()
{
Form1 form1 = new Form1();
Application.Run(form1);
}


form1.TextBox1.Text = "ABC";
676674:02/11/17 14:09
>>675

Application.Run の直前で自分でForm1のインスタンスを作成して
staticで保持しておけばよかったんですね!
おっしゃるとおりにやったらできました。

助かりました。どうもです〜!
まぁ、static使ってもいいけど、コンストラクタに参照渡した
方がいいと思うよ。

Form1の中でClass1を宣言するときに次のようにする。

Class1 class1(this);//これで、Form1自身のインスタンスを渡す

Class1では、引数としてもらったForm1のインスタンスを取って
おいてそれを使う

public class Class1 {
  private Form1 form1;

  public Class1(Form1 form) {
    this.form1 = form;
  }

  public void hogehoge() {
    form1.TextBox1.Text = "ABC";//これでできます
  }
}

ただし、この場合TextBox1がpublicで無いとだめです。
でも、Form1のメンバに直接アクセスできるのはきもいので、
プロパティでも使って隠蔽してください。
TextBox1を渡せよ
679最近はC ◆vmmZ0hhNNc :02/11/17 15:51
>>666
多分、メンバ一覧(xxxxMembersTopic.htm)の画面のこと言ってるのだと思うよ。
>>665でJavadocとか言ってるし。

っつぅか、確かにいちいち詳細見なければ、戻り値や引数が分からないのはJavadocに慣れた漏れもつらいです。

>>674
っつぅか、OOPについて少し勉強した方が…
インスタンスメンバとクラスメンバの違いや、スコープのことが分かってないと、これからかなり厳しいと思われます。
680デフォルトの名無しさん:02/11/17 17:54
DataSetクラスみたいにIDisposableインターフェース持つ
オブジェクトを返すメソッド作ったとき、
内部で例外発生した場合のリソース開放処理ってどうしてる?

public DataSet GetDataSet()
{
  using (DataSet dataSet = new DataSet())
  {
    // データセットに値を格納する処理
    
    return dataSet;
  }
}

って書ければ、例外発生時のリソース開放漏れは防げるけど・・・
正常動作時にもDisposeされたインスタンス返しちゃうよね?

でも、実際は、これで上手く動いたりするんだな。

なんか勘違いしてますかね私。
681680:02/11/17 19:57
DataSetの代わりに、StreamReaderでやってみたら、
呼び出し側でエラー出たよ。

System.ObjectDisposedExceptionって
・・・予想どうりか。

というわけで、680みたいな記述は間違いなわけね。
たとえ動いたとしてもね。
>>680
try, catchじゃダメなの?
683680:02/11/17 21:16
try-catchで問題ないんだけど、めんどくさいじゃん。

一度usingの蜜の味を覚えたら、
catchやfinally句でリソース開放なんて
いちいちやってられんよ。

catch (Exception ex)
{
&hbsp;&hbsp;if (streamReader != null)
&hbsp;&hbsp;{
&hbsp;&hbsp;&hbsp;&hbsp;streamReader.Close();
&hbsp;&hbsp;}
&hbsp;&hbsp;throw ex;
}

とか書きたくないじゃん。
684680:02/11/17 21:17
ありゃ 
"&hbsp;"をインデントに読み替えてくださいな。↑
プッ
>>685 性格悪いなぁ

>>683 &nbsp;な。
つーかfinallyだろ。プッ






まあusingは便利だけどね。
C#でファイルに書き込んで作った10KBほどのバイナリデータ(あるクラスの配列すべてのデータを書き出したもの)をC++で読みこみ、C++側で作った同じクラスに代入しようとしました。
しかしC++で読み込むと、ファイルの途中でまだ先があるにも関わらずそれ以上読み込めなくなります。
デバッグして読み込みが終わるところをチェックすると、おかしくなる寸前まで正常に読み込まれ(自動変数表示に表示されるクラスのデータメンバが正常)ているので、型の大きさの違いは無いはずなのです。
一方、C#でC++と同じ読み込みアルゴリズムを作り、ファイルを読み込むと最後まで正常に読み込まれました。
一体何が悪いのかわかりません。助けてください。
689デフォルトの名無しさん:02/11/17 23:39
さげてしまいすみません。
690688 :02/11/17 23:45
書き忘れていましたが、C++では入力に
_open
_read
を使っています。
> 一方、C#でC++と同じ読み込みアルゴリズムを作り、
> ファイルを読み込むと最後まで正常に読み込まれました。

これでいいじゃん。終了。
692688 :02/11/17 23:52
すいませんが良くないのです。C++側はゲームの本体で、C#はエディタなのです。
691って、C#とC++それぞれにシリアライザ/デシリアライザを作る
という意味だと思うのだけど、688はそれとどう違うの?
シリアライザってなんですか?
新人レスラーですか?
694を新人レスラーとしてこのスレに迎えることにしますた。
芸名:シリアライザー
696688 :02/11/18 00:17
>>693
C++とC#で同じ読み込みアルゴリズムにも関わらず、C++だと読み込めなくなります。
前にも一回こんなことがあってうやむやのまま終わりました。
で、あんたのプログラムのバグを直せと?
698688 :02/11/18 00:23
なにかC++とC#の間でデータのやりとりする際に気をつけなければならないことなどがあれば教えてください。
int や char のサイズが違う。

なんてオチだったりして。
700688 :02/11/18 00:54
ぎゃー!テキストモードでひらいてたー!!!
>>688=700
逝ってください。
702デフォルトの名無しさん:02/11/18 01:02
データグリッドの列にコンボボックスつけれませんか?
703F:02/11/18 09:38
質問なんですが、
BMPがテキストになったファイルを
もう一度画像ファイルとしてピクチャーボックスに
表示するにはどうしたらいいのでしょうか?
704デフォルトの名無しさん:02/11/18 09:58
C#ってIE上で動くアプレットみたいなものつくれますか
>>703
次で回答がなければ質問の仕方が悪いと思え。

どうぞ。
マルチは氏んでください
ワロタ
>BMPがテキストになったファイルを
意味若欄
BASE64にでも変換したのか?
質問です
FORM1からFORM2にあるLISTBOXコントロールを操作するにはどうすればいいの?
Form2.listBox1ってやってもコンパイルでエラーが出る。
みんな暇そうにしてんだから教えてくれ

おれは今からデートなんで、夜には帰るからそれまでに回答よろ!
710デフォルトの名無しさん:02/11/18 13:18
てか、age
711bloom:02/11/18 13:21
>>711
強烈な精神的ブラクラ
>>709
Form1にForm2のインスタンスを渡せ
714デフォルトの名無しさん:02/11/18 18:02
この手の質問って多いよな。フォームからフォームを操作したいんです。みたいな。
過去ログにかなり既出でしたよ。
俺は過去ログに出てた。

private static formPim _instance = null;
public static formPim GetInstance()
{
if(_instance == null)
{
_instance = new formPim();
}
return _instance;
}
ってな方法でやってますわ。
>>709
デートする暇があったら,過去ログ読めば?(w
>>716
男とデートに1票 :-)
718709:02/11/18 22:31
ふ〜、今帰ってきたYO
やっぱ手コキが一番気持ちいなw

てか、マジレスついてんじゃん(ワラ
正直、期待してなかったんだけど、あんたらいい人過ぎるYO!!
これじゃあ、初心者が調子乗ってしまうぞ
まあ、なにはさておき>715感謝!!
719デフォルトの名無しさん:02/11/18 22:53
これももしかしたら即出の可能性があるのですが、
ArrayListにint型ポインタを格納するにはどうしたら
よいのでしょうか?
STLのVectorの場合は
vector<int*>などとやるのですが・・
>>719
「くわっぱ!!」と大きな声で叫ぶといいかも
>>719
IntPtrを使う。
722デフォルトの名無しさん:02/11/19 01:25
>721
ArrayList list = new ArrayList();
list.AddRange(new int*[3]);
こんな感じでもコンパイルは通り
IntPtrとしてメモリを確保している
ようなのですが
具体的にやりたい事というのが

ArrayList list1
ArrayList list2
の2つのArrayListがあるとして
list1[0] = 10;
とするとlist2[1]も10に変化するという
ものです。もちろんその度に値をコピー
するという方法はあるのですが、list1[0]と
list2[1]のアドレスを同じにするという方法
をC++では使っていました。

IntPtrなどをうまく使えば実現可能なのでしょうか。
IntPtrの使い方がいまいち理解できていません。
>>722
同じインスタンスへの参照を入れておくとか。
値型だとダメだと思うのでクラスで。
ArrayList list2 = list1とかじゃダメなの?
Visual Studio .NET 2003 Final Beta ヽ(´ー`)ノ
http://msdn.microsoft.com/vstudio/productinfo/vstudio03/default.asp
VS 2003 って、ロードマップに出てる Everett とは別物?
あと、C# にテンプレートが追加されるのって Yukon で?
>>726
次(マイナー)  VS 2003 = Everett
その次  テンプレート追加 = for Yukon
そのまた次  for Longhorn
>>727
>次(マイナー)  VS 2003 = Everett
>その次  テンプレート追加 = for Yukon

http://www.zdnet.co.jp/news/0211/09/nebt_08.html
は誤報?
>>728
それは文章すっ飛ばしてるから。
原文 http://zdnet.com.com/2100-1104-965046.html

それから

http://www.gotdotnet.com/team/csharp/learn/Future/default.aspx
> Anders Hejlsberg unveiled several potential language features
> for the next major release of Visual C# .NET.

だから次のメジャーリリース(for Yukon)で合ってると思うけど。
>>727-729
おまいら、VS .NETとSQL ServerとOSのコードネームごっちゃにして話すすめるなよ(w
>>730
オレは混乱しないように↓にならってforを付けたつもりなんだが。
http://msdn.microsoft.com/vstudio/productinfo/roadmap.asp
732728:02/11/19 18:22
>>729 すまん。原文読んでなかった。
ZDでも「future release of its Visual C# tool.」で
「include four new features」って言ってるね。
733デフォルトの名無しさん:02/11/20 00:50
>723
そうですねぇラッパークラスでも作って
やるしかなさそうです。
どーもC#ではポインタも一定ではないようなので
このあたりは難しいところです。
Delphiやってた時にはラッパークラスで独自配列
を作ってやっていましたが、ちょっとメモリが
もったいないですよね。
class TInt
{
public int Value;
}
とか作ってからobject型にしてArrayListに格納する
という事ですが、この手段を使ってもC#の場合には
最終的には値をコピーしてしまうのでしょうね(汗
Delphiではobject=ポインタ的な作りだったので楽
だったのですがね。
Delphiはともかく
やはりこういうポインタの使いまわしするアプリ
にはC++が楽ですね。
>>733
つうか、無意味にポインタを使いたがるのが間違いだと思う。
深く読まずにカキコ
boxing/unboxingってそのためにあるんじゃなかったっけ?
(;´д`)/<ハイ!先生!

C#でローカルユーザの追加をしたいんですけど
どうやればいいんですか?

NET USER "ユーザ名" /ADD

↑これと同じ事をC#でできませんか?
なにとぞ教えて下せぇ。
C#からまんま同じコマンドを実行すれば?
>>736
たぶんWMIでも可。
739デフォルトの名無しさん:02/11/23 12:57
ageちゃうぞー
740デフォルトの名無しさん:02/11/23 13:07
Pythonのダウンロードしたのが開けなくて困ってます。
あぁ、なんて私は馬鹿なんだろう…。
心優しい方、誰か教えてください…。
3000円の本まで買ったのに…なんかその本古かったらしい…。
741デフォルトの名無しさん:02/11/23 13:09
コンピュータの専門用語が全くわからない人はどこからはじめたら言いのでしょう。
胎児からか……。
742デフォルトの名無しさん:02/11/23 13:44
ListViewのcolumHeaderをクリックすることで、その列でソートしたいのですが
どうすればいいのですか?
>>741
「できる! Windows98」あたりから。
>>741
アビバのCMから。
Javaだと次のようにインスタンス化されなくても実行される
処理がstatic{}でかけたのですが、C#ではどうやるんでしょうか?

private static int hoge;
static {
hoge = 99;
}
>>745
static クラス名() {
}
747745:02/11/24 16:45
>>746
さんくすこ。



くすこだって。。。。ポッ...
>>746
そのstaticなコンストラクタだけを実行させることは出来る?
Javaだと、Class.forName("クラス名"); だけど。
>>748
Javaでも実行されないと思う
>>749
は?必死だな。(藁
>>750

>>748

スタティックイニシャライザって、VMの実装にもよると思うけど、
そのクラスが必要になったときに自動で動作するもんでしょ?
Class.forNameとかとは関係ないと思うのだが。

>748 の言ってるのはJDBCドライバとかの話かな?
http://pc3.2ch.net/test/read.cgi/tech/1037407642/542
classのstatic initializerを使ったトリックを自慢しに来たのかな?
754752:02/11/24 17:20
>>753

その辺っぽいねぇ。
あれって自身をシステム側のドライバデータベースに登録するって
処理じゃなかったっけ(DBは専門じゃないのでよく分からんです)?

だがそれにしたって、Class.forName("クラス名")を呼ぶたびに
スタティックイニシャライザが走ると思われても困る。
それじゃ全然スタティックじゃないし。
i
756デフォルトの名無しさん:02/11/26 13:26

ブラウザコンポーネントを使うと、exeファイル以外
に次のようなdllファイルが生成されますが、これは
再配布してしまっていいものなのでしょうか?

AxInterop.SHDocVw.dll
Interop.SHDocVw.dll

また、こういった情報はどこに記載されているのでし
ょうか?MSDNを上記のファイル名で検索しても何も、
出てきませんでしたが。。

757デフォルトの名無しさん:02/11/27 16:31
定数の配列ってのはどうやって作れば?

public const int[] MAX_OBJECT = {1024}; // コンパイルエラー
758デフォルトの名無しさん:02/11/27 16:37
以前にOSのシャットダウン時にアプリケーションが終了せずに、
シャットダウン作業を中断させてしまう問題について質問した者です。
原因がわかりましたが対処法がわかりません。

原因はFormのClosingイベントハンドラでe.Cancel = true;として
フォームを閉じないようにしていた為でした。
OSのシャットダウン時にOSがフォームを勝手に閉じようとして、Closingイベントハンドラ
の上記の行でシャットダウン処理を全てキャンセルしてしまいます。
しかも、SessionEndingイベントが発生しないので対処のしようがない状態です。
よろしくお願いします。
759デフォルトの名無しさん:02/11/27 17:05
System.Windows.Forms.TabControlにTabPageを2つ作って、
1つ目のTabPage1にはコマンドボタンを一つ、
2つ目のTabPage2にはテキストボックスを一つ配置していて、
フォームの起動時にはコマンドボタンのあるTabPage1が表示されている状態で起動します。

コマンドボタンを押すと
this.textBox1.AppendText("abcde");
というコードが実行されて、TabPage2の方にあるテキストボックスに
"abcde"という文字が押した分だけ追加されていくという内容なのですが、
ボタンを押すと

System.ArgumentOutOfRangeException: インデックスおよび長さは文字列内の場所を参照しなければなりません。
パラメータ名 : length
at System.String.Substring(Int32 startIndex, Int32 length)
at System.Windows.Forms.TextBoxBase.set_SelectedText(String value)
at System.Windows.Forms.TextBoxBase.AppendText(String text)

とエラーが出てしまい、テキストボックスに文字列が追加されません。

ところが、コマンドボタンを押す前に一度でもTabPage2のほうに切り替えてから
もう一度TabPage1に戻ってコマンドボタンを押すと正常にエラーも出ずに
処理が行われます。

プログラムを起動するたびにTabPage2に切り替えるのでは大変なので
何か解決策はありませんか?
ご教授お願いします。
>>759
AppendTextの変わりに
this.textBox1.Text += "abcd";
とすればよろし。なんで例外でるのかしらんけどね。

余談だがApeendText変な時あるよ。一行長すぎると途中で切れて表示されなかったり。
まったくわけのわらん動きするときがある・・・
761ハマリ:02/11/27 19:37
System.Diagnostics.Processを使って、外部コマンドを呼び出してます。
コマンドプロンプトの画面が一瞬見えるのが凄く気に食わないのです。

WindowStyleはHiddenにしてあるにもかかわらず、しっかり表示されるのです。

例えば、ping.exeを呼び出すとします。
私がやりたいことは、『ping.exeを動かして、その出力だけを変数に格納する』
ということです。ところが、実際はpingを打っている間、黒い画面がフォーム
を覆うような感じで表示されてしまうのです・・・。

なにかご存知ないですか?
>761
Win32コンソールプログラムでもダメですか?
>>761
WindowStyleがNormalだと表示、Hiddenだと非表示にちゃんとなるよ。
pingは試してないが入出力の問題のような?
764ハマリ:02/11/28 01:22
コンソールプログラムでもだめです。

Process proc = new Process();
proc.StartInfo.FileName = program;
proc.StartInfo.Arguments = argument;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

proc.Start();
output = proc.StandardOutput.ReadLine();
proc.Close();

こんな処理をやってます。ヘルプ見ながらやってたらこういう手続きに
なったのですが、、やっぱり変ですか。
765ハマリ:02/11/28 01:29
具体的な症状は、
コンソールが前面に表示されて(フォーカスはアクティブになってる)
その間、メインのフォームのコントロールが描画されていない。
因みにスタイルを"Minimized"にすると、一瞬前面に表示されてから
タスクバーに引っ込む感じ。実に見栄え悪い状態です。

完全にバックグラウンドで処理させたいのですが。。
>>764
そのコードではないが自分のをちょっと改変してping.exeでやってみた。
確かに出るね。
でもCreateNoWindowをtrueと追加したら出なくなった。
試してみて。
767ハマリ(糸冬):02/11/28 06:59
>>766
>でもCreateNoWindowをtrueと追加したら出なくなった。
さすがです。見事にでなくなりました。
どうもありがとうございます。もっとよくヘルプ見るようにします。
質問でございます。
ListView があってアイテムがいくつか入っています。
この状態のとき,あるイベントによってアイテムのBackColorを変更したのですが,
ListView.Update() や ListView.Refresh() ではBackColorが変わりません。
(これらのメソッドはListView自体の更新をするだけで,アイテムには関与しないってことですよね?)

今は ListView.Itemsを空にしてもう一度追加しなおしているのですが時間がかかってしまいます。
うまい方法はないでしょうか。
Bitmapクラスに透過色を設定したいんだがうまくいかない。
単純に、
img.MakeTransparent(transparentColor)
とするだけでは駄目なのか?
>>768
>今は ListView.Itemsを空にしてもう一度追加しなおしているのですが時間がかかってしまいます。
それしかない。
>>770
そうですか。
がまんするしかなさそうですね。
ありがとうございました。
772デフォルトの名無しさん:02/11/29 10:50
コントロールのClickイベントで右クリックと左クリックを見分けるにはどうすればいいでしょうか?

右クリックするとコンテキストメニューが出るようにしてあるのですが,
クリック時に処理Aを行わせると,右クリックでコンテキストメニューが開く場合にも処理Aが行われて困っています。
773デフォルトの名無しさん:02/11/29 16:26
>>771
できませんか?
すくなくとも、Update(), Refresh(),
Hide() してから Show() のどれでもいけるような・・・。
おいらの詳細モードではできてるけど。
それとももっと別の話してるのかな・・・。(?_?)
XP Professional SP1
.NET Framework 1.0 SP2だけど・・・。
774768:02/11/29 19:35
すいません。解決しました。
同じ内容の異なるインスタンスに対してBackColorの変更を行っていました。

ListView a.Add(new ListViewItem("same"))
ListView b.Add(new ListViewItem("same"))

〜〜〜〜〜〜〜〜〜〜〜
item = a.find("same");
a.IndexOf(item).BackColor = Red;
b.IndexOf(item).BackColor = Red;

コードめちゃくちゃだけどイメージはこんな感じ。すまそ。
「わからないことを信じているから、苦しむのさ。迷信はだめだ。」
http://www.microsoft.com/japan/msdn/net/books/ProgADONET/chapter10.asp
776デフォルトの名無しさん:02/11/30 05:31
ASP.NETで、すでにある、WebControlsを継承してUserControlsってつくることできませんか?
777デフォルトの名無しさん:02/11/30 06:50
int x=0;
BinaryWriter bw;
bw.Write(x);

書きこみのこれを
BinaryReader br;
x=br.ReadInt32()

こうやって読みに、もしくは読みから書きに変換してくれるプログラムない?
いちいちリード/ライトで対応するコード書くの面倒くさくてさ。
778777 :02/11/30 07:36
1つ2つならまだいいんだけど20個ぐらいになってくるともうやりたくないってなる気持ちわかる?
779デフォルトの名無しさん:02/11/30 08:44
プリーズ>>772
>>779
なぜOnClick
781779:02/11/30 10:39
>>780
えっと,クリックされたときにOnClickが呼ばれるからなんですが・・・
右クリックと左クリックを区別したいときはMouseUp・MouseDown等を駆使するしかないのですか?
782779:02/11/30 10:40
>>780
あ,もしかして「何故OnDoubleClickじゃなくてOnClickでやるのか」という意味ですか?
だとしたらなんとなくです・・・すいません。
>>782
780じゃないから予想だが、
OnClickメソッドでなくClickイベントで処理せんのか?
という意味だろう。
で、何かのコントロールを継承してコントロール作成中かい?
784779:02/12/01 01:15
>>783
レスありがとうございます。

>OnClickメソッドでなくClickイベントで処理せんのか?
OnClickメソッドの継承とClickイベントにハンドラ追加するのとでは何か違いがあるんでしょうか?
どちらも EventArgs を受け取るようですが。

ListViewを継承したものなんですが,ダブルクリックではなくてクリックで実行したいと思ってやってみたのですが,
右クリックのときにも反応してしまうのです。
785783:02/12/01 02:30
>>784
いや、継承したクラスならOn〜をオーバーライドするのでいいよ。

>OnClickメソッドの継承とClickイベントにハンドラ追加するのとでは何か違いがあるんでしょうか?

継承したクラスでの記述ならClickイベントとして記述する必要はないよ。


・・・って、よくよく考えたら
780は唐突にOnClickと言ってるんだろう。そんなことそれまでにでてないような・・・
786779:02/12/01 17:05
結局ダブルクリックにすることにしました。
今サイズ変更可能なパネルを作ったのですが,OnMouseDownとかを使えば>>772もできそうです。
それは後でやるとして,質問なんですがOnKey*系のイベントがおかしい気がするのですが。
以下のコードを実行してもらえませんか?OnKeyDownが呼ばれないのですが。。。

using System;
using System.Windows.Forms;
public class Test : Panel {
  public Test() {
    Dock = DockStyle.Fill;
  }
  protected override void OnKeyDown(KeyEventArgs e) {
    Console.WriteLine(e);
    base.OnKeyDown(e);
  }
  protected override void OnMouseDown(MouseEventArgs e) {
    Console.WriteLine(e);
    base.OnMouseDown(e);
  }
  public static void Main() {
    Form f = new Form();
    f.Controls.Add(new Test());
    Application.Run(f);
  }
}
>>786
>OnKeyDownが呼ばれないのですが。。。
動作としてはそれで正しいじゃないだろうか。
例えばLabelなどでも同じ動作で、Panel、Label、PictureBoxは
ドキュメントのPublicなイベントを見るとそこにはKey〜系がない。
TextBoxにはPublicなイベントしてKey〜系あるし。

ただ、これを裏付ける解説のあるドキュメントを見つけられんのだけど。
788779:02/12/01 18:23
>>787
あ,ほんとですね。確かにPublicイベントにKey系がありませんでした。
ControlのKeyイベントにハンドラ追加したらいけるかなと思いましたがダメでした。

結局,Panel(やLabel,PictureBox等)ではKeyイベントを拾えない,ということになるのですか?
フォーカス持たないコントロールがKeyイベントをどうやって取得するのかと。
790779:02/12/01 20:01
>>789
がびーん!そういうことですか・・・。

AxWebBrowserをPanelに追加していて,Panelが一つの単位になってますので
Panelで色んな処理をしようと思ったのですがダメみたいですね。
どうもお騒がせしました。
791787:02/12/01 20:37
>>789
おれもフォーカス持たないからだろうと思ったんだけど、
CanFocusプロパティはTrue返すんだよ。
PanelはともかくPictureBoxなんかなら、WndProcをオーバーライドすれば
Key系も拾えるんではないかと予想。

でもま、FormのKeyPreview=Trueにしてそっちで処理するのがいいのかな。
ASP.NETで、ViewStateがらみのところで困ってます。

今作ってるのはTextBox1とCustomValidatorとButtonだけの
シンプルなページで、TextBoxに入れられた文字列が数字か
どうかを判定をして、数字でなければ OnServerValidate内で
args.IsValid = falseにして元のページに戻しています。

問題なのは、数字の場合も元のページに戻して、引き続き
入力させるようにしてるのですが、前回入力値が残っており、
これを消す方法が分かりません。

ページに戻る前に ViewStateを初期化する方法とか、何らかの
解決策があれば教えてください。おながいします。
793デフォルトの名無しさん:02/12/02 15:28
XmlTextReaderでXMLファイルを読み込む際に
空要素はどのように見分ければよいのでしょうか?
XmlTextReader.IsEmptyElementだと、
<hoge />は検知できても
<hoge></hoge>は検知できないようです。
良い方法があれば教えてください。
宜しくお願いします。
ASP.NETでExcelファイルを作成するプログラム作っています。
ファイル作成して内容書き込みまではできているんですが、
印刷の向きや倍率など設定する方法がわかりません。

いい方法あったら教えてください。
795あああああ:02/12/02 17:15
ダメだ!!!亜fdさふぁあじゃじゃ
再現性は低くて、たまにクラッシュするバグで悩んでます。
デバッグすると
『'System.NullReferenceException' のハンドルされて
いない例外が system.windows.forms.dll で発生しました。』
と出て、

[STAThread]
static void Main()
{
Application.Run(new Form1());
} ←★ココにマークが出る

こんなところにジャンプします。どこが悪いのか目星つけられないんですTT
>>795
VS.NETのステップ実行でデバッグしてるんだよね?
★印に飛ぶ直前に実行したコードを見るのがよいかと。
>>796
ステップ実行なら悩まないでしょ。
>>795 これでどう?

try
{
Application.Run(new Form1());
}
catch(NullReferenceException nrex)
{
Console.WriteLine(nrex.StackTrace);
Console.ReadLine(); //StackTraceを読み終えるまで停止させる
}
799あああああ:02/12/02 18:49
今たてこんじゃったので後でやって、報告します。
報告いらんか・・いやしておこう、サゲて。
800自己レス:02/12/02 19:24
>>792
Validation OK時にthis.Server.Transfer("元のページ.aspx", false);
とやるだけでOKでした。
素朴な疑問だけど、
C#でゲームプログラミング(DirectX)は速度的に向いてないかな?
やっぱ、C++,Cでやったほうがいいかな。
Java育ちなので、C++,Cはどうも開発効率的に非効率な気がして・・・。
処理的には、早いんだろうけど。
DirectX9βを触ってみたけど、nativeとまったく遜色なかったよ。
これからはC#やVB.NETでDirect3Dするのも普通になったりすると思う。
たとえばPostPetなんかはコレで作っても問題ないだろうね。
803801:02/12/03 03:06
バリバリな動きで綺麗なグラフィックの3Dゲームとかも、
C++やCでガリガリ書いたやつとC#で書いたものとを比べても、
パフォーマンス的にそんな劣らないのかな?
PCのクロックやビデオカードの違いの方が、影響が大きい罠。

あとはガベコレでつっかえないかどうか。これはある程度コードを
書いてみないと判らないな。
C#のガベコレってJavaより短い周期で動いてない?気のせいかしら?
ビデオドライバがやるテクスチャメモリのガベコレとか
プログラマが自分で組み込んだガベコレとかのほうが
時間かかってたりしてね〜
807LoserC#:02/12/03 08:47
C#で自前のフォームを作成し、そのフォームを新しく作ったウィンドウにも継承するにはどのようにすればよいのでしょうか?
public class Form2 : Namespace1.Form1
と記述してデザイナを表示しようとすると
”ドキュメントを読み込み中にエラーが発生しました。”
と出ます。
またDLLを作成してフォームを継承する方法もあるのですが、
DLLの作成の仕方が分かりません。
誰かご指導お願いします。
808795:02/12/03 16:35
えっと・・スレッドから、DataBridにbindしたDataTableを更新するのって
危険なのでしょうか。

スレッド生成しないでやったらへんなバグでなくなりました。
でもスレッドでやらないと、処理中に応答なくなるしなぁ。

因みに、オカシクなるときは、データグリッドの縦方向のスクロールバー
が2本表示される(鬱
>>808
定番の質問かな?
ちゃんとControl.Invoke()、Control.BeginInvoke()使ってる?
データを利用したいアプリケーションがDDEしかサポートしていません。
あらゆるところでNETはDDEのサポートはすでになしというのを見るのですが、
今からVB6でアプリケーションを書くつもりはさらさらありません。
C#でDDEを使うことは絶対に無理ですか?もしなんか方法があったら教えて。
age
>>811
DDEをラップするDLLをUnmanaged Codeで書いて、それをC#から呼ぶ。
>>813
thanks!
Unmanaged Code ということはC++とかでDLLを書くの?
そのラップ作業というのはDLLのメッセージの種類全部に対応させるとか、かなり大変な作業になるのかな?
DLLのメッセージの種類>DDEのメッセージの種類
DllImportって、必ずstaticじゃないといけないの?
817808:02/12/04 13:21
invokeでできました。しかしこれ、メインのフォームのコードでなら
this.invokeでできるけど、自分で定義したクラスのコード内から
invokeできませんよね・・
質問です。
MDIChildrenな子フォームにAxWebBrowserコントロールを追加しています。
ここで子フォームを Hide(), Show() させたいのですが、Show()した時に
AxWebBrowserコントロールがうまく機能せず真っ白になってしまいます。
以下にソースを載せますので、解決方法を教えてください。

819デフォルトの名無しさん:02/12/04 14:22
using System;
using System.Windows.Forms;
using AxSHDocVw;

public class Hoge : Form {
  private AxWebBrowser browser = new AxWebBrowser();
  private Form child = new Form();
  private bool show = true;
  public Hoge() {
    base.IsMdiContainer = true;

    this.child.MdiParent = this;
    this.child.Show();

    Button b = new Button();
    b.Dock = DockStyle.Right;
    b.Text = "表示切替";
    b.Click += new EventHandler(this.Toggle);
    base.Controls.Add(b);
  }
  protected override void OnLoad(EventArgs e) {
    this.browser.BeginInit();
    this.browser.Dock = DockStyle.Fill;
    this.child.Controls.Add(this.browser);
    this.browser.EndInit();
    this.browser.GoHome();
  }
820デフォルトの名無しさん:02/12/04 14:22
  public void Toggle(object sender, EventArgs e) {
    if (this.show) {
//     this.browser.Hide();
      this.child.Hide();
    } else {
      this.child.Show();
//       this.browser.Show();
//       this.browser.Refresh();
//       this.browser.Update();
    }
    this.show = !this.show;
  }
  public static void Main() {Application.Run(new Hoge());}
}
>>817
Controlを使うときにInvokeしないといけないわけで、
ControlにはInvokeあるんだから問題ないと思うが。
822デフォルトの名無しさん:02/12/05 13:45
ListViewはListView.ListViewItemCollectionとして
Itemが入っていると思われますが、
このコレクションの中から、入力されたキーワードの
前方一致で検索を行う良い方法はないでしょうか?
完全一致ならContainsメソッドで出来るのですが・・・
一行づつ取り出して調べるしかないのでしょうか?
823817:02/12/05 17:47
>>821
.....自分でも低レベルなのはわかってるんです。はい。頑張ります(><

ええとですね、自作のクラスCalc.csでは計算だけをして、クラス内で
Windows.Formのメンバは使わないとします。このとき、Calcクラスで
計算した結果を逐一メインのフォーム(Form1とします)のテキストボックスに表示
するような場合、Calcクラスの中からはForm1のinvokeメソッドを呼べませんよね?

普通、こういうときはどうするんでしょうか。
やはり、new Calc(this)とかやって、派生するクラスにいちいちForm1の参照
を渡すものなんですか?
引数に、クラスの機能と直接関係ないものを渡すのがどうも。。。
824デフォルトの名無しさん:02/12/05 18:02
> 普通、こういうときはどうするんでしょうか。
> やはり、new Calc(this)とかやって、派生するクラスにいちいちForm1の参照
> を渡すものなんですか?
> 引数に、クラスの機能と直接関係ないものを渡すのがどうも。。。

フォーム側で
Calc c = new Calc()
int a = c.CalcMethod(); // 計算させて結果をもらう

こんな感じで計算した値をもらっちゃいけない理由があるのね?
つか、話がだんだん見えなくなってきた…。
>>823
計算の結果が出たらイベント発生させてその中でInvoke呼ぶのが普通。
826823:02/12/05 19:03
>>824
>Calc c = new Calc()
>int a = c.CalcMethod(); // 計算させて結果をもらう
>こんな感じで計算した値をもらっちゃいけない理由があるのね?

本当はそれでもいいんです (汗
ただの変なコダワリの類ですが、ワーカースレッドを生成して、それにある処理
を任せたら、計算・経過報告のコードもワーカー側にまとめたいなと
思っていたのです(フォーム側で結果を受け取って表示ではなく)。
フォームのコード量を増やしたくないというのもあります。

>>825
なるほど。そういう手続きを踏むのが普通ということが判れば十分です。
GUIのプログラム書くのが始めてなもので、なんと煩雑な!と思いました
が、そういうものだと理解するようにします。

827821:02/12/06 01:03
>>823
というか、書いていることが矛盾している。

>ええとですね、自作のクラスCalc.csでは計算だけをして、クラス内で
>Windows.Formのメンバは使わないとします。

System.Windows.Forms名前空間のクラスを使わないのだから、
そのCalc.cs内ではInvokeを使うことはない。

>このとき、Calcクラスで
>計算した結果を逐一メインのフォーム(Form1とします)のテキストボックスに表示
>するような場合、Calcクラスの中からはForm1のinvokeメソッドを呼べませんよね?

・テキストボックスに計算結果を表示したい。
・Calc.csからはコントロールを使わない。
つまり、論理的に考えて、
テキストボックス(またはテキストボックスを使用しているクラス)側
からCalc.csのクラスを利用するわけだから、そのクラスでInvokeを発行すればよい。

もう一度言う。817よ、言っていることが矛盾している。
828デフォルトの名無しさん:02/12/06 09:08
どなたか >>818-820 プリーズ・・・。
829デフォルトの名無しさん:02/12/06 09:42
>>818-820 の妥協案として,Show&Hideをやらずに
子フォームのLocation.Xを+10000&-10000する方法を思いつきました。

これで解決かと思いきや,+10000等をした時にスクロールバーが反応してしまって困っています。
そこでFormの水平スクロールバーを表示しないようにしたいのですが,
class MainForm : Form {
  public MainForm() : base() {
    base.HScroll = false;
  }
}
としたのですが,何故か水平スクロールバーが消えません。
どないすればよかとですか?
830デフォルトの名無しさん:02/12/06 10:55
xyzzyで*csharp-indent-tabs-mode*をtに出来ないんだけど、
なんでだろう?
(setq *csharp-indent-tabs-mode* t)
と.xyzzyに書いて、*.csという拡張子を持つファイルを開くと、
「名前が衝突するためexportできません。editor::*csharp-indent-tags-mode*」
と表示されて悲しい。分かる人いません?
831デフォルトの名無しさん:02/12/06 11:03
ListView で次の様になります。(私の環境だけ?)
(1) Windowsフォームに System.Windows.Forms.ListView を追加します。
(2) ListView にアイテムをたくさん(1000個ほど)入れます。
(3) Release コンパイルし、Windows98 パソコンで実行します。
(4) ListViewでスクロールを繰り返します。
(5) GDIリソースを使い果たしてしまいます。
なぜでしょう?わかる人いませんか?
832デフォルトの名無しさん:02/12/06 11:10
>>830
xyzzyスレで聞きなさいよ
>>829
まずブラウザコントロールだけを非表示にした後、少し遅らせてMDIチャイルドを非表示にして、戻すときは逆にMDIチャイルドを復元した後、少し遅らせてブラウザを復活させるというのでなんとかならないでしょうか?
>>833
あ,タイミングの問題なのですか。
今から学校なんで帰ってきてから試してみます。
ありがとうございます。
>>833
んー。3秒スリープさせてやってみましたが,やっぱりダメでした。
>>819-820 のソースで
  public void Toggle(object sender, EventArgs e) {
    if (this.show) {
      this.browser.Hide();
      System.Threading.Thread.Sleep(3000);
      this.child.Hide();
    } else {
      this.child.Show();
      System.Threading.Thread.Sleep(3000);
      this.browser.Show();
    }
    this.show = !this.show;
  }
としてみたところ

した。
System.InvalidOperationException: 'AxWebBrowser' コントロールのウィンドウ ハンドルを取得できません。ウィンドウなしの ActiveX コントロールはサポートされていません。
at System.Windows.Forms.AxHost.EnsureWindowPresent()
at System.Windows.Forms.AxHost.MakeVisibleWithShow()
at System.Windows.Forms.AxHost.SetVisibleCore(Boolean value)
at System.Windows.Forms.Control.set_Visible(Boolean value)
at System.Windows.Forms.Control.Show()
at Hoge.Toggle(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
でした。
837デフォルトの名無しさん:02/12/06 20:41
AxWebBrowserのShow&Hideは普通にできるのですが
その親コントロール(今回はForm)がShow&Hideされると
AxWebBrowserは対応できないようです。
解決策を知ってる方がいらっしゃれば宜しくお願いします。

ついでと言ってはなんですが, >>829 ができればもうそっちでやるつもりなので
あわせて宜しくお願いします。
>>837
↓の現象が起きてるのかな?どうも1.1でも再現するみたいね。

http://www.dotnet247.com/247reference/msgs/9/45348.aspx
確かに、一度Hide()してからShow()したとき、タスクバーをよく見てみると
子ウィンドウの分バーが1個増えてるね。
>>839
その子ウィンドウを最大化すると・・・
841840:02/12/07 02:41
あれ?>>819-820さんのソースでは問題ないや。
こっちではひどいことになってる。(藁
とりあえずソース載せとこ。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&res=57&fi=no
842ご教授くださいませ:02/12/07 03:17
C#でグローバルフックってできるんでしょうか?
>>842
.NET Frameworkではグローバルフックはできない。
http://support.microsoft.com/default.aspx?scid=kb;en-us;318804
844ご教授くださいませ:02/12/07 09:18
Σ(゚д゚lll)ガーン
845デフォルトの名無しさん:02/12/07 10:24
みなさんありがとうございます。
>>838
ほんとですね。
but the browser window is permanently attached to the upper left corner of my desktop
ってどういうことなんでしょう?左上コーナーとは?
>>819-820 のソースでは何もでないのですが。
# このソース実行してみたかったんですが System.Resources.MissingManifestResourceException が出てしまいました
# 勉強不足ですね。


>>839,>>841

これは>>838の現象ですか?
>>819-820 ではタスクバーには増えていないようです。

うーん。やはり>>829しかなさそうな悪寒・・・。
>>845
あ,すいません。訂正です。

>but the browser window is permanently attached to the upper left corner of my desktop
>ってどういうことなんでしょう?左上コーナーとは?

>>841さんのコードで分かりました。
847卑怯者:02/12/07 11:31
private void menuHide_Click(object sender, System.EventArgs e)
{
  if(this.MdiChildren.Length > 0)
  {
    Form activeForm = this.ActiveMdiChild;
    visibleManager.Push(activeForm);
    this.ActiveMdiChild.Region = new Region(new GraphicsPath());
  }
}

private void menuShow_Click(object sender, System.EventArgs e)
{
  if(visibleManager.Count > 0)
  {
    Form activatingForm = (Form)visibleManager.Pop();
    if(activatingForm != null)
    {
      activatingForm.Region = null;
    }
  }
}
>>847
うおおおおおおおおおおおおおおおおお!できてる!
ありがとうございます!

Formを保存しておいて消し去るんですか。
全然思いつきませんでした。
# というかRegionプロパティなるものを初めて見ました。
849デフォルトの名無しさん:02/12/07 17:15
DLL内の関数をインポートする場合、DllImportAttributeで呼び出し規約が指定できるんですが、
インポートしない場合に呼び出し規約を指定する方法はありますでしょうか?

cdecl規約のコールバックの作り方がわからなくて悩んでいます。
850デフォルトの名無しさん:02/12/07 17:25
場違いだったらごめんなさい・・
FFFTPで数日前から画像のみアップできなくて困ってます!
解決策を教えていただけませんか?
>>850
謝れば何をやってもいいのか?
反省だけならサルでもできる。
お前はサル以下だな。
>>851
アホか。本当に反省してると思うのか? あれはタダの芸だ。サルには反省などできん。
で、>>852>>850>>851 どっちがよりあほだと思う?
851
>>854
なんだ、本人か。(w
攻撃するメソッドと攻撃を受けるメソッドを作ってそれぞれイベントを発生させようとしてるんだけど。
ガイドラインに素直に従えば

・攻撃
Attack = 攻撃するメソッド
 Attacking = 攻撃しますよイベント
 OnAttack = 攻撃しましたメソッド
  Attacked = 攻撃しましたイベント

・攻撃される
BeAttacked = (以下同様)
 BeingAttacked
 OnBeAttacked
  WasAttacked

ってーなんか OnBeAttacked とか WasAttacked とかめちゃくちゃいやなんでどうしようか迷ってそうだ、ちょうどいいイベントがあるじゃないかとコントロールがクリックされた時のイベント見てみるまでもなく Click とかなってるし。
どうやったら「クリックされた」が Click の一語に集約されるのか甚だ疑問ってゆーかじゃぁすでに Attack を使ってしまってる俺はどうすればいいのよ。

で .NET Framework の命名ガイドラインがどこかおかしいことはこの際置いといて俺のためのナイスなメソッド名ってないかな・・?
Attack
BeginAttack
OnAttack
EndAttack
寺利編むを思い出すな
ちょっとだけワラタ。「SUMMARY OF RESULTS」のとこだけ読んで十分。

http://www.objectwatch.com/issue_42.htm
◆ネーミング倶楽部◆
http://pc3.2ch.net/test/read.cgi/tech/1035362308/

#まあでも.NET命名は特殊だからC#スレで聞くほうがいいのかな。
861デフォルトの名無しさん:02/12/08 03:44
試行錯誤でFTPクライアントを作っています。
バイナリファイルのダウンロードで行き詰まっています。
BinaryReaderから読み込む際にストリームの最後の判別が出来ず
現在以下の様な例外を使った方法で動かしています。
これをもっと上品に行うことは出来ないでしょうか?

System.Net.Sockets.NetworkStream NS = this.GetNetworkStream();
System.IO.BinaryReader BR = new System.IO.BinaryReader(NS);
System.IO.FileStream FS = new System.IO.FileStream(LocalFile,FileMode.Create);
System.IO.BinaryWriter BW = new System.IO.BinaryWriter(FS);
byte b;
while (true) {
  try {
    b = BR.ReadByte();
    BW.Write(b);
  } catch {
    break;
  }
}
BW.Close();
FS.Close();
BR.Close();
>>861
おいおい。

EndOfStreamException ストリームの末尾に到達しました。

って書いてあろうが。

ms-help://MS.NETFrameworkSDK.JA/cpref/html/frlrfSystemIOBinaryReaderClassReadByteTopic.htm
>>861
あと1バイトずつだと多分遅いぞ。
864861:02/12/08 05:45
>>861、863
レスありがとうございます。
プログラムを始めたばかりで詳しくないのですが例外を使って
判別するのは悪い事では無いのでしょうか?
また、何バイトずつ読むのが適当でしょうか?
>>856
>・攻撃される
> BeAttacked = (以下同様)
攻撃されるメソッドって・・・

> BeingAttacked
BeUnderAttack

> OnBeAttacked
OnBeUnderAttack

>  WasAttacked
・・・
866デフォルトの名無しさん:02/12/08 09:56
>864
> >>861、863
> レスありがとうございます。
> プログラムを始めたばかりで詳しくないのですが例外を使って
> 判別するのは悪い事では無いのでしょうか?
> また、何バイトずつ読むのが適当でしょうか?

上の例じゃ読み込み終了で終わったのか、ほかの例外で終了したのかわからんべ。

素直にStream.Read(.....)でバッファに読み込んでいったら?
戻り値がゼロになったところで終了判定。
バッファサイズは俺もどのくらいが適当なのか判らないけれど
ネットワークが遅けりゃ1〜2KB、速けりゃ32KBぐらいの感じで考えてるが…

867デフォルトの名無しさん:02/12/08 10:18
で、cdecl規約のコールバックの作り方がわかる奴はやっぱり誰もいないの?
内容不明瞭
869 :02/12/08 11:26
WIN-XPホームエデションではVS.NET、特に.NET ASPの開発は不可と聞いた
覚えが。本当ですか。
ホームエディチョンではIISが動かないと思った。
よってIISのアドオンであるところのASP.NETは動かない。
VS.NET自体は問題なく動いてるよ。
>>867
(何こいつ・・・)
873861:02/12/08 15:00
>>866
ありがとうございました。上手く行きました。

System.Net.Sockets.NetworkStream NS = this.GetNetworkStream();
System.IO.BinaryReader BR = new System.IO.BinaryReader(NS);
System.IO.FileStream FS = new System.IO.FileStream(LocalFile,FileMode.Create);
System.IO.BinaryWriter BW = new System.IO.BinaryWriter(FS);
int int1 = 0;
byte[] B = new byte[4096];
while ((int1 = BR.Read(B,0,4096)) > 0) {
  BW.Write(B,0,int1);
}
BW.Close();
FS.Close();
BR.Close();
>>871
きっとそうやって「俺わかるよ。ほらこうするんでしょ。」ってコード書いてくれる奴を
釣ろうとしてるんでしょ。
857,860,865
レスありがたおうよ。
ガイドラインによればBeginとEndは使っちゃダメなのよ。
これらは一般に非同期実行のときに使用されるから混乱を避けるためにイベントでは使用するべからずなりよ。

受け身のメソッドってのは変な感じかもしれないけどポリモーフィズムを考えれば必須だよね。
UnderAttack参考にさせてもらうよ。
>>875
>受け身のメソッドってのは変な感じかもしれないけどポリモーフィズムを考えれば必須だよね
どう必須なの?
「攻撃される」はイベントであって、その中で発行する「攻撃される」側のメソッドは
「守備をする」とかではないの?

877デフォルトの名無しさん:02/12/08 17:21
>>874
いいや、いもしないのに釣れるわけねーじゃん。
878デフォルトの名無しさん:02/12/08 17:46
>>872
だからそれはDllImportが使える場合ね。
コールバックはデリゲートだから、DllImportは使えないんだよ。

まあ、わかんなくてもしょうがないよ。
俺でも一日悩んだんだから、君たちには難しすぎたね(藁
とりあえず解決したから、もう答えてくれなくても全然かまわないよ。

もし、どうやるのかどうしても知りたい奴がいるなら、
ちゃんと礼儀正しく頼めば、気が向いたら教えてやるよ。
まあ、お前らのレベルじゃ必要ないからいないだろうけどね(藁
DllImportした関数に文字列(byte[] -> char*)渡して、
結果を先に渡した文字列の部分を指すポインタ(char* -> IntPtr)入りの
構造体で返してもらってるんだけど、この元の文字列(byte[])が
予期しないタイミングでガベコレに巻き込まれて
アドレスを移動されてしまう。

すると、返してもらった構造体内のIntPtrは、アドレス移動に
追随出来ず、無効な領域を指してしまうんだけど、これを防ぐ方法有る?
>>877
「釣ろうとしてる」んでしょ。日本語大丈夫?
881デフォルトの名無しさん:02/12/08 18:19
>>879
pinすればいいじゃん。

>>880
釣れもしないものを釣ろうとするのはお前くらいだよ。
>>881
俺じゃねーってw
883デフォルトの名無しさん:02/12/08 18:25
ご隠居が釣り竿の手入れをしようと、室内で竿を取り出した。
それを見ていた与作は、「何を釣ろうとしてるんですか?」と尋ねた。
するとご隠居は「部屋の中で魚が釣れるわけないだろう。まったくお前は粗忽だねぇ」と答えた。
すると与作は「釣れるかどうか聞いたんじゃなくて何を釣ろうとしてるか聞いたんですよ。日本語大丈夫?」
と尋ねた。

かくして与作はいつも通りみなの笑い者になりましたとさ。
お後がよろしいようで。
>>883
必死だなw
885デフォルトの名無しさん:02/12/08 18:30
与作をバカにするのくらい、必死にならなくても余裕だが何か?
>>883
えーっと。釣り場(2ちゃんねる)で釣りしているのと
釣り場じゃないところ(室内)で釣りしているのとは話が
違うと言いたかったんですか? それとも>>883自体が釣り餌ですか?
もうそろそろ悔しくて「釣れた」と捨て台詞を吐くころだろう。
888デフォルトの名無しさん:02/12/08 18:40
いやいや、まともなコード書ける奴は釣れないって。
釣れるのは与作ばかりだから、釣れたなんて台詞はとてもとても。
>>888

良く分からんが888ゲットおめ。
>>849=>>867 が基地外だった。で終了放置で良いですか?
891879:02/12/08 18:56
>>881
pinって何?
>>891
pinningでヘルプ引いてみ
C#ならfixedだね
>>890
お前みたいな粘着厨房は放置ということで終了
>>894
はあ?俺一回しか書いてないんだけど。。。まあいっか。
>>876
能動か受動かって単に文法上の問題だから。
たとえば怪我をするって日本語だと能動だけど英語にすれば be injured とかだし。

どっちにしてもC#は他のクラスのイベントを呼び出すことが出来ないからそのイベントを起動するためのメソッドが必要なんだよね。
攻撃されたときの WasAttacked イベント内で防御とかいろいろするにしてもまずそのイベントを発行するための BeAttacked メソッドが必要って感じかな。
>869
XP HOMEは
VS.NETでのASP.NET開発→×
WebMatrixでのASP.NET開発→○
898デフォルトの名無しさん:02/12/08 22:44
>873

なぜNSからFSに直に書き込まぬ?
899デフォルトの名無しさん:02/12/09 00:08
「cdecl規約のコールバック」って意味がよくわからんけど、dumpbin /exportな
関数を作る方法なら過去スレにガイシュツ。当時はスゲーのがいたもんだ。
900デフォルトの名無しさん:02/12/09 11:09
>>899
すごくねーよ。
そんなの初歩の初歩だ。DllImportAttributeを使えばいいだけだろうが。
コールバックの場合はデリゲートを使って作らなくちゃいけないから、
DllImportAttributeが使えねーんだよ。

ちなみに、どこが意味わからねーんだ?
cdeclもコールバックもデリゲートも常識的な用語だろ。
901879:02/12/09 19:41
fixedキーワードだけじゃ、抑え込める範囲が狭すぎたけど、
GCHandleのpinningと組合わせて解決出来たよ。
ありがとヽ(´ー`)ノ
902デフォルトの名無しさん:02/12/09 23:18
>>900
おいおい、過去ログみたのか?みてからいえよクソボケ。
DllImportなんてどこにも書いてねーよ。おめーdumpbin /exportの意味がわかんねーんだろ。
903デフォルトの名無しさん:02/12/09 23:22
ちなみに馬鹿がぼけたレス続けるとむかつくから教えてやるが、Part4のログだ。
見てから謝りに来い。
あるクラスのインスタンスを配列で確保したい場合に

private static CSrc[] src;
src=new CSrc[]{new CSrc(),new CSrc(),new CSrc(),new CSrc(),new CSrc()};

と書いたのですが、この方法は見た目、うざいです。
どなたか、もっとすっきりした記述方法はご存知ないでしょうか
foreach(i in src) { i = new CSrc() } ってのはどお?
サンクスです。
自己レスですが、
src=new CSrc[10];
for(int i=0;i<src.Length;i++)
{
src[i]=new CSrc();
}
で解決してました。
でも、上様の処方がより簡潔です。
お知恵お借りいたします。

どうもでした
あれ,foreach文で
foreach(CSrc i in src)
って、やると、iって読み取り専用?
従って、割り当て不可?
ちょっと渡来しましたが、できませんでした。
いかがでしょうか。
>>907
905のようなあんぽんたんが発生しないように読取専用にしてあります。
たとえ読取専用にしなくても代入は無意味でしょ。

ところで
ms-help://MS.MSDNVS.1041/cpgenref/html/cpconstaticfieldnamingguidelines.htm
このへんによると静的フィールドには名詞の省略形を使用し、
なおかつハンガリー記法で書くべきなんだそうだ。

すなはち
↓ハンガリアン
StrAppName
  ↑省略

おまいら実践してますか?
俺はしてませんが。
する訳が無い。
ハンガリアソなんか糞食らえだ。
>> 849
http://www.microsoft.com/japan/msdn/library/ja/cpguide/html/cpconusingcallbackfunctions.asp?frame=true
検索したらすぐ見つかったけどこういう事じゃないのかな?
878で言ってるのはどういう事だろう?DllImport使わないわけでもないような。
あと、Part4の528,529はコールバックとは全然関係無さそうだけど…。
>>908
これでチェックすべし。
http://gotdotnet.com/team/libraries/
ちょっと遅ネタだけど、期待しましょ。ヽ(´ー`)ノ
http://discuss.develop.com/archives/wa.exe?A2=ind0212a&L=dotnet-web&T=0&F=&S=&P=6733
WSTKの正式版が出たみたいね。1.1で標準装備になるのかな?

Web Services Enhancements 1.0 for Microsoft .NET
http://msdn.microsoft.com/downloads/sample.asp?url=/msdn-files/027/002/108/msdncompositedoc.xml
914913:02/12/10 08:17
WSTKじゃなくてWSDKだった・・・。スマソ
915905:02/12/10 09:19
あんぽんたんですあっはっは。
普段使ってないのに書き込むもんじゃないなぁ
916904:02/12/10 12:23
あんぱんまんです
917デフォルトの名無しさん:02/12/10 13:34
>>902
おいおい、そこに書いてあるようなことなら、DllImportでできるっつってんだよ。

>>910
おいおい、呼び出し規約変えてねーじゃんかよ。

まったくバカばっか。
>>917
うーん、君は何がしたいのかほんとにワカラナイ。Cでいいから例を書いてくれ。
それみて考える。
919デフォルトの名無しさん:02/12/10 14:03
>>917
>>902に書いてあることはDllImportではゼッタイに不可能ですが何か?
できるもんなら見せてみろ。
920910:02/12/10 14:36
DllImport無しでっていう事なのね。ネットワーク上に配置してあるDLLを
Reflectionで読み取ろうとしたとか?

しかし放置されたのをきちんと我慢出来ない人なんだね。
921ななし:02/12/10 16:45
教えてって言ったのに、誰も教えてくれなかったニダ

謝罪と賠償を(ry
セクースさせてって言ったのに、誰もさせてくれなかったニダ

謝罪と賠償を(ry
>>849はこういうことかな?違うかもしれんが
cdecl delegate
http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=cdecl+delegate&lr=
.NET 247 Newsgroup - Callback function using C calling convention.
http://www.dotnet247.com/247reference/msgs/17/87210.aspx
DllImportした関数へのコールバック関数の渡し方と制約について
コールバック関数の実装
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconusingcallbackfunctions.asp
DllImport 属性の使用
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/vcwlkSysimportAttributeTutorial.asp
managed C++ではどうなるのかちょっとわからん
The Code Project - Implementing Callback functions using IJW (avoiding DllImport) - Managed C++
http://www.codeproject.com/managedcpp/cbwijw.asp
プラットフォーム呼び出しサービス
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vcmxspec/html/vcmg_PlatformInvocationServices.asp

人を馬鹿にする前にNicolas Faucher氏くらいの問題説明を求む。
924デフォルトの名無しさん:02/12/11 12:22
全然違うよ、バカ(藁
レベルが低いのはしょうがないが、とりあえず理解できないなら黙ってろよ。
人を見下す前に、自分の言葉で説明して理解されようとか思わないのかね。
>>924
バカ(藁
早くCで例を書いてくれよ。バカ(藁
cdeclとか言ってんのにCで例が書けないわけないよな?バカ(藁
927デフォルトの名無しさん:02/12/11 13:43
Del厨以来久々に大型新人が登場したな(w
歳末助け合いの季節だ。誰か924の昇天を助けてやってくれ(w
>>878
>コールバックはデリゲートだから、DllImportは使えないんだよ。

って書き方するから皆混乱してるんじゃないか?
DllImportAttributeが使えないって話だったよな。
> とりあえず理解できないなら黙ってろよ。



うん。
っていうか、878で「解決した」って書いてあるね。

でもその同じ878で「コールバックはデリゲート」という意味不明なことが書いてあるね。

コールバックはデリゲート。
「デリゲートはコールバックとして利用できる」ではなく、
「コールバックはデリゲート」。




コールバックはデリゲートじゃないよ。お馬鹿さん。プ
>>930
俺は理解しました。
コールバックはデリゲート、正しいです。
一人騒いでるやつがやりたいことは、DllImportすることがメインなのではなく、
その DllImport した関数に対して、cdecl のコールバック関数を渡してやりたいのです。
コールバックに渡すのはデリゲートなので DllImport は使えません。

Windows API で使われてるコールバックは stdcall で、
.NET のコールバックは自動的にこれの関数ポインタに変換される。
ところが、今使おうとしてる関数が要求しているコールバックは cdecl だ、さて困った。
と言うことじゃないでしょうか。

俺は C++ でアダプターを一本挟むことを提案します。
932931:02/12/11 15:31
.NET のコールバックは自動的にこれの...

.NET のデリゲートは自動的にこれの...

意味不明だ(;´Д`)
>>931
漏れもそうだと思った。でもそれのやり方なら>>923さんの.NET 247へのリンクで解説されている。
それをコイツは924で「全然違うよバカ」とのたまわった。

過去ログの参照も指摘されていたが、そこにもC#単独では無理だがILをいじれば可能とされている。
それをコイツは917で「DllImportでできるっつってんだよ」とのたまわった。

だから931さん、それは違うんだ、きっと。もっときっとすごいことなんだ。

それから、コールバックはデリゲート使わなくたって実現できるから、
「コールバックはデリゲート」は正しくない。
934284:02/12/11 23:02
2つのアプリケーションのインターフェイスとしてファイルを使っている。
両方とも頻繁にそのファイルにアクセスするのでファイルの読み書きの競合が発生する。
それで、その sr= File.OpenText(....);があるブロックにtry{}で囲み、 finally{}で後処理をしてエラーがでても中断しないようにしたつもりが、まだ同じエラーがでてくる。
もう理解不能なのでだれか説明してくれませんか?
935934:02/12/11 23:21
ちなみにエラーは別のプロセスがそのファイルを使用しています。とかいう趣旨のもの。
エラーを拾って構造的な処理をしたいのではなくて、ただそのエラーが出るのが分かっているので無視して処理を進めたいということです。
936デフォルトの名無しさん:02/12/11 23:23
現在、ListViewにデータを表示するアプリケーションを作成しています。
ListViewクラスはデータをListView内に保持するので、自作クラスにデータを持っていると
データの2重管理になってしまいます。
Model/Viewのような感じにしたいのですが、そういった考えは古いのでしょうか?
>>936
ListView以外にViewを持つ可能性があるなら、Model/Viewにして
データを二重持ちにしたほうがいいだろうねえ。

その可能性がないならListView派生クラスにボッコボッコ埋め込む。
>>935
try{}catch{}finally{}
catchしる。
939936:02/12/12 00:24
>>937
どうもです。
リストビューで使うデータは他の表示でも使うので、どうしようかと。。
2重にするとデータの入れ替えとか起きたときに整合性を保つのが大変っぽい。
やっぱリストビューを表示とデータ管理クラス両方の役にするのがいいっぽいかな。
>>939
他のViewがあるなら、迷わず二重持ちにするけどなあ・・・

その、他のViewが参照のみで、操作をしないのであれば、
ListViewがデータ管理役になっても大丈夫かな?
941934:02/12/12 00:33
>>938
特にしたい処理がなければfinallyだけで良いと思っていたんだけど。
空のcatchでやってみます。thanks
>>941
キャッチしないと例外が外に飛び出てっちゃうよ
943934:02/12/12 02:52
>>942
try-finally だけの構文もありと書いてあったので、一番一般化されたエラー処理はこれなのかなと思っていました。
それはなんのためにあるの?
>>943
漏れはそのtry-finallyは使わないけど
メソッド使用してる側でcatchすれば用が足りる時、使えるかもね
でも
try{}catch(Exception error){ throw error;}finally{}
ってしたほうがわかりやすいと漏れは思ってる。あくまで漏れの考えだけどね・・・
>>943
そいやbefore/Afterパターンってのにも使えるねtry-finallyは。
http://www.hyuki.com/dp/dpinfo.html#BeforeAfter
946デフォルトの名無しさん:02/12/12 04:45
>>939
迷わずModel/Viewにするのがいいんでは?
データは一元管理にしないといかんでしょ
そうしないと、いわれてるように更新、同期の管理など大変に.
ListViewだとどう実装するのかは知らないんですが、オーナードローになるのかな?
マスひとつひとつをセルとすると必要なセルの表示時にデータを見に行って表示って感じか
947名無しさん♯:02/12/12 07:48
948デフォルトの名無しさん:02/12/12 19:08
ほほう、C#でデリゲート以外のコールバックができるとな?
ここはC#のスレであって、C++のスレじゃないぞ。
ちなみに俺は解決した。
他にできる奴はいねーの?(藁
>>948
パターン名で言ったらなんだい?
>>948
俺できるよ。でもそんなひれくれた聞き方するやつになんか教えない(藁
>>950
嘘つくな。お前にできるわけねーだろ。
本当だと言い張るんならソース見せてみろ。
>>951
嫌。出来ないと思われても良いよ。見せるよりマシ。
>>952
はったりプ。
954デフォルトの名無しさん:02/12/12 23:43
>>948
ばかじゃねーの。いいかげんにしろ。
>>950
次スレ立てろヴォケ
>>955
わかりました。
957&diamonds;:02/12/13 00:56
>956
立ってるよ
958デフォルトの名無しさん:02/12/13 01:06
ほどよく荒れてるな(W
959950:02/12/13 01:09
>>957
俺が立てました。
960picty:02/12/13 03:25
C言語で一定周期(100ms以内)の信号を画面に表示させたいのですが、
どの関数を使ったらよいかわかりません。どなたか教えていただけませんか?
961デフォルトの名無しさん:02/12/13 04:18
>>960 いちおうこのスレはC#の質問なのでCの質問スレ捜して聞いてみたほうがいいよ。
それに質問も漠然としてるね。信号とはなんだろう。
C#、.Netで一定時間毎に何か処理させたいときはタイマーをフォームに貼り付けて、イベントハンドラを書くというのがやり方だけど。
unsafe コンテキストで
MyStruct s = new MyStruct( Hogehoge );
SomeNativeMethod( new IntPtr( &s ) );
// MyStruct preventOptimizing = s; // コメントはずすと正しく動くよ

ってな感じで、メソッドに渡すだけの構造体を使うと、
最適化で消滅して正しく動かなくなるんだよねぇ。
アドレス取ってるんだから最適化しても残さないといけないと思うんだけど。
だからpinしろって。
そういや、C#って、かなり積極的にガベコレしてるね。
965デフォルトの名無しさん:02/12/13 08:54
>>964 ソースは?どうしてそう思ったんだい?
デバッガでこまめにメモリ内容チェックしたから。
962はstructだからガベコレは無関係だぞ
968デフォルトの名無しさん:02/12/13 12:30
structもガベコレされることすら知らない967がいるスレ
structがガベコレ対象だと思い込んでいる968が煽るスレ



structはガベコレされません。
970 :02/12/13 14:09
>>962

これきついね。APIに渡すための構造体を wrap するクラスは全部 pin
するってこと。。。?
>>962
いや、それはstructの使い方が間違っているってことだろう。
アドレスをメソッドに渡したらアドレス(32ビット数値)が残っているだしょ。
IntPtrにキャストしてるんだから。

素直にヒープに取ればいいじゃん。ちなみにpinは関係ないよね。
972962:02/12/13 15:46
>>971
いえ、実は構造体は Win32 の RECT で、メソッドは DirectX の LockRect なんですけどね。
このメソッドはその場で RECT を参照するだけなのでスタックに取っても大丈夫なはずなんです。
ちなみに preventOptimizing への代入を、メソッドを呼ぶ前に持ってきても正しく動きました。
IL 見てないので正確ではないかもしれませんが、アドレス演算子以外の何らかの形で一度も参照されないと変数自体が削除されるみたいなんです。
>>972
うー、そうですか。DirectXは全然わからないので、IL見せてください。
ちなみにこんなコードで実験してみましたが、結果はちゃんと3が返りました。これじゃ実験になってないですか?

-- DLL(cl dll2.cpp /LD)
extern "C" __declspec(dllexport) int WINAPI SomeNativeMethod(CONST RECT* ptr) {
 RECT r;
 CopyMemory(&r, ptr, sizeof(RECT));
 return r.left + r.top;
}

-- Main(csc /unsafe /optimize+ /debug- Class1.cs)
class Class1 {
 struct MyStruct {
  internal int left;
  internal int top;
  internal int right;
  internal int bottom;
  internal MyStruct(int l, int t, int r, int b) {
   left = l;
   top = t;
   right = r;
   bottom = b;
  }
 }
 [System.Runtime.InteropServices.DllImport("C:\\dll2.dll", EntryPoint="_SomeNativeMethod@4")]
 unsafe static extern int SomeNativeMethod(IntPtr ptr);
つづき
 [STAThread]
 unsafe static void Main(string[] args) {
  MyStruct s = new MyStruct(1,2,3,4);
  int i =SomeNativeMethod( new IntPtr( &s ) );
  Console.WriteLine(i);
  // MyStruct preventOptimizing = s; // コメントはずすと正しく動くよ
 }
}
975962:02/12/13 20:35
まず、C#のソースコードです。

D3DLOCKED_RECT lockedRect = new D3DLOCKED_RECT();
RECT rect = Win32Methods.RectFromLTWH( 0, 0, size.Width, size.Height );
texture.GetSurfaceLevel( 0 ).LockRect( ref lockedRect, new IntPtr( &rect ), 0 );
//RECT preventOptimizing = rect;

/*
 size にはテクスチャのサイズが入っています。
 texture.GetSurfaceLevel( 0 ) で、テクスチャの最上位サーフェイスを取得して、
 それをロック、ロックされた領域の情報(アドレスとピッチ)を D3DLOCKED_RECT に受け取ります。
*/
976962:02/12/13 20:42
次に、正常に動く(preventOptimizing を使用している)コードの IL です。

// lockedRect
IL_020e: ldloca.s V_7 // ← lockedRect は V_7 に割り当てられる
IL_0210: initobj [Interop.DxVBLibA]DxVBLibA.D3DLOCKED_RECT

// rect = Win32Methods.RectFromLTWH(...)
IL_0216: ldc.i4.0
IL_0217: ldc.i4.0
IL_0218: ldloca.s V_0 // ← V_0 には size が入っている
IL_021a: call instance int32 [System.Drawing]System.Drawing.Size::get_Width()
IL_021f: ldloca.s V_0
IL_0221: call instance int32 [System.Drawing]System.Drawing.Size::get_Height()
IL_0226: call valuetype [Interop.DxVBLibA]DxVBLibA.RECT Win32Methods::RectFromLTWH(int32,
int32,
int32,
int32)
IL_022b: stloc.s V_8 // ← rect は V_8 に割り当てられる

977962:02/12/13 20:43
// texture.GetSururfaceLevel( 0 )
IL_022d: ldsfld class [Interop.DxVBLibA]DxVBLibA.Direct3DTexture8 Sprites.CartoonMeshRenderer::texture
IL_0232: ldc.i4.0
IL_0233: callvirt instance class [Interop.DxVBLibA]DxVBLibA.Direct3DSurface8 [Interop.DxVBLibA]DxVBLibA.Direct3DTexture8::GetSurfaceLevel(int32)

// LockRect
IL_0238: ldloca.s V_7 // ← V_7 の lockedRect と
IL_023a: ldloca.s V_8 // ← V_8 の rect を渡した IntPtr と
IL_023c: newobj instance void [mscorlib]System.IntPtr::.ctor(void*)
IL_0241: ldc.i4.0 // ← 定数の 0 を使って LockRect を呼び出す
IL_0242: callvirt instance void [Interop.DxVBLibA]DxVBLibA.Direct3DSurface8::LockRect(valuetype [Interop.DxVBLibA]DxVBLibA.D3DLOCKED_RECT&,
native int,
int32)


ちなみに最後の preventOptimizing への代入は見事に消滅していました。
が、rect は無事 LockRect に渡されているので正しく動きます。
978962:02/12/13 20:48
次に、preventOptimizing を使わずに、正しく動かないコードの IL です。
ほとんど同じですが。

// lockedRect
IL_020e: ldloca.s V_7
IL_0210: initobj [Interop.DxVBLibA]DxVBLibA.D3DLOCKED_RECT

// rect = Win32Methods.RectFromLTWH(...)
IL_0216: ldc.i4.0
IL_0217: ldc.i4.0
IL_0218: ldloca.s V_0
IL_021a: call instance int32 [System.Drawing]System.Drawing.Size::get_Width()
IL_021f: ldloca.s V_0
IL_0221: call instance int32 [System.Drawing]System.Drawing.Size::get_Height()
IL_0226: call valuetype [Interop.DxVBLibA]DxVBLibA.RECT Win32Methods::RectFromLTWH(int32,
int32,
int32,
int32)
IL_022b: pop // ←なぜか pop してしまう。 RECT は V_8 に割り当てられず綺麗さっぱり消滅します。
979962:02/12/13 20:51
// texture.GetSururfaceLevel( 0 )
IL_022c: ldsfld class [Interop.DxVBLibA]DxVBLibA.Direct3DTexture8 Sprites.CartoonMeshRenderer::texture
IL_0231: ldc.i4.0
IL_0232: callvirt instance class [Interop.DxVBLibA]DxVBLibA.Direct3DSurface8 [Interop.DxVBLibA]DxVBLibA.Direct3DTexture8::GetSurfaceLevel(int32)

// LockRect
IL_0237: ldloca.s V_7
IL_0239: ldloca.s V_0 // ← なぜか size を渡す。
IL_023b: newobj instance void [mscorlib]System.IntPtr::.ctor(void*)
IL_0240: ldc.i4.0
IL_0241: callvirt instance void [Interop.DxVBLibA]DxVBLibA.Direct3DSurface8::LockRect(valuetype [Interop.DxVBLibA]DxVBLibA.D3DLOCKED_RECT&,
native int,
int32)


と言う感じで、rect が無くなって、指定してもいない size が渡されていました。
rect が無くなるのは最適化の影響ということで仕様としてもいいのですが、
その副作用で size が渡されるのは明らかにバグではないかと思うのですが。
# 下手するとセキュリティホールになり兼ねない気が...

ちなみに、この部分以外にも、構造体のアドレスを渡すところではだいたい再現してました。
うーん、Interop.DxVBLibA.dllも使って975のコードをコンパイルしてみたものの、
再現しませんでした。唯一書けなかったのはWin32Methods.RectFromLTWHなんですが、
これ何ですか?ILとしてもこの部分(の次)で妙なPOPが起きているようですが。。。
とりあえず自分でこんなのを作ったのですが、これを使って、無駄な代入をコメントアウトしても、
こちらでは正しいILのほうが生成されています。

class Win32Methods {
 internal static RECT RectFromLTWH(int l, int t, int w, int h) {
  RECT rect; rect.left = l;
  rect.top = t; rect.right =w; rect.bottom = h;
  return rect;
 }
}
981962:02/12/14 07:36
とりあえず再現する最小限のコードを乗っけます。(行数の関係でかなり押し込みましたが)
問答無用で最初のローカル変数が表示されるようです。
どうやら結構複雑な問題のようで、アドレスを取るだけでは問題は発生せず、
それより前に out パラメータを使ったメソッドを呼び出していると起こるようです。
それが必須条件なのかどうかはわかりませんが。

using System;
using System.Runtime.InteropServices;
public class Class1{
[STAThread] static void Main(string[] args){
int valueToShow = 1024; // なぜかこの値が表示される、数字は何でも良い
int preventOptimizing = valueToShow; // 最適化で消滅するのを防ぐ
// ↑この2行は無くてもかまわない、無い場合は
// ↓ の dummy が表示されるだけ、とにかく最初のローカル変数が表示される。
object dummy; // 型は object である必要はまったく無い、値型でも参照型でも
Dummy( out dummy ); // かまわないが、とにかく out パラメータで渡す。
unsafe{
int valueWantToShow = 1; // 表示されない
// int preventOptimizing2 = valueWantToShow; // しかしこの行を使えば正しく表示される。
ShowValue( new IntPtr( &valueWantToShow ) );
}
}
// 何でも良いがとにかく out で受け取る、代入しないとエラー出るのでとりあえず null をいれておく
// 代入する値は何でもかまわない。
static void Dummy( out object o ){ o = null; return; }
// ポインタの先の値を表示
static void ShowValue( IntPtr p ){
Console.WriteLine( "value = "+Marshal.ReadInt32( p ) );
}
}
>>981
うー、コピペして、.NET Framework 1.0 RTM、SP2、1.1 Final Betaで
試しましたが、いずれもValue=1でした。。。。
983962:02/12/14 11:53
>>982
あれぇ〜〜??
ってことはもしかしてこっちの.NET Frameworkが古いのかも?
SP2当ててなかったっけな・・・?
ShowValue( new IntPtr( &valueWantToShow ) );
のところを
fixed(int* p = &valueWantToShow){
 ShowValue(p);
}
にしたらどう?