5 :
デフォルトの名無しさん:02/09/20 11:57
C#でInt32やInt16をbyte型の配列に直すには
どうしたらよいでしょうか?
>>5 System.BitConverterクラスを見てちょ。
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がありません。
正直、VB.NETがどうだとかは興味ないな。
VBは.NETになってからやたらとコードが冗長な感じで見づらいなぁ。
VB.NETの情報でも、固有の言語というより.NET共通の情報って感じだから、
読み替えればC#で情報不足になるということはないかも。。。
19 :
デフォルトの名無しさん:02/09/23 03:19
一番下のを注文しちゃいました・・・
>>19 一番上のは持ってるが、極めて良書であると思う
3番目のも良さそうだね。オレも注文しようかな
23 :
デフォルトの名無しさん:02/09/23 10:08
VB.NETで出来るような仕事ばかりじゃなくてC++やJAVAやらCも
あるから書き方の特異なVB.NETは避けてC#にしてます。
25 :
デフォルトの名無しさん:02/09/24 21:03
質問です。
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 と基になるストリームをクローズします。」
と書いてあるんだけど。俺はだまされてるのか?
>>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);
}
}
とか?
>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だったよ・・・・(´д`;)
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
アレー
ソースの字下げが消えてる。
なんでた?
もいっっちょ。(今度は全角スペースで字下)
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などの違いがまだ
よく分かってないから頭ん中ごちゃごちゃです。(汗)
59のは56へのレスではなくて新規の質問なのでした。
紛らわしくてすみませぬ。
SDKではなくてVS.NETを使っているけれど、ライブラリ アセンブリ
をexeに含める方法がわからないです。最初からDLLになっているし
無理なのですかね…。
マルチファイル アセンブリというのがそれなんでしょうか?
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の出来のみを云々するのは
あまりにも近視眼的ではないだろうか?
以上、Del厨の自爆テロでした。
>>72 72の書き込みによりDelphiの人気がさらに下がりました。
77 :
デフォルトの名無しさん:02/09/29 13:11
.NETテクノロジー発売あげ
79 :
デフォルトの名無しさん:02/09/29 14:16
コントロールを配列化するにはどうすればいいのですか?
VB6.0ではコントロールをコピぺすると配列にしますか?
って聞いてきた気がするのですが。
質問ですが、
Cを大体マスターしたのですが、あまりにも生産性が低いため次の言語へ
いきたいと思います。
C#なんかよさそうだと思ったのですが、C++を1秒もやらずにC#を習得することは
現実的でしょうか。
C#はC++を改良したものだそうなので、どうしてもC++をやるのが無駄に見えてしまうのですが、
C++をやっておいたほうがよいのでしょうか。それとも、まったくの無駄足になるのでしょうか。
○○をやるのは無駄でしょうか?とか言うやつにプログラム上達は無理。
C#にそのまま行っていいと思うけど、多分君はCをマスターはしていない。
>>79 手作業でControl[]型の変数に代入
プロパティの値を設定、または取得するデリゲートって作れないんでしょうか。
delegate bool GetBooleanValue();
GetBooleanValue m = new GetBooleanValue( obj.get_BooleanProperty );
なんて直接 get アクセサを呼んでもコンパイルとおりませんし。
メソッドを一枚かませればすみますが、使用するオブジェクトとプロパティの数だけ必要になるし、
リフレクションでは実行時まで問題が見つけにくくなってしまいます。
>>86 C#・VB.NETではダメで、VJ#ではできるみたいね。
無理っぽいですかねぇ。
何とかなりません?>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クラスとか作ってメソッドで対処するって手もありますね。
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?普通の?
C#で作ったDLLを使い分けたいと考えています。
じゃあ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
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(だっけ?)は何を返す?
System.Console.WriteLine(o.GetType().ToString());
からはHogeを返します。
すいません。間違いました。
System.Console.WriteLine(o.GetType().ToString());
からはHogeHogeを返します。
HogeHogeとHogeは継承関係にあり、Hogeが基底クラスになっています。
138 :
デフォルトの名無しさん:02/10/04 18:32
アゲ
C#製プログラムを.NetFrameworkの適用なしに、
インストールせずに、
ファイルのコピーで、
実行ファイルを動かすことはできるのですか?
普通はできないと思いますが、何か解決策はあるでしょうか。
>>139 ありません。って、某MLで回答もらったでしょ?
C#でアクティブなアプリケーションの切替え実行したい
(Alt+Tabでできる操作を実行したい)のですが
どうやってやればよいのでしょうか?
>>136 つまらないことだけど、それはUnboxingじゃなくてDownCastだね。
>>139 大久保陽司 さん
> あるサードパーティのコンポーネントを使ったプログラムを、
> そのラインタイムをインストールせずに、
> ファイルのコピーで、
> 実行ファイルを動かすことはできるのですか?
>
> 普通はできないと思いますが、何か解決策はあるでしょうか。
と同じです。
/| | |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ
| | | ̄ ̄ ̄ /| ||
| | | / /|TTTTTT TTTTTTTTTT||TTTTT
| /\ | /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^
| / / |// / /|
| / / |_|/|/|/|/|
| / / |文|/ // /
|/ /. _.| ̄|/|/|/ Λ_Λ
/|\/ / / |/ / (___)
/| / / /ヽ /〔 非OO 〕〕つ
| | ̄| | |ヽ/l `/二二ヽ
| | |/| |__|/ Λ_Λ / /(_)
| |/| |/ ( ´∀`) (_) Λ_Λ
| | |/ // / ^ ̄]゚ (` )
| |/ ゚/ ̄ ̄_ヽ ⊂〔〔 非OO 〕
>142
基底 <- 派生 の代入なんだから Up Castでそ。
>136
>132の代入先の hoge が Hoge型ではないと見た。
>147
(゚Д゚)ハァ?
149 :
デフォルトの名無しさん:02/10/06 10:30
SDK + コマンドラインで開発してるんですが、
スタックトレースを出力したときに、ソースの行番号を出すにはどうしたらいいんですか?
なんか、出ないので・・・。
VisualStudio使うと出るんだけどさ
コンパイルオプションに行番号を埋め込むというのがない?
>>149 /debug+ でコンパイルすれば出てくるよ。
BinaryFormatterでシリアライズしたファイルをデシリアライズする時
以下のような例外吐いて失敗してしまいます。どうしたらいんでしょう?
System.Runtime.Serialization.SerializationException: 解析が完了する前に、ストリームの終わりに達しました。
例外吐く個所のコードは以下のような感じです。
(SortedList)formatter.Deserialize(stream);
>>153 あ、すいません。SortedListをシリアライズした時です。
ファイルでなくメモリにシリアライズしてもダメッスか?
>>155 streamにMemoryStreamを使用してみましたが、シリアライズはできますが、
デシリアライズする時に同じj例外がでてしまいます。
Hashtableではうまくいってたのですが。
>>153 こちらの環境では問題ないっす。
何か別のところに原因があるのでは?
>>157 ありがと〜 そうですか。ちょっとまた調べてみます。
キャストの件は解決しました。
DLL内のクラスをEXE内のクラスにキャストしようとしてました。
同じソースから一部をDLL化し、それを含んだEXE作成していました。
同一ソースから作成されたクラスでも別クラスと判断されるようです。
ご迷惑をおかけしました。
ひょえー、アセンブリが違うと同名でも別クラスなのか・・・
162 :
デフォルトの名無しさん:02/10/06 16:33
.NETFrameworkって、Javaで言うByteArray*Stream見たいなのってないんですか。
byte配列を溜め込むのにどうやりゃいいか悩んでるんですけど。
あんだけ高級なAPIが揃ってるのに、これだけ自前でつくれって?
>>160 アセンブリが違うのに名前が同じってだけで同じクラスになったら困るって。
>>162 MemoryStream とかいうのなかったっけ
166 :
デフォルトの名無しさん:02/10/06 17:45
DLLのセキュリティチェックを行うことはできますか?
誰が作ったかわからないDLLを読み込む場合に
ローカルディスクのファイル操作等を禁止できますか?
できます。
どうすればいいの?
または、どこ調べればいいの?
Internetのパーミッションセットを設定したいのですが、
どうやって設定するのですか?
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ってありますか?
System.Array.Copyだった・・・。
WinCVでアセンブリの中身を見ようと思ったのですが,
$ WinCV /r:アセンブリ
で見ることができません。
$ WinCV /h
を見るとできそうなのですが。
ひょっとして勘違いしてる?
ildasmで一応目的のもの見られました。
WinCVは何者?
>>184 WinCVはWindows Forms関連クラス専用のビューア。
>>185 ああ,そういうことですか。ありがとう。
C#で実行中の自分のファイル名(アプリケーション名)を取得
するにはどうすればよいでしょうか。
ここで言う、ファイル名というのは、例えば、
hogepage.exe というexeを実行していたならば、
hogepage.exe という名前をプログラム中で取得
したいということなのですが、、、
どうやればいいでしょうか?
>>187 Application.ExecutablePath
フルパスだけど。
ちなみに Application.StartupPath はそのフォルダ名。
コーディングスタイルの質問なんですけど,
みなさんthisってどういう時につけてます?
1. 常に
2. 曖昧さをなくす必要がある時
3. そのクラスに記述されているものだけ
4. そのクラスに記述されていないものだけ(記述されているものは明示的に書かない)
baseだろって突っ込まれそうだけど
5. その他
ぼくは今不定でふらふらしてます
>>190 ああなるほど。
俺はEmacs使ってるんでそもそもコード補完ができない…(ただの文字列補完ならできるけど)
で,話ずれますがMeadowでC#(.NET)のコード補完やってる人います?
>>188 Thanks!!
ところで、ConfigurationSettings.AppSettingsを使って、設定ファイル
を読み込む時に、設定ファイルがあるかどうかを判定する方法ってある
でしょうか?File.Exists()とか使うしかないのでしょうか?
それから、ConfigurationSettings.AppSettingsを使って設定ファイルを
いじるれますが、このファイル名や保存場所を任意に変えることはできる
のでしょうか?なんか無理っぽいですが。。。
196 :
デフォルトの名無しさん:02/10/08 16:23
>191
そっかー標準装備か。。じゃ待ちだな。
ところで皆さんは現在、ildasm対策?とかしてますか?
RichTextBoxのTextプロパティにURLらしき文字列を設定し、
そのURLをクリックすると、LinkClickedイベントが発生しますが、
これをURLではなく、任意の文字列でできるようにする方法は
ないのでしょうか?
Formを最大化するにはどうすればよい?
>>199 Form.WindowState = FormWindowState.Maximized;
202 :
デフォルトの名無しさん:02/10/09 11:50
RTFコードの一覧表ってどこで見れますか?
203 :
デフォルトの名無しさん:02/10/09 12:24
>>203 ありがとうございます。
>ただ、何に使うのかはしらんが、リッチテキストボックスのRTFプロパティを自分で
>書いて、書式付き文字を表示されるなんて考えはおこさん方がいいぞ。
なんでですか?
205 :
デフォルトの名無しさん:02/10/09 13:45
>>204 ・RTFの仕様自体が糞。とても使う気になれない。
・リッチテキストボックスはRTF1.0相当なので、メソッド、プロパティを通じて
操作できる以上のことは RTFを生で書いてもほとんど無理。
表とかリンクとか画像を入れたいというだけなら、webbrowserコントロールを
使った方が気楽だよ。
時代はリッチテキストよりHTMLだと思ってみたり?
そういえば.NETでHTMLダイアログを簡単に扱えたりするの?
System.Windows.FormsやSystem.Web.UIと同じように扱えたら
すごーくハッピーなんだけど、無理?
>>205 >表とかリンクとか画像を入れたいというだけなら、webbrowserコントロールを
>使った方が気楽だよ。
タグの色分けができるHTMLエディタを作ろうと思ってます。
コントロールを自作しようと思ってSharpDevelopのソースも見たんですが無理っぽいので
RichTextBoxを使ったらどうかな?と思ったんです。
やっぱり厳しいですか。。。
UDPサービスの使用のところにあるサンプルって動きますか?
ms-help://MS.VSCC/MS.MSDNVS.1041/cpguide/html/cpconusingudpservices.htm
UDPMulticastListener の方で、まったくメッセージが出てきません。
動いた方がいたら動かし方を教えてください。
> SharpDevelopのソースも見たんですが無理っぽいので
無理っぽい?あんな読みやすいソースもそうそうないぞ。
少なくとも漏れはあのソースをかなり参考にしてC#のカラ
ーリングエディタを作った。(あれはGraphics.DrawString
を素で使ってるから日本語表示したり単語が多くなるとも
う速度的にボロボロだから本当に参考にしただけだが)
もっとがんがれ〜!
>>209 役に立ちそうなソースは公開キボンと書いてみたり。(w
212 :
デフォルトの名無しさん:02/10/10 09:24
十進BASICで連立一次方程式を説く、プログラムを教えてください!!
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$でゴタゴタが起きていてなんちゃらかんちゃらという記事を読んだことがあります。
その辺のことご存じの方いらっしゃれば教えてください。
自分もグーグル等で検索してみましたが、分かりませんでした。
NetworkStream.Writeというメソッドは戻り値を
返さないのですが、このメソッドで指定したbyte[]
は、きちんと全て送信するまで、ブロッキングして
くれるのでしょうか?
socketとかだと、100byte送信ってやっても、50byte
しか送信できないことがあったりして、結局何byte
送信できましたっていう感じで、送信できたbyte数が
戻り値として戻ってきていましたが、どうなのでしょう?
NetworkStream.Writeで100byte送信ってやった場合は、
100byte送れるまで、ブロッキングするの?
>>216 Mono、Portable.NET以外にBorlandから出るよ。
Kylix .NETからだし、まだ先だけど。
完了の定義によると思われ
なるほど、了解。
>>219 なるほど。よくわかりました。
>>221 どうも、実験してみると、1byteも受信できないうちは、
ブロッキングするようですが、1byte以上、何らかのデータを
受信した時には、何バイト読み取れって指定したデータ全部を
受信しなくても、処理が次に移ってしまうようです。
その代わり、何バイトだけ受信しましたよ。っていう戻り値が
帰ってくるようです。
なんで、こんな実装なんでしょうね?
>>224 いわゆるbsdソケットのrecvと同じ挙動に見えるがどうか。
だったらsendも同じにしてもいいのに、とは思うけど・・・
と思ったらSocket.Sendがあるやんけー
>>221 この映像の喋ってる奴の喋り方ムカツク。
なんでだろ。
>>227 Microsoft Document Explorer 7.0なら
ヘルプ(H)-目次の同期(Y)
かと。
違ったらスマソ。
>>229 ああ,Microsoft Document Explorer 7.0ですた。
で,http//〜 は目次の同期はできないのです。
>>231 そういうことです。
そんで,ms-help://〜形式にできないものかなーと思いまして。
タブブラウザ作ってるんですが、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ちゃった。
>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);
みたいにクラスインスタンスを作らなくても値を返せるようなメゾットって
どうやって作ってるんでしょうか?
例外処理で、ある特定の例外に関してだけ、同じ処理をしたい
場合は、特定の処理をしたいcatch句のところに同じ処理を繰り
返しかかなければならないのでしょうか?なんか、AとBとCの例外
の場合は、この処理を実行してください。ってな感じで一度に指定
することは可能なのでしょうか?
単純にcatch(Exception e)でキャッチしてしまうと、全部ひっかかって
しまうのでダメなのですが。。。
アプリで作った例外?
それとも規定の例外?
少しは頭使えよ
>>250 その二つの例外が継承関係に無い以上同じコードで扱うのは無理っぽい。
catch( Exception ) で全部捕らえて、if/else で我慢するしかないかな?
バーカ
ヴヮーカ
ブノレヮーカ
キリヴァーン
>>252 やっぱりそうなってしまうのでしょうか?
なんか、コードが例外処理だらけになりそうです。
みなさんも、やっぱりそういう風に書いてるの?
バーカ
>>257 catch使おうがif/elseだろうが、コード量はほとんど変わらない気がするんだけど
あと、例外に関して、もう一つ質問があるのですが、
catch(Exception e)はなるべく使わない方がいいと
言われたのですが、なぜ?
同じ例外処理をするなら、catch(Exception e)で問題
無いですよね?
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 そういう書き方をしたいときもあるんじゃん。
>>262 そうそう、そういうのがやりたいんですよ。
でも、try catchじゃできないみたいなので、みんなどうしてるの
かなって思ってた分けです。
わざわざ例外用の関数つくって、同じ例外処理の場合はそれを
読み出したりするようにしてるのでしょうか?
>>265 んで、ログには「エラーが起きますた」と一言だけ・・・。
>>266 try〜catchのスコープを小分けにして、そんなにcatchの羅列にならないようにする。
269 :
デフォルトの名無しさん:02/10/12 14:49
ファイルを読み込むさいのEOFはどうやって判断するんですか?
Whileかなんかでループしながらsr.ReadLine()で一行づつ読み込み
たいのですが。
>>269 TextReaderでできるじゃん。ReadLineの戻り値がnullだったら終了。
>>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
標準化すると利便性が高まるからじゃなくて、標準化すると売りやすくなるから、
ISOに出すのね。まあいいけど、時代は変わったのね。
277 :
デフォルトの名無しさん:02/10/12 15:30
byte[]をstringに変換したいんですが、
よい方法ありますか?
>>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)
}
302 :
C ◆dq2PerGLN. :02/10/14 04:34
CFileのMFCにあるファイルを開くダイアログはC#だとどのクラスでどのメソッドにあたるのですか?
>>302 OpenFileDialogクラス
ShowDialogメソッドで呼び出す
げげげっ、バグなのですか!?
どうりで動かないわけですよ。。。
でも、これじゃぁ、2ちゃんブラウザをC#で作ることはできないじゃ
ないですか、、、せっかくC#で作ろうと思ってたのに。
なんで、 .NET Framework Service Pack 2 までだしているのに、直して
ないのでしょうか??
ホントにC#普及させようと思ってるのか???>MS
>>304 ちなみに .NET 1.1 って、まだ、ベータ版ですよね。そうすると、これで
ソフト作っても配布できないですよね。。。
ちなみに、.NET 1.1 の正式版リリースはいつごろを予定しているのでし
ょうか?なんか、MSのページみても情報無いのですが。。
>>305 この方法ってのはイベント部分だけ古いコントロールのやつを使うという
ことになるのでしょうか?なんかIE3コンパチブルというのがいやな予感が
するのですが、この方法を使った場合の弊害ってなんかあります?
>>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 で検索。
関係ありそうなサイトがヒットしたら、そこからリンクを辿るとかね。
ちなみに漏れが最初にこの情報を知ったのはここだよ。
beta2のころはサイトもあんましなかったし。(海外別にして)
>>310-313 あらら、結構情報載ってますね。。
スンマソ。
ところで、.NET Framework 1.1の正式版はVisual Studio .Net(Everett)
と同時になるようですね。果たしていつになることやら。。。
>>262 C♯でそんなことできたっけ・・
switch は no fall-through じゃなかったっけ?
(つまりすべての case に break を書かなければ文法エラーになる)
>>315 羅列ができるだけ。
1行でもコードを書くと compile error になりますよん。
317 :
C ◆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知らないんで
いまいちクラスの概念が理解できないんだが
クラスって、構造体と全く同じと考えていいの?
320 :
C ◆Iei1i2BWho :02/10/15 10:58
>317
迅速なレスありがとうございまーす、さっそくトライするっす
321 :
C ◆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で
自動的にラッパ作ったやつはまともに動かんぞ、と警告してみる。
>325
ありがとうございます。もう少し調べてみます。
327 :
デフォルトの名無しさん:02/10/15 18:56
最小化されたフォームを再び表示させようとする場合は
this.Show();
で表示するんでしょうか?
this.FormWindowState = FormWindowState.Normal;
じゃ表示されないみたいなんす・・・。
結局下のようにしました。
まだイベントに絡めては動かしてないんですが、クリックイベントを横取りして
やればいけるかなと思ってます。
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 接続中に切断されたなら、そこで例外が発生するからそれをキャッチすればいい。
接続しているか常にチェックしたいならちょっと無理かも。
TcpClient使ってるならTcpClientを継承したクラス作って
SocketもらってConnectedプロパティをチェックするしかない。
335 :
デフォルトの名無しさん:02/10/16 08:42
メソッドの呼び出し元を特定できますか。
コールスタックみたいに。
336 :
デフォルトの名無しさん:02/10/16 13:08
>>335 StackTraceクラスからMethodInfoが引けたはず。
338 :
デフォルトの名無しさん:02/10/16 14:14
>328
> ただ、横スクロールバーが出ていると微妙に右にスクロールしてしまうのが
> 気持ち悪いですね。hdoc2.parentWindowは型がサポートされてない旨の例外が
場当たり的だが、scrollintoviewのあとに
document.parentWindow.scrollBy(-1000,0);
ってやって、左に戻しておけばどうかと
>338
残念ながら型がサポートされていないという例外が飛んでしまうので
document.parentWindowが評価された時点で落ちます。トホホ。
341 :
デフォルトの名無しさん:02/10/16 14:33
>339
> >338
> 残念ながら型がサポートされていないという例外が飛んでしまうので
> document.parentWindowが評価された時点で落ちます。トホホ。
俺はdocument.parentWindow.scrollBy(-1000,0); で普通に使えて
いるが。WebBrowser_V1 を使っているせいかな?
自力で解決できそうかな? つーわけでメモ。
■ 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は要らないのかな。
なんか問題があるようだったら誰か指摘してください。
343 :
C ◆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()で変換してます・・・(効率悪〜)
>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の各値を取得する関数はありますか?
それとも自分で作らないといけないのでしょうか?
わかる方お願いします
>>353 Color構造体で返って来るので、
普通に各プロパティ(R,G,B)を見ればいいのでは?
356 :
デフォルトの名無しさん:02/10/17 03:26
>346
サンクスです。コンストラクタでthisが使えるのですね。
すんませんあやふやな記憶だけで大嘘ぶっこいてました。
ちゃんとコードを書いて確認してみましたが、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 ???急に落下してくるもんってなに?
タグにタイトル属性付ければなんでもティップが表示されると思うが。
365 :
デフォルトの名無しさん:02/10/17 19:25
新しいThreadを作る時に引数をもった関数でThreadStartできますか?
>>365 ThreadStart デリゲート見るとダメっぽいね。
>>385 アドホックinvokeを使えばできるよ。クラスライブラリではなく、C#のデリゲート
自動生成機能なんで探すのはめんどうだが。
threadプール使えと言わんばかりの仕様に見えるのよねー
>>367 アドホックinvokeって初耳ですがなんですか?
別に引数なくても困りませんが。スレッドクラス作るし。
ms-help://MS.VSCC/MS.MSDNQTR.2002JUL.1041/cpguide/html/cpconcompilersupplieddelegatebegininvokeendinvokemethods.htm
これだけど、書けば勝手に作られてスレッドプール使われるからアドホック。
でも、本当は、アドホックデリゲートとおいらは書きたかったんだが、書き間違えたスマソ。
>>369 こんなのもあるが、おいらは、Threadクラスから派生するほうが良いと思う。
・データの局所化(クラスのフィールドにパッケージング)
・テンプレートメソッドパターンが使える
とか、そんな理由から。
1ショットならアドホックデリゲートでも良いかも。
>>367 詳しそうだから聞いてみちゃうけど、スレッド間のメッセージのやりとり
はどうやるのがいいですかね?
メッセージキューで調べるとシステムワイドのメッセージキューサービス
なんてのがでてきやがる・・・
>>370 なるほど、それアドホックデリゲートって言ってたのね。
知らずに使ってたよ。
>>371 Threadクラスから派生かぁ。考えてもみなかったけど、
あまり必要に迫られていなかったなぁ。
でも考えてみれば、派生したほうが便利な場面あるね。
ありがとう。
>>373 と思ったがヘルプみてみると、Threadクラスはsealedだわ。
継承できんがな・・・
漏れが意図を汲み取れなかったのだな・・
>>372 非同期デリゲートつかうんじゃなかったっけ?
まあ場面によって色々あるけど、
ヘルプで「スレッド化チュートリアル」で引けば基本はわかるかと。
うーん、一応スレッド関連は眺めてみたんですが、スレッド間通信という
のはありませんですた。
377 :
デフォルトの名無しさん:02/10/18 00:25
>376
単にデータのやりとりをするなら非同期デリゲートでIAsyncResultのasyncStateん
中に放り込むとか?
単純なThread.Startに比べると、非同期デリゲートは なんかいちいち面倒で、
気軽に使えん。
C#のツールバーってなんか退化してません?
ReBarとか、ドッキング可能なツールバーってなくなっちゃったの
でしょうか?
>>374 ごめん。JavaのThreadとごっちゃになってた。.NETのThreadは継承できないね。逝ってきます
>>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を使って何かする
}
}
今気付いたけどスレッド間通信も簡単に出来ると思う。
送信側は MyThread.SendMessage(受信側スレッド名 送りたいデータ) とかするだけで
受信側スレッドの状態管理なり排他制御なりは MyThreadクラスに任せてしまえる。
もしかしてデザインパターンとしてとっくに名前ついてる?
すまん、間違い発見。
インスタンスメソッドの方のGetThreadだけど、引数要らんわな。
#と♯って何が違うの?
スレッドの話が出ているので便乗質問なのですが、
lock(this) {
....
....
}
って書いた場合、lockの{}で囲まれた処理だけが
排他的にスレッドによって実行されるってことなの?
それとも、(this)って書いてあるから、{}の中の処理
を実行中は、thisで示されたインスタンス自体がロック
されるってこと?
>>380 コントロール表示時のIMEモードをどうするか設定しておくプロパティじゃないの?
つまり、ユーザが「半角/全角」キーを押すことは関係なく
>>386 >>359-360読むと
そのプロパティが変更された時に発生するイベントが
何の役にたつのだと、言いたいわけだろう。
全部のプロパティにChangeイベントがいるか?
>>387 ないよりはいいかと思う漏れは逝ってよし?
誰が何に使うかわからんわけだし、放置でいいでしょ。
>>385 thisがロックされるのではなく、(厳密な言い方ではないが)thisがさしている
オブジェクトにロック済みのマークが付けられる。そのため、
lock(this) {
を実行しようとするすべてのスレッドは、マークを付けたスレッド自身を除き、
そこでブロックされます。つまり、lockブロック抜きで
this.setxxx(xx);
する、スレッドを止める手段は無しです。
したがって、「インスタンス自体がロック」のほうに近いかな。lock(this)な
ブロックであれば、どこであっても影響を受けるから。
>>390 つまりcooperative lockであってmandatory lockではないということですか
大変よく分かりますた。
うわ〜ん。IHTMLDocument2のイベントは onclickに限らず不発が多いよ〜。
これってC#特有の問題?バージョンがあがれば解決の望みあり?
>>384 #は電話のボタンの右下のマーク
♯は音楽記号のシャープ
>>393 ちなみに、どんなイベントがダメなの?
うわさによると、次期VS.NETに付属する.NET Framework1.1では直って
いるらしいが。
397 :
デフォルトの名無しさん:02/10/20 01:14
>>395 過去ログみてみ。β版でちゃんと治ってるって報告あり。
>#は電話のボタンの右下のマーク
読み方は?
ま〜るかいてちょん
(+。+)アチャー。
403 :
ネットワーク試験遅刻しそう:02/10/20 09:06
BitmapメンバのSetPixelメソッドははPaintEventArgs eを取得して処理しないといけないのでしょうか?単独で使うとエラーがでます。
これはあるBitmapにピクセルをセットするとVC++のOnPaint()などの処理を呼び出さないといけないのでしょうか?
わかる方宜しくお願いします
405 :
デフォルトの名無しさん:02/10/20 09:48
>>398 いげた。
そういえば大学でC教えてた教授が「いげた」って言ってた。「いげたインクルード」とか。
今、C#のことを「シーいげた」って言ってんのか確かめたい!
>>405 その理屈でいくと、「C++」は「シーくさかんむり」にでもなりそうなものだが。
ちゃんと「ぷらぷら」って言ってた。「シー」は言わずに。
.<見えるかな?のことを、うちの会社ではみんなポツと呼ぶ。
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」を使うことは分かっています。
調べてみたら、なんとなく分かりました。
どうやらこの方法を使うようです。
ms-help://MS.VSCC/MS.MSDNVS.1041/cpguide/html/cpcondevelopingmultithreadedwindowsformscontrol.htm
>>410 激しく既出。
フィールドとプロパティの関係と似たようなもの。
class Hoge
{
int n; // フィールド
int N { get { return n;} } // プロパティ
HogeDelegate f; // 普通のデリゲート型のフィールド
event HogeDelegate OnXXX; // イベント
}
>>415 過去ログの方も読んでみました。大変参考になりました。
でも、
>>415 ということは、なるべく、eventを使って隠蔽化した
方がいいということなんでしょうかね。
>>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"); のどっちかっしょ。
(;´Д`)
(;´Д`) <書くのもメンドくさい
くだスレの方が質問レベル高いような気がする。
431 :
デフォルトの名無しさん:02/10/22 00:19
たまにゃ土日に大阪でやってくれ。。。
>>432 インストール時にWindows認証も選べるようになったので、MSDE使いも楽に動かせるね。
「Panel」だと「OnMouseWheel()」って駄目なんでしょうか。
>>435 そんなしちめんどくさいことを。。。レジストリいじればすぐになおるっしょ。
やり方は今月のDBマガジンの付録に書いてあった。
>>430 セッションを投票で決めるらしい。もうネタがないのか?(w
>>437 ほんとだ。レジストリのLoginMode変えてDB再起動するだけでできた。ありがと。
>>438 マイナーなネタでもふるか。メッセージキューとか。
出来レースだな、こりゃ。
ほんとにどれがきてもしゃべるのか?しゃべれるのか?
やっぱりObjectSpacesでリレーション設定したオブジェクトは
XMLに出来ないのかなぁ・・・
446 :
デフォルトの名無しさん:02/10/23 05:09
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
>>453 これでつか?
> .NETセキュリティ
> エビデンス,ポリシー,パーミッション,施行サービスを提供するCLRの
> セキュリティインフラストラクチャ
> (September 2002 Vol.17 No.9)●Don Box
日経ナントカよりはマシだろうか
相変わらず訳が糞だねぇ。施行サービスってなんだよ?
>>450 .NET Frameworkは一応コマンドラインで使ってるんだが
借りてきたC#の本に対応していないので勉強できない・・・
DelphiみたくStandardタダにするとか
機能限定無料版とか無いのがイタイ
60日間試用版って一回消していれなおして使えんのかなぁ・・・・
情報キボンヌ。
>C#Standard買う金ないんで
リアル小学生でも親にねだって
買ってもらえる程度の額を、出せないなら
生活保護を受けに逝った方がいいよ。
>機能限定無料版とか無いのがイタイ
正直、きみの方がずっとイタイ
>>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 アクティベーションが必要になるのは、
アカデミック版だけじゃないの?
試用版も必要なの?
>>468 あ! 思いっきり勘違いしてますた。逝ってきます。鬱すぎる・・・
470 :
デフォルトの名無しさん:02/10/24 21:15
>>467 ネットを使ったライセンス認証が必要。なんか本買った時とかに付録で付いてたのが
貯まってしまって三枚くらい体験版あるけど日経の「C#で始めるWINプログラミング」
にはアクチが必要と書いてある。
他2枚は特に注意書きはないけど、同じ体験版だし必要かと。
>>447 >借りてきたC#の本に対応していないので勉強できない・・・
君だめぽすぎ。C#の本に対応って・・・本末転倒じゃねぇか。
開発環境がらみのところは読み飛ばしちまいな。
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 | .::::::::::::. ヽ ノ こ (フヽ ⊂ レ ヽ ノ こ (フヽ
\/::::::::::::::::::::: / / :::::::::::::::::: }
479 :
デフォルトの名無しさん:02/10/27 04:33
質問です。
NotifyIconのContextMenuを使うとステータス領域を“右クリック”で
ポップアップメニューを表示させることができますよね。
でも、NotifyIconを使ってステータス領域に表示されたアイコンを“左クリック”で
ポップアップメニューが表示されるようにしたいのですが、
どうしても方法がわかりません。ご教授ください。
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をつけるまでも無くコンパイラが自動判別するから
半分ネタで書いたんだが(俺もVB上がりだし)マジで理解してないやつもいるんだな。
>>486 まぁ、インターフェースでそれなりにカバーできるし。
テンプレートは激しく欲しいよ。テンプレート厨が沸くのはうざいが。
AssertValidがフィールドいじってるかどうかなんてきにすんな。
そう組んだやつがわるい。
489 :
デフォルトの名無しさん:02/10/27 21:38
スレッドを強制的に終了する方法はありますか?
Abortとか使ってもSuspend中のスレッドは終了できないみたいなんですが・・・
>>485 const というのは、プログラムミス防止のためのものであるから
勝手にコンパイラに判断されては困ると思うのだが・・・
私もそう思うんだけど。
実際には const は使えないんですよね。
なんでだろ…?
> 疑問だったんですけど、なんで const なメソッドが無くなったんでしょう。
必要ないから。
そもそもconstメソッドなんかに頼っている時点で、カプセル化の意味がなし。
# オブジェクト自体をimmutableにするとか、いろいろ方法がある。
例えばそのオブジェクト自体をimmutableにする場合に、
DBC的な用法でconstメンバ関数を使うことも十分あるのでは。
#どの言語でも原理主義者はいややね。
constというのはROMに配置するためにあるのだ!
まぁJavaと違って普通に関数作れるしね・・・。
>>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無くてもへーき。
>>498 意見どうもです。
オブジェクトを Dump すると、そのオブジェクトが参照(と言うより所有)しているオブジェクトもダンプする事がありえますよね。
元のオブジェクトが(C++で言うと)参照定数のコンテクストにあるとき、Dump 呼び出しは所有物に対しても通るけど、他の const でない操作はコンパイラがブロックしてくれる…
っていうのが存在価値なんじゃないかなと思ってるんです。
自分で面倒見やがれと言うスタンスで統一したと言う事でしょうかね。
>>497 おいおい。
ContextMenuにShowメソッドがあるって。
>>501 度々すみません。
private void nIcon_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button==MouseButtons.Left)
{
ContextMenu.Show();
}
}
ということでしょうか?コンパイルエラーになるのですが・・・。
>>502 >ということでしょうか?コンパイルエラーになるのですが・・・。
で、エラーメッセージ書かないボケはどこのドイツですか?
>>502 つうかヘルプでShowメソッドのところみたか?
引数たんねーよ それじゃ。
エラーメッセージ書かないのはネタだと何回も何回も・・・(略
>>503 すみません。コンパイルする以前の問題だったので、書きませんでした。
気をつけます。
>>504 ContextMenu.Show((Control)sender,new Point(e.X,e.Y));
とすると、senderがNotifyIconなのでキャストできないですよね。
かといって、NotifyIconコントロールを貼り付けたFormを指定すると、
「System.ArgumentException: 非表示のコントロールでは、ContextMenu を表示できません。」
になるし。
いいなぁ、バカって。
人生、楽そうだ。
そのDLLを参照に追加してみるのが最初の一歩だと思った
>>506 497での発言は、ContextMenuのShowメソッドを見た上でのコメントやったんね。
やっと意味わかったよ。
このShowメソッドは使えないね。
かといって、左クリックを右クリックとだまくらかす方法はないかと
考えてみたが、ちといいアイディアなしだわ・・・。
いけそうで、いけないな・・・むむむ。
タスクトレイに常駐するだけのアプリケーションはどのように書きますか?
>>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 どっちにしろウインドウ作らないとメッセージが飛んでこないわけで。
一瞬で終了ってアホっす。
518 :
デフォルトの名無しさん:02/10/30 21:46
516=511なの??
単にフォームがいらないだけならコンソールアプリケーション。
常駐したいならServiceBase継承してサービスアプリケーションかけ。
以上
知らない事だと"以上"と言って終わらせたい低脳がいるスレはここですか?
Windowsアプリでも
>>511 はできるけど。
>>511 Application.Run()だけでOK。
Application.Exit()で終了!
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 intとaの間に全角スペース?
全角スペースも使えなかったっけ。(使いたくはないが)
全角+も全角数字も使える。
ちゃんと1+1は2になる。
>>533 UNICODEで保存しないと全角文字は使えない。
全角スペースが入ってて悩むような馬鹿がUNICODEでソースを保存してたりはしないだろ。
>>538 特に初期設定から変えてなくても全角文字使えますけど・・・。
>>539 今、確認してみたら確かに使える。
β1の頃は無理だったんだけど。
ついでにちょっと 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;
}
}
}
}
-------------------------------------------------
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とは違う。
>>549 MSDN
取りあえずSocket関係のクラス調べれば言いっしょ。
>>551 スレ違いでした。すいませんでした。
あちらに質問してみます。
C#.NETには、javaのBigDecimal同様の機能を持ったクラスはありますか?
>>547 C#ならそう言うのは値型だから自動的にコピーされるYO
>>555 参照で返したくても、自動的にコピーされちゃうの?
モチロンダゼハニー
>>556 参照で返したいなら参照で返すように書けばいい。
559 :
デフォルトの名無しさん:02/11/06 17:27
TcpClientとNetworkStreamを使っていて、相手がコネクションを切断してきたということ
を知るにはどうしたらよいでしょうか?
>>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 クラスを参照。
>>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使った方が楽だと思うよ。
Strage → Storage の間違いね。
>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で自動生成部とカスタムロジックを別ファイルにして読みやすさ(゚д゚)ウマー。
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
>>600 激しいほどに最低なデザインセンス。
これでは、Dukeの足元にも及ばぬ。
C#の普及は、まだまだだなぁ。
JavaのDukeみたいなもん、じゃないのに。
Control.MouseButtonsっていうので、マウスのどのボタンが押された
か取得できるらしいのですが、どのボタンを押しても、MouseButtons.None
が返ってきてしまいます。
FormのClickイベントの中でやっているのですが、何が悪いのでしょうか?
>>603 MouseEventHandlerでMouseEventArgs.Buttonを見るんじゃないの?
>>599 おお サンクス(・∀・)
なるほど。ハンドラ追加する時の面倒が軽減するね。
スレッドを実行するときにThread.IsBackgroundを
使ってバッググラウンドで実行するかフォアグラウ
ンドで実行するかが選択できるのですが、これは、
どんな意味があるのでしょうか?
ファオグラウンドだと現在の処理がブロッキングさ
れるのかと思ったら、そんなことは無く、バックグ
ラウンドで動いているようなのですが、何が違うの
でしょうか?
優先度の傾向がちょろっと変わるぐらいじゃなかろうか、と予想。
>>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);
>>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文を与えて一発結合、みたいなのはできないものかな。
>>621 普通はブロッキングするので、毎回チェックする必要は
ないと思われ。
>>627 ブロッキング?
やはり別スレッドで自前でチェックするものを作らなければいけないということですか?
質問ばかりですみません。
>>628 一般的には、データの送受信のところは別スレッドでやった方が
いいと思われ。
TcpClient使ってやるなら、読み出しはNetworkStream.Read使うんでしょ?
NetworkStream.Readっていうメソッドはデータが来ないと、その場で処理が
止まる。なので、いちいちチェックする必要とかは無い。データが来るまで待ってて
くれるのだから。
ただ、メインのスレッドで、これを使うと、ブロッキングのため他の処理が一切
できなくなってしまう。だから、普通は別のスレッドで行うのが一般的。
C#ってselectつかえないの?
>>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,
);
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
643 :
デフォルトの名無しさん:02/11/16 01:10
>>641 ありがとうございます!
でもやっぱりnewの仕方がわからない…
静的だからnew出来ないのかな?
>>643-644 そのとおり。ちゃんと読みなはれ。
>解説
>Directory クラスのすべてのメソッドは静的であるため、ディレクトリのインスタンスを
>作成しなくても呼び出すことができます。
そこの文書の作成日・・・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#のコンパイラは無料で手に入るときいたのですが
どこへ行けばダウンロードできるでしょうか?
655 :
デフォルトの名無しさん:02/11/16 09:02
複数のビットマップを並べて描画&一部を移動などを
するときに画面がちらついてしまいます。
これをちらつかせなくするのにいい方法はありますか?
いちおう複数のビットマップから一個のビットマップを
作ってそれを描画すれば解決かとも思うけど
もっときれいに楽にできる方法があれば教えてください。
よろしくお願いします。
ダブルバッファリングくらいしろい。
>>652 うぉ〜ほんとだ!!
APIのShowWindow()っていう関数だと、
> SW_SHOWNA
> ウィンドウを現在のサイズと位置で表示します。
> SW_SHOW と似ていますが、この値を指定した
> 場合は、ウィンドウはアクティブ化されません。
っていうのがありますね。
これならできそうです。C#からAPIの叩き方を調べてみます。
ありがとさんです。
でも、なんでC#では.NETではできないんですかね。
.NETヘボすぎです。。。
今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メッセンジャーとかが表示しているやつはウインドウっぽいんですよねぇ、
だって、クリックできるし。。。
どうか、分かる方がいたら、おながいします。
いろいろ調べてみたら
ShowWindowというAPIは
nCmdShow
ウィンドウの表示方法を指定します。アプリケーションがほかの
プログラムから STARTUPINFO 構造体を渡して起動された場合、
初めて ShowWindow 関数を呼び出したときには、このパラメータ
は無視されます。構造体が渡されていない場合、ShowWindow 関
数を初めて呼び出すときには、WinMain 関数の nCmdShow パラ
メータで取得した値を指定してください。以降の呼び出しでは、次
のいずれかの値を指定できます。
だそうです。なんで、初回起動時に1度表示してから、
このAPIをたたいてみたところ、なんと!、フォーカス無しで
ウインドウが呼べました。
でも、初回に無駄に1度表示するというのがちょっとかっこわるいような。。。
まぁ、しょうがないですかねぇ。
とりあえず、解決しますた。みなさんありがとです。
>>655 PaintBackground イベントをオーバーライドして何もしないようにしろ。
そしたらちらつき消える。
っていうかさ、画面の再描画時のちらつきに関する質問、多すぎ。
Users のメーリングリストで4回くらい同じ質問見たことある。
C#のドキュメント、なんでメンバの返り値の型書いてないんだ?
>>661 VB厨とみた。~~~~で示したところが戻り値だ。
[Visual Basic] Overloads Public Shared Function FromFile(String) As Image
~~~~~~~~
[C#] public static Image FromFile(string);
~~~~~~
ちとずれたな。
添付されてる、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. |
>>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";
>>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を渡せよ
>>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されたインスタンス返しちゃうよね?
でも、実際は、これで上手く動いたりするんだな。
なんか勘違いしてますかね私。
DataSetの代わりに、StreamReaderでやってみたら、
呼び出し側でエラー出たよ。
System.ObjectDisposedExceptionって
・・・予想どうりか。
というわけで、680みたいな記述は間違いなわけね。
たとえ動いたとしてもね。
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;
}
とか書きたくないじゃん。
ありゃ
"&hbsp;"をインデントに読み替えてくださいな。↑
プッ
つーかfinallyだろ。プッ
まあusingは便利だけどね。
C#でファイルに書き込んで作った10KBほどのバイナリデータ(あるクラスの配列すべてのデータを書き出したもの)をC++で読みこみ、C++側で作った同じクラスに代入しようとしました。
しかしC++で読み込むと、ファイルの途中でまだ先があるにも関わらずそれ以上読み込めなくなります。
デバッグして読み込みが終わるところをチェックすると、おかしくなる寸前まで正常に読み込まれ(自動変数表示に表示されるクラスのデータメンバが正常)ているので、型の大きさの違いは無いはずなのです。
一方、C#でC++と同じ読み込みアルゴリズムを作り、ファイルを読み込むと最後まで正常に読み込まれました。
一体何が悪いのかわかりません。助けてください。
689 :
デフォルトの名無しさん:02/11/17 23:39
さげてしまいすみません。
書き忘れていましたが、C++では入力に
_open
_read
を使っています。
> 一方、C#でC++と同じ読み込みアルゴリズムを作り、
> ファイルを読み込むと最後まで正常に読み込まれました。
これでいいじゃん。終了。
すいませんが良くないのです。C++側はゲームの本体で、C#はエディタなのです。
691って、C#とC++それぞれにシリアライザ/デシリアライザを作る
という意味だと思うのだけど、688はそれとどう違うの?
シリアライザってなんですか?
新人レスラーですか?
694を新人レスラーとしてこのスレに迎えることにしますた。
芸名:シリアライザー
>>693 C++とC#で同じ読み込みアルゴリズムにも関わらず、C++だと読み込めなくなります。
前にも一回こんなことがあってうやむやのまま終わりました。
で、あんたのプログラムのバグを直せと?
なにかC++とC#の間でデータのやりとりする際に気をつけなければならないことなどがあれば教えてください。
int や char のサイズが違う。
なんてオチだったりして。
ぎゃー!テキストモードでひらいてたー!!!
702 :
デフォルトの名無しさん:02/11/18 01:02
データグリッドの列にコンボボックスつけれませんか?
質問なんですが、
BMPがテキストになったファイルを
もう一度画像ファイルとしてピクチャーボックスに
表示するにはどうしたらいいのでしょうか?
704 :
デフォルトの名無しさん:02/11/18 09:58
C#ってIE上で動くアプレットみたいなものつくれますか
>>703 次で回答がなければ質問の仕方が悪いと思え。
どうぞ。
↓
マルチは氏んでください
ワロタ
>BMPがテキストになったファイルを
意味若欄
BASE64にでも変換したのか?
質問です
FORM1からFORM2にあるLISTBOXコントロールを操作するにはどうすればいいの?
Form2.listBox1ってやってもコンパイルでエラーが出る。
みんな暇そうにしてんだから教えてくれ
おれは今からデートなんで、夜には帰るからそれまでに回答よろ!
710 :
デフォルトの名無しさん:02/11/18 13:18
てか、age
711 :
bloom:02/11/18 13:21
>>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
ふ〜、今帰ってきたYO
やっぱ手コキが一番気持ちいなw
てか、マジレスついてんじゃん(ワラ
正直、期待してなかったんだけど、あんたらいい人過ぎるYO!!
これじゃあ、初心者が調子乗ってしまうぞ
まあ、なにはさておき>715感謝!!
719 :
デフォルトの名無しさん:02/11/18 22:53
これももしかしたら即出の可能性があるのですが、
ArrayListにint型ポインタを格納するにはどうしたら
よいのでしょうか?
STLのVectorの場合は
vector<int*>などとやるのですが・・
>>719 「くわっぱ!!」と大きな声で叫ぶといいかも
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とかじゃダメなの?
VS 2003 って、ロードマップに出てる Everett とは別物?
あと、C# にテンプレートが追加されるのって Yukon で?
>>726 次(マイナー) VS 2003 = Everett
その次 テンプレート追加 = for Yukon
そのまた次 for Longhorn
>>727-729 おまいら、VS .NETとSQL ServerとOSのコードネームごっちゃにして話すすめるなよ(w
>>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#からまんま同じコマンドを実行すれば?
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」あたりから。
Javaだと次のようにインスタンス化されなくても実行される
処理がstatic{}でかけたのですが、C#ではどうやるんでしょうか?
private static int hoge;
static {
hoge = 99;
}
>>746 さんくすこ。
くすこだって。。。。ポッ...
>>746 そのstaticなコンストラクタだけを実行させることは出来る?
Javaだと、Class.forName("クラス名"); だけど。
>>748 スタティックイニシャライザって、VMの実装にもよると思うけど、
そのクラスが必要になったときに自動で動作するもんでしょ?
Class.forNameとかとは関係ないと思うのだが。
>748 の言ってるのはJDBCドライバとかの話かな?
>>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変な時あるよ。一行長すぎると途中で切れて表示されなかったり。
まったくわけのわらん動きするときがある・・・
System.Diagnostics.Processを使って、外部コマンドを呼び出してます。
コマンドプロンプトの画面が一瞬見えるのが凄く気に食わないのです。
WindowStyleはHiddenにしてあるにもかかわらず、しっかり表示されるのです。
例えば、ping.exeを呼び出すとします。
私がやりたいことは、『ping.exeを動かして、その出力だけを変数に格納する』
ということです。ところが、実際はpingを打っている間、黒い画面がフォーム
を覆うような感じで表示されてしまうのです・・・。
なにかご存知ないですか?
>761
Win32コンソールプログラムでもダメですか?
>>761 WindowStyleがNormalだと表示、Hiddenだと非表示にちゃんとなるよ。
pingは試してないが入出力の問題のような?
コンソールプログラムでもだめです。
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();
こんな処理をやってます。ヘルプ見ながらやってたらこういう手続きに
なったのですが、、やっぱり変ですか。
具体的な症状は、
コンソールが前面に表示されて(フォーカスはアクティブになってる)
その間、メインのフォームのコントロールが描画されていない。
因みにスタイルを"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だけど・・・。
すいません。解決しました。
同じ内容の異なるインスタンスに対して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;
コードめちゃくちゃだけどイメージはこんな感じ。すまそ。
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()
こうやって読みに、もしくは読みから書きに変換してくれるプログラムない?
いちいちリード/ライトで対応するコード書くの面倒くさくてさ。
1つ2つならまだいいんだけど20個ぐらいになってくるともうやりたくないってなる気持ちわかる?
779 :
デフォルトの名無しさん:02/11/30 08:44
>>780 えっと,クリックされたときにOnClickが呼ばれるからなんですが・・・
右クリックと左クリックを区別したいときはMouseUp・MouseDown等を駆使するしかないのですか?
>>780 あ,もしかして「何故OnDoubleClickじゃなくてOnClickでやるのか」という意味ですか?
だとしたらなんとなくです・・・すいません。
>>782 780じゃないから予想だが、
OnClickメソッドでなくClickイベントで処理せんのか?
という意味だろう。
で、何かのコントロールを継承してコントロール作成中かい?
>>783 レスありがとうございます。
>OnClickメソッドでなくClickイベントで処理せんのか?
OnClickメソッドの継承とClickイベントにハンドラ追加するのとでは何か違いがあるんでしょうか?
どちらも EventArgs を受け取るようですが。
ListViewを継承したものなんですが,ダブルクリックではなくてクリックで実行したいと思ってやってみたのですが,
右クリックのときにも反応してしまうのです。
>>784 いや、継承したクラスならOn〜をオーバーライドするのでいいよ。
>OnClickメソッドの継承とClickイベントにハンドラ追加するのとでは何か違いがあるんでしょうか?
継承したクラスでの記述ならClickイベントとして記述する必要はないよ。
・・・って、よくよく考えたら
780は唐突にOnClickと言ってるんだろう。そんなことそれまでにでてないような・・・
結局ダブルクリックにすることにしました。
今サイズ変更可能なパネルを作ったのですが,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〜系あるし。
ただ、これを裏付ける解説のあるドキュメントを見つけられんのだけど。
>>787 あ,ほんとですね。確かにPublicイベントにKey系がありませんでした。
ControlのKeyイベントにハンドラ追加したらいけるかなと思いましたがダメでした。
結局,Panel(やLabel,PictureBox等)ではKeyイベントを拾えない,ということになるのですか?
フォーカス持たないコントロールがKeyイベントをどうやって取得するのかと。
>>789 がびーん!そういうことですか・・・。
AxWebBrowserをPanelに追加していて,Panelが一つの単位になってますので
Panelで色んな処理をしようと思ったのですがダメみたいですね。
どうもお騒がせしました。
>>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のステップ実行でデバッグしてるんだよね?
★印に飛ぶ直前に実行したコードを見るのがよいかと。
>>795 これでどう?
try
{
Application.Run(new Form1());
}
catch(NullReferenceException nrex)
{
Console.WriteLine(nrex.StackTrace);
Console.ReadLine(); //StackTraceを読み終えるまで停止させる
}
799 :
あああああ:02/12/02 18:49
今たてこんじゃったので後でやって、報告します。
報告いらんか・・いやしておこう、サゲて。
>>792 Validation OK時にthis.Server.Transfer("元のページ.aspx", false);
とやるだけでOKでした。
素朴な疑問だけど、
C#でゲームプログラミング(DirectX)は速度的に向いてないかな?
やっぱ、C++,Cでやったほうがいいかな。
Java育ちなので、C++,Cはどうも開発効率的に非効率な気がして・・・。
処理的には、早いんだろうけど。
DirectX9βを触ってみたけど、nativeとまったく遜色なかったよ。
これからはC#やVB.NETでDirect3Dするのも普通になったりすると思う。
たとえばPostPetなんかはコレで作っても問題ないだろうね。
バリバリな動きで綺麗なグラフィックの3Dゲームとかも、
C++やCでガリガリ書いたやつとC#で書いたものとを比べても、
パフォーマンス的にそんな劣らないのかな?
PCのクロックやビデオカードの違いの方が、影響が大きい罠。
あとはガベコレでつっかえないかどうか。これはある程度コードを
書いてみないと判らないな。
C#のガベコレってJavaより短い周期で動いてない?気のせいかしら?
ビデオドライバがやるテクスチャメモリのガベコレとか
プログラマが自分で組み込んだガベコレとかのほうが
時間かかってたりしてね〜
C#で自前のフォームを作成し、そのフォームを新しく作ったウィンドウにも継承するにはどのようにすればよいのでしょうか?
public class Form2 : Namespace1.Form1
と記述してデザイナを表示しようとすると
”ドキュメントを読み込み中にエラーが発生しました。”
と出ます。
またDLLを作成してフォームを継承する方法もあるのですが、
DLLの作成の仕方が分かりません。
誰かご指導お願いします。
えっと・・スレッドから、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じゃないといけないの?
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メソッドで出来るのですが・・・
一行づつ取り出して調べるしかないのでしょうか?
>>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呼ぶのが普通。
>>824 >Calc c = new Calc()
>int a = c.CalcMethod(); // 計算させて結果をもらう
>こんな感じで計算した値をもらっちゃいけない理由があるのね?
本当はそれでもいいんです (汗
ただの変なコダワリの類ですが、ワーカースレッドを生成して、それにある処理
を任せたら、計算・経過報告のコードもワーカー側にまとめたいなと
思っていたのです(フォーム側で結果を受け取って表示ではなく)。
フォームのコード量を増やしたくないというのもあります。
>>825 なるほど。そういう手続きを踏むのが普通ということが判れば十分です。
GUIのプログラム書くのが始めてなもので、なんと煩雑な!と思いました
が、そういうものだと理解するようにします。
>>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
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
>>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 ができればもうそっちでやるつもりなので
あわせて宜しくお願いします。
確かに、一度Hide()してからShow()したとき、タスクバーをよく見てみると
子ウィンドウの分バーが1個増えてるね。
C#でグローバルフックってできるんでしょうか?
Σ(゚д゚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さんのコードで分かりました。
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 アホか。本当に反省してると思うのか? あれはタダの芸だ。サルには反省などできん。
851
攻撃するメソッドと攻撃を受けるメソッドを作ってそれぞれイベントを発生させようとしてるんだけど。
ガイドラインに素直に従えば
・攻撃
Attack = 攻撃するメソッド
Attacking = 攻撃しますよイベント
OnAttack = 攻撃しましたメソッド
Attacked = 攻撃しましたイベント
・攻撃される
BeAttacked = (以下同様)
BeingAttacked
OnBeAttacked
WasAttacked
ってーなんか OnBeAttacked とか WasAttacked とかめちゃくちゃいやなんでどうしようか迷ってそうだ、ちょうどいいイベントがあるじゃないかとコントロールがクリックされた時のイベント見てみるまでもなく Click とかなってるし。
どうやったら「クリックされた」が Click の一語に集約されるのか甚だ疑問ってゆーかじゃぁすでに Attack を使ってしまってる俺はどうすればいいのよ。
で .NET Framework の命名ガイドラインがどこかおかしいことはこの際置いといて俺のためのナイスなメソッド名ってないかな・・?
Attack
BeginAttack
OnAttack
EndAttack
寺利編むを思い出すな
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、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規約のコールバックの作り方がわかる奴はやっぱり誰もいないの?
内容不明瞭
WIN-XPホームエデションではVS.NET、特に.NET ASPの開発は不可と聞いた
覚えが。本当ですか。
ホームエディチョンではIISが動かないと思った。
よってIISのアドオンであるところのASP.NETは動かない。
VS.NET自体は問題なく動いてるよ。
>>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 釣れもしないものを釣ろうとするのはお前くらいだよ。
883 :
デフォルトの名無しさん:02/12/08 18:25
ご隠居が釣り竿の手入れをしようと、室内で竿を取り出した。
それを見ていた与作は、「何を釣ろうとしてるんですか?」と尋ねた。
するとご隠居は「部屋の中で魚が釣れるわけないだろう。まったくお前は粗忽だねぇ」と答えた。
すると与作は「釣れるかどうか聞いたんじゃなくて何を釣ろうとしてるか聞いたんですよ。日本語大丈夫?」
と尋ねた。
かくして与作はいつも通りみなの笑い者になりましたとさ。
お後がよろしいようで。
885 :
デフォルトの名無しさん:02/12/08 18:30
与作をバカにするのくらい、必死にならなくても余裕だが何か?
>>883 えーっと。釣り場(2ちゃんねる)で釣りしているのと
釣り場じゃないところ(室内)で釣りしているのとは話が
違うと言いたかったんですか? それとも
>>883自体が釣り餌ですか?
もうそろそろ悔しくて「釣れた」と捨て台詞を吐くころだろう。
888 :
デフォルトの名無しさん:02/12/08 18:40
いやいや、まともなコード書ける奴は釣れないって。
釣れるのは与作ばかりだから、釣れたなんて台詞はとてもとても。
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もコールバックもデリゲートも常識的な用語だろ。
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
↑省略
おまいら実践してますか?
俺はしてませんが。
する訳が無い。
ハンガリアソなんか糞食らえだ。
WSTKじゃなくてWSDKだった・・・。スマソ
あんぽんたんですあっはっは。
普段使ってないのに書き込むもんじゃないなぁ
あんぱんまんです
917 :
デフォルトの名無しさん:02/12/10 13:34
>>902 おいおい、そこに書いてあるようなことなら、DllImportでできるっつってんだよ。
>>910 おいおい、呼び出し規約変えてねーじゃんかよ。
まったくバカばっか。
>>917 うーん、君は何がしたいのかほんとにワカラナイ。Cでいいから例を書いてくれ。
それみて考える。
919 :
デフォルトの名無しさん:02/12/10 14:03
>>917 >>902に書いてあることはDllImportではゼッタイに不可能ですが何か?
できるもんなら見せてみろ。
DllImport無しでっていう事なのね。ネットワーク上に配置してあるDLLを
Reflectionで読み取ろうとしたとか?
しかし放置されたのをきちんと我慢出来ない人なんだね。
教えてって言ったのに、誰も教えてくれなかったニダ
謝罪と賠償を(ry
セクースさせてって言ったのに、誰もさせてくれなかったニダ
謝罪と賠償を(ry
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++ でアダプターを一本挟むことを提案します。
.NET のコールバックは自動的にこれの...
↓
.NET のデリゲートは自動的にこれの...
意味不明だ(;´Д`)
>>931 漏れもそうだと思った。でもそれのやり方なら
>>923さんの.NET 247へのリンクで解説されている。
それをコイツは924で「全然違うよバカ」とのたまわった。
過去ログの参照も指摘されていたが、そこにもC#単独では無理だがILをいじれば可能とされている。
それをコイツは917で「DllImportでできるっつってんだよ」とのたまわった。
だから931さん、それは違うんだ、きっと。もっときっとすごいことなんだ。
それから、コールバックはデリゲート使わなくたって実現できるから、
「コールバックはデリゲート」は正しくない。
2つのアプリケーションのインターフェイスとしてファイルを使っている。
両方とも頻繁にそのファイルにアクセスするのでファイルの読み書きの競合が発生する。
それで、その sr= File.OpenText(....);があるブロックにtry{}で囲み、 finally{}で後処理をしてエラーがでても中断しないようにしたつもりが、まだ同じエラーがでてくる。
もう理解不能なのでだれか説明してくれませんか?
ちなみにエラーは別のプロセスがそのファイルを使用しています。とかいう趣旨のもの。
エラーを拾って構造的な処理をしたいのではなくて、ただそのエラーが出るのが分かっているので無視して処理を進めたいということです。
936 :
デフォルトの名無しさん:02/12/11 23:23
現在、ListViewにデータを表示するアプリケーションを作成しています。
ListViewクラスはデータをListView内に保持するので、自作クラスにデータを持っていると
データの2重管理になってしまいます。
Model/Viewのような感じにしたいのですが、そういった考えは古いのでしょうか?
>>936 ListView以外にViewを持つ可能性があるなら、Model/Viewにして
データを二重持ちにしたほうがいいだろうねえ。
その可能性がないならListView派生クラスにボッコボッコ埋め込む。
>>935 try{}catch{}finally{}
catchしる。
>>937 どうもです。
リストビューで使うデータは他の表示でも使うので、どうしようかと。。
2重にするとデータの入れ替えとか起きたときに整合性を保つのが大変っぽい。
やっぱリストビューを表示とデータ管理クラス両方の役にするのがいいっぽいかな。
>>939 他のViewがあるなら、迷わず二重持ちにするけどなあ・・・
その、他のViewが参照のみで、操作をしないのであれば、
ListViewがデータ管理役になっても大丈夫かな?
>>938 特にしたい処理がなければfinallyだけで良いと思っていたんだけど。
空のcatchでやってみます。thanks
>>941 キャッチしないと例外が外に飛び出てっちゃうよ
>>942 try-finally だけの構文もありと書いてあったので、一番一般化されたエラー処理はこれなのかなと思っていました。
それはなんのためにあるの?
>>943 漏れはそのtry-finallyは使わないけど
メソッド使用してる側でcatchすれば用が足りる時、使えるかもね
でも
try{}catch(Exception error){ throw error;}finally{}
ってしたほうがわかりやすいと漏れは思ってる。あくまで漏れの考えだけどね・・・
946 :
デフォルトの名無しさん:02/12/12 04:45
>>939 迷わずModel/Viewにするのがいいんでは?
データは一元管理にしないといかんでしょ
そうしないと、いわれてるように更新、同期の管理など大変に.
ListViewだとどう実装するのかは知らないんですが、オーナードローになるのかな?
マスひとつひとつをセルとすると必要なセルの表示時にデータを見に行って表示って感じか
948 :
デフォルトの名無しさん:02/12/12 19:08
ほほう、C#でデリゲート以外のコールバックができるとな?
ここはC#のスレであって、C++のスレじゃないぞ。
ちなみに俺は解決した。
他にできる奴はいねーの?(藁
>>948 俺できるよ。でもそんなひれくれた聞き方するやつになんか教えない(藁
>>950 嘘つくな。お前にできるわけねーだろ。
本当だと言い張るんならソース見せてみろ。
>>951 嫌。出来ないと思われても良いよ。見せるよりマシ。
954 :
デフォルトの名無しさん:02/12/12 23:43
>956
立ってるよ
958 :
デフォルトの名無しさん:02/12/13 01:06
ほどよく荒れてるな(W
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
デバッガでこまめにメモリ内容チェックしたから。
962はstructだからガベコレは無関係だぞ
968 :
デフォルトの名無しさん:02/12/13 12:30
structもガベコレされることすら知らない967がいるスレ
structがガベコレ対象だと思い込んでいる968が煽るスレ
structはガベコレされません。
>>962 これきついね。APIに渡すための構造体を wrap するクラスは全部 pin
するってこと。。。?
>>962 いや、それはstructの使い方が間違っているってことだろう。
アドレスをメソッドに渡したらアドレス(32ビット数値)が残っているだしょ。
IntPtrにキャストしてるんだから。
素直にヒープに取ればいいじゃん。ちなみにpinは関係ないよね。
>>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; // コメントはずすと正しく動くよ
}
}
まず、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 に受け取ります。
*/
次に、正常に動く(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 に割り当てられる
// 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 に渡されているので正しく動きます。
次に、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 に割り当てられず綺麗さっぱり消滅します。
// 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;
}
}
とりあえず再現する最小限のコードを乗っけます。(行数の関係でかなり押し込みましたが)
問答無用で最初のローカル変数が表示されるようです。
どうやら結構複雑な問題のようで、アドレスを取るだけでは問題は発生せず、
それより前に 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でした。。。。
>>982 あれぇ〜〜??
ってことはもしかしてこっちの.NET Frameworkが古いのかも?
SP2当ててなかったっけな・・・?
ShowValue( new IntPtr( &valueWantToShow ) );
のところを
fixed(int* p = &valueWantToShow){
ShowValue(p);
}
にしたらどう?