C♯相談室 Part13

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

(#゚ー゚)つ < C#、.NET、WinFXの話題はこちらでどうぞ。


過去スレ・関連リンクは>>2-5あたり。

ソース置き場.NET
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&rm=10
2名無しさん♯:03/12/17 21:18
3最凶VB厨房:03/12/17 21:19
otsu
キタ―――(゚∀゚)―――― !!
5デフォルトの名無しさん:03/12/17 21:37
前スレの
>>935
> 外部DLLで取得したセッションIDで読み>込みうまくいきましたか?
> ERRORもうつかえません となるのです>が、、
同じことになります。
C#で●に対応してるのってありましたっけ?
6情けない質問で御免なさい:03/12/20 02:01
文字列に、指定した文字が含まれていることを確認するためには、
どのクラスを使えばいいんでしたっけ?
String.IndexOf("hoge")
8デフォルトの名無しさん:03/12/20 05:25
ねえ、みんなは2003年バージョンなの?
漏れは2001年なんだけどさ、
バージョンアップした方が良いのかな?
教えてよ。
質問です。
VisualStudio.NET2001 に対して、VisualC#.NET(2003)を
インストールしても問題ないのでしょうか?
>>9
微妙に意味がわからんが共存は問題ない。
デフォルトのインストール先フォルダも異なってるし。
ちなみに2003で保存したプロジェクトは(元々2002で作ったのでも)2002で開けることができないので注意。
11デフォルトの名無しさん:03/12/20 12:13
>>10
漏れの質問にも答えてくれよ。
>>8これさ。
>>11
やりたきゃやれよ。

Visual Studio .NET 2003 にアップグレードする 10 の理由
ttp://www.microsoft.com/japan/msdn/vstudio/productinfo/topten/upgrade.asp

Visual C# .NET 2003 にアップグレードする 10 の理由
ttp://www.microsoft.com/japan/msdn/vcsharp/productinfo/topten/upgrade.asp

私はOrcasまで待つけどな。
Visual Studio .NET 2003 にアップグレードしない 10 の理由

1つ、高い
2つ、マンドクセ
3つ、以前のバージョンでプロジェクトがロード出来ない
4つ、現状で特に不満は無い
5つ、突撃組みはデバッカーになる運命
6つ、もう直ぐまた新しいのでるんだろ?
7つ、VisualStudioは見限りますた
8つ、語呂が悪い
9つ、何となく
10、ゲイツのお友達じゃないから♪
>>13
一つにまとめてアホアンチだからでいいんじゃない?w
15いなむらきよし:03/12/20 15:00
キケー!
16デフォルトの名無しさん:03/12/20 16:39
>>12
あんがと。
2003のほうがビルドが速い
Hashtableの中身をデバッガで見やすい
VisualJ++のjavaパクりAPIが使える
2002でもJ#をただでダウンできるよ
Bitmapクラスのコンストラクタで、

Bitmap( int width, int height, int stlide,
PixelFormat fmt, IntPtr ptr )

というのがありますが、最後のIntPtrというのに
どういう形で値を渡せばよいのでしょうか?

やりたいことは、256個のパレットを参照するビットマップデータ列
を作ることなのですが・・・

ピクセルフォーマットは
PixelFormat.Format8bppIndexed を指定すればよいとして、最後が
よくわからないのです。
20デフォルトの名無しさん:03/12/20 20:10
>>10
ありがとうございます
ボーランドマンセー
2001は1.1じゃない時点でヤバい

そもそも無料アップグレードだったし
・相変わらずMSの貧弱で分かりづらいヘルプ
・とってつけただけの機能しかない.NET Frameworkライブラリ
・何をするにもクラスが必要になる使い勝手の悪さ

だめだこりゃ
>何をするにもクラスが必要になる使い勝手の悪さ
いくら釣りとはいえ、これに文句つけるのは無理があるだろ。


と、釣りにマジレスしてみる。
25デフォルトの名無しさん:03/12/21 09:16
自作のUserControlなのですが
自動で作成される以下のメソッド内の
private void InitializeComponent()
以下の行がなぜかデザイナをいじくると消えてしまいビルド時に警告が表示されます。
components = new System.ComponentModel.Container();

自動で作成されるメンバ変数componentsはこれまた自動で作成される
自フォームのDisposeで使用されているようなので困っています。
どのタイミングで勝手に消えるのかわかりませんがいじっていると
すぐ消えてしまい何度もビルド時警告がでます。
そもそもメンバ変数componentは必要なのでしょうか?
それとも私がなにかいじって壊してしまったのでしょうか?
ご存知の方、よろしくお願いします。
26デフォルトの名無しさん:03/12/21 09:54
VBのsplitは文字列をデリミタに指定できるのですが(なぜか)。
C#のsplitは文字しかデリミタに指定できません。
VBのsplitと同じことを簡単に実現するにはどうすればいいのかおしえてください。
>>26
1) Regex.Splitを使う
2) Microsoft.VisualBasic.dll(Microsoft Visual Basic .NET Runtime)を参照し、
 Microsoft.VisualBasic.Strings.Splitを使う

お勧めは1だが。
ちなみにこのVBの関数はVB6までとの互換性(というか移植性)のために残してるって奴だろな。
28デフォルトの名無しさん:03/12/21 10:57
早速のご教授ありがd
早速試してみます。
29デフォルトの名無しさん:03/12/21 12:16
一件もレコードの入っていない空のテーブルから
テーブル定義を取ってきてある列の型を調べたいと思います。
OleDataAdapter.FillSchema()メソッドでいけると思ったのですが、
このメソッドってOleDataAdapter.SelectCommandが設定されていないと
使えないようで困っています。
例えばSelectCommandに目的のテーブルをSELECTする
SELECT文を書いたらテーブルが空のときは取得できませんよね。
単純にあるテーブルのある列の情報が欲しいのですが
こういう時はどうすればいいのでしょうか?
よろしくお願いします。
FillSchema自体見当はずれでしょうか?
30デフォルトの名無しさん:03/12/22 19:41
メッセージボックスってバグが存在しないですかね?

俺はこれで2回目なんですけど、
どう考えてもエラーが出るはずの無い局面で参照がインスタンスに設定されて無いと言う
例外が出るんですよ。
それもメッセージボックスにですよ。
これ、おかしいでしょ!?
メッセージボックスは自分が作ったコードじゃないし、
そもそも何回かに一回だけ、たまに例外エラーが出るんですよね。
デバッグしてみると、やっぱり、メッセージボックスのところが表示されてそこで引っかかるんですよ。
で、メッセージボックスをコメントにすると、例外が出なくなるんですよね。
これってありえないでしょ!?
それともメッセージボックスは必ずフォーム1からしか呼んじゃいけないと言う
決まりでもあるんですかね?
漏れは、フォーム1では無く、サブのサブのインスタンスからメッセージボックスを呼んでるんですけどね、
だから、やばいんですかね?そんなことありませんよね?
何でだろ?
31デフォルトの名無しさん:03/12/22 20:01
漏れのは2002年バージョンだからかな?
2003年にバージョンアップすれば大丈夫とか?
そのメッセージはぬるぽだ
  ∩∩⌒ヽ∩
  (゚x゚)((ノ))ソ         | |
  ソ从i|゚ ヮ゚从 < 天罰!  | |  ドガッ
.    ⊂).合f )         人
.    Zくんl,/         <  >__Λ∩
      し//      // V`Д´)/ >>32
       //             /
.    Z//Z 彡
    (。x。)
    U U
34デフォルトの名無しさん:03/12/22 23:19
漏れは、
.Invalidate();
してから、
Thread.Sleep(2500);
を呼んでるんですけど、
全然書き換えてくれないんですよね。
何でですかね?
同じメソッド内での話しなんですけど、
もしかしたらあれですかね、
.Invalidate();は、今のメソッドが最後まで処理を終えてから初めて、
呼ばれるんですかね?
だから、同じメソッド内で.Invalidate();とThread.Sleep(2500);
を同時に呼んでも、駄目なんですかね?
そのメソッドが終わるまでに、また別の絵を書き換えるんですけど、
その一瞬の絵を止めたいために、Thread.Sleep(2500);
を呼んでるんですよね。だけど、書き換わらずに止まっちゃって、
それで動き出したら一瞬で、絵が変わっちゃって、
その止めたい一瞬の絵が自分には全然見えなくて困ってるんですよね。
ここはやはり、マルチスレッドとかを学ばなければいけないと言うことなんでしょうか?
35デフォルトの名無しさん:03/12/23 00:53
>>34
Thread.Sleep(2500);しててどうやって書き換えろって言うのん?
>>30
状況が把握できないがバグとは考えにくいよ。
自分の書いたコードを疑うべき。
具体的に書いてみれば?
37デフォルトの名無しさん:03/12/23 13:03
'byte[]' を型 'string' に暗黙的に変換できません。
というエラーが出るんですけど
変換するにはどうすれば良いのでしょうか?
>>37
やりたいことによって幾つか手段があるが、
多分System.Text.Encoding.GetStringだろう。
>>30
インスタンスで呼び出し?
HandleCreate前なら例外出るだろうねえ。そりゃ。
owner渡さず出してみたら?
40デフォルトの名無しさん:03/12/23 14:34
 C#のことを最近まで、CやC++・Objective CなどのCファミリーだと思っていたおれ。
M$は大まじめにCファミリーだと思ってますが何か。
まあ、ファミリーといえばファミリーかも。
確実に3親等以内には入ってないけど。
一応、Cファミリーなんじゃね?
俺会社の採用情報条件のところにC/C++/C#って書いてるし
C++マンパイラはCもmake出来るけど
C#はC++とCのコードをコンパイル出来ないので
ファミリじゃないと言えばそうかも。
言語的にはファミリだと思うけど
>>44
ファミリーと互換性は関係ないだろ。
というかファミリーなんてあいまいなくくりは意味はないだろ。
>>34
Invalidate()とUpdate()を一緒に呼ぶか、
Refresh()で更新されると思う。
public MenuItem(string text, MenuItem[] items)でアイテムを入れ子にできるわけですが、
このitemsをメニュー作成後に追加したり削除したりするにはどうすれば良いでしょうか。
4847:03/12/24 03:57
itemsそのものを追加するのではなく、
MenuItems.Clear()とMenuItems.Add()を使えば動的に作成できそうだ。
が、Clearした後にAddを2回以上行うと、その部分のメニューだけ表示されなくなる(´・ω・`)
4947:03/12/24 07:19
発見
http://www.fastwave.gr.jp/diarysrv/misuzilla/200308a.htmlの4日分

追加先の項目のEnabledをfalseにして追加したら正常に動作。
50デフォルトの名無しさん:03/12/24 09:07
>>36
多分、おそらくなのですが、その後原因と思われる事象が思い当たりましたので
報告しておきます。
メッセージボックスはペイントイベントからは呼んではいけないと言う決まりがありますよね。
それは、メッセージボックスによってペイントイベントが起動することもあるからなのですが、
(アプリの上にメッセージボックスが発現した場合など)
もちろんこれは守っているのですが、
私の場合は、ペイントイベントで使用する、ある程度大きい配列を
メッセージボックスを呼ぶコードの一瞬前で使用しているんですよ。
そして、メッセージボックスの一瞬前のコードと、
メッセージボックスから副作用的に呼ばれるペイントイベントのコードと
両方から同じ1つの配列がコールされるんですよね。
で、つまりそれで矛盾が起きて、片方で配列を初期化してる途中なのに、
もう片方で、参照しようとしても、参照できないので、
「参照がインスタンスに設定されてません」と言う、例外が出るんだと思うんですよ。
だから、配列の初期化等が終わってしまえば普通に参照できるので、
ペイントイベントが呼ばれるのが、ほんの一瞬早いか、遅いか、
またはメッセージボックスが自アプリ上に重なってないか、、、
によって例外が出たり出なかったりするんだと思うわけです。
51デフォルトの名無しさん:03/12/24 09:10
>>46
なるほど。ありがとうございました。
メッセージボックスでは例外が出ることもあることがわかってからは、
変わりにスレッド停止でアプリを止めようと考えてたわけですが、
なかなか上手く行きませんでした。
今度はその方法を試してみようと思います。
数値1を文字列01に変換するのってどうやるんだっけ?
53デフォルトの名無しさん:03/12/24 10:29
値1のENUM型の文字列01をTo.String()せよ。
54デフォルトの名無しさん:03/12/24 10:30
デバッグってさ、
時々問題のある箇所のちょっと前や後に
ひっかっかったりして表示されることもあるよね?
Label コントロールに文字列を代入する際、
その Label コントロールの幅で、その文字列を表示するのに
必要なコントロールの高さを調べたいのですが、
何か方法はありますでしょうか?

やりたい事は、横幅は固定の Label コントロールに文字列を表示
させる際、文字列を表示させるのに必要な高さにLabelコントロールを
調節したいので、高さを調べたい、という事になります。

英文を表示させると、次の単語が同一行に入らない場合、自動的に
次の行に単語を送ってくれますよね?

そのあたりも含めてなんとか取得できないかと思っているのですが。
よろしくお願いします。
56デフォルトの名無しさん:03/12/24 11:33
普通にラベルのプロパティ一覧に、その属性の項目があるんでないかい?
インテルセンスで調べてみたら?
ラベルのインスタンスの識別名の後にピリオドを打ち込めば一覧が出てくるからさ。
ファイルからテキストを読み込んでRichTextBoxに表示させる時、
テキストファイルに\r\nと書いておいても改行されず、\r\nがそのまま表示されてしまいます。
うまく改行させるにはどうすれば...
>>57
改行させとけば良いんじゃないかね。
5955:03/12/24 11:59
>>56
いや、それは多分Labelコントロールに表示できる行数
のプロパティがあるだろ?という事をおっしゃりたいと思うのですが、

私がやりたいのは、可変長の文字列を Label コントロールに表示
させる際、必要な行数を知りたいんです。

例えばアルファベットで 6文字程度表示できる幅をもった Label コントロールに
"Hello" という文字列を表示させたいときは 1行ですみますが、ここに
"Hello.How do you do?" という文字列を表示させるには、4行必要になりますよね?

この 1, 4 という値を求めたいのですが、方法はありますでしょうか?
6057:03/12/24 13:22
>>58


自力で改行処理を加えようと思い、\r\nを区切り文字としてstring[]を作ろうとしたのですが、
s = Regex.Replace(data, "\r\n", ",");
置き換えされません(´・ω・`)
>>60
結局何をどうしたいのか一から説明した方がいいかもしれない。
62デフォルトの名無しさん:03/12/24 14:30
引数を渡せるプロパティは存在しないのか?
本当にそれはプロパティとして実装すべきなのか?
64デフォルトの名無しさん:03/12/24 16:29
うん。
>>60
\r\nの文字を改行に置き換えたいなら
Regex.Replace(data, "\\r\\n", "\r\n");

改行でstring[]を作りたいなら
Regex.Split(data, "\r\n");
66デフォルトの名無しさん:03/12/24 18:19
>>46
実際にその方法でできました。
ありがトン。
67デフォルトの名無しさん:03/12/24 23:42
>>55
GraphicsとMeasureStringで取れると思う

Graphics g = CreateGraphics();
//最大エリアの作成: 幅だけ規定して高さはテキトーな大きい値で。
SizeF layoutArea = new SizeF(100F, 1000F);
SizeF resultSize = g.MeasureString("計りたい文字列", <使うフォント>, layoutArea);

resultSize.Heightに実際の高さが入ってくるはず…
6855:03/12/25 10:23
>>67
MeasureString でいけました。
ありがとうございました。
69デフォルトの名無しさん:03/12/25 12:01
こんにちは。
Response.Redirect("WebForm1.aspx?p=こんにちは");
ではpのパラメータを自動変換(Base64へ?)してくれるのですが、
HyperLinkの
NavigateURL= "WebForm1.aspx?p=こんにちは";
では自動で変換してくれません。
変換方法を教えてください。
よろしくお願いいたします。



System.Web.HttpUtility.UrlEncode
出来ましたっ
ありがとうございます。
クラス内で宣言した privete の変数を外部に公開する為に
プロパティにしてアクセスできるようにしました。

そのクラス内で、その変数にアクセスするには、変数を直接操作しても
プロパティで操作しても同じ結果になると思いますが、
一般的にどちらの方法で変数を操作するほうが望ましいのでしょうか?
unionが見当たらないのですが
このバグは2003で改善していますか?
>>72
とりあえず、プロパティ通しといた方が仕様変更に強くていいぞ。
75デフォルトの名無しさん:03/12/25 21:32
すげー初歩的な話ですまんが
Hashtable[] aa = new Hashtable[5];
Hashtable[] bb = new Hashtable[7];
ArrayList tmpArray = new ArrayList();
tmpArray.Add(aa);
tmpArray.Add(bb);
Hashtable[] cc = (Hashtable[])tmpArray.ToArray(typeof(Hashtable));
2つの配列をくっつけていわけだがどこが間違ってる?
ToArrayで例外が出てしまう
>>75
tmpArrayは2個しかないんじゃないのか?それ。
>>73
Javaにもunionないよ。
7875:03/12/25 21:41
76で解るとは思うけど言葉足りないかも。
AddRangeがあったかどうか憶えてないけど、あればToArrayでそれを足して。
無いならループだし、ArrayListの仲介は不要だろうね。
(;゚д゚)ァ....
Hashtable[] aa = new Hashtable[5];
Hashtable[] bb = new Hashtable[7];
ArrayList tmpArray = new ArrayList();
tmpArray.AddRange(aa);
tmpArray.AddRange(bb);
Hashtable[] cc = (Hashtable[])tmpArray.ToArray(typeof(Hashtable));
だね・・・ほんとショボカッタヨ
>>76サンクス
>>78
あ、ごめんずれた。75じゃないや76か。解決してるしいいけど。
81デフォルトの名無しさん:03/12/26 00:45
ずばり、きく!!
VC#で、OpenFileDialogで指定ファイルをダブルクリックすると、
そのダイアログの下にあるコントロール(pictureBOX等)の
MouseEventも発生してしまうよな。
これ、不便じゃない?
僕は、最初のMouseEventは無視するように
プログラムをしてるけど、対策ないんすか?
>>73
union いらね。
でも、C# では一応、StructLayout 属性付けてうまくやれば union っぽいこと出来るよ。
ListViewの項目の上でクリックした時だけContextMenuの項目がEnableに
動作するようにするにはどうすればいい?
Windowsのアプリケーションの開発方法がイマイチよくわからないなあ。お薦めの本とかありますか?
ContextMenu.PopupイベントでListViewの項目が選択されているかどうかを設定

contextMenu_Popup(object sender, EventArgs e)
{
menuItem1.Enabled = listView1.SelectedItems.Count > 0;
}

こういうこと?
8583:03/12/26 04:54
>>84
ありがとー。できたよ。
今までPerlしか使ったことがなかったので、極々当たり前の動作を
書くだけでも一苦労だよ。みんな凄いなあ。
86デフォルトの名無しさん:03/12/26 10:29
C#、そして、ロングホーン、.NET環境は、
プレイするにしても、開発するにしても、
同人ゲーオタには最高の環境になる気がする、、、。
>>81
さらに言えば、DELETEキーをKeyUpなりKeyDownなりで拾うコードがあるときに、
CTRL+ALT+DELETEを押すと反応してしまったりする(WinXP)。これも不便だ。

他にもMessageBoxのYesNoボタンをEnterで確定させたときに、MessageBoxが閉じた後
にフォーカスを持つコントロールに対してEnterキーが押されたことになってしまう。

これは一例で、どうも似たような現象が色々と起こるんだけど、この辺どうにかする
方法無いですかほんとにもう。
フレームワークがアフォ[未熟]なんだろ
89デフォルトの名無しさん:03/12/26 20:21
いや、これは、ハードレベルの問題じゃねえか?
3っつのボタンが押されたときに、
2つのボタンだけが押された場合を除外するには、
ハードレベルの最小単位の時間レベルで見て、
最小単位の時間さえ(例えば、60分の一秒とか)も、2つだけ押された場合が無いように押さないといけないわけだろ。
つまり、3っつのボタンの完全同時押しだ。
人間業では不可能だろ。これは。
> さらに言えば、DELETEキーをKeyUpなりKeyDownなりで拾うコードがあるときに、
> CTRL+ALT+DELETEを押すと反応してしまったりする
それって当たり前じゃないか。
ModifierKeysプロパティを確認すればいいだけのこと。
同期について質問。

for(int i = 0; i < list.Count; i++) {
 list[i]を読み込み(書き込みはしない)
}

という処理をしている時に、別スレッドでlist.Clear()とかされたら、
タイミングによってはエラーが出るよな。
これを対策するためにlock(list.SyncRoot)を使うと思うのだが、
このlockステートメントは、読み込み時と書き込み時の両方に書かなければならない?
それとも書き込み時だけで良い?

あと、ArrayListはArrayList.Synchronized(new ArrayList())とラップできるのだが、
ラップとlockはどちらが必要?それとも両方必要?
92デフォルトの名無しさん:03/12/27 10:57
OleDbCommandオブジェクト cmd がありまして
cmd.CommandText="SELECT * FROM TABLE_NAME WHERE IDNO=?"
というコマンドが設定されています。
WHERE文を動的に変更するためにParameterオブジェクトを利用して
SQL文のなかの?をうまく使用しています。
このコマンドオブジェクトを利用してTABLE_NAMEから
全件取得するためにはどうすればいいのでしょうか?
cmd.CommandText="SELECT * FROM TABLE_NAME"
と設定しなおして使用後元に戻す、という方法しか思いつきません。
なにか簡単な方法があると思うのですがどうすればいいのでしょうか?
93デフォルトの名無しさん:03/12/27 11:45
where句のParameterを「>0」とかにでもしてみれば?
そしたらIDNOが0以上のものが全件出てくるんじゃないの?

やったことないけど
94デフォルトの名無しさん:03/12/27 12:36
初歩的な質問で申し訳ないのですが。
プログラムと同じディレクトリに置いた初期化ファイル(たとえば、XX.ini)にアクセスするにはどのようにすればいいのでしょうか。

それと、Driveの情報を取得するのはどうすればいいのでしょうか(WSHのDRIVEオブジェクトのようなこと)。
9567:03/12/27 12:51
>>92
基本的にText書き直すほうが礼儀正しいやり方だと思う

パラメータに「"0 OR 1 = 1"」とやればORの後ろが必ずtrueになるので
全件取得できるけど、セキュリティ的に問題あるね。

こういう動きをユーザーにやられると困るから
パラメータをUIから入力させてるなら
ちゃんとチェックしないとダメですyo



9667:03/12/27 12:52
ああ、クォートした上に鍵カッコでくくってしまった…
クォートに意味はないれす
他スレで見たんだけど英語がわかりません。
どなたか試してみてください。おながいします。
http://cs-sdl.sourceforge.net/
>>94
iniファイル使うには自前で解析するかDllImport汁

ドライブ情報の取得はここらへん
ttp://ukamen.hp.infoseek.co.jp/Programming/File/#SEC73
99デフォルトの名無しさん:03/12/27 20:17
AxWebBrowserコントロールについて質問です。
ToolBar上の進むボタン「→」と戻るボタン「←」を制御をする為に
AxWebBrowserコントロールのCommandStateChangeイベントで以下の命令を書いています。
if (e.command == (int)SHDocVw.CommandStateChangeConstants.CSC_NAVIGATEBACK)
this.toolBar1.Buttons[0].Enabled=e.enable;//戻るボタン制御

else if (e.command == (int)SHDocVw.CommandStateChangeConstants.CSC_NAVIGATEFORWARD)
this.toolBar1.Buttons[1].Enabled=e.enable;//進むボタン制御
このAxWebBrowserコントロールを初期化後にページをNavigateしたいのですがやり方がわからず困っています。
具体的に言うとこの状態で他のページを表示したくて
AxWebBrowserコントロールのNavigateを使用すると戻るボタンが有効になるのですが
これを一番初めに表示されたかのように戻るボタンを利用不可状態にしたいのです。
それにはAxWebBrowserコントロールが内部で保持している履歴のようなものを削除すればいいのだと
思うのですがどうすればいいでしょうか?
>>99
何がやりたいのか分からん。
戻るリストを消すことは出来るけど、結構面倒くさいよ。COMの定義とか。
C#と言うよりIEコンポーネントに関する質問だし。
C#コンパイラー利用法についての相談です
.NET Framework SDKをインストすればC#コンパイラーが手に入るみたいですが、
すでにインストされているVisualC++.net Standard Version2003からC#を利用できないものでしょうか?
レジストリをiccから書き換えて味噌
103デフォルトの名無しさん:03/12/28 00:43
>>98
THX

104デフォルトの名無しさん:03/12/28 01:00
C#でリエントラント不可なプログラムを書くにはどうしたらよいのでしょうか?
>>104
ローカル変数使わなきゃいいよ。
Form.Show()を呼ぶと固まる不具合が
this.BeginInvoke(new ShowTableCallback(Form.Show))とやったら解決されたんだが、
これはどういう理屈なんだろうか。
>>106
もしかしたら新しく作成した別のスレッド上からShowメソッドを呼んだのでは?と勝手に予想。
Windowsコントロールはスレッドセーフではないので別スレッド上から直接操作するのは危険。
そんな時はControl.Invoke(同期)またはControl.BeginInvoke(非同期)を使う。
全然違ったらスマソ
splitterが上手く使えん(´・ω・`)
panel1をDockStyle.Left、
splitter1をDockStyle.Left、
panel2をDockStyle.Fillで何か問題あるのだろうか。
109108:03/12/28 13:03
ごめん謎が解けた。
Controls.AddRangeで同時にぶち込まんとあかんらしい。
ちゃんとヘルプに書いておけチクショー_| ̄|○
>>109
> Controls.AddRangeで同時にぶち込まんとあかんらしい。

別にそんなこと無いよ?
panel1.Dock = DockStyle.Left;
splitter.Dock = DockStyle.Left;
panel2.Dock = DockStyle.Fill;
Controls.Add(panel2);
Controls.Add(splitter);
Controls.Add(panel1);
で問題ないし。
Addする順番の問題(panel2とpanel1を入れ替えると不可能になる)。
VisualStudioならコントロールの入力順(と言うかzオーダー)の問題。
>>101
VC++ .net をインストールすれば .NET Framework もインストールされるんだが。
どうにもこうにもRichTextBoxの自動スクロールができないんでListViewに切り替えようと思うのだが、
ListViewの自動スクロールはどうやるのだろうか。
ListBoxならスクロールは簡単にできそうだが、文字に色が付けられないし。
>>112
ListView.EnsureVisible(int index)
114デフォルトの名無しさん:03/12/28 15:48
質問です。
.NETを使用した場合
VC#でもVC++でも同じバイナリが吐かれるのでしょうか?
同期と非同期の違いがわからん。何が違うというのだ。
>105
ちょい待て。それは「リエントラントなコード」じゃないかい。
>104はリエントラント"不可"と書いている。
つまり、そのコードを実行しているのは、常にただ一つのスレッドのみであることが
保証される(しかも再帰実行も排除するのかも)、というのが欲しいんじゃないのか?
>>111
すみません 説明不足でした
C#のプロジェクトをVS.NETで作りたいのです

今現在のプロジェクト作成画面
ttp://www1.speednet.ne.jp/~chiba_01/ss1.jpg

希望するプロジェクト作成画面
ttp://www1.speednet.ne.jp/~chiba_01/ss2.gif

フリーの開発環境もあるみたいですが、せっかくVS.NETがあるのだから使いたくて
118デフォルトの名無しさん:03/12/28 17:35
>>117
素直に VS 買え
>>117
.net framework しかないのなら、cscが使えるだけで開発環境ではC#は使えないんじゃないの?
# Administrator でのログイン(・A・)イクナイ!!
>>117
その部分はテンプレ作ればいいが、その後はどうだろか?
121114:03/12/28 18:05
誰か教えてください。
全てランタイムの上で動いてるなら同じバイナリという理解で宜しいのでしょうか?
>>114
C# と C++ でそれぞれの Hello world をつくってみろ。でもって fc しれ。
上にもあるようにレジストリの設定を書き換えれば
VCからほかのコンパイラやリンカを呼べるようになる
でもIDE自体がC++用なのであまり意味はない。
インテルコンパイラとかも差し替え可能だし
C#を買いますた。
C#でWindowsアプリケーション作りたいです。
でも、クライアントはVB6しかやったことないです。

で、サーバーサイドのJavaフレームワークみたいに、
なんていうかこう、一本筋の通った、基底クラス群を
まず作りたいのです。

Strautsなんかには絶対敵わないけど、自分がJavaを
理解できてる範囲で作った漏れ専用フレームワークは
其れなりに身を助けてくれてます。

VB6でもやっぱり漏れ専用フレームワークがあって、
これまた何かちょっとした開発には役立ったりー。

そういうのをC#でも作りたいです。
でも、JavaやらVBの漏れ専用フレームワークは、
結局、どっかで見たやつをぱくってきたり、
仕事でどうしようもなくて仕方なく頑張って実装したりと、
なんて言うか、散らかってるけど、どこに何があるか
分かる部屋みたいな。

でも、折角、新しくC#を学ぶんだから、
美しく無駄の無いスマートな感じにしたいのです。

漠然としてますが、アドバイス頂けますでしょうか?
126デフォルトの名無しさん:03/12/28 19:42
>125
フレームワークっつーより、お主が言っておられるのは
ライブラリでは?
127125:03/12/28 19:44
ああ、フレームワークだなんて大層な言い方でした。
そう、ライブラリです。スパゲッティなライブラリ。お恥ずかしい。
128126:03/12/28 20:43
>127
ライブラリでも実行ファイルでも、美しく?書くのは同じ事だと思うよ。
ちなみに俺も可読性最悪だけど…
129117:03/12/28 21:21
どうやらC#を購入しないと無理みたいですね
情報どうもありがとうございました

一緒に入ってるやつ買えばよかったなぁ
130デフォルトの名無しさん:03/12/28 21:30
一人で使うなら構わないのだが…
仕事でやるなら下手な自前ライブラリとか入れてほしくなかったりする人(・∀・)ノ
131デフォルトの名無しさん:03/12/28 21:50
構造体に自分で自分を初期化するメソッドを作れないのでしょうか?

構造体名.初期化();

見たいな感じでやれたらなんか、かっこ良いじゃないですか。
ちょっと試してみたけど、漏れのレベルじゃ全然駄目ですね。
なんか、すごい人ならできそうな気もちょっとしたんだけど、
そんなことありえない話ですかね?
132デフォルトの名無しさん:03/12/28 21:59
構造体の代わりにクラス使え。
全角の括弧に全角のセミコロンなんて見ていて気味が悪い
134デフォルトの名無しさん:03/12/28 22:22
class xyz = new xyz();
xyz.Init(); //なんかの初期化
これじゃあかんの?俺がアホなだけ?いや、アホなんだけど。

ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csref/html/vcwlkstructstutorial.asp
>構造体とクラスは似ていますが、重要な違いを認識しておく必要があります。まず、クラスは参照型であり、構造体は値型です。
構造体にする理由はここらへん??マジで無知な私に教えてください。
135134:03/12/28 22:23
× class xyz = new xyz();
○ Xyz xyz = new Xyz();
酔っててすまん。
136デフォルトの名無しさん:03/12/28 22:34
可変長の配列を使うにはどうすればいいのでしょうか。

int i[10];
と宣言しておいて、
20個のサイズの配列を格納するような感じ。
137最凶VB厨房:03/12/28 22:50
>>131
つくれるよ。
public struct StructTest
{
public int Field;
public void init()
{
this.Field=100;
}
}
//////////////
StructTest st=new StructTest();
Console.WriteLine(st.Field.ToString());
st.init();
Console.WriteLine(st.Field.ToString());
でいいのか?

>>136
ArrayListは?
138デフォルトの名無しさん:03/12/29 00:30
>>137
ありがとうございます。

ただ、私の方の言葉が全然足りて無かったですね。すいません。
私ができないと思ってたのは、構造体の配列の全要素の初期化でした。
これは、どうやら、構造体の配列のメンバを持つ、構造体を作って置けば、その構造体に
初期化メソッドを作ると言う形でできるみたいですね。
ただ、構造体の配列ってだけじゃ、初期化できないと言うあたりで悩んでいました。
すんませんでした。
foreach構文って、何かスレッドセーフになるような処理でも入ってる?
単にインクリメントと読み取りが一体化してるのが良いのだろうか。
>>139
いちいちLengthかCountか悩む必要がないとか(冗談

//なんでどっちかに統一しないんだろう……。
そういや、foreachでコレクションを末尾から読み取ることってできたっけ?
>>141
自前のクラスならそういう実装もできる(ただしその場合末尾からで固定)
まあ、foreach使うのは順番を考慮しない処理だな。

a[i] = b[i]をforeachで処理できれば楽なんだが。
143136:03/12/29 09:25
>>137
ありがとうございます。
ArryListを調べてるうちにHashtableを見つけたのでそっちを使うことにします。

しかし、.netframeworkのヘルプには要素へのアクセス方法がまるで書いていなかった(実際は[])。
そういえば文字列の結合が+でできることも書いてない。どうなってるんだMS。
14494:03/12/29 09:32
うーん難しい。

C#のコンソールアプリケーションでアプリケーションのインストールディレクトリを獲得するのはどうすればいいのかおしえてください。
Winアプリなら、Application.StartupPathで獲得できそうなんだけど、コンソールアプリなんで軽くやりたいのです。
いつからstatic string StartupPathが重くなったんだろう・・・
14694:03/12/29 10:01
コンソールアプリからはSystem.Windowsにすらアクセスできないのですがヽ(`Д´)ノウワァァン
147デフォルトの名無しさん:03/12/29 10:13
>>146
参照すればいける

>>144
argv[0] にフルパスが入ってこなかったけか? なら、コマンドラインのパース。
>147
いや、C#はモジュール名称を示すargsはない

起動時のカレントパスじゃあかんの?
>148
スマソ。これは忘れてくり。パス通ってりゃわからんわな

以前C#MLのほうで、似たような議論があった気がするんだが、あっちはプロセス
モジュールのパスか
150デフォルトの名無しさん:03/12/29 11:49
>>144
string path = System.AppDomain.CurrentDomain.BaseDirectory;
でだめなの?
152名無しさん♯:03/12/29 16:32
>>151
うーん、CLRの話なのかC#の話なのか、syntaxの話なのかsemanticsの話なのか、
入り乱れててよくわからないぽ・・・。(´・ω・`)

漏れの考えでは、IDisposableはIEnumerableと同類のものだと思ってます。
まず、Dispose Patternを使って云々とあるとおり、コンポーネント実装者に対する規約です。
でも、IDisposableを実装したからといって、CLRが直接面倒を見てくれるものではありません。
どこかの言語のどこかの構文で使ってくれるかもしれない、
見方を変えれば、言語仕様に対するガイドラインでもあるといえます。

コンポーネント利用者にとっては、IDisposableをどう使うかはまったくの勝手です。
言語固有の機能 (たとえばC#のusing) を使うもよし、Disposeを直接呼んでみるもよし。
(もしあるならば、) IDisposableに頼らずに別の手段を用いるもよし。
IEnumerableも同じことで、それが実装されているからといって、
たとえばC#でforeachの使用が強制されるルールはどこにもありません。
(便利だから云々はsyntax上の根拠にはなりません。)

もちろん、これはコンポーネント利用者がIDisposableを意識しなくてもよいという話にはなりません。
実装されていることを知った上で、自分の判断をしなければならないということです。
くれぐれも、どの選択肢がいちばん適切という絶対の結論はありません。

私見ですが、C#で例えると、catchする必要があるときにusingを使うのは好きではありません。
try 〜 catchの中にusingを書く、あるいはusingの中にtry 〜 catchを書くのは
例外処理が二重構造になってしまい、無駄な感じがします。
漏れはなるべくtry 〜 catch 〜 finallyの一重の構造を崩さないよう書いてます。
んで、finallyの中ではDisposeではなく、後処理用の個別のメソッドを呼んでいます。

最後に、Dispose以外に後処理用のメソッド (Closeなど) があることについては、
これはC++の慣習を引きずっているもの、程度にとらえています。
C++でも、デストラクタがあるからClose等は必要ない、という慣習にはなってないと思います。
DF論争もそもそもC++ユーザーの不満から出てきたものだし、
あえてこれを機に慣習を変えようという決断はしなかった、と勝手に解釈しています。(逃げ)
153デフォルトの名無しさん:03/12/29 16:43
つーかね。後処理をプログラマが考えなきゃいけない時点で、中途半端なGC
ってこった。
>>152
GCって何?
ゲームキューブ?
Winアプリでリエントラント「しない」プログラムを書くにはどうしたらいいのでしょうか?起動時に全プロセス名を調べて同じプロセス名が既に存在したら起動しないみたいにすればいいのでしょうか?普通はどうやるのでしょう?
>155
System.Threading.Mutex使うんじゃない?
あ、書き忘れた
サンプルはttp://dobon.net/vb/dotnet/process/checkprevinstance.html
15894:03/12/29 19:18
>>150
ありがとう。助かりました。
>>155, 156
ありがとうございました!!!
160デフォルトの名無しさん:03/12/30 03:06
exeファイルの作成はどうやったらいいんですか?

いちおう、debugフォルダにはデバッグバージョンがあるみたいなのですが、
デバッグじゃないヤツの作り方です。

VB6の時の「実行可能ファイルの作成」に相当する機能です。
よろしくお願いします。
>>160
Releaseビルドしれ
1970年1月1日からの秒数ってどうやって取得するの?
163デフォルトの名無しさん:03/12/30 08:22
>>162
現在からその日までの差分を TimeSpan で取得し、TimeSpan.Second だね。
いやTotalSecondsね。

165いなむらきよし:03/12/30 11:51
キケー!
C# で 2ch 掲示板作ろうとしてる女又キタ━━━━━━(゚∀゚)━━━━━━!!!

...俺も作ったyp
Web サービスでな.
167デフォルトの名無しさん:03/12/30 19:28
誰も>>152に反応できないのが笑えるよな。
C#って思考停止した家畜根性100%のブビ厨上がりが使ってるという噂は本当らしいな。
>>167
あの長いの読んだん?
なんで反応してあげないの?
>>167
お前が反応しろよ。俺はしたくない。
つか反応が無くて怒ってる本人か?
なるほろ。
172デフォルトの名無しさん:03/12/30 20:53
VC++.netで、beginthreadex beginthread を
使いたいのですが、ランタイムの指定でVC6.0では
ビルドのオプション化何かでランタイムをマルチスレッド
に指定しましたよね?
あれと同じことをVC++.net で指定したいのですが
どの画面から指定すればよいのでしょうか?
なんでC++の質問がココに回ってきてるんだかが分からん。
174デフォルトの名無しさん:03/12/30 21:08
>>173
すいません。C++ の質問というより、
.net のプロジェクト設定の質問ということで
だめですか?
175172:03/12/30 21:11
自己解決しました
プロジェクト → プロパティ → コード生成 → ランタイムライブラリ
で指定できました。
176デフォルトの名無しさん:03/12/31 06:15
if()
{
}
else
{
if()
{
}
else
{
if()
{
}
}
}
こういう形式の方が、
if()
{}
if()
{}
if()
{}
こういう形式よりも、コードが速くなるはずですよね。
自分は見やすいので後者を使ってますが。
本当はどっちが良いんですかね?
177最凶VB厨房:03/12/31 06:26
elseifを使う。
速度差は認識できないレベルの話だからどうでも良いが、
そもそも上のと下のとじゃ意味が変わってくるしな。
179デフォルトの名無しさん:03/12/31 13:42
>>176
ホームラン級のバカ発見
>>176
ワラタ
>>176
まぁ、上下が同じ処理じゃないと言う問題は置いといて・・・

コンパイラが適切なコードを吐き出してくれるから
その辺は気にしなくて良い。
いっぱい釣れた
>>176
そういう構造の場合は
Ifオブジェクト作ってチェーンさせると動的に条件を着脱できて便利だよ。
184デフォルトの名無しさん:03/12/31 23:49
>183
なんでそんなにやさしいんですか。僕泣いちゃいそうです。
185デフォルトの名無しさん:04/01/01 01:10
勉強がてらにピクセルエフェクトのプログラムを書いているのですが、
再描画を発生させる際に、クライアント領域を
無効化しないでForm1_Paint への処理へ入っていくように
したいのですが、Update を呼んでもうまくいきません・・・

タイマーを使って、Tick毎に Refresh とか Invalidate
を行うと描画の更新はうまくいくのですが、
いったん画面がクリアされてしまうので、ちらついてしまい
ダブルバッファリングしている意味がなくなってしまいます。

クライアント領域を無効化しないでPaint メッセージだけ発生させて
描画を更新したいのですが、どうしたらいいのでしょうか
>>185
コンストラクタ辺りで
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
汁。
187デフォルトの名無しさん:04/01/01 01:30
>>186
ありがとうございます。そんな方法もあるのですね。
今度試してみます。

で、今自己解決しました。
オフスクリーンを転送する前に重い処理を入れていたのが
ちらつく原因でした。InvalidateでもRefreshでも
ちらつかなくなりました。
率直に言って、.NETアプリって配布厳しくね?
いちいちユーザーに.NET Frameworkを入れさせるのが馬鹿らしいんだが。

これだけでも厳しいのにManaged DirectXなんて使い物にならないんじゃないの?
実際に.NET + Managed DirectXで作られてる有名アプリって何かあるかね?
>>188
まあ、Longhorn では標準搭載されるようになるし。
DirectX は Avaron に吸収されるっぽい感じだけど。
>188
JREならさほど抵抗なく入れてくれるんだけどなぁ。
まぁ、.NETランタイムはシステム大幅にいじるから、JREより抵抗感が強いのは分かるけど。
XPですらCDにフレームワーク入っているが?
2003以降は標準で入ってるしな。
JREのほうが異物感が高い
193176:04/01/01 15:03
く、クッソー!!
>>177
ほう、c#にもそういうのがあるんですかね?
>>178
まあ、一応それは解るんですけど、その微妙な意味の差は全然問題にならないんで。
自分のコード上では。
自分にとっては記述性と可読性の方が価値が上なんですよね。
>>183
それはなんですか?bool値を返す、プロパティとかチェック用メソッドとかですか?
なら使ってますが。

まあ、この場合は、一番まともな方法は、
SWITCHだと思うのですが、SWICHだと、bool値を扱えないじゃないですか。
それで、せっかく作った、bool値を返すプロパティやメソッドが使えないのがいやなので、
こういう形にしてるというわけです。
ハイ。
194デフォルトの名無しさん:04/01/01 16:39
近々、C++からC#に移行しようかと思っているんだけど、
APIの呼び出しみたいなのじゃなくて、純粋にピクセルフィルタのような
力仕事をさせた場合、C++と比べてどれぐらいのパフォーマンスロスを
見積もればいい?
調査したWEBとかない?
>>193
ネタじゃなかったのかよ

if () {
}
else if () {
}
else {
}
196176:04/01/01 20:23
>>195
おお、なるほど。
それは確かに見やすいですね。
ひとつ利口になりました。
197デフォルトの名無しさん:04/01/02 01:49
ユーザーコントロール上に配置したテキストボックスに
フォーカスがある状態でEnterキーを押すと
MessageBoxでMessageBoxIcon.Informationを指定した時と同じ
「ポン♪」という音がなります。
KeyDownの中でEnterキーで処理した後e.Handled=true;としても
音が鳴ることを止めれませんでした。
どうやって止めればいいのでしょうか?
よろしくお願いします。
198 :04/01/02 01:50
Kさん 好循環  Aさん 悪循環  
 (健康体)  (喘息)

1.(神が喘息であるかないかを決める)
2.K 喘息でない人 A 喘息の人は
は体力がある    体力がなくなる

3.K        A 行動力、
          五感(嗅覚)が鈍り感性が変化する

4.K&A 神は異常な感性の人間は本来人に迷惑をかけ
るから外に出てはいけないと思っている。

5.K 変化なし   A アトピーになる
6.K 正常な感性  A 外に出なくなりさらに異常な感性になる
7.K 正常な人間   A 異常な人間(レッテル)
8.K&A 死  9.K&A      来世
10.K&A 神は異常な人間は人に迷惑をかけるので行動
を抑制する必要があると思っている。

11.K&A 神が喘息であるかないかを決める
12.K 喘息でない  A 喘息である
13.K&A    1.に戻る

これは事実。広めようぜ
解決法:寝て起きて、やな気分でも、続けるけること。
体力をつけると感覚が正常に戻り、
アトピーも快癒に向かう。 目安としてグランドを10週くらい。
あとはウォーキング 2.3時間を目安にウインドーショッピングや本屋めぐり
199デフォルトの名無しさん:04/01/02 03:48
Monitorクラスの概念?について教えてください
Enter, Wait, Pulse
とメソッドがありますが、
Enter はクリティカルセクションに入る
Wait はクリティカルセクションの解放を待つとして、
で、Pulse というのはどういうものなのでしょう。

私なりにたとえてみたのですが、

Enter すると実行中と書かれた水瓶に入る。
Waitすると待機中と書かれた水瓶に入る。
Pulseすると、大気中と書かれた水瓶の蛇口を開ける。

なんか、MonitorクラスのMSDNサンプルを読んだのですが
いまいちわからないっす。

どなたかアドバイス下さいませ。
200デフォルトの名無しさん:04/01/02 05:06
C#ってif文の中で、初期化しても、(絶対にどこかのif文で初期化されるはず)
未割り当ての変数が使用されてますとか言うエラーが出るんですね。
マジ、勘弁してください。
コンパイラーが心配し過ぎです。
>>200
static int f(bool a){
    int b;
    if(a){
        b=0;
    }else{ //else if(! a)
        b=1;
    }
    return b;
}
else if だとエラーだけれども else があればエラーにならんよ。
ここはすごい相談室ですね。
203デフォルトの名無しさん:04/01/02 05:43
Point[]って
実際に各要素にNEW Pointしなくても、
各配列の要素に既にPoint型のインスタンスが設定されてて、
普通に使えるのはなぜですか?
まあ、良いんですけど。
>>203
構造体だから。
205デフォルトの名無しさん:04/01/02 07:56
各変数の値などを見ながらデバッグするのは可能なのでしょうか?
すいませんお願いします。
ご存知でしたら、一言お願いします。
>>205
環境によるが、殆どのデバッガでは出来ると思う。
207デフォルトの名無しさん:04/01/02 09:38
せ、先生!
して、その方法とは!?
いろいろいじっても、検索しても、出てこないんすよ!!
208デフォルトの名無しさん:04/01/02 10:50
ブレイクポイントを設定するといいよ。
俺はBilderだけど。
なぁ、ダブルバッファリングを有効にさせたControlクラスを使いたい時って、

public class DBControl : Control {
 public DBControl() : base() {
  this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
  this.SetStyle(ControlStyles.UserPaint, true);
  this.SetStyle(ControlStyles.DoubleBuffer, true);
 }
}

みたいなクラスを作らなきゃあかんの?
Control.Invalidate(true)とControl.Refresh()のちがいは何なのでしょうか?
211デフォルトの名無しさん:04/01/02 11:42
>>208
なるほど。
ありがとうございます。
試してみますです。
先日から気になってるんだけど、なんで1行にしないんだ?
行が長いのが嫌なのかもしれないけど、3回も同じメソッド呼ぶほうが俺は嫌だ。

SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);
一枚絵のbmpを読み込んで、
(0,0)から32*32切り取って新しいBitmapオブジェクトを生成するというような処理はどうすればよいでしょうか?
214デフォルトの名無しさん:04/01/02 12:27
>>213
32*32 の Bitmap を作って、そこに描画してあげればよろし。
フォームの各キーイベントを方向キーで発生させるには
IsInputKeyメソッドをオーバーライドしろって書いてあるんだが、
具体的にどういうコードを書けば良いのかさっぱり分からん(´・ω・`)
216デフォルトの名無しさん:04/01/02 13:51
MessageBoxでMessageBoxIcon.Informationを指定した時と同じ
「ほぇ?」という音がなります。
抽象プロパティってのはどうやって宣言するの?
なんかググっても24件しか引っかからないんだが(;´Д`)
public string Hoge { get; set; }
>>210
Invalidateは再描画メッセージを送るだけ(再描画はアイドル状態になってから実行)、
Refreshはその場で強制的に再描画。
海外掲示板用オフラインリーダーを作るスレ
http://pc2.2ch.net/test/read.cgi/tech/1072883528/

海外でよく使われていうる掲示板スクリプト
専用のオフラインリーダー作って下さい。

必要な条件はID、PASSを管理できること、
OpenJaneみたいな三面型の見た目。
簡単にローカライズできるように言語ファイルを採用
221デフォルトの名無しさん:04/01/03 02:34
コレクションをソートしたいのですが、どうすれば良いですか?
int と、string が1つずつの構造体を作って、intで昇順ソートして、intの値が同じ場合は、
stringで降順ソートしたいと考えています。
複数指定のソートを行うメソッドが見つかりませんでした。
>>221
線形順序を決める関数をソート関数に渡せ
220はマルチ
メソッドの引数の型を複数のインターフェースで定義できますか?

tekitou(object o) {
  ((IDictionary) o).Contains(0);
  IClonable cln = ((IClonable) o).Clone();
}

適当な例で申し訳ないですけど、上のようなメソッドで引数 o (例として object 型にしておきます)
がIDictionary と IClonableを実装したオブジェクトであることをコンパイル時に保証する
方法はありますか?
>>225
objectを引数にしてる限りは無理じゃね?
両方実装しているインタフェースの定義だけして、それ使うとか。
>>225
次のバージョンのC#まで待て。

private void tekitou<T>(T o) where T : IDictionary, ICloneable {
  o.Contains(0);
  o.Clone();
}
228225:04/01/03 15:53
>>236
それも一応考えたんですけど、標準の Hashtable 等が受け取れなくなってしまうので
やめておきます。

>>227
現状ではやっぱり無理ですか。しょうがないのでダウンキャストしておきます。
229デフォルトの名無しさん:04/01/03 18:13
入門としてメモ帳みたいなのを作ってみようとしているのですが問題にぶつかりました。
終了したときに、確認として保存するか聞くために、

if(richTextBox1.Modified)
{
if((MessageBox.Show ("テキストに変更があります。保存しますか?", "終了確認",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk))==DialogResult.Yes)
{
this.FileSave();
}
else if((MessageBox.Show ("テキストに変更があります。保存しますか?", "終了確認",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk))==DialogResult.No)
{

}
else
{
}

}
と、ExitApplicationというメソッドを作ったのですが、Noのときの処理がわかりません。
あと、このメソッドを、FormのClosedというイベント(?)から呼び出して、キャンセルを押すとなぜか、もう一度ダイアログが出てきてしまいます。なぜでしょう?
>>229
C#というよりプログラム自体初めてなの?

普通はYes/No/CancelでCancel時は終了しない。
で、Closingイベントを使ってFormが閉じること自体をCancelする。
Yesの時は保存、Noの場合は何もせずにただ終われ。

> あと、このメソッドを、FormのClosedというイベント(?)から呼び出して、キャンセルを押すとなぜか、もう一度ダイアログが

MessageBoxを2回呼んでるじゃん。
switch(MessageBox.Show())にして、3通りの処理を書きなさい。
まあNoは無視してもいいけど。
231デフォルトの名無しさん:04/01/03 18:35
重ね重ねすみません。
Closingイベントを使ってFormが閉じること自体をCancelするには、どうすればいいんですか?
コードがあるとうれしいです。
>>231
CancelEventArgs.Cancelをtrueに。
233デフォルトの名無しさん:04/01/03 19:01
case DialogResult.Cancel:
CancelEventArgs e =new CancelEventArgs();
e.Cancel=true;
break;
としてみましたが、うまくいきません。
どこかにキャンセルするイベントを与えないといけないのでしょうか?
>>233
どこでやってんの?
ClosingイベントにはCancelEventArgsが引数で渡されているはずだ。
ExitApplicationというメソッドを作ってやってるみたいだけど、それヤメレ。
ExitApplicationではthis.Close()だけやって、終了処理はClosingイベント内でやりなさい。
235デフォルトの名無しさん:04/01/03 19:13
をを!できました。
ども、ありがとうございました。
>>234
> ExitApplicationというメソッドを作ってやってるみたいだけど、それヤメレ。
> ExitApplicationではthis.Close()だけやって、終了処理はClosingイベント内でやりなさい。

最近すっかりIDEを使わずエディタで書いてる私はClosingイベント先をExitとかのメソッド名で書いてるな……。
237234:04/01/03 21:11
>>236
初心者に分かりやすく書いただけで別にそんなのは自由。
ただ、overrideする時とかに必要なので本来の名前を忘れるのはどうかと思う。
>>237
ん?
この場合デリゲートCancelEventHandlerが問題なのであって
本来の名前も何もないのではないですか?
>>236の人は単に
Closing += new CancelEventHandler(Exit)とかやってるってことでしょ?
>>238
ああそうか。そうだね、スマン。
左辺にClosingは使ってるのか。忘れるわけないわ。

一応234で「ヤメレ」と書いたのは既存のExitApplicationというメソッドをそのままで
やろうとしてるみたいだから、引数の説明とか面倒ではしょったまでです。
DLLを動的に読み込んで使いたいのですが
どのようにすれば良いのでしょうか?
Win32APIとか使わないと駄目なのでしょうか?
241デフォルトの名無しさん:04/01/03 23:57
うっはwwww
ひゃdさsだssっさsだwwwwwwwwwwwww
242241:04/01/03 23:58
別スレのレスを大いに笑ってやろうと思ったら
思いっきり誤爆してしまった。

俺が大いに笑われる事になるとわ(トホホ
243デフォルトの名無しさん:04/01/04 00:27
デバッグではメソッド内のローカル変数は表示できないんですね。
それってdebugビルド?
コンパイルオプションにあったような・・・
245デフォルトの名無しさん:04/01/04 00:42
へい、デバッグビルドでやんす。
246デフォルトの名無しさん:04/01/04 00:45
ちょっと前に教わったとおり、
ブレイクポイントの設定と
ブレイクポイントの設定メニューのボタンの仲間の一覧に、
変数の値を表示させるオプションがあったのですが、
ほとんどそれで表示できますが、
メソッド内のは探しても見つかりませんでしたね。
ライトラインでコンソールに吐き出すしかないかな?
> ライトラインでコンソールに吐き出すしかないかな?

そんなわけNEEEEEE!!!!
ブレイクしてたらマウスカーソルを変数に載せるだけでも出るし、
右クリックからクイックウオッチとかそんなのあるっしょ。
逆に俺はそれでしか見てないや。
248デフォルトの名無しさん:04/01/04 01:10
あら、すいませんでした。
私の不注意でしたね。
249デフォルトの名無しさん:04/01/04 02:12
しかし、メッセージボックスは本当に描画と相性が悪いな。
直接、ペイントイベントで呼び出してるわけでもないのに、
頻繁に例外が発行される原因になってる、、、。
勘弁してくれ。
250デフォルトの名無しさん:04/01/04 02:39
追加情報 : インデックスが配列の境界外です。
と言う例外が、
Thread.Sleep(500);
で、発生することはありませんよね?
何でだろ?
これをコメントにしたら、今度は次の命令で、
例外が発生したところを見ると全然別の場所に問題があるはずなのだが、、、。
さっぱり解らん。
意味わかんね
252デフォルトの名無しさん:04/01/04 04:57
俺のパソコン良くしらねえが、cpuが2つあるんだけど、
多分2つ目のcpuを有効に使うために、勝手に並列で処理してるのかな?
だから、あまり関連の無いところで、例外が発生してしまうのかな?
CPUの個数は関係ない。
つかラチがあかないからソースさらせ。
254デフォルトの名無しさん:04/01/04 10:31
System::Console::WriteLine(S"Howdy,C++.net");
このS何よ?
255デフォルトの名無しさん:04/01/04 10:38
>>253
その後いろいろといじってたら、
解りました。
それはやはり、別の場所の例外だったのです。
実際に配列に負の要素数でアクセスしてたり(−1とか)
などです。ポイントの配列なのですが、
デバッグ中、そこでは全然例外が発生しませんでした。
わけ解りません。
自分のデバッガーは5回に2回くらいは起動しないことがあるのですが、
もともとおかしいんですかね?
起動しないときはデバッグの停止をして、またデバッグをはじめる、
と言うのを何回かちゃんと動くまで繰り返すようにしてます。
256最凶VB厨房:04/01/04 10:55
>>254
String型って意味じゃねーの?
257デフォルトの名無しさん:04/01/04 12:28
りてらるもじれつ
258デフォルトの名無しさん:04/01/04 12:50
String s = S"Hello";とかいう使い方すんの?
少なくともC#とは関係ないだろ。
>>255
デバッガに頼り切るなっつーこった
おまいら、非常にどうでもいいことなんだが聞いてくれ。
.NETのドキュメントのアイコン(デフォルトでは青丸い?マーク)が
MIDI編集ソフトのアイコンになっちまったんだが、どうしよう。
>>262
ショートカットを作り直せ
264240:04/01/04 20:28
え〜と、
もしかして、C#では、動的なDLLのロードは出来ないのでしょうか?
プラグイン形式にして、特定ディレクトリにあるDLLを検索して、それらを読み込むようにしたいのですが・・・・
System.Reflection
>>264
出来るよ。
267240:04/01/04 21:12
サンクスです。
調べてみます。

268240:04/01/04 23:18
なるほど、
C#便利ですね。
C++で組んでた資産をDLL化したら無駄になりませんね。
269デフォルトの名無しさん:04/01/05 01:02
240 と絡む質問。

Susie プラグインとかの unmanaged DLL がエクスポートしている関数を
C# で使いたいんだけど、DllImportAttribute だとイメージ名を静的に決定
しなきゃいけないので、フォルダの中にある全ての DLL を対象にするとか
ができないと思うんですが、なんかいい回避方法しりませんか?
絡む、じゃなくて全く同じ、では?
>>269
P/InvokeでLoadLibraryするとか、かな。
>>269
ttp://www.misuzilla.org/docs/net/dynamic-pinvoke
なんてのもあるが……やっぱり>>271の方が簡単じゃないかな。

ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1699&forum=7
とか参考に。
273269:04/01/05 01:49
激しくサンクス
managedC++ でラッパ書きます。
274デフォルトの名無しさん:04/01/05 13:30
>>261
なるほど。
もともとそう言うもんなんですね。
解りました。
質問があるのですが
複数のスレッド(LAN受信スレッドなど)が動作中に
メインフォームにてNumericUpDownコントロールで数値を
変更したいのですが、妙に反応が遅くなってしまいます(かなり反応が鈍い)
複数のスレッドが動作している中でNumericUpDownコントロールの反応を早くするには
どうすれば良いのでしょうか?
なお、起動しているスレッド内にてApplication.DoEvents();
或いはThread.Sleep(100);は行っています。
C#で作成したフォームをMSNメッセンジャーのように右下に配置されるようにしたいのですが。
タスクバーを除いた領域を調べて
その領域からフォームのサイズを引いた位置に配置するようにすればイイと思うんですが。

出来ますか?
277デフォルトの名無しさん:04/01/05 19:34
Form Form_1 = new Form1();
Form_1.BackColor = System.Drawing.Color.Black;

こんな感じでバックカラーを黒にしようとしたんですが
反映されないです、
やりかた間違ってます?
>>276
Form.DesktopLocation

>>277
どこにそれを書いてるかが問題だ。
279デフォルトの名無しさん:04/01/05 19:44
パブリックフィールドって基本的にやらない方がいいんだろうけど、
何でよって思っちゃうよ。
関係なくね?
280277:04/01/05 20:27
>>278
スレッドを作成して、その中に書いてます。
281デフォルトの名無しさん:04/01/05 20:29
しかし、インバリッドして画面全体が書き換わるときのフォーム1バックカラーと、
一部を自分で再描画したときに使う、フォーム1デフォルトバックカラーの色が微妙に違うのは
何でやねん?
よーく見ると微妙に色がちがうねん。
>>275
新しく作成したスレッド上からそのままコントロールを操作するとかなりのリソースを消費するので遅くなる。
Control.Invokeすれ
283デフォルトの名無しさん:04/01/05 21:26
C#でフォームに点や円を描くにはどうすれば良いのでしょうか?
284デフォルトの名無しさん:04/01/05 21:33
普通にドローラインとかポイントとかサークルとか言うメソッド
があるから、それを使えば良いんだよ。
285デフォルトの名無しさん:04/01/05 21:38
プログラマー版がダウンロードになるんだけど?
286IKeJI:04/01/05 21:44
RichTextBoxのClickイベントが取れない。
具体的には新しいフォームにRichTextBoxを配置し、
以下のコードを追加したが、クリックしてもメッセージボックスが出ない。
private void InitializeComponent()
{
.. 中略 ..
this.richTextBox1.Click += new System.EventHandler(this.richTextBox1_Click);
.. 中略 ..
}
private void richTextBox1_Click(object sender, System.EventArgs e)
{
MessageBox.Show("Hello!!");
}
どうしてか分る方いらっしゃいますか?
分る方、教えてください。
Windows2000 + VisualStudio.net 2003
287283:04/01/05 22:07
>>284
サンクスです。
>>285
2chブラウザ使えよ、タコ
289283:04/01/05 22:57
>>284
すみません。
そういうメソッドが見つけられなかったのですが。
Formのメソッドですよね?
290デフォルトの名無しさん:04/01/05 23:06
>>289
ああ、なるほど。
かなり初心者ですね。
では、
まず、フォーム1のペイントイベントから
グラフィックの参照を取ることから始めたほうがいいですよ。
291デフォルトの名無しさん:04/01/05 23:09
http://ja.gotdotnet.com/quickstart/winforms/default.aspx
ここの 「Graphics フォームと Windows フォーム」
の項目を見れば詳しく載ってるよ。
292デフォルトの名無しさん:04/01/05 23:10
http://homepage3.nifty.com/midori_no_bike/CS/
ここでもいいかも。
293283:04/01/05 23:16
>>290-292
詳しい解説どうもありがとうございます。
早速勉強してきます。
┐(゚〜゚)┌なんのためのDirectXなのやら
295デフォルトの名無しさん:04/01/06 01:24
//受付スレッド
private void Run()
{
TcpListener server = new TcpListener(IPAddress.Any,10000 );
server.Start();
while( true)
{
// 接続待ちを調べる
if( server.Pending() == true)
{
// 接続要求を受け入れる
TcpClient tcp = server.AcceptTcpClient();

//スレッドを作成する。
Thread thread = new Thread(new ThreadStart(this.Run2(tcp)));
thread.Start();

}
Thread.Sleep( 100);
}
}

private void Run2(TcpClient tcp)
{
NetworkStream stream = tcp.GetStream();

}

こんな感じにしたいんですが。
tcpを新しいスレッドに渡す時にメソッド名が必要なのですが
この場合どのようにすれば良いのでしょうか?
296デフォルトの名無しさん:04/01/06 02:24
え?
どこか駄目なの?
297295:04/01/06 02:45
すみません、自己解決しました。
298デフォルトの名無しさん:04/01/06 04:16
ペンのLineJoinって
接合した線が折れ曲がってないと、
描画されないんだね。
一直線の線でも俺としては描画して欲しいところなのに。
299デフォルトの名無しさん:04/01/06 05:13
すいません、そう言う訳ではありませんでした。
良く見たら描画されてました。
思ってたより小さいだけです。
300275:04/01/06 08:59
>>282
ありがとうございます。
早速試してみます。
XmlDocument.Load で、でかいXMLファイルを読み込むと固まるんだけどasyncは無いし…。
別スレッドで読み込ませてもあまり改善しないようだし。
なんか良い方法有りませんか?
パソコンをItanium2かOpteron、Alpha21364、Power4に変える
C# で XML で定義されたデータを読み込み、似たような構造をもつ構造体に
代入ようとしているのですが、どのクラスを使うべきか、がよく
わかりません。

参考になる URL もしくは、クラス名でもいいので教えて頂けない
でしょうか?

MS-HELP や Google でいろいろ調べてみたのですが、
うまく見つけられませんでした。
複数の Form から変数を参照したいのですが、
どのような形がいいのでしょうか?

変数(構造体)が定義されているクラスを
FormAで new により生成し、それを FormBで参照したいのですが、
うまくいきません。
初歩的な質問かもしれませんが、宜しくお願いします。
>>303
特定のノードを読み込むなら、
XmlDocument.SelectSingleNodeとか。

そっくり同じ構造のクラスに入れるなら、
XmlSerializer.Deserializeとか。
String hoge; // S が大文字
string hoge; // s が小文字

どちらも文字列方として宣言できるのですが、
両者に違いはあるのでしょうか?
String 共通型
string C#内での型

int と Int32 なんかと同じで別に違いは無い
>>306
ILDASM.exeで見てみると良いよ
>>307
>>308
ありがとうございます。理解できました。
Visual Studio で Switch 文の中に Switch 文を入れるとインデントが
おかしくなるのですが、既知ですか?

構造体のメンバに配列を作る方法を教えてください。

public struct S_data {
public string[] moji;
}

public S_data _data = new S_Data();

でできてるようなのですが、moji 配列 に値を代入する時は
_data.moji[0] = "aaa";
_data.moji[1] = "bbb";

という感じでよいのでしょうか?

配列のサイズはどのように決定するのでしょうか? お願いします。

312デフォルトの名無しさん:04/01/06 23:17
こんにちは。
ファイルから読み込んだ画像のサムネイルを作りたいのですが、
Bitmap.GetThumbnailImageだと、元ファイルがJPEG画像の場合あまりきれいにできず、
リサイズ方法を指定してやってみようと考えています。
で、ここ
http://dobon.net/vb/dotnet/graphics/interpolationmode.html
を見ました。

これだと結果を「PictureBox1」に表示してますが、
そうじゃなくて、直接サムネイル画像として保存したいのです。

しかし、BitmapとGraphicsでは仕様が違うらしく相互の変換がうまくいきません。
よいサンプルなどありましたら教えてください。
>>311
よいわけないでしょうがよ。
Java厨警報発令しますた
>>311
コンストラクタで引数を要求して、配列サイズを決められるようにしたら?
316デフォルトの名無しさん:04/01/07 02:27
C♯でMSIL使わないネイティブアプリ書きたい
>>312
Bitmapオブジェクトを作成して、
Graphics.FromImageすればGraphicsを取得できる。
>>311
public S_data _data = new S_Data();
_data.moji = new string[2];
_data.moji[0] = "aaa";
_data.moji[1] = "bbb";
でいけるわけだが、>>315とかのが自然。
structは必ず引数付きでnewする方がベター。
319311:04/01/07 10:02
>>315 >>318
ありがとうございます。配列のサイズは動的に変更する必要はなく
常に固定になるので、

public struct S_data {
public string[] moji = new string[2];
}

のように宣言しました。struct は必ず引数付きでnewするのがベター
なのはどうしてでしょうか? よろしければ教えてください。
>>319
> public struct S_data {
> public string[] moji = new string[2];
> }
コンパイルエラーだろ。

>struct は必ず引数付きでnewするのがベターなのはどうしてでしょうか?
例えばPoint構造体を引数なしで、つまり点を与えずに初期化するって言うのは不可解だろう?
//そのPointは何を指すんだってことになる。
//実際には初期化できるけど。

構造体は何らかの値を入れるものなんだから、例えそれが0でも作成時にその値を入れるのが当然。
//Int32 a = Int32();なんてのは正直コンパイルエラーで良いくらいだ。
321311:04/01/07 10:50
>>320
コンパイルエラーでした。確認してから書込みします。すみません。
Struct を Class に変更したら OK でした。

今一、構造体とクラスの使い分けるポイントが理解できてません。

構造体とクラスの違いがよくわかってないようなので
勉強してきます。

public class SceneData {
public SceneAnswer [] Answer;
}

public class SceneAnswer {
public stringCorrect;
public intBranchNo;
}
>>316

C#がネイティブコード吐けたら無敵じゃん
http://pc.2ch.net/test/read.cgi/prog/1046529164/
>>321
クラスのほうが構造体よりも高機能だから、特に構造体を使う必要はないかと。
ただ構造体は値型だから、場合によってはクラスを使うよりも軽くてすむだろうね。

PointとかSizeみたいに、単に複数の基本データ型をセットにして扱いたいというだけなら、
構造体のほうがすっきりするだろうし。
配列の要素をランダムに並べかえるようなメソッドはありますか?

ary[0] = "A";
ary[1] = "B";
ary[2] = "C";

ary[0] = "C";
ary[1] = "A";
ary[2] = "B";
のように。
烈拳体が見当たらない
327デフォルトの名無しさん:04/01/07 18:37
>>326
漢字が違うからじゃないか?
列挙体で検索したら?
>>326
structもenumも健在だにゃん
unionは無いけどな
329デフォルトの名無しさん:04/01/07 19:13
>unionは無いけどな

やはり糞言語か
structでオフセットを全て0にすればunionになるよ
Cでいう
typedef struct{
int fd;
char name[16];
} ATTENDANT;

こんなのを、C#で書くにはどうすれば良いのでしょうか?
332デフォルトの名無しさん:04/01/07 22:00
ども。
ASP.NETって、最初のページ表示時にソースがコンパイルされてDLLが出来るって聞いたのですが、
うちでテストしてみてもDLLが出来た気配がありません。
どこに出来るのでしょうか?

ちなみにSDK入れてエディタで書いてます…
VC.NETは買えませんでした。
333デフォルトの名無しさん:04/01/07 22:02
>>325
public static void Sort(Array, Array);
キーをのArrayをRandamで初期化する。
334316:04/01/07 22:30
>>323
●買ってないから過去ログ読めん…
335デフォルトの名無しさん:04/01/07 23:02
ArrayListってなんで0要素にすると16要素になるねん!
0要素にしたいときがあるねん!!
capacityとcountを勘違いしている?
337デフォルトの名無しさん:04/01/07 23:12
え!?
そうなのですか?
すんません、調べてみるっす!!
338デフォルトの名無しさん:04/01/07 23:18
すいません、おっしゃるとおりでした。
GetLength的なものは
動的配列では、Countなんですね。
339C ◆BgEfUYYjTg :04/01/07 23:27
これからC#を勉強しようと思っています。
そこでMicrosoft Visual C# .NETを買おうと思っているのですが、
VB6.0はエンタープライズ版とかプロフェッショナル版とかラーニング版とかありました。
C# .NETにはStandard Versionしかないのでしょうか?
(ネットで探してもそれ以外見つからない
ttp://www.microsoft.com/japan/msdn/vcsharp/
あと、アカデミックパックってのを見つけたのですが、これはどういうものでしょうか?
ご教授ください。
340デフォルトの名無しさん:04/01/08 02:10
あまりにもスマートに効率的にエレガントに
しようとしすぎると逆に開発効率って落ちるよな。
もっと泥臭くても良いから、
がんがんコードを書き込むようなパワーもひつようだよな。うん。
>>340
ようするに、Java は駄目だってことですか?
342デフォルトの名無しさん:04/01/08 02:50
いや、ただの自己流のコーディング術です。
343あぼーん:あぼーん
あぼーん
peer = new Peer();
Caps caps = new Caps();
caps.ConnectRetries = 7;
caps.ConnectTimeout = 200;
caps.DropThresholdRate = 7;
caps.MaxHardDisconnectPeriod = 500;
caps.MaxReceiveMessageSize = -1;
caps.MaxSendRetryInterval = 5000;
caps.NumberHardDisconnectSends = 3;
caps.NumberSendRetries = 10;
caps.ThrottleRate = 25;
caps.TimeoutUntilKeepAlive = 25000;
peer.Caps = caps;

このコードの何が悪いのか教えてくれ。
あるクラスの中で(Class1)、別のクラス(Class2)を配列として扱いたくて
下記のようにやってみました。

Class1 クラスのメンバとして Class2 を配列で持ちたい。

mainData.Body[0].Field1;
mainData.Body[1].Field1;
のように値を扱いたいのです。

どのように初期化してよいかわからなかったので Class1 のコンストラクタで
Class 2 をnew しているのですが、どのように実現するのがスマートなのでしょうか?
アドバイス頂けるとうれしいです。

public class Class1 {
public Class1() {
Body[0] = new Class2();
Body[1] = new Class2();
}

public intId;
public Class2 [] Body = new Class2[2];
}

public class Class2 {
public string Field1
public int Field2;
}
}

public Class1 mainData = new Class1();
public Class1()
{
for (int i = 0; i < Body.Length; i++)
 Body[i] = new Class2();
}

とか。
>>344
コンパイルエラーでも出るんか?

>>345
別にそれでも良いと思うけど、Class2のコンストラクタで自身のフィールドは初期化せんの?
348345:04/01/08 13:10
>> 346
いいですね。頂きます。ありがとうございます。

>>347
Class2 のコンストラクタでは初期化せずに、実際に Class1
のオブジェクトが作成された後で値を代入してます。

なんらかの値 String.Empty や 0 で初期化すべきなんでしょうか?

ともあれ、基本的な考え方、書き方は問題なさそうなので安心しました。
ありがとうございました。
C#でエディタを作ろうと思っているのですが、
TextBoxでタブキーを入力された時のスペース幅を変えるにはどうすればいいのでしょうか?
350 :04/01/08 18:12
>>349
win32api使うか自作するしかないと思われ。

そういう痒いところに手が届かないのがframeworkの醍醐味。
351349:04/01/08 18:22
>>350
そ、そうなんですか・・・ありがとうございます・・・
>>350
えっ? 痒い所に手が届いているじゃん。
win32 apiを使えばいいんだろ。

どっかの言語のようにそんなことしちゃだめ主義じゃないんだから。
孫の手は禁止
痒い所も100% pure hand
354デフォルトの名無しさん:04/01/08 19:59
こんにちは。
machine.configやweb.configに記述されている構成セクションの値を
読み取りたいのですが、どうすればいいのでしょうか?
例えば、
<configuration>
 <system.web>
  <httpRuntime maxRequestLength="4000"
   useFullyQualifiedRedirectUrl="true"
   executionTimeout="45"
   versionHeader="1.1.4128"/>
 </system.web>
</configuration>
って、configに書いてあるとして、maxRequestLengthの値を読み取る、
という場合です。
>>354
web.configならSystem.Web.Management関連。
maxRequestLengthはHttpRuntimeSectionで取得できる。
machine.configは知らん。
356355:04/01/08 20:07
ごめん。>>355は1.1では使えなかった。
次のバージョンから。
Class に存在するメンバの名称と値をループで取得する事はできます
でしょうか?

複数のメンバ変数があるクラスから全てのメンバ変数名と
値を処理したいのですが。

>>357
それようのメソッドでも書けば
>>357
Type class1Type = typeof(Class1);
FieldInfo[] class1FieldInfo = class1Type.GetFields(...);
あまりにも初歩的質問だけど、スマソ。

ホントにNewした後、Deleteしなくていいの?
てか、なんかDeleteってキーワードないし。
よーしパパ、Newしまくるぞーってカンジ?
てゆーか、C++でゆーとこの

class A {
 int nNum ;
public :
 A( int nNum ) {
  this->nNum = nNum ;
 }
 int GetNum() const {
  return nNum ;
 }
}

inline void func( const A & a ) {
 std::cout << a.GetNum() ;
}

void main( void ) {
 func( A(0) );
}

こーゆー事をC#でしたいのYO!
C#だと

   func( A(0) );

でおこられちゃったYO!!!

もしかして

   func( New A(0) );

でいいいーの?
>>362
そんなところだ
>>357
MSDNで System.Type と System.Reflection を参照するべし。
365360-362:04/01/09 00:40
>>363
なんだってー(AA略

ありがd
366360-362:04/01/09 00:48
しつこくてスンマソン・・・。

あのですね。
値型に対するNewは、昔のCでゆーとこの
alloca()と同じ、と考えていいのかな?

ガベージ・コレクションも何も、
そもそもブロック抜けたら、もうサイナラ〜
って事っすか?
>>366
構造体はスタック上に実体が作られる。
368デフォルトの名無しさん:04/01/09 06:25
IEの<a>タグのリンクをドラッグ&ドロップでフォームで受け取って、
そのURLを表示させるにはどうしたらいいのでしょうか?

ファイルのD&Dやコントロール間のD&Dは既出ですが、
この場合はAPI使うしかないんでしょうか?
すみません,どなたか助けてください.

http://mobiquitous.com/~tsuka/programming/ietoolbar.html
を参考にして,BandObjectLib を利用して IE の ツールバーに入り込む
事は出来たのですが,親のIE の URL の取得などが出来ません.

自分なりに SHDocVw を利用してみたりしてみたのですが
自分で新規に IE を開いてそれを管理することは出来ても,親のIEの情報取得ができません.
将来はイベントをフックしたりしていろいろとやりたいのですが,C# では難しいのでしょうか.

タコな質問ですがおねがいします.
>>368
なぜかDragDropイベントでは捕捉できないしDragEventArgs.Effectの設定も無視されるが、
DragOver/DragEnterならドラッグを捕捉できる。
UniformResourceLocatorにMemoryStreamでURLが入っているので、DragOver/DragEnterどちらかのイベント内に

if (e.Data.GetDataPresent("UniformResourceLocator")) {
   MemoryStream m = (MemoryStream)e.Data.GetData("UniformResourceLocator");
   byte[] b = m.ToArray();
   url = Encoding.Default.GetString(b);
}

で取得できる。
……んがしかし、マウスカーソルが禁止になるとかDragDropイベントが根本的に発生しやがらないとか色々不便だ。

画像はDragDropでGetData("HTML Format")すれば特殊なHTMLがstringで手にはいるので
それを解析してURLを取得。
371368:04/01/09 09:54
>>370
ありがとうございます。
今、出先なので帰宅したら試してみます。
>370
DragEnterでDrageEventArgs.EffectにDragDropEffects.Linkを追加してやれば
普通にDragDropでUniformResourceLocatorを取得できるよ。
クラスのインスタンス変数を public で定義し、外部へ公開するのと
private で定義してプロパティとして公開する方法の
それぞれのメリット、デメリットがいまいちよくわかりません。

プロパティとして公開すると何がよくなるんでしょうか?
>>373
setするときに値チェック&補正ができる
コントロールならデザイナでプロパティとしていじれる
375373:04/01/09 12:08
>>374
ありがとうございます。そうですね、set する時のメリットはありますね。
では、get のみの場合、readonly 属性をつけた public フィールドと
プロパティで get のみの場合とでは、プロパティにするメリットは
あるんでしょうか? よろしくお願いします。

>>375
readonlyにしたら値が変更できないがgetだけなら内部で値が変更できる。
変化するパラメータを見せるだけみたいな使い方は前者ではできない。
>>375
readonlyじゃ同じクラス内からすら操作できず値をセットできるのがコンストラクタ限定になる。
全然使い所が違うぞ。
378373:04/01/09 13:08
>>376
>>377
そっか。readonly はクラス内部でもコンストラクタのみになるんですね。

値が変化しないフィールドの公開の場合は public での公開でいいのかな。

>>378
定数はpublic constで公開するのが普通
インスタンスごとに値は異なるが変化しないものにreadonlyは使うがそういう機会はあまり多くない
>>375
プロパティはクラスの内から外へ、外から内へデータが出入りする正門であり検問所。
そのクラスを利用しようとするプログラムは、基本的にはプロパティでデータを参照したりセットしたりする。
これは、後でそのクラスの内部構造が変わっても、他のプログラムが影響を受けないようにするための処置。
一つのクラスが、一つの独立したプログラムの部品として機能するようにするべし。
381357:04/01/09 13:35
>>359
教えて頂いた方法で名称を取得する事はできました。
そこで取得した名称を元に値を得る方法がわかりません。
アドバイス頂けないでしょうか?

foreach(FieldInfo field in class1FieldInfo) {
// 名称は field.name で参照できるのですが、
// の field.name に格納されている "値" の取得方法がわかりません。
}

お手数おかけします。

>>381
まんまGetValueってのがあるだろヴォケクソ
>>380をカプセル化という。オブジェクト指向設計の基礎中の基礎。
>>373-383
ほかでやれ
385368:04/01/09 18:13
>>370 >>372
先ほど試したところ、思ったとおりの効果が得られました。
本当にありがとうございました。
386344:04/01/09 18:23
>347
peer.Caps = caps;
この部分がなぜか動作しない。
この例だとConnectRetriesは7に設定されているように見えるが、
peer.Caps.ConnectRetriesはなぜか14(デフォルト値)を返す。
Nine Language Performance Round-up: Benchmarking Math & File I/O - OSNews.com
http://www.osnews.com/story.php?news_id=5602&page=3
ASP.NETも大丈夫でしょうか?一応C#で書いてますので…

訪問者のリモートホストを取得するために、Page.Request.UserHostNameを
指定したのですが、なぜか全部IPアドレスが記録されてしまいます。
つまりUserHostAddressと同じものです。

リモートホストを取得するには何か必要なのでしょうか?
390デフォルトの名無しさん:04/01/10 01:46
あるA、Bクラスの共通の継承したスーパークラスは、
A、Bクラスのどっちのインスタンスにも作成されるのですか?
それとも実はメモリ内に1つだけしか作成されないのですか?
>>390
まずはオブジェクト指向の基礎から勉強しましょう
アプリケーションがフォーカスを失っている状態で
キーイベントを取得する方法を教えてください。
393デフォルトの名無しさん:04/01/10 07:50
>>392
できません
>>392
DirectXを使うとか(ぇ
>>392
キーボードフックとか
396デフォルトの名無しさん:04/01/10 16:21
エディタでメソッドの参照ポップアップが出ますよね
で、オーバロードが10個ぐらい合ったときに、
マウスで▼をクリックするんじゃなくて、キーボードで
次のオーバロードを見たいのですが、ショートカットが
わかりません・・・
どなたか方法を教えていただけないでしょうか。
>>396
ええとカーソルキー(上下)じゃ駄目なのかな……。
398396:04/01/10 16:39
>>397
あ・・・出来た。スマソ
399デフォルトの名無しさん:04/01/10 17:15
Network 越しにビットマップを送りたいのですが
送り側と受け側、どうやってやり取りしたらよいのか
迷ってます

受け側が受け取ったビットマップをフォームに表示する
だけのプログラムなのだが参考になるページとか
ありましたら教えてください
>>399
果てしなく漠然としすぎてるような気が。
401392:04/01/10 18:49
>>393

えーとじゃあ、Hide状態のアプリケーションはキーイベントを受け取れないのでしょうか?
常駐ソフトなどはどのようにして受け取っているのでしょう?
そこはWin32の支配する暗黒の世界。
403デフォルトの名無しさん:04/01/10 21:50
ある程度デスクトップアプリケーションは作れるようになってきました。
ところでスクリーンセーバーはどうすれば作れますか?
VisualStudio2003ですが、特別なソフト等が必要なのでしょうか。。。
>>403
The Code Project - How to develop a screen saver in C# - C# Programming
http://www.codeproject.com/csharp/scrframework.asp?target=screensaver

The Code Project - Christian and James' Code Project Screensaver - C# Programming
http://www.codeproject.com/useritems/codeprojectscreensaver.asp?target=screensaver
405403:04/01/10 22:10
英語は苦手ですが翻訳ソフトを使って見てみました。
しかし、ソースをダウンロードするためにメンバー登録しようとしても
落ちてしまいます、、、
406デフォルトの名無しさん:04/01/10 22:15
RichTextBoxのフォントが勝手に変わってしまいます。
解決方法を教えてください
ハードディスクの空き容量を知りたいのですが、WMI使う以外で教えてください。
どうもWMIだとWin2000で取得できないことがあって、なんか別の方法を探してます。
マネージドな方法でお願いします。
いまのライブラリは無いものだらけ
素直にWinFXまで待つかAPI呼ぶしかない
>>407
妙に"マネージド"の"ド"に違和感があるんだが
気のせいだろうか・・・・

う〜ん、何でだろう。
>>409
それを言い出したら、manage の発音の時点でマネージよりもマニッジに近い罠。
411デフォルトの名無しさん:04/01/11 04:24
int i,j;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{}
}

この場合i,jは必ず10になって終わることが保証されてますよね。
2重のforループ内での判定文に引っかからず、
処理の最後までいったってことを、判定するには、
i,jの値がともに10になってるかどうかだけで判断できますよね。
412デフォルトの名無しさん:04/01/11 04:47
引数なしの場合、
メソッドにするかプロパティにするかで
結構悩むな。
みなさんはどうですか?
後々、引数を与えたくなるかもしれない可能性を考えたら、
あらゆるプロパティは引数なしのメソッドにしておいたほうが
拡張性、記述性が高まると言えるのではないでしょうか?
つまり、プロパティは一切使わずに、
結局は、全てアクセッサメソッドにした方が良いんじゃ?
>>412
ぶっちゃけ、修行が足りん。
どれをプロパティにしてどれをメソッドにするかなんて、
慣れればすぐに判断付くと思うがな。

>結局は、全てアクセッサメソッドにした方が良いんじゃ?
それをやるとJavaになる
Properites vs. Methods... - Brad Abrams
ttp://blogs.gotdotnet.com/brada/PermaLink.aspx/9b86339f-06e7-4223-9014-f33ae198d387

を思い出した。

>>411
何を言ってるのか何もかもわからん。

>  この場合i,jは必ず10になって終わることが保証されてますよね。
>  2重のforループ内での判定文に引っかからず、
>  処理の最後までいったってことを、判定するには、
>  i,jの値がともに10になってるかどうかだけで判断できますよね。
for (i = 0; i < 10; i++) {
   for (j = 0; j < 10; j++) {
      i = 100;
      j = 2;
      break;
   }
}
さあ判断してくれ。

ループ変数は余程のことがない限りforの初期化子で宣言すべき。
416デフォルトの名無しさん:04/01/11 16:21
お世話になります。
TextBoxとLabelに同じフォントを指定しても、同じように文字列が表示されないのですが……。

☆再現方法
1.TextBoxとLabelをフォームに貼り付ける
2.それぞれのFontを「MS ゴシック, 12pt」に設定する
3.それぞれのTextに同じ文字列を設定する

ためしにTextを「012345678901234567890123456789」にしたところ、
最終的に1文字分のズレが生じてしまいます。
こういうものなの?
public class Test {
static public TestClass test_ = new TestClass();

public class TestClass {
}
//省略
}
}


static なクラスを作成したくて、上記のように書きました。

test_ オブジェクトが正しく作成されないのですが、どうしてでしょうか?

Test.test_ のように参照しても null になります。

TestClass のコンストラクタがどうも呼び出されていない気が
するのですが。。。
staticコンストラクタで初期化してみるというのはどうでしょう

static public TestClass test_;

static TestClass() {
test_ = new TestClass();
}
すみません。コンストラクタの処理は通っているようでした。
コンストラクタが呼び出しているメソッドにブレークポイントを
おいたらとまりました。

でも、Test.test_ が null になります。

static なインスタンス変数は問題なく使用できるのですが
static でクラスを new するとコンストラクタなどは呼び出されている
ようですが、実際そのオブジェクとを利用できません。
何が考えられますでしょうか?
420デフォルトの名無しさん:04/01/11 23:28
>>419
ああ、staticからは
staticしか参照できないんだよ。
だから、全メンバをstaticにしなよ。
421デフォルトの名無しさん:04/01/11 23:31
Consoleのようにいろんなところで参照できるインスタンスはどうやって作るのでしょうか?
>>420
static にしてみたところ、

インスタンス参照で静的メンバ
'Test.test_.member' に
アクセスできません。typename を代わりに使用してください。

となってしまいました。
>>421
System.Consoleはインスタンスを作れないクラスだーよ。
静的メンバしか持ってないし。

>>422
クラスと、それを利用しているコードが分からないと何とも。
424デフォルトの名無しさん:04/01/12 00:00
リストビューのプロパティからColumnsをクリックして
コラムを追加したのに最上段の行にコラムが出ない・・・
たとえば、Columns に A,B,C とつけたら最上段行に
|A|B|C|
と出るはずですよね
ほかに何を設定すればよいのでしょう
425デフォルトの名無しさん:04/01/12 00:07
>>421
だから、つまり、インスタンスが無いって言うか、
要するにグローバルって話だと思うよ。
そのクラス自体の全メンバが。
だから、あなたがそういうのを作りたいなら
全てのメンバがグローバル、
つまり、public で、staticなクラスを作れば
そのクラスはどこからでもアクセスできるよ。
426デフォルトの名無しさん:04/01/12 00:10
他のクラス(アセンブリっていうの?)から、アクセスしたいのですが。
クラスメンバとインスタンスメンバの区別も
つかん連中は素直に勉強しなおせyo
428デフォルトの名無しさん:04/01/12 00:13
>>422
あれ、おかしいな
良く考えたら、staticなフィールドにインスタンスを入れておけば、
そのインスタンスにはstatic からでも、アクセスできるはずだし、、、。
staticか、インスタンスかに関らずに、、、。
俺もstaticフィールドに構造体のインスタンスを代入して使用するとか良くやってたしな。

俺の過去の経験ではstaticはあまり使わない方がいい気がする。
むかし、staticを使いまくってたら、原因不明の誤作動とかがおきるようになってしまい、
結局わけ分からずに、設計を1からやり直してstaticは排除するはめになったから。
まあ、俺の別のコードに問題があっただけなのかもしれないがな。
>>424
ListViewとListBoxを混同している感じがするなあ。
ListViewの場合、Viewプロパティを View.Details に設定すればカラムヘッダが表示されますよ。
430デフォルトの名無しさん:04/01/12 00:16
>>426
だから、>>425でどこからでもアクセスできるようになるよ。
でも、これは本当はあまりやらない方が良いと言われてるよ。
でも、まあ、何でやらない方が良いのかを自分で理解できるようになるまでは
使っても良いと思うよ。
431422:04/01/12 00:22
>>428
丁寧にありがとうございます。staticは極力使いたくないのですが、
たとえばいろいろなフォームで共通して利用するサイズの大きな画像
があった場合、static な変数にいれておくと一度ファイルから
読み込めばその後、使い回しができて効率いいかな、と。

そんな理由でいくつかのオブジェクトを static にしておきたく
ごちゃごちゃやってました。
432デフォルトの名無しさん:04/01/12 00:25
どうもです。初期化ファイルのクラスを作ろうとしてるので欲しくなりました。
433デフォルトの名無しさん:04/01/12 00:49
>>429
おぉ!それです、それ!
やっとカラムが表示されました!
これがわからなくて1週間ぐらい詰まってたんです
ありがとうございました。
434デフォルトの名無しさん:04/01/12 01:47
スレッドに関する質問です
Form1_Load にて Thread をスタートさせます。
そのスレッドの中身は、
while(true){ なんちゃらかんちゃら。}
でずっと処理をしているスレッドです。
ここで、Form1 をクローズします。
このとき、無限ループで回っているスレッドが
終了しないので、アプリが終わりません。
このスレッドを殺したいのですが、一般的には
どんな手法で後始末をするのでしょうか
435デフォルトの名無しさん:04/01/12 02:00
バックグラウンドスレッドにする
436デフォルトの名無しさん:04/01/12 02:00
良く分からないけど、
そのスレッドのなんちゃらかんちゃらの部分で、
form1がクローズされたかどうかをチェックするんじゃないですかね?
質問です。
別スレッドから、PictureBoxコントロールに円を描く処理をやってるんですが
凄く遅いです。
スレッドのpriorityが低い為でしょうか?
438デフォルトの名無しさん:04/01/12 02:41
フォーム1のデザイナでフォーム1の各プロパティが表示されますが、
自分のクラスのプロパティを同じように表示させるにはどうすればいいんですかね?
そんなことはできませんかね?
>>438
コンポ化する
440デフォルトの名無しさん:04/01/12 04:16
ペイントイベントってのは基本的にいつ呼ばれるか分からないものですが、
例えば、ペイントイベントで表示される大きな画像データを
別の場所で使用して計算してるときに、
ペイントイベントが発生したら、ハングアップしたりしますよね。
参照がインスタンスに設定されてませんとか言う例外とか出たりしますよね。
だから、ペイントイベントから呼ばれる可能性のあるあらゆるデータは、
他の場所で使用中は、ペイントイベントが発生しても、描画されないようにする必要とか
あるんじゃないかと思ったりしたんですが、気のせいですかね?
実際に、データを計算中は描画しないようにチェックするようにしたら、
ハングアップが起きなくなったりしましたし、、、。
441344:04/01/12 06:13
やっぱり分かる奴はいないか。
C#クソぽ
>>440
データを計算するときはlockしとくとか。
443デフォルトの名無しさん:04/01/12 08:47
>>441
あれでわかってもらおう、ってお前がヴァカ。出直せ。
>>441
どの言語でやっても同じ結果になると思うぞ。
>>441
せめてエラーメッセージか実行結果くらい教えてよ、おバカさん。
446デフォルトの名無しさん:04/01/12 18:08
Thread.IsBackground プロパティ
スレッドがバックグラウンド スレッドであるかどうかを示す値を取得または設定します。

スレッドは、バックグランドスレッドかフォアグラウンドスレッドのいずれかになります。
バックグラウンドスレッドは、プロセスの終了を回避しないという点を除けば、
フォアグラウンドスレッドと同じです。
プロセスに属するすべてのフォアグラウンド スレッドが終了すると、
共通言語ランタイムは、その時点で有効なすべてのバックグラウンドスレッドで
Abort を呼び出して、プロセスを終了します。
447デフォルトの名無しさん:04/01/12 18:34
>>432
作り方がわかりません。

namespace hoge {
public static class ss { ....};
class tt {Main (...) {Console.WriteLn(ss.xxx);} }
}
ではないですよね。 もう泣きそうです。
448デフォルトの名無しさん:04/01/12 18:50
>>447
どんどんおかしな方にいってる気が…
ていうか、なんで >>417 でできないんだ?
# 何か見落としてるかもしれないけど…
>>447
何をしたいのか、何が分からないのか、もう一度整理して書いてみたら?
他の質問とごっちゃになって、良く分からない。
450デフォルトの名無しさん:04/01/12 20:39
>440
呼ばれたペイントイベントが描画するかどうか、判断すれば良いだけのような気がましますが?
誤読してるでしょうか?
451デフォルトの名無しさん:04/01/12 21:59
>>417ってクラスの中でのクラス定義ではないですか?
やりたいことはこんなことなんです。整理しますね。

namespage hoge {
 class ss { XXXXX }
 class gg { /* この中でssを唯一インスタンスをアクセスしたい */ }
}

ほんとだとCみたいにこんなことができれば良いのですが、なにやらできない様子。
namespage hoge {
 class ss { XXXXX }
 ss _ss = new ss();
 class gg { Console.WriteLine(_ss.XXXXX); }
}
452デフォルトの名無しさん:04/01/12 22:00
×:namespage
○:namespace
>>451
> class ss { XXXXX }
> _ss.XXXXX

ここを省略しちゃだめよ
>>451
public class ClassA {
   public static ClassB B = new ClassB();
   public void Write() {Console.WriteLine(ClassA.B.Member);}
}
public class ClassB {
   public string Member = "ok.";
}
public class ClassC {
   public static void Main() {
      Console.WriteLine(ClassA.B.Member);
      ClassA a = new ClassA();
      a.Write();
   }
}
問題ないけど?
質問させていただきます.
「複数行の文字列から最後の1行を得る」という処理をしたいのですが,何かいい方法あれば教えてください.
(ログ出力用のTextBoxとStatusBarがあるプログラムで,
TextBoxには状態変化があると1行文字列を追加するようになってます.
TextBoxに新しく追加されたら自動的にStatusBar.Textの内容を
その新しく追加された文字列に変更したいと思っています.)

>>455
> (ログ出力用のTextBoxとStatusBarがあるプログラムで,
> TextBoxには状態変化があると1行文字列を追加するようになってます.
> TextBoxに新しく追加されたら自動的にStatusBar.Textの内容を
> その新しく追加された文字列に変更したいと思っています.)
……?
TextBoxに追加されたときにStatusBarもいじればいいんじゃないの?
textBox1.AppendText(message +"\r\n");
statusBar1.Text = message;
みたいにさ。
一応始めの要望にはSplitメソッドとLengthプロパティでいけるけど。
>>456
>TextBoxに追加されたときにStatusBarもいじればいいんじゃないの?
そうですけど,ソースが汚くなるし保守しにくくなるのでそれは避けたかったのです.
TextBoxを変更する箇所はけっこうありますので.

>一応始めの要望にはSplitメソッドとLengthプロパティでいけるけど。
できました.ありがとうございます.
string[] array = _textBoxOutput.Text.Split(new char [] {'\n'});
_statusBar.Text = array[array.Length - 2];

つかたった2行で済むプログラムを質問している俺って…恥
458451:04/01/12 23:07
>>レスをいただいた皆様
できました。
ss._ss.XXXXみたいにすればよいのですね。
ありがとうございました。
459デフォルトの名無しさん:04/01/12 23:11
>>457
Lines プロパティ使えばそのままな気がしないでもない。
>>459
オゥフッ! ありがとうございます.
そんなようなのがあるような気がしないでもなかったですw
_statusBar.Text = _textBoxOutput.Lines[_textBoxOutput.Lines.Length - 2];
よくあることですが,配列の逆からインデックス指定すると冗長でちょっとキモイですね.
こういう時,Rubyみたく負数で末尾から数えてアクセスできるといいのに…
461デフォルトの名無しさん:04/01/13 01:52
>>447
良く分からんけどさ、
staticはクラスにはつけちゃ駄目なんだよ。
staticなクラスってのは存在しないから。
全メンバがstaticメンバなクラスならあるけどさ。
おそらくそこら辺で間違えてるんなら、
他で何をやってもだめなままだと思うよ。
462デフォルトの名無しさん:04/01/13 01:56
463デフォルトの名無しさん:04/01/13 02:55
>>450
いえ、おっしゃるとおりです。
私の言ってることもそういうことです。
まあ、こんなのは基本ですかね?
最近そこら辺で悩んでいたので、つい、書いてしまいました。
464デフォルトの名無しさん:04/01/13 03:07
こう言うことってあらゆるイベントで起こる可能性がありますよね。
WebページをGetしてきて1行ずつ処理しようと、
while(sr.Peek() > -1) { }
と書いたところページの途中で-1になってしまい最後まで処理できないWebページが。
どうすればいいのだろうか?
>>461
C#2.0のstatic classを先取りしたのでは?w
>>465
StreamReader使わず直接Stream(またはNetworkStream)使うべきじゃないかな、ネットワークみたいな不安定なストリームは。

int bufferSize = 8192, readedSize;
byte[] buffer = new byte[bufferSize];
do {
readedSize = sr.Read(buffer, 0, bufferSize);
//Console.WriteLine(readedSize); //コメント外すとどれだけ不安定かよく分かる
} while (readedSize > 0);

実際の処理ではdoの中でbuffer[0]からbuffer[readedSize-1]を
直接処理するかMemoryStreamとかに待避。
多分これが一番安定すると思う。
>>463
stringだかchar[]に複数の改行コードが含まれていて
そこから一行ずつ取得するのはどうするの?
一文字ずつスキャンして行って部分文字列を切り出すしかない?
>>468
どこへのレスか良くわからんが、StringReaderクラス(またはStreamReaderクラス)を使うのはどうだろう。
470デフォルトの名無しさん:04/01/13 13:25


MMRマガジンミステリー調査班 全13巻
http://www.fukkan.com/vote.php3?no=20178

な、なんだってーーー!!もっと復刊投票よろしく

>>468
君、string型のSplitメソッドをお忘れかね?

string[] lines = "あいうえお\nかきくけこ\さしすせそ".Split('\n');

これでstring型配列に"あいうえお"、"かきくけこ"、"さしすせそ"の3行が入る。
Pocket PC 用アプリの開発についてここで質問しても宜しいのですか?

変数をアプリ終了時にレジストリ(またはiniファイル?)に保存したいのですが
どういう形が一番スタンダードなのでしょうか?
終了時に必ずある処理をしたい場合ってForm.Closingイベントのハンドラでいいんでしょうか?
474デフォルトの名無しさん:04/01/13 16:35
>>473
フォームが一枚しかないならね。
475デフォルトの名無しさん:04/01/13 16:37
なんか具体的な話ばっかりで詰まらん
C#の今後とかもっと概念的な話しすれ
>>475
まずネタをふれ
>>474
ありがとうございます.

MSDNではForm.Closingの説明が
>フォームが閉じている間に発生します。
となっているので心配だったのですが.
なんで「閉じる前」って書かないんだろう?
「閉じている間」って不安定なイメージがする…
>>477
そりゃ"Closing"の訳だから。
進行形なんだから閉じて「いる間」、と直訳しただけ。
479デフォルトの名無しさん:04/01/13 17:02
じゃあ、概念的な意見をちょっと書いてみるぽ。

俺はc#のヘルプって英語の原文を翻訳マシーンで訳してから
細部を手直しする形で作られてるんだと思うけど、
どうかな?
>>477さんが、言ったように、いまいち読んでて不安になるような分かりづらさがあるじゃん。
実際、あまり重要でない文献ほど、言葉が不自然で、本当に使われそうに無い資料とかだと、
本当に英語そのままでヘルプになってるし。
多分使われそうに無い部分は日本人が丁寧に手直ししてないんだけど、
使う部分はちゃんと日本人スタッフが翻訳してるんだとおもうんだよな。
>>473
Mainメソッドの「Application.Run」の後
>>479
それのどこが概念的なのかと
>>480
Formインスタンスの後処理をしたいのでstaticメソッドじゃ不都合なんですよ.
C#は消えるでしょう
概念的にC#は消えるでしょう
C#は消えるでしょう。by SUN社員
by サンシャシン
by サンシャイン
>>482
public static void Main()
{
 Form1 f = new Form1();
 Application.Run(f);
 f.後処理();
}
489434:04/01/13 20:01
>>435,436,446
バックグラウンドスレッドですね
多分それでOKぽいです
ありがとうございました
490デフォルトの名無しさん:04/01/13 21:08
俺的にC#はいつかこんな言語&開発環境が欲しい
と思っていたものに割と近い感じだ

だいぶ前からJava はいずれこういう環境に
駆逐されるんだろうと思っていたよ

とはいえ、まだそれほど使い込んでいるわけではないので
これといった短所が見えてないだけかもしれないが
M$は無名デリゲートだけははずすべきじゃなかった.
小さいメソッドが大量生産されるのウザすぎ.
>>491 無名デリゲートってなんですか?
>>488
間違えてもDisposeでやらんようにね。
>>492
相手にせんでええよ
まともに使える関数型言語をだしてくれ
>>495
  や
 イ乍 っ ち ま え よ。
パターンを使った一括置換
(perlだと $value =~ tr/A-Z/a-z/; みたいなもの)は
どう書けばよいのでしょうか?

Regexのreplaceではないような気がしますし…
質問です。
C#を使ってUDPを使ったアプリケーションは開発出来るのでしょうか?
TcpClientばかりがサンプルでは有名ですが・・・・
下記のように、クラス(ClassA) の中に、別のクラス(ClassB) が存在し、
ClassA のコンストラクタにて ClassB のフィールドに値を設定したい。
しかし ClassA a = new ClassA(); とした a からは ClassB の b は
読み込み専用としたい。
ClassB の NoB を public とするか、プロパティで set を用意すれば
Init(); からも値が設定可能になりますが、その場合、上記でいう a から
も値が設定できてしまいます。何かアドバイス頂けないでしょうか?
public class ClassA {
 //コンストラクタ
 public ClassA() {
  Init();
 }
 private ClassB [] b = new ClassB[1];

 //プロパティ
 public ClassB [] B {
  get { return b; }
 }

 public class ClassB {
 private int noB;

  public int NoB {
   get { return noB; }
  }
 }

 private void Init() {
  // b[0].noB を初期化したい
 }
}
>>500
一番自然なのはClassBのコンストラクタの引数で指定することだろう。
デストラクタは無いのけ?
あるよ
504500:04/01/14 14:28
Init() は実際にはファイルを読み込んで、ClassA に入る値、ClassB に入る値に
わけて変数に代入していきます。(実際のフィールドはもっと多いです)

ClassB のコンストラクタで初期化を行なうという事は ClassB を new する時には
代入する値がわかっていないといけないので、Init で ワーク用の
ClassB を new しておき、設定する値がそろった段階で ClassA の中の ClassB を
newしてワークを引数で渡すように、一段かますって方法しか思いうかばないのですが、
それ以外の方法は何か考えられますか?
>>504
それなら、全ての値がそろってから new すれば良いのでは?
必要な値が全部そろわないと、Bを参照することもないようだし。

まあ、読み取り専用のプロパティしか持たないClassBと同じ構造のクラスを
一つ噛ませれば今のままでもできるだろうけど、
基本的なクラス設計が間違っているような気がする。
506500:04/01/14 15:36
すみません。C#とは関係なくなっちゃいましたが。

>>505
取り扱いたいデータ構造はこんな感じです。
メーカー
 代表者
 電話番号
 URL
 メールアドレス
 機種
  全長,価格
 機種
  全長,価格

ClassA が メーカに関する情報, ClassB が機種になります。
(メーカー、機種のフィールドはそれぞれもっとたくさんあります。)
上記の構造と同じようなデータファイルがあり、これを読みながら
メーカ情報、機種情報をセットしていきます。

この場合, ClassA の中に ClassB を配列として含めるような
設計はいまいちでしょうか?

ClassA のコンストラクタが呼ぶメソッド(Init())が、
上記ファイルを読み、それぞれ値をセットしていきます。
Init() の中で ClassB と同等のオブジェクトを1つ作成しておき、
1機種の情報が集まったらそれを引数に渡しながら ClassA の中の
ClassB を new すればよいのかなと思ったのですが…。

どのように設計するのが適切なのでしょうか?
本当に何度もすみませんがアドバイスよろしくお願いします。
>>506
その説明を読む限りでは、今まで通りでそれほど問題ないような・・・。
ClassB内部のデータを外部から勝手に変えられたくないようだから、
全プロパティをgetのみにして、データはコンストラクタでぶっ込むと。
Initメソッド内でClassBのデータはそろうみたいだし、それで良いと思ふが。
シリアル通信はどうしたらできる?
TcpClient クラスみたいなものがあるの?
>>508
System.Net.Sockets.TcpClient
じゃなくて?
510509:04/01/14 18:51
>>508
ごめん勘違いした。>>509は忘れて_| ̄|○
Win32APIスレネタだな
>>512
ごめんソース付いてないね・・・
>>407です。
WMI使わずにしかもマネージドでドライブの空き容量を取得する方法が結局見つからなかったので、
仕方ないからWindowsAPI使いました。みなさんにはどうでもいいと思いますが、ソースを出しときます。

using System;
using System.Runtime.InteropServices;

namespace DiskIO{
 public class Disk{
  [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
  extern static bool GetDiskFreeSpaceEx(string lpDirectoryName,
            ref Int64 lpFreeBytesAvailableToCaller,
            ref Int64 lpTotalNumberOfBytes,
            ref Int64 lpTotalNumberOfFreeBytes);
  
  public static bool GetSize(string Drv, ref Int64 TotalSize, ref Int64 FreeSize){
   Int64 Caller = 0;
   bool Rtn = GetDiskFreeSpaceEx(Drv, ref Caller, ref TotalSize, ref FreeSize);
   return Rtn;
  }
 }
}
516デフォルトの名無しさん:04/01/15 09:15
Application.Exit()でアプリケーションを終了させると
IsBackgroundのプロパティに関係なくすべてのスレッドが終了するんでしょうか?
class A{
____int i;
____class B{
____}
}
こんなかんじでクラスを入れ子にした際、
class Bの中で、int iを扱う最もよい方法は何でしょうか。
int iはstaticにしたくないし、また、class Bのメンバに
class Aを加えるのも、見栄えが悪い上に、無駄も多いし。

いい方法知っていたら、教えて下さい。
519デフォルトの名無しさん:04/01/15 16:58
int iをもつクラスcをクラスAに作って、
その参照をクラスbに渡す。
あ、構造体の方が良いかも。
520518:04/01/15 17:31
>>519
早速のレスありがとうございます。

>int iをもつクラスcをクラスAに作って、
>その参照をクラスbに渡す。

それだと、class Aそのものをclass Bに渡した方が、
すっきりしているように思うのですが。
しかも、その場合、privateなclass Aのメンバでも、
class Bで使えるという利点もありますし。
>>518
正直、そういうニーズの発生してしまう設計を疑ってしまう...
522518:04/01/15 17:38
ちょっと説明不足だったので、質問の内容を補足します。
上記では、class Bで使いたいclass Aメンバはint iの1つだけですが、
実際には、class Aの複数のメンバ(変数に留まらず、
メソッド、プロパティも含めて)を使いたかったのです。
>>521
Java厨なんでしょ
Javaなら親クラスのインスタンスのスコープに包含されるからSwingのイベント処理でよく使う
>>522
> ちょっと説明不足だったので、質問の内容を補足します。
> 上記では、class Bで使いたいclass Aメンバはint iの1つだけですが、
> 実際には、class Aの複数のメンバ(変数に留まらず、
> メソッド、プロパティも含めて)を使いたかったのです。

なら一層、そのclass Bでも使う部分を別クラスに分けるのが有効だと思うのだけど。
>>518
BをAのFriendにして、Aの参照をBにわたす。
526デフォルトの名無しさん:04/01/15 18:39
>>518
いや、privateだと参照できないよ。
たしか、publicじゃ無いとできないはずだったけどな。
違ったっけ?
>>526
できない。friendにする必要あり。
friendとか言ってるのはネタだよね?
529デフォルトの名無しさん:04/01/15 19:32
c#でRS−232Cを利用するにはどうしたら良いのでしょうか?
どこら辺にその辺の文献がありますでしょうか?
Parent.i
531デフォルトの名無しさん:04/01/15 20:15
今日VisualStdio.NET2003を買ったのですが
C#も使いたいけど、必要に応じてVC++も使いたいのです。

VC++でクラスを作成し、C#で利用する と言った方法などで何とか住み分けが出来ないものでしょうか?

一応学校の授業でやるのは、C/C++なので・・・
ただ、C#のほうが生産性が上だと思うんで、うまく両方使えたらうれしいのですが・・・
532デフォルトの名無しさん:04/01/15 20:16
>>530
すいません、自分の知識ではさっぱり分かりません。
533デフォルトの名無しさん:04/01/15 20:16
>>531
そういうこともできるらしいよ。
>529
http://hakoten.com/dotnet/
ここのシリアル通信は参考になるかな?
厨な俺にでもわかるレベルなのでありがたや。
535デフォルトの名無しさん:04/01/15 20:46
>>534
ありがとうございます。
どうやら、便利なライブラリ見たいのは無いようですね。
とほほ、、、。
漏れのはc#オンリーバージョンだからな、、、。
でも、いろいろと便利な情報が載っているサイトを紹介してもらえて嬉しいです。
ありがとうございます。
536デフォルトの名無しさん:04/01/15 20:47
UdpClientに対応したホストを作成したいのですが
もしかして、これもUdpClientを利用するのでしょうか?
ポートを特定したいのですが・・・
もしかして、ホストもconnect()を利用し、ポートを指定するのでしょうか?
もしその場合、ホスト名は特に特定したくないので、どのようにすればいいのでしょうか?
538536:04/01/15 21:00
すみません、わかりました(汗

ただ、

UdpClient udpClient = new UdpClient();
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 10000);
Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);

とやると、コンパイルは問題ないのですが
実行すると
Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
ここで
無効な引数が提供されました。
とエラーが出ます。

MSDNのサンプルまんまなのですが・・・
プロパティ(get)の中でAssert書くとデバッグする時厄介ですよね.
その代わりに例外投げとくってのは常套手段ですか?
540デフォルトの名無しさん:04/01/15 23:28
Cでいうsscanf()はC#ではどのように実装するのでしょうか?
クラスをCで作成し、それを利用するしかないのでしょうか?
出来るだけ簡単な方法が良いんで・・
sscanfはセキュリティーホールになりやすいからなぁ。
もっと安全な実装をした方がいいよ。
542518:04/01/15 23:37
>>530
のようにできれば、コードがすっきりしていいと思ったのです。
System.Windows.Forms.Controlクラスや
System.Xml.XmlNodeクラスなんかだと、それこそ
「Parent.…」が使えて便利なので、同じような機能がないかと
思っていたのですが、やはり駄目みたいですね。

素直に、class Aのctorで
new B(this);
と書くようにします。
>>541
>sscanfはセキュリティーホールになりやすいからなぁ。

どの辺が?
544540:04/01/15 23:43
>>541
レスどうもです。
セキュホについてググって見ると結構色々とあるみたいですね。
一応httpのようにサーバープログラムの受信部分で使いたいんですけどね。
他に良い実装方法はありませんかね?
546465:04/01/16 08:53
>>467
遅レスですまそ。
なるほど。勉強になったよ。
547465:04/01/16 09:14
>>467
試してみたよ。うううん、なるほど。
どこからか1行ずつ読む!ってことで盲目的にStremReaderを使っていたけれども、
ちゃんと考えて使わないとダメだね。ちょっと目から鱗だった。重ね重ねありがとう。
ArrayList ar = new ArrayList();
ar.Add("1");
ar.Add("2");
ar.Add("3");
ar.Add("4");
ar.Add("5");
ar.Add("-1");
int no = ar.BinarySearch("-1");

の結果がno=-2になるのはなんで?
no=5になって欲しいわけですが
BinarySearch は事前条件として整列済みであることを要求するから。
550デフォルトの名無しさん:04/01/16 18:39
>>549
thx 勉強不足でしたわ
で、ar.Sort()した後ならきちんと取れる事がわかったけど
値をつっこんだ時の順番を崩したくない場合にはどうやって
中身を検索するべきだろう
入れられてる値の型を規定しておいて頭からなめるしかない?
IndexOfとか。
というか実際に使う前に十分ドキュメント読んだ方がいいぞ。
552548:04/01/16 20:20
>>551
う、恥ずかしい・・・MSDN十分に読んだつもりだったけど見落としてますた・・・
C#ではメソッドでどのようにしてthrowするExceptionを明示するのでしょうか?

たとえばJavaだと、

public void hoge(string xxx) throws ApplicationException
{
try
{
...
}
catch(ApplicationException ex)
{
throw ex;
}
}

という感じで出来ますが、C#ではこのようなことはできるのでしょうか?
何を投げてくるか分からない場合、全部Exceptionで処理するしかないのでしょうか?
554553:04/01/17 02:07
ごめん。最後の行ヘンだ。

X >何を投げてくるか分からない場合、
O >何を投げてくるか分からないので、
555デフォルトの名無しさん:04/01/17 02:54
今日VS.NET買ってきました。
全く0の状態なのですが、まずどの辺から勉強していけば良いのでしょうか?
メソッド、プロパティー、インスタンス、クラスの意味すら理解してない状態です。
メソッド=サブルーチンという認識でよろしいのでしょうか?
1月ほどで習得して、来月から通信プログラムを組まなければならないのです。(涙

一応PC98でN88BASICや、JR200でJR-BASICをいじった経験はあるのですが・・・
それもかなり大昔の話ですし・・・
>>555
まず、BASICの概念を頭から捨てろ
んで、オブジェクト指向の考え方を頭に叩き込め。

>メソッド、プロパティー、インスタンス、クラスの意味すら理解してない状態です。
まず、これを理解しよう
オブジェクト指向プログラミングでもっとも基本的で重要な事だから
これさえ頭に入れれば、ある程度リファレンス見ながら書けるようになる。

処理は出来るだけパーツに分ける事を心がけ
そのパーツはクラスにしよう。
C#を使う=クラスを使う と言っても良いくらい。
557デフォルトの名無しさん:04/01/17 06:15
>>555
http://ukamen.hp.infoseek.co.jp/
http://homepage3.nifty.com/midori_no_bike/CS/
http://hakoten.com/dotnet/
http://black.sakura.ne.jp/~third/
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/index.html
はい。
あんたはちょと前の俺と似ている。
俺もこう言うところで勉強した。
だから、こう言うところをめぐるのが良いと思うぞ。
558デフォルトの名無しさん:04/01/17 06:38
メソッド=サブルーチンで良いと思うよ。
関数っていってもいいしな。
559デフォルトの名無しさん:04/01/17 06:41
サブルーチン・関数など存在しない。
あるのはオブジェクトとメッセージのみ。
そこを勘違いしてはいけない。
たかが用語の違いと侮っている人間は
例外なくオブジェクト指向を理解し切れていない。
560デフォルトの名無しさん:04/01/17 07:23
>>559
では、具体的に何が違うのか教えてくれよ。
561デフォルトの名無しさん:04/01/17 08:40
お前らどの程度、パブリックフィールドを使わないよ?
一応、privateにして、プロパティ参照にするのが、
正しいスタイルなんだろ?
でも、複雑な形式のデータだとめんどくさいし、
やってらんねえって気になっちまうよ。
562デフォルトの名無しさん:04/01/17 09:06
Array.Clone メソッド
ってのは値渡しなんですよね。
例えばint[,]の配列のコピーをこのメソッドで作ったら、

同じ値が渡されると言うわけですよね。
コピー先に。
パブリックフィールドにして
必要ならあとからプロパティに
すりゃいいじゃん。
フィールドとプロパティなんて
本質的には同じなんだから。
Javaのように神経質にやる必要はない。
>>562
値渡しとかは関数の引数の話だぞ。
565デフォルトの名無しさん:04/01/17 09:31
>>563
ありがとうございますでし。
566デフォルトの名無しさん:04/01/17 10:54
他のクラスの配列を
別のクラスに渡す場合は、どんなのがいいですかね?
参照を渡すのではなくです。
普通にループさせて、1要素ずつ値を渡していけば良いのですか?
それとも簡易コピーメソッドを使うのがいいですかね?
class class1
{
static void Main()
{
method1();
}
public void method1()
{
class2 obj1 = class2();
obj1.string1 = "test";

class3 obj2 = class3();
obj.method3();
}
}

class class2
{
public string string1;
}

class class3
{
public void method2()
{
string hoge = string1の内容;
}
}

こんな感じで書いていって、
method2からもmethod1で作ったclass2のstring1の内容を読みたい場合はどうすれば
よいのでしょうか?
568567:04/01/17 12:12
捕捉です。
string1だけではなくて、method1で作ったclass2の変数全てを取得したいのです。
(stringが沢山ある)
569デフォルトの名無しさん:04/01/17 13:32
クラスを作る場所が根本的に間違ってる気がする。
そういうオブジェクトは、フィールドの部分に作るのが普通ですよ。
目的が分からないからなんともいえないけど、
public フィールドにしておけば、そのフィールドは他のクラスからいつでも参照できますよ。
そのクラスのインスタンスの参照が他のクラスにあればね。
メソッドの中でつくったインスタンスはそのメソッドの中にしか存在しませんよ。
それでも良いなら、クラス3を作るときに、親のクラスの参照をthisでわたせばいいんです。
そうすれば、下のクラスに親の参照が届くので、いつでも親のクラスのフィールドは利用できます。
>>569
これだから VB 上がりは...
グローバル変数もどきを作ってどうすんだよ。
~form1()のメソッド書くとエラーが出るのですが
デストラクタはどこへ書けばよいのでしょうか?

VS.NET買えないのでSDKとメモ帳で頑張っていますがよくわかりません。
>>571
> ~form1()のメソッド書くとエラーが出るのですが
名前からしてインスタンスを対象に書いてそうだな。

class Hoge {
   public Hoge(){}
   ~Hoge() {}
}
コンストラクタと対になるものだぞ。
573デフォルトの名無しさん:04/01/17 14:56
>>563
そうそう。
漏れは
private変数
public変数
アクセッサ
と順番に変形させている。
javaのような無意味なsetter/getterなんて作るなよ。>561
574デフォルトの名無しさん:04/01/17 14:57
デストラクタはc#では事実上、ほとんど使う必要ないよ。
使われなくなったら勝手に消えてくれるからほっといても良いんだよ。
571さんは、まずフィールドって概念を知った方が良いと思う。
575デフォルトの名無しさん:04/01/17 14:59
で、メソッドってのはそのフィールドを利用するもんだから。
沢村がひそんでいるな
沢村って誰?
578デフォルトの名無しさん:04/01/18 20:46
婆様、スレが止まった。
579デフォルトの名無しさん:04/01/18 23:42
ころねばいい。かんたんなことさ。じるをころにたようにね。
580デフォルトの名無しさん:04/01/19 01:27
質問です。
str_bufの4バイト目までを読み込みたいのですが
どのようにすれば良いのでしょうか?
型くらい書けや
char型です。
char型の4バイト目って何?
char型って普通1バイトじゃないの?
さて普通char型は2byteのはずだが。
585583:04/01/19 01:44
ぐは、C#ってsizeof(char)が2なのね。
char c[4]だろ
587デフォルトの名無しさん:04/01/19 17:17
Managed DirectX 1.0.1901.0
Visual Studio 2003
WindowsXP Pro SP1
Avance AC'97 Audio

でDirectSoundなんですが、0.15秒未満のWavファイルだとSecondaryBufferを作成するときにエラーが起きます。
これってどうにかなりませんか?
それとも私の環境だけで起こるエラーでしょうか?
わかる方教えてください。
---------------------------
MicroSoft.DirectX.DirectSound.Device dev;
MicroSoft.DirectX.DirectSound.SecondaryBuffer buff;
dev = new Device();
buff = new SecondaryBuffer(WAVEファイル, dev);

って感じのソースです。
588587:04/01/19 17:33
追加。
64kbps、8ビット、モノラル、8KHz、PCM です。
Dataチャンクのデータサイズが1200バイト未満だとエラーが出て、ファイルを変更しなくてもDataチャンクの値を1200以上に書き換えるとエラーは回避できるみたいです。
これってDirectSoundのバグでしょうか?
589デフォルトの名無しさん:04/01/19 18:33
Visual Studio.NET2003でdllファイルを参照設定する方法を教えてください。
参照設定のツリーでびっくりマークがついているやつがあるんですけど、
それのパスをプロパティーウィンドウから書こうとしても、灰色になっていて
書くことができません。
よろしくおねがいします。
590587:04/01/19 18:50
>>589
ビックリマークはdllが消えてるってことです。
「参照設定」で右クリックして「参照の追加」で追加するdllを選択すればできるとおもいます。
591デフォルトの名無しさん:04/01/19 20:03
>>590
なんとかできました。
ありがとうございました。
VB でいうところの format$ みたいな、日付を整形できる
メソッドはありませんか?

yyyy, mm, dd の 3つの値から、"2004/01/19" や
"Jan 19,2004" のように書式を設定したいんです。
>>592
DateTimeクラスのToStringメソッドでできたような気がする。
詳しいことはへるぷ参照してけろ
594デフォルトの名無しさん:04/01/20 20:30
MenuItem.Enabledの管理どうやってますか?
メニュー項目が増えるほど乱雑になってしまうし,
相互に関連し合うと設定がとても面倒になりますよね.
なんか上手い方法ないかなぁ…
後はToolBarとメニューで見た目とか押されたときの処理とかも
DelやBCBやVCみたいに一元的に管理できないもんかねぇ
そういうの作ったけどなんかダルイ
596デフォルトの名無しさん:04/01/21 07:45
#region
#endregion
で、囲うと、検索にも引っかからなくなるね。
597デフォルトの名無しさん:04/01/21 08:59
ところで、前の話だけどさ、
親オブジェクトの参照を子オブジェに持っていっても
参照できないとか言う話し合ったじゃん。
フレンドにしろとか。
それ、間違いだよ。
今確かめてみたら、
普通にパブリックなら余裕で参照できたよ。
もちろん親オブジェの参照をthisで子オブジェに渡しておくのが前提だけどさ。
誰が言ったんだか知らないが、
間違った知識のままの人がいるといけないので
訂正しておくよ。
>もちろん親オブジェの参照をthisで子オブジェに渡しておくのが前提だけどさ。
目くそ耳くそを笑う。
599デフォルトの名無しさん:04/01/21 09:23
え、何で?
答えられない598の負け
>>596
「非表示のテキストを検索」にチェック汁
602デフォルトの名無しさん:04/01/21 19:20
>>601
も前、頭いい!
漏れ驚いた!!
ITmediaアンカーデスク:「スマート」にこだわるビル・ゲイツ
http://www.itmedia.co.jp/anchordesk/articles/0401/20/news044.html

元ボーランドのO氏ってあのO氏?
public class Item {
public int name;
public int price;
public int sort;
}

public Item item = new Item[10];

のようにインスタンスを配列とした時、item.sort を基準に配列の中身を
ソートしたいのですが、どのような方法がありますでしょうか?
>>604
ItemクラスにIComparerインターフェースを実装させてArray.Sort(item)
Compareメソッドでは引数二つをItemにキャストしてそのsortで返り値を決定
ってIComparableインターフェースとCompareToメソッドの勘違い……。
CompareToはsortとItemにキャストした引数のsort、だ。
607604:04/01/21 22:34
>>606 さんありがとうございます。 IComparable と CompareTo で
できました。親切に教えて頂き感謝しています。
文字列を指定した桁数に 0 埋めしたいのですが、
簡単にやる方法があれば教えてください。

桁数分の '0' + 文字列 をし、文字列の右側から欲しい桁数
substring で取る、のような方法しかないでしょうか?

610609:04/01/22 15:37
すみません。ToString でできました。失礼しました。
611デフォルトの名無しさん:04/01/22 17:24
CSV形式の数値データが入ってるファイルを読み出すにはどうすればよいですか?
ArrayList arrayList = new ArrayList();

    using (StreamReader sr = new StreamReader("data.csv", Encoding.Default))
    {
        string data;

        while ((data = sr.ReadLine()) != null)
        {
            string[] temp = data.Split(',');
            int[] values = new int[temp.Length];
            
            for (int i = 0; i < temp.Length; i++)
                values[i] = Int32.Parse(temp[i]);

            arrayList.Add(values);
        }
    }
>>612

ありがとう。
614611:04/01/22 18:43
配列をArrayListに入れた場合ってどうやって値を取り出すんですか?
>>611
少しは自分で調べようね☆
616611:04/01/22 18:51
>>615

1時間調べたんだが・・・
foreach
618611:04/01/22 19:31
>>617

例外でますが。

ArrayListの各要素が配列になってるんだよ。
>>618
foreach (int[] values in arrayList)
なにか問題でも?
すいません質問です

>>611は質問する側なのに
なんでこんなに態度がでかいのでしょうか
いろいろ考えてみましたがわかりません
>>620
偉い人だからです。
>>620
態度とかの問題じゃないでしょう。
自分を疑えない人間は進化のしようがないですから。イライラするだけ無駄ですよ。
ていうか1時間調べても分からないなんてよほどの馬鹿だ。
逆ギレもいいとこだな。
624デフォルトの名無しさん:04/01/23 09:15
ペンオブジェクトとかブラシオブジェクトって、
staticで作っておいて使いまわしするのが一番効率がいい気がするけど。どうですかね?
ヘルプとか見ると、描画のたびにインスタンスを作ることになってるみたいだけど、
それじゃ速度でも、メモリ使用量でも、明らかに問題ありなんじゃないすかね?
625デフォルトの名無しさん:04/01/23 09:42
Aクラスを継承した
Bクラスとcクラスがある場合、
インスタンスを作ったら
メモリ上には二つのAクラスの部分のインスタンスが生じるわけですよね。
ってことは、継承しないで
まったく別にクラスを、例えばDクラスをつくって、
Bクラスやcクラスにその参照を渡して働かせる方が、
メモリ効率から言えば得ですよね。
Aクラスが2分の1に成るわけですから。
コードの記述性から言ったら問題あるかも知れないですけどね。
>>625
それぞれにインスタンスが必要ないならインタフェイスに汁。
627デフォルトの名無しさん:04/01/23 10:11
要するに、継承の利点の一つとして、
コードの使いまわしと言うのがあるわけですが、
それは単なるコピペで済む話ですので、
それを考えると、あまり、意味が感じられないっすね。
だから、>>624みたいな発想になっちゃうわけですよ。
インタフェイスでも、結局同じ部分をコピペして
結局メモリ上に同じ重複部分のインスタンスが発生すると言うことになるわけですから、
似たような話ではないかと、、、?
628デフォルトの名無しさん:04/01/23 10:12
まあ、そもそも私の設計ミスってことですかね?
参照を渡せばすむところを継承でやろうとしていたと。
たまたま2つのクラスでほとんど同じコードが出てくることになったので
これは、継承だ!と単純に思い込んでしまったと、、、?
>>628
> たまたま2つのクラスでほとんど同じコードが出てくることになったので

確かに設計に思想が見えてこない台詞だな。
FormA, FormB があり FormA から FormB を表示させたい。
FormB が表示している間は FormA は非表示とし、FormB が閉じられたら
FormA を表示したい。

という場合

FormA 内で

FormB formB = new FormB(this);
formB.Show()
this.Hide();

FormB
private FormA formA;

public FormB(FormA _formA) {
this.FormA = _formA;
}

で、FormB を閉じるときに
this.FormA.Show();

という方法でやっているのですが、FormA -> FormB のときに
this を渡さずにやる方法はありますか?

なんとなく this で渡すのは行いがよくない気がしたものですから。
どうでしょうか?
>>630
特に気にしないでFormAの参照を渡すけど。

FormAで、
formB.Closing += new CancelEventHandler(ReShowFormA);
private void ReShowFormA(object sender, CancelEventArgs e) {
this.Show();
}
とするとか。
//Closingイベント以外でも発生しうるならFormBに新しくイベント定義すればいい。
馬鹿な質問を聞いて下さい。

ExcelのVBAからC#.NETで作ったDLLを使おうとしています。

アセンブリの配置方法にはプライベートとグローバルがありますが
今回はプライベート配置で行いたいと思います。

DLLをレジストリに登録して(regasm.exe)
タイプライブラリ作って(tlbexp.exe)それをVBAから参照設定して・・・
結果として、プローブを行ったプライベート配置
(つまりExcelのインストールフォルダにDLLをぶちこむ)は成功しました。

しかし、本当にやりたいのは、構成ファイルでコードベースを
指定して、好きな位置にDLLを配置することです。
633632:04/01/23 22:03
構成ファイルは実行ファイル名.configで作成するという事、
そしてコードベースを中に書く事が分かりました。

しかし、CLRがそのファイルを参照してくれないようで・・・

〇〇.xls.config という名前でExcelファイルが入っている位置に
置いているんですがダメでした。

Excelのインストールフォルダに置いてみたり色々試してみたのですが
さっぱりです。

どうすれば解決できるのでしょうか・・・
>627

継承の利点が「コードの使い回し」だと思っている時点でおまいさんは既にずれている。
オブ脳本でも嫁。

あと
>インタフェイスでも、結局同じ部分をコピペして
>結局メモリ上に同じ重複部分のインスタンスが発生すると言うことになるわけですから、

ひょっとして、インスタンス一つ一つに、メソッドのコードを格納するエリアがあると思ってる?
(それにしたってインタフェイスにどんなコードが存在するってんだ?)
>>624のペンとかブラシの話、漏れも興味あるんだが…

ペンやブラシって色とかテクスチャのデータを保持しておく
「読み取り系」オブジェクトのような気がする(あくまでいい加減な推測だが)

多分スレッドセーフじゃないんだろうけど
どんな弊害があるんでしょうかね
教えてエロイ人!
[ツール]-[Webページのビルドコメント]を使ってみたのですが、
privateなものまで出るなど全く使えるように見えません。

VSのヘルプのようなAPIリファレンスはどうやれば作れますか?
TreeNodeCollectionが継承のやり方をおしえてくださいませ...
コンストラクタがないとできないの?
639636:04/01/24 04:14
>>637

ありがとうございます。
これで心置きなく眠れます。

おやすみなさい。
>>635
ペンとかブラシは有限なリソースなのでOSに回収されることがある
staticで持っててもそれがいつまでも使える保証はない
よってそういうやり方は御法度って話だったと思う。
ソースはPezold本だったかなぁ…記憶が曖昧なので間違ってるかも知れないが
Pezold はちょっと古すぎるかと...
素のハンドルを扱うのならともかく、.NET Framework 上のオブジェクトなんだから
リソースのキャッシュ/仮想化がされているので気にする必要は無いでしょう
てことは単に昔のアーキテクチャの名残でそういう習慣が残ってるだけってことか?
ほんとに今は気にしなくていいの?
オブジェクトレベルでも(メモリを含めた)リソースを消費するので
とてもクリティカルな部分では 10Mbyte のビットマップは明示的に解放するとか
避けられるなら無茶はしない方がよいかと思う。

.NET Framework は肝心の部分のコードが公開されていないのであれだが
Delphi / VCL はそうやっていたので GDI リソースの制限はほとんど気にしないでよいかと。
>ペンとかブラシは有限なリソースなのでOSに回収されることがある
これ自体、Win32 では起きないんじゃないかな?
Pezold は win16 時代の本でしょ?

>staticで持っててもそれがいつまでも使える保証はない
GDI オブジェクトとしてはそうかもしれない。
しかし .NET Object としては、必要となったら自分の保持する情報/プロパティから
GDI オブジェクトを再生成出来るから見かけ上、いつでもアクセスできる。
勝手にGDIリソースをOSが回収することはありえないだろ。
それよりリソース不足で落ちてしまうから、使っている瞬間しか保持しないのは
DBとかと一緒。

staticでおいておくとかそういう考え自体が古すぎる。
俺はstaticにはしてないけどコンストラクタで取って使いまわしてるな。
有限有限って言ってるけど数個のブラシで何が足りなくなるのか分からん。

古くさいとかじゃなくて、いちいち取得と解放を書くのが面倒なだけなんだが。
647646:04/01/24 12:12
ちなみにusingすら面倒って話で、using使えって無しね。
648645:04/01/24 12:51
せめてコンストラクタで取得するのはやめれ。
生成に失敗したらどうするんだ。
まあそうかもしれんね。コンストラクタで例外吐くのはご法度だという認識はあるよ。
けど通常起こりうる例外ではないと思ってるので、どうせOSの状態がガタガタじゃないかね。
どうせ続行不能だし、あんまり救う気は無いや。
sharp developとC#でヘボな2Dスプライト多用するようなゲームでも
作ってみようかなーと思ってるのですが、いかんせんWinの開発は
HSP除けば初めてなモンで途惑ってます。
なんかDirect3DとDirectDrawが統合されたってのが良くわかんない。
managed DirectXで2Dゲーム試しに作ってみようって時にも3D系の初期化が
必要なんですか?
素直にGDI使った方がいい?
651デフォルトの名無しさん:04/01/24 18:05
質問です。
グリッドコントロールと、コマンドボタンがあります。
グリッドコントロールの中にテキストボックスがあります。
このテキストボックスを編集したら、コマンドボタンをEnable=Falseにしたいのですが、
どうしたらよいのでしょうか?

編集しなくてもよいです。フォーカスがテキストボックスに移ったらとか。
要は、このテキストを変更したらボタンを押せなくしたいわけです。

>>650
ハッキリ言って
C#+.NETでのGDIは遅いよ。

個人的には2Dの場合も、D3Dで板ポリ作ってそこに貼った方が良いと思う。
ClassLibraryに簡単にまとめてしまえば、後は普通につかえるよ。

あと、マネージドDirectXは、DirectXから面倒な初期化の処理を省いたものだから
使うのはそれほど面倒じゃない。
ただ、C#でのサンプルが少し少ない気がする(当然だけどね
>>651
フォーカスが移った時のイベントハンドラを作って、そこで設定すれば良いんじゃねーの?

関係ないけど、C#のGUIが異常にメモリを食うのは何でだ?
GUIエディタで適当に作った何もしないアプリでも20MB位食ってるのだが。
最小化すると何故か数MBに減る。これが普通なのか?
C# Builderも最初は50MB位だが、最小化して戻すと10MBくらいになってる。
>>653
フレームワークのバグって聞いたけど・・・
未だに修正されないね。

明らかに多いからバグと言う認識で良いかと
仕様にしちゃ理不尽だ
>>653
余ってるから確保するだけなんじゃないかなあ。
別に最小化で減るのはスワップにまわるだけだよ。
タスクマネージャーのプロセスタブで「列の選択」して仮想メモリも表示するといい。
656650:04/01/24 19:12
>>652
さんきゅーです。
ドキュメントとか片っ端落ちてきたのでD3D板ポリで挑戦してみます。
657デフォルトの名無しさん:04/01/24 19:26
>>653 C#のGUIが
CUIでもあんまり変わらんのと違う?
VMがメモリ食うって感じがするけど…

最小化で減るのは 655 のとおりかと
658651:04/01/24 20:38
フォーカスが移ったときのイベントハンドラを作るというのは具体的にどういうことでしょうか…。
ちなみにwebフォームです。
Petzold本は古いって話が出てたけど、
Petzoldさん、「C#によるプログラミングWindows」って本も出してるだよ。
さすがにsharp developでコンバートできるDirectXのサンプル少ないっすねぇ。
でも概要掴めそうな感じ。いい時代や。
だーみだ、Direct3D関連全滅。DirectDraw関連ふたつほどいけたから、
しばらくこいつらのソース弄くってC#の構文程度覚えとくか。

学生とっ捕まえてVC#のアカデミックパッケージ買わせてこよっと
>>661
Visual C# .NETなんて2マソ出せばお釣りがくるじゃないか・・・
663デフォルトの名無しさん:04/01/24 23:16
>>653
前一回試してみたけど、本当にメモリの空きが足りなくなるまでは、GCが
発動しないみたいな感じ。
664デフォルトの名無しさん:04/01/25 01:45
>>663
ちなみにどんなコードで試した場合?
665デフォルトの名無しさん:04/01/25 02:50
いや、どんなって言われても困るけど、C#で作ったプログラムを走らせて、
タスクマネージャでメモリ使用量表示させて、別のソフトでjpeg画像を
たくさん表示させていっただけ。
>>656
VSスレ覗いてるようじゃ見込みないな
>>665
GC自体が一定時間おきにしか発動しないんじゃなかったっけ?
5分とか。
668^^:04/01/25 12:05
#include<stdio.h>

#define ORIG_STR "ymq\n"
#define CIPHERKEY 1

void cipher(unsigned char n, unsigned char *a)
{
while (*a !='0'){
*a=(unsigned char)(*a ^ n);
a++;
n++;
}
}

int main(void)
{
unsigned char a[4] = ORIG_STR;
unsigned char n=CIPHERKEY;

cipher(n,a);
printf("%s\n",a);
cipher(n,a);
printf("%s\n",a);
exit (0) ;
}プログラムを実行した結果は
xor
ymq
となりました。どうしたらこういう実行結果になるのですか?
ただし、英小文字をあらわすASCIIコードは、a〜zで16進数で61〜7Aです。
>>667
明示的に走らせない場合には、メモリが足りなくなった時に自動的にGCが働く。
670^^:04/01/25 16:25
>>668を教えてください。
671^^:04/01/25 16:27
>>668を教えてください。
672デフォルトの名無しさん:04/01/25 16:50
構造体って必ず、
自動的に0とかの初期値が与えられるわけですが、
これをこのまま使用するようなスタイルは良くないんですかね?
俺はいちいち初期化をするのは面倒だし、無駄な処理になるだけだから、
そのまま0の値が必ず入ってると思って初期化をしないで
そのまま処理を続けるのが一番効率的だと思うのですが、
同時になんか下品な気もするんですよね。
どうしたら良いんですかね?
皆さんだったらこの場合はどうしますか?
>>672
>そのまま0の値が必ず入ってると思って
そうじゃないこともあるかもしれないから
>皆さんだったらこの場合はどうしますか?
初期化します。
674デフォルトの名無しさん:04/01/25 17:16
えー、どんな場合っすかぁ?
>668
CとC++とC#とObjective-C、こいつらは全部違う言語。
おまいさんの質問のソースはC。ここはC#の議論をするスレ。

ってことで↓へドゾー
C言語なら俺に聞け! Part 71
http://pc2.2ch.net/test/read.cgi/tech/1074091602/
676デフォルトの名無しさん:04/01/25 17:44
ローカルマシン上で、C#で作ったアプリから、メッセージ(単純な文字列)を
送って、C#で作った別のアプリで受け取るような場合、API使わないで.netの
機能でやるのはどうすればいいんでしょう?
>>676
System.Runtime.Remoting関連。
>>672-673
C#では、オブジェクトのメンバは自動的に規定値で初期化される。
言語仕様でそうなっている。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csspec/html/vclrfcsharpspec_11_3_4.asp

デフォルトで入っている規定値を使うという方法は別に下品ではない。
むしろ、余計な代入が減るので望ましい。
(参照型にインスタンス割り当てないでぬるぽになるのは論外)

明示的に初期化しないと気持ち悪いってのもあるかもしれないが
それは単にC/C++時代の文化に毒されているだけ。

ただしローカル変数は規定値で初期化されないので注意。
(まあコンパイルエラーになるだけだが)
VS.NET 2003 C#で質問です。

FormTest formTest = new FormTest();
formTest.StartPosition = FormStartPosition.Manual;
formTest.Location = new Point(100,100);
formTest.ShowDialog(this);

フォームを呼び出して、その開始位置を設定しようとしています。

開始位置(formTest.Location)をセットすると、
呼び出すフォームがフォームデザイナで指定したサイズ(widthとheight)になってくれません。
formTest.Locationをセットしなければ、サイズは狂いません。

具体的にはフォームデザイナでheightを100に設定しているのに、
実際には77くらいになってしまいます。

フォームデザイナで指定したサイズのまま、
フォームの開始位置を設定するにはどうしたら良いのでしょうか?
>>679
俺もついこの前ひっかかったとこだ.
Form.StartPosition = FormStartPosition.Manual
681651:04/01/25 23:38
質問が流されているんですが、
せめて、どんな単語でググればいいかだけでも教えてもらえませんか。
>>681
TextChanged イベント
>>682
TextChangedは試したのですが、
「テキストボックスの中身を変更し終わった後」に発生するのでは困るんです。
「テキストボックスの中身を少しでも編集した瞬間」でないと。
VBでいうところのgotFocusがいいんですが。
684^^:04/01/26 00:26
#include<stdio.h>

#define ORIG_STR "ymq\0"
#define CIPHERKEY 1

void cipher(unsigned char n, unsigned char *a)
{
while (*a !='\0'){
*a= (unsigned char)(*a ^ n);
a++;
n++;
}
}

int main(void)
{
unsigned char a[4] = ORIG_STR;
unsigned char n=CIPHERKEY;

cipher(n,a);
printf("%s\n",a);
cipher(n,a);
printf("%s\n",a);
return;
}
どうしたらこういう実行結果になるのですか?

>684
>675
もうこのスレには来なくてよろしい。
686デフォルトの名無しさん:04/01/26 02:22
OpenFileDialogでファイルのパスでなく、
そのファイルの名前だけ(***.txtみたいな)を取得するにはどうすればいいでしょうか?
どこにも書いてないんですが・・・。
>>686 そのくらい自分で文字列処理しる!
>>683
TextBox1.Attributes["OnFocus"] = "Button1.disabled=true";
OnChangeでも

>>686
System.IO.Path.GetFileName(openFileDialog1.FileName) とか
689デフォルトの名無しさん:04/01/26 02:50
>>687
正規表現苦手なもので。

>>688
ありがとうございます。
>>688
ありがとうございます。試してみます。
691679:04/01/26 04:09
>>680

>Form.StartPosition = FormStartPosition.Manual
は、
formTest.StartPosition = FormStartPosition.Manual;
として、すでに設定済みなんです。
692デフォルトの名無しさん:04/01/26 16:07
C#でFormにHScrollBar を貼り付けて
XP Style 有効
Max = Value = Min = 0
のとき、スクロールバーを(バーの部分)クリックすると固まってしまい
Maxが大きくなっても固まりっぱなしになります。
回避する方法はありませんか?
DrawImage の透過に関して質問があります。

Control から継承したカスタムコントロールの OnPain を
下記のようにオーバーライドしています。このコントロールは
別のフォーム上にのっけて使っています。

protected override void OnPaint(PaintEventArgs e) {
e.Graphics.DrawImage(imageFile,
new Rectangle(0, 0, imageFile.Width, imageFile.Height),
0,
0,
imageFile.Width,
imageFile.Height,
GraphicsUnit.Pixel,
imageAttr);
base.OnPaint(e);
}
↑の DrawImage の imageAttr で Form 上の色を指定しても
透過されません。

ただ、これを Control を継承したカスタムコントロールではなく、
単純に Form の OnPain の中で同じように DrawImage した場合はちゃんと
Form の背景が透過されてきます。

カスタムコントロールの画像を DrawImage する時に、Form の
そのカスタムコントロールがのる部分を透過させるのには
どのようにしたらよいのでしょうか? よろしくお願いします。
694デフォルトの名無しさん:04/01/26 20:57
連想配列を実装できるクラスってなんでしたっけ?
>>694
Hashtable
696デフォルトの名無しさん:04/01/26 21:02
>>695
そうだ!
さんくすこ!
2つほどわからなくい事があります。

1.全角 -> 半角 文字列の変換
2.入力された文字列が、数値のみか、それ以外の文字が入っているか?

1. は VisualBasic のメソッドでできるようなのですが、
純粋に C# で実現する方法はありますでしょうか?

2. は VB6 の IsNumeric にあたる関数はないでしょうか?

御存知の方、御教示ください。よろしくお願いします。
VBからの移行組がここまで手がかかる子達だとVBを馬鹿にせざるをえない
>>697
1. はい
2. いいえ

これで良かったかな?
何か変だな。
 2.ありません。
に訂正。
>>697
正規表現で
VC++からの移行組みだけど、手間かけさせていただいてます。
>>702
日本語ぐらいちゃんとしようぜ。
704デフォルトの名無しさん:04/01/27 00:57
初歩的な質問だったら、ここで質問するよりも、Tipsを掲載してるホームページ
をお気に入りに登録しといて、そこを見たほうがよっぽど速いし、確実だと思うん
だがな。少なくとも片手以上はその手のホームページあるし。
>>699
文字列の全角/半角変換ですが、
Microsoft Visual Basic .NET Runtime を参照設定し、
Strings.StrConv を使う方法しかわかりませんでした。
Visual Basic .NET Runtime を参照設定せずに
行なう方法があるならその方法を教えてください。
>>697
1はしらんが、2は正規表現使えばできる。
>>706
Win32APIのLCMapStringを使う手もある。
C# から バッチファイルを起動し、そのバッチファイルが終了したら
別の処理に移行したいので、

Process process = Process.Start("ex.bat");
process.WaitForExit();

とやってみましたが、バッチファイルの終了を待たずに次へ進んで
しまいます。バッチファイルを実行し、バッチファイルが終了したら
次の処理をさせる方法があれば教えてください。
>>709
試してないけど、batってcmd.exe経由で動くんじゃないかな。
"cmd.exe /c ex.bat"とかだとどうか?
>>709
非同期なら
Process process = Process.Start("ex.bat");
process.EnableRaisingEvents = true;
process.Exited += new EventHandler(process_Exited);

private void process_Exited(object sender, System.EventArgs e)
{
  MessageBox.Show("バッチり");
}
712デフォルトの名無しさん:04/01/27 23:51
C#ってポインター使えますか?

Cで作成したDLLを利用したいのですが、そのDLLの関数の引数にポインター指定しなきゃいけないんで・・・・
unsafeすると使えるよ
>>712
構造体作って渡すとかだったら、MC++でラップしたほうが楽な場合もあるぞ。
C#だけでもできるけど。
ToolBarのImageListにIconを入れToolBarButtonにImageIndexを指定したんだけど
アイコンの透明色がうまく表示されてない。
どうすればいいんでしょう?
716デフォルトの名無しさん:04/01/28 01:14
windowsアプリケーションで作ったものを
コンソールアプリケーションにするにはどうすれば良いですか?
というのも、新規作成からwindowsアプリケーションを選んで作成していき
途中でConsole.WriteLineで何か出力したくなったんですが、
ソリューションエクスプローラーのプロパティから
出力の種類をコンソールアプリケーションにしても
WriteLineでの出力ができません。
お願いします。
VisualStudio .net使っています。
717715:04/01/28 02:10
透明色が反映されてないんじゃなかった。
透明になっていないんだった。
透明にするのもどうしていいのかわからない・・・
>>715
ImageList.TransparentColor
719709:04/01/28 09:36
>>711 教えて頂いた方法でバッチリいけました。ありがとうございました。
720デフォルトの名無しさん:04/01/28 11:16
intとかに対してハイバリューを設定するとかってあったっけ?c#にも
ヘルプでもちょっと出てこないけど、確か、あった気が、、、。
知ってる方いらしたら教えてください。
int.MaxValue
int.MinValue
722デフォルトの名無しさん:04/01/28 16:02
サンクスコン。
その文字列で検索したら
何番目か後のほうに普通に出てきました。
私の探し方が下手だったようですね。
スンマソン。
723デフォルトの名無しさん:04/01/28 22:58
ttp://www.microsoft.com/japan/msdn/academic/Articles/fun/02/
上記のページのような感じでWebBrowserコントロールをフォームに貼り付けて使用しています。
初期化ボタンを実装したいと思い以下のメソッドを書きました。
// コントロールをクリアします。
public void Clear()
{
object o=null;
this.axWebBrowser1.Navigate("about:blank",ref o,ref o,ref o,ref o);

}
このコードでブラウザに何も表示されなくなるのはいいのですが、
GoBackメソッドで戻れてしまいます。
ブラウザ内部で保持されている履歴を削除したいのですが方法がわかりません。
どうすればいいのでしょうか?
>>723
戻るリストを消すのはかなり手間がかかる(COMバンバン使う)し、IE5.5以上の環境が必要。
そのthis.axWebBrowser1を生成し直すほうが簡単だしお勧め。

つーかブラウザの初期化ボタンて何よ?見たこと無いし。
プログラムを実行しているユーザーのユーザー名を取得する方法ってないでしょうか?
>>725
Environment.UserName
>>725
ありすぎる。System.Environment.UserName。
調べたのかよ。
728デフォルトの名無しさん:04/01/29 00:17
F5
729デフォルトの名無しさん:04/01/29 13:54
標準出力にUTF8で書く方法はないでしょうか?
Javaで書かれたプログラムから呼んで、状態を標準出力出力に
吐いて渡すシステムを弄ってるんですが、ShiftJISは読んでくれない
みたいなので。。。
writeln( AnsitoUTF8( ansiString ));
>>729
StreamWriter のコンストラクタに
public static Stream OpenStandardOutput(); で取得したストリームと
System.Text.Encoding.UTF8 を指定するとか。
732730:04/01/29 14:23
すまん。Delphi と間違えた。他意はない。無視してくれ。
C# スレで Java と書かれた書き込みに対するレスで Delphi とは。
734729:04/01/29 14:43
731さんの方法でいけました。ありがとうございました。
735デフォルトの名無しさん:04/01/29 16:16
質問です。
ゲームを作りたいのですが
どの関数をかけば出来るのでしょうか?
>>735
Main
#include <ZISAKU.h>

void main()
{
int ret;

ret = game();
if(ret==0){
return;
}

}
738735:04/01/29 19:14
>>736
動きません。。。

>>737
それCです。。。
dos窓開いて format c: じゃなかったっけ?
>>735
マジレス。
本読め。
以上。
741735:04/01/29 21:21
>>739
出来ません。
システムの入ってるドライブはフォーマットできないと言われます。

>>740
どのような本を読めば良いのでしょうか?

あと、>>737のZISAKU.hというLibraryはC#で使う事は出来ないのでしょうか?
>>741
できるよ.
>>741
format c: も出来ないようじゃゲーム作るのは無理なんだよ。
744735:04/01/29 23:29
>>743
format c:が出来ればゲーム作れますか?
>>735さんは2ちゃんねる初心者ですか?
書き込む前にSG(セキュリティー・ガード)に登録しないと危険です。
SGに登録せずに書き込んだ場合、あなたのPC内の情報が他人に見られる恐れがあります。
初期の頃から2chにいる方達は、殆どSGに登録しています。
リモートホストを抜かれ、住所まで公開された人も数多くおり、社会的に抹殺されてしまう。
それが2chの隠れた素顔でもあります
SGしておけば、どんなにスキルがある人でもリモートホストを抜く事が不可能になります。
登録する方法は、名前欄に『fusianasan』と入れる。これだけです。
一度登録すれば、電話番号を変えない限り継続されます。
fusianasanは、正式にはフュージャネイザン、又はフュジャネイザンと読みます。
元々は、アメリカの学生達の間で、チャットの時のセキュリティを強化する為に開発されたシステムです。
fusianasanを掲示板に組み込むのは結構面倒なのですが、2chにカキコしてたら個人情報が漏れた、等の
抗議がうざったくなったひろゆきが、仕方なく導入しました。
悪意のある人間にクラックされる前にSGを施す事をお勧めします。
746735:04/01/29 23:59
>>745
一応5年ほど前から2chに居ます。
既に古株なので、既にSGは導入済みです。
5年もいてsageもできないなんて、お前はプログラム書かないほうがいいわ
748デフォルトの名無しさん:04/01/30 01:11
747おまえは書くな。
>>735
2chする暇でGoogleに一日中へばりついてノートやなんかをメモで埋めつくす
根性が欲しいな。

このスレにいるって事は.net SDKは落としたんだろうな?
sharp developかVC#standard(学割7000円くらいだったかな)、あとはC#の
入門本でも買えばOKだ。
750735:04/01/30 01:29
VS.NETのアカデミック買ってしまいました。。。
何にも知らないのに(汗

C#の入門書あさって見ます。
>>750
とりあえずガンガレ(`・ω・´)
面白いもの作ったら漏れにもやらせてくれ
>>750
始めはGDI操作して2Dの画像動かして、絵を動かせたという実感からゲームに
繋げて行くといいかもしれない。キーワードはBitBlt。ヘルプ引いとけ。
>>752
DirectX の方が後々楽じゃないか?
APIわざわざ使うより、
.NETに対応しているDirectXの方が
簡単でその後の応用にもつながるしな。
画像処理アルゴリズムの勉強をするなら別だが。
>.NETに対応しているDirectXの方が
意味不明。DirectX のアセンブリが提供されているといっても、ヘッダーファイル以上の物ではない。
GDI+ の方がまだ将来につながるぞ
this って省略してますか? 明示的にあらゆる this. って
付けてますか?
普段は開発環境使わずエディタで書いてるから必要なとき以外付けない。
開発環境使うときはメンバ名があやふやとか長いとかいうときにインテリセンス目的で付ける。
758ω:04/01/30 15:28
質問です。

C#で利用出来るDLLをCで作成したいのですが
そのDLLは出来ればクラス型ではなく単純な関数型にしたいのです。
参考になるサイトありませんでしょうか?
よろしくお願いします。






ゆめゆめ忘れぬことだ!!
759ω:04/01/30 15:29
すみません、
>ゆめゆめ忘れぬことだ!!
  ↑これゴミです。
間違ってコピペしてしまったようです。。。
760デフォルトの名無しさん:04/01/30 15:29
>ゆめゆめ忘れぬことだ!!
ふいた。
もう、ゆめゆめ忘れられなくなっちゃったよ..
>>758
ヘルプに(C++でない)CタイプのDLLの作成方法は書かれてる。



がしかし
> ゆめゆめ忘れぬことだ!!
どうやったらこんなシグネチャが付くんだ。
>ゆめゆめ忘れぬことだ!!
どういう意味ですか?
よろしくお願いします.
あるディレクトリ配下においてユニークなディレクトリ名のディレクトリ
を生成する方法を教えてください。

Path.GetTempFileName のように、temp の下に作成されてもいいです。

テンポラリなディレクトリを作成したいのですが。
よろしくお願いします。
765ω:04/01/30 20:25
>>762
ありがとうございます。
無事出来ました。

が、今度はC#側で読み込む時に問題が・・・・

[DllImport("test.dll")]
public static extern void test();

こんな感じで書いたんですが
>error CS1525: '[' は無効です。
って言われます。
書いた場所は、
button1_Clickの中です。
766ω:04/01/30 20:25
あ、ちなみに
ゆめゆめ忘れぬことだ!!
はベルセルクの髑髏の騎士の言葉です。
thisは、なるべく付けてるな。
面倒くさいし見づらい時もあるけど、
自分のメンバなのか、別のクラスの静的メンバなのか、分かりづらいのよりはマシだと思って・・・。
768デフォルトの名無しさん:04/01/30 20:54
string型とchar型はどう違うのですか?
あと、string型をchar型に変換するにはどうすれば良いのでしょうか?
>>765
button1_Clickの外に書かないと
770ω:04/01/30 21:16
>>769
どうもありがとうございます、
無事出来ました。

あと、
using System.Runtime.InteropServices;
これも必要だったんですね、、、
>>768
string型は文字列を扱える。
char型は文字は扱えるが、文字列は扱えない。
772768:04/01/30 21:23
>>771
レスありがとうございます。
なるほど、そういう事だったのですか・・・
char[]とかやるのは複数確保して文字列を扱うためだったのですね。
少し理解できました。

ところで、string型からchar型へ変換するのはどうすれば良いのでしょうか?
逆は、ToString()で出来るみたいですが・・・・
>>772
インデクサかToCharArray()

string aiueo = "あいうえお";
char u = aiueo[2];
Console.WriteLine(u); // 結果 う

char[] c = aiueo.ToCharArray();
>>772
キャスト使え
(型名)x
775768:04/01/30 22:03
ありがとうございました。
無事出来ました
C#のコードをC++に書き直したいんだけどよくわからん
なんか参考になりそうなサイトとかご存知の方いたら教えてください。

ゆぬゆぬ忘れめことだ!!
ASP.NETの話もここでいいでしょうか?
えと、web.configのappSettingsを以下のようにしました。

<add key="hoge" value="1行目です。<br>2行目です。"/>

このようにvalueにHTMLタグ(<br>)を入れると

「解析エラー メッセージ: '<' (16 進数値 0x3C) は無効な属性文字です。」

と表示されてしまいます。validateRequestをfalseにしてもだめでした。
HTMLタグを入れる方法はないものでしょうか。
>>777
<br> で。
779778:04/01/30 23:37
ごめん。&は半角に直してくれ。

&lt;br&gt;
質問です。
char[] hoge
の意味がわかりません。

Cで言うとchar hoge[]の事でしょうか?
>>779
あ、それがありましたか!無事に出来ました。
即レスありがとうございました。
>>780
yes
VC6.0のMSDNみたいにヘルプだけを開きたいのですが
VisualStudioを開かずに.NETのヘルプファイルを開くには
どうしたらよいのですか
784783:04/01/31 00:53
よく調べずに質問してしまった
すまん
スタートメニューに普通に入ってたよ
ちなみに漏れの場合パスは
Program Files\Common Files\Microsoft Shared\Help\dexplore.exe
みたいな感じ
>>783
Document Explorer
786785:04/01/31 00:55
_| ̄|○
787sage:04/01/31 09:54
質問があります。Formの右上に閉じるボタンだけ
表示するようにするにはどうしたらよいのでしょうか?
MaximizeBox = false;
とかやってグレーアウトにするのではなくて
MessageBoxのようにしたいのですが
MessageBoxだと任意の場所にコンポーネントを配置できない(?)ので
困っています。どなたか教えてください。
>>787
MaximizeBox = false;
MinimizeBox = false;
ちょっとしたテキストエディタを作っていますが
改行箇所には灰色の「↓」を表示、
ファイルの末尾には灰色の「[EOF]」を表示、
現在の行には灰色のアンダーラインを表示できるようにしたいのですが
そもそもC#で用意されているコンポーネントでそれを実現するのは
無理なのでしょうか?
>>788
そうやるとグレーアウトになるだけで
ボタン自体はなくなりません
>>790
え〜?
うちじゃ1.0でも1.1でも98でもXPでも両方まとめて指定することで消えるけど?
>>790
なくなるよ。
俺も確認済み
>>791
すみません。両方書いたらできました。
ありがとうございました!!!
>>789
_
795794:04/01/31 12:00
TextBox RichTextBox を継承してがんばればできるかも
796デフォルトの名無しさん:04/01/31 13:24
Cで作成したDLLのchar型の変数をreturnする関数をC#で利用するプログラムを組んでるのですが

return value を コマーシャル できません

ってエラーが出ます。
どのような意味なのでしょうか?
ググっても出てきません。
797デフォルトの名無しさん:04/01/31 13:35
もれも、BitBltについて便乗質問します。
これは要するにapiか何かですか?
少なくともc#にあるメソッドとかではないですよね。
検索したけど出てこなかったし、、、。

c#+GDIで言うならドローイメージあたりになりますよね。
798デフォルトの名無しさん:04/01/31 14:47
開発環境はなにがいい?
799デフォルトの名無しさん:04/01/31 16:01
すみませんがどなたか教えてください。

Stringで取得した文字列がDateTimeにコンバートできるのか事前にチェックしたいのですが、
そういった関数はあるのでしょうか?

>>799
DateTime.Parseをtry-catchしてやればいいんじゃない?
801799:04/01/31 16:38
うわっ そうですよね。
すっかりTryを忘れてました。

ありがとうございました。
>>796
charなら難なくmarshalできると思うんだが・・・
その関数のプトロタイプ書いてみ?
803デフォルトの名無しさん:04/01/31 22:54
今ログファイルが更新された時にリアルタイムで表示させる物を作っているんですが
そのログを吐き出すアプリがファイルをロックしているのでログファイルをオープンする事が出来ません

別のプロセスがロックしているファイルをオープンして読み込むことは出来ないんでしょうか?

ちなみにメモ帳ではそのファイルを開く事は出来るので、如何にかすれば出来ると思うのですが…


>803
別のプロセスがロックしているファイルをオープンして読み込むことは出来ないんでしょうか?
相手のアプリの開き方による。
API CreateFile()の説明でも読め。
Visual C# .Net持ってないので
コマンドラインからコンパイル&実行しています。
icoファイルを埋め込んだリソースファイルを作ってそれを参照したいのですが、
iconファイル名:Icon.icoの場合
% ResXGen /i:Icon.ico /o:img.resx /n:icon
% resgen img.resx img.resources
とやってからソース中で
ResourceManager resources = new Resources.ResourceManager(typeof(CreatedForm));
this.Icon = ((System.Drawing.Icon)(resources.GetObject("icon")));
とやったのですがうまくいきません。実行時エラーになります。
どうすればうまくいくのでしょうか?
また、typeof(CreatedForm)とはどういう意味なのでしょうか?
806デフォルトの名無しさん:04/02/01 00:57
ASP.NETで質問です。
別に作ったcsファイルを使うために「<%@ Assembly Src="test.cs" %>」
とaspxファイルに記述して、aspxファイルと同じフォルダに入れて使ってました。

で、他のaspxファイルでもtest.csが使いたくなったため、共有して使おうと思い、
commonフォルダを上に作って「「<%@ Assembly Src="../common/test.cs" %>」としました。

そしたら
「解析エラー メッセージ: 仮想パス '/common/test.cs' がほかのアプリケーションに割り当てられていますが、これは許可されていません。」
というエラーが出てしまいます。

csファイルを共有して使う方法はないものでしょうか。
グローバルアセンブリにする方法はなしでお願いします。
>>805
リソースと関連付けられてないからとりあえず
ResourceManager resources =
  new ResourceManager("img", System.Reflection.Assembly.GetExecutingAssembly());
これで /res:img.resources 付ければ動くとは思うが、typeofだとどうなんだろ?
>>807
ありがとうございました。
>>804
CreateFile() 見てみました
相手プロセスがFILE_SHARE_READ等でファイルを開いてないと他のプロセスからアクセス出来ないようですね

ですが、メモ帳では開けるので如何にかすればOpenしてReadできると思うのですが
810デフォルトの名無しさん:04/02/01 23:01
配列のプロパティってどうやればいいんでしょうか?

public class hoge
{
private ArrayList array=new ArrayList();

public String[] Items
{
set{array=value;}←ここがダメらしい
get{return (String[])array.ToArray(typeof(String));}
}

public void Add(String Item)
{
array.Add(Item);
}
}

って感じで、Add("aaa")した後に、Item[0]を読むことはできても書くことができません。
添え字を拾うことができれば、set{array[index]=value;}とかでいけそうなんですけど。
set {
array.Clear();
array.AddRange(value);
}
ちなみに、

> set{array=value;}←ここがダメらしい

String[] Items { set; get; }

なんだから、valueの値はString[]になる。
ArrayList != String[]
>>811 >>812
ありがとうございます。
hoge.Item[5]="xxx"とかしても
String単体じゃなくて、String[]全体がvalueに入るんですね。

811の方法だとsetする度に配列の全破棄・全コピーが起こるのが
ちょっと気になるんですけど。
C#使っててこんなこと考えてちゃダメなんでしょうか。
StringCollectionクラスでも使ったらいい

StringCollection items;

StringCollection Items {
get { return items; }
}

Items[0] = "hoge";
>>814
あ、こんなクラスあったんだ。
ありがと。
ドライブのタイトルを取得するにはどうすればいいのでしょうか?
エクスプローラで各ドライブを選択したときのタイトルを取得したいのですが・・・。
818816:04/02/02 00:41
>>817
どうもです。
ttp://ukamen.hp.infoseek.co.jp/Programming/File/#SEC73
はすでに参照しておりましたが、うまく取得できませんでした。

取得したい「ドライブのタイトル」というのは、
エクスプローラのフォルダビューで表示されるドライブの名称なのです。
以下、ドライブ名を空白にしたときの表示例です。

HDDでの例 : ローカルディスク (C:)
FDDでの例 : 3.5 インチ FD
CDドライブでの例 : CD ドライブ
みなさん、データベースは何を使ってる?
やっぱりSQL(MSDE)?
>>818
DriveTypeの数値で分岐させて文字列を与えないとダメなような。
821デフォルトの名無しさん:04/02/02 22:15
C#.NETで、子フォームの変化に合わせて親フォームのステータスバーの表示を変えたいのですが、どのようにすればよいのでしょう?
初歩的な質問ですみません。
>>821
子フォームに独自のイベントを実装して、
親フォームが子フォームのインスタンスを作成する時点で、そのイベントに、ステータスバーの表示を変えるメソッドをアタッチする、

というのがスマートな方法かな。
823デフォルトの名無しさん:04/02/02 23:12
>>822
ありがとうございます。
試してみます。でも、できるかなぁ(@@;)
825デフォルトの名無しさん:04/02/03 00:01
>>819
個人的にだけどMSDE使ってる。ネイティブ接続できるから。
昔の資産を大切にする企業とかならODBCかな?AccessならOLEDBか。

#しかしMSDEは全部コマンド打ちなのでつらい…
 WebMatrix使えばテーブルの設計が出来るからありがたい。
 Access持ってるならAccessプロジェクトでそれなりに設計できるけど。
826822:04/02/03 00:54
>>823
独自のイベントを実装すればと書いたけど、
「子フォームの変化」が何かによっては、既存のイベントを利用するだけで済むかな。

ちなみに、これって初歩的な質問では無いような気も・・・
827デフォルトの名無しさん:04/02/04 02:29
C#でプログラムを作って、APIのGetClassNameで自分自身のクラス名を見ると、
WindowsForms〜〜という長ったらしい名前が出てきますが、この名前は自分
で指定した名前にする事はできるのでしょうか?
828フサギコ#:04/02/04 03:12
|д・彡

Font情報をファイルに保存/読込したいです。
Font.ToString()で書きこみはOKなのですが
その情報を読み込ませてFontに反映させる方法がわかりません。

教えてください。よろしくおねがいします。
>>828
Font font = new Font("MS UI Gothic", 9, FontStyle.Italic);

FontConverter conv = new FontConverter();
string text = conv.ConvertToString(font); // この文字列を保存

// これで復元
font = (Font)conv.ConvertFrom(text);
830フサギコ#:04/02/04 04:06
|д・彡

ありがとう、エライ人!!

うまくできました。
>>827
ICustomTypeDescriptor
832デフォルトの名無しさん:04/02/04 10:02
>>826
ありがとうございます。
初歩的って書いたのは、親Formのステータスバーを子Formから使うのって自Form上のTextBoxを使うのと同じくらい普通なことだからきっと簡単にできる仕組みがあるんじゃないかなって思ったためでした。
結局、解決は親FormのStatusBarをInternalにして使用することにしました。
あまりスマートじゃないけれど。。。(^^;)
833フサギコ#:04/02/04 13:34
|・д・彡  モイッコーシスモン

textBox1に対して、いろんなキーを押したフリを
させたいのですが、どのようにしたらいいでしょうか?

例えば
↑とか↓とかShift+→とか

keybd_eventとかSendMessage(WM_KEYDOWNとか
そういった処理をさせたいのですが、
やり方がわかりません。

よろしくお願いします。

834フサギコ♯:04/02/04 14:00
|・д・彡 

やっとわかりました。

 SendKeys.Send("+{RIGHT}");

ですね。お騒がせしました。

このへんが参考になりましたが、
http://www.syncfusion.com/FAQ/WinForms/FAQ_c94c.asp#q915q
英語…ツラー
Formの左上のアイコンを
リソースファイルから取得して表示したいのですがうまくできません。
リソースファイルを作るところから教えてください。
ちなみにVC#持ってません。
Winアプリを作成するにあたってよくToolBarで使用される
ファイルオープンや新規作成のアイコンを探してますが
あの画像ファイル群ってどこかに落ちてたりするんでしょうか?
それとも皆さん自分でスクリーンキャプチャとかして作ってるんでしょうか?
837デフォルトの名無しさん:04/02/06 17:02
書式がついている数字の文字列(例:1,234,567)をConvert.ToInt32()するとエラーになるようですが、みなさんどうしています?
いちいち、文字列から','をはずすのも手間ですよね。

それから、836さん
標準で入っているよ。
\Microsoft Visual Studio .NET 2003\Common7\Graphics\icons
これじゃ、足りない??
838鳥取砂丘&rlo;ムレーハ村リ゚フ@&lro; ◆Dream/3P/. :04/02/06 17:11
C丼って美味しいの?(´・ω・`)
>>837
Int32.Parse("1,234,567", System.Globalization.NumberStyles.AllowThousands) とか
>>837
>>840
ありがとうございました。
842デフォルトの名無しさん:04/02/07 16:08
>>839
Parseメソッドでできるのですね。勉強になりました。ありがとうございました。
843デフォルトの名無しさん:04/02/07 16:14
プログラマーに最低限必要なものってなんですか?
そして皆さんワープロ検定何級ですか
844デフォルトの名無しさん:04/02/07 16:27
実際、C#って仕事に使ってる人いるのかね。
>>844
MS社員。

他にもメーリングリストとか見てるかぎり時々いるよ。
クロスプラットフォームがどうとか言ってはいるが、ちょっと気の利いたことが
したければ結局DllImportやらWndProcやらでWindows APIを叩かないとダメ。
旧アーキテクチャの呪縛に縛られまくりです。

まあ言ってるだけでMSは独占をやめるつもりないってことですね。
>>843
ワープロ検定なんてフツー受けないだろ?w

っていうか、最低限必要なのなんて無い
最低しか持ってなきゃインド人に仕事取られちまうよ
>>846
はじめから「将来的にクロスプラットフォームになる“かも”」としか言ってない罠。
100% pure なんたらよりも既存資源の流用の方が重要。
>>846
文章が行ごとに繋がんないんだよな。
言いたいことは分かるが。
>>844
ノシ
TabPageにContextMenuを追加したいのですが
TabPage全体で機能するのではなく
Tab(つまみの部分)で右クリした時にだけ
ポップアップするようにするにはどうしたらいいんでしょうか?
↑すみません。いろいろやってたら解決しました。
だから自己解決したらその方法を書けって何回言ったらわかるんだボケ!

>>853
TabPageにTreeViewを貼り付けていて
TabとTreeViewで右クリした時の動作を分けたいと思っていたんですが
それぞれにContextMenuセットしたらできました。
VC#で複数行を選択してコメントアウトするための
ショートカットってありますか?
JBuilderとかEclipseとかでいう「Ctrl + /」みたいな。
>>855
Ctrl + K、Ctrl + C
反対は Ctrl + K、Ctrl + U
>>856
どうもありがとう!ちなみにそれってどこに書いてあったの?
>>857
ツール>オプション>キーボード で以下の文字列〜にそれらしいのを入力とか
>>858
確かに発見。いろいろいじってみよっと。
ありがとうございました。
びるだいい?
コントロールを自作する場合、枠もクライアント領域に描画するものなんでしょうか?
ASP.NET Webアプリケーションやろうとしましたが
IISが入ってないからできねえよと怒られました。
MSのページでIISダウンロードすることってできるんでしょうか?
俺が調べた限りでは見あたりませんでしたが・・・。
OSに、普通についてる。
「プログラムの追加と削除」からセットアップ。
864デフォルトの名無しさん:04/02/09 16:59
ウィンドウサイズをthis.Widthとthis.Heightで取得して
アプリ終了時にiniファイルに書き出すようにしてるのですが、
ウィンドウ位置が(0,0)じゃないところで終了させたり、
ウィンドウ幅を広げてからアプリ終了すると
変化させていないはずのHeightが毎回18〜19ずつ増えてiniファイルに
保存されてしまいます。
正しい値を取得するにはどうしたらいいのでしょうか?
>>864
自分もそれハマった。ClientSizeプロパティを使用汁。
書き忘れましたがHome EditionなのでCD-ROMには入ってません。
Webで配布してないなら素直にProfessional買うしかなさそうですね。
867864:04/02/09 17:23
>>865
解決しました。
数時間悩んでたんで865が神に見えた。
ありがとう。
>>866
http://www.atmarkit.co.jp/fdotnet/webmatrix/webmatrix01/webmatrix01_01.html
> Windows XP Home EditionのようなIIS(Internet Information Services)を搭載していない
> プラットフォーム上でもASP.NET開発を行うことができる。
WebMatrix使うのはいいんだけど、IISとはなんとなく挙動が違うから気をつけてね。
870デフォルトの名無しさん:04/02/10 11:16
例えば、c#でゲームを作ったとして、
そのゲームのデータをセーブしたり、ロードしたりするとしたら、
それはテキストファイルを読み書きするような処理に相当するコードを書けばよいのですか?
なんかiniとかレジストリとか自分には耳慣れない言葉もあるようですが、
知ってる方がいらしましたら教えてください。
>>870
データにもよると思うけど、データ保存はXmlSerializerなりSoapFormatterなり使うといいと思う。
872デフォルトの名無しさん:04/02/10 11:41
>>871
早速ありがとうございます。
良く知らない文ですが、検索して使ってみます。
ありがとうございました。
873デフォルトの名無しさん:04/02/10 12:15
CrystalReportsViewerで、プレビューが表示されるまで、マウスカーソルをWaitCursorにしておきたいのですが、表示されると発生するイベントが見つかりません。
ご存知の方がいらっしゃいましたら、よろしくお願いいたします。m(__)m
>>868
>>869
なるほどWebMatrixは独自サーバを含んでいたのか。
ありがとうございました。
ていうか以前この記事読んだことあったのに俺・・・_| ̄|○
875デフォルトの名無しさん:04/02/10 20:37
form1上に直接描き込むのと、
ピクチャーボックス上に描き込むのとでは何が違うのでしょうか?
わざわざピクチャーボックスを使うことの利点があるのでしょうか?
御存知の方お願いします。
876正規表現:04/02/10 21:19
正規表現についてどなたかご指導お願いします。
\XXXXX INFILE=(XXXXXXXXXX %DKDEV %WKMD1) OUTFILE=(XXXXXXXXX PUBLIC) WKDISK=(TEMP PUBLIC SIZE=20 INCRSZ=5) PARFILE=SRT02 REPORT=ALL ;
のようなコマンドを
Regex r = new Regex(@"^\\XXXXXX\s+(?:(?<file>\w+)(?:[\s=(]*)(?:(?<value>[\w=%]+)\s*)+(?:[\s)]*))+", RegexOptions.Compiled);
のパターンでグループに分けて

if (sortRegex.Match(multiLine).Success == true)
{
Match mc = sortRegex.Match(multiLine);
Group gpInout = mc.Groups["file"];
CaptureCollection ccInout = gpInout.Captures;
Group gpParam = mc.Groups["value"];
CaptureCollection ccParam = gpParam.Captures;
for (int i = 0; i < ccInout.Count; i++)
{
string key = ccInout[i].ToString();
Debug.WriteLine(ccInout[i].Index + ":" + key);
}
for (int i = 0; i < ccParam.Count; i++)
{
string param = ccParam[i].ToString();
Debug.WriteLine(ccParam[i].Index + ":" + param);
}
}

で、取得する。

(つづく)
877正規表現:04/02/10 21:20
結果を構文の順番で取りたいのですけど、グループ単位でしか取れません。
何か良い方法はないでしょうか?

このような順番で結果を取得したいです。

INFILE
XXXXXXXXXX
%DKDEV
%WKMD1
OUTFILE
XXXXXXXXX
PUBLIC
WKDISK
TEMP
PUBLIC
SIZE=20
INCRSZ=5
PARFILE
SRT02
REPORT
ALL

(つづく)
878正規表現:04/02/10 21:21
今のコードだと

INFILE
OUTFILE
WKDISK
PARFILE
REPORT
XXXXXXXXXX
%DKDEV
%WKMD1
XXXXXXXXX
PUBLIC
TEMP
PUBLIC
SIZE=20
INCRSZ=5
SRT02
ALL

こんな感じ

(長くてすまんです)
>>878
よくわかんないけど、

Regex regex = new Regex("pattern");
for (Match m = regex.Match(input); m.Success; m = m.NextMatch())
{
  Console.WriteLine(m.Groups["file"].Value);
  Console.WriteLine(m.Groups["value"].Value);
}

こういうことかな?
>>875
座標(0,0)とサイズの管理がピクチャーボックスの方が楽
>>878
吉田成一 [[email protected]]
質問です。
VBの名前空間のメソッドを使わずにBeep音は鳴らすことができますか?
>>882
PInvoke
884デフォルトの名無しさん:04/02/11 16:26
>>882

Console.Write('\a');
885デフォルトの名無しさん:04/02/11 16:54
データグリッドについて教えて下さい。

SQLServerのデータベーステーブルをメンテする
WindowsアプリケーションをC#で作成しています。
データグリッドにテーブルの内容を表示はさせてことは出来ました。
(SqlDataAdapter、SqlConnection、DataSetを使用しています)
その表示の際に、テーブルの表示項目はint型なのですが、その内容を判断して
int型の項目の変わりにstring型の文字を表示したいのです。
例:int項目=1ならばデータグリッドに“OK”、
  int項目=0ならばデータグリッドに“NG”の様にしたいのです。

もう、わけわからん・・・。
886デフォルトの名無しさん:04/02/12 17:54
>>880
なるほど。ありがとうございました。
887絵本明 ◆KCHLklVteY :04/02/12 18:21
※※ 2ちゃんねる緊急アンケート! ※※

以下のスレにてアンケートにお答えください。
http://book.2ch.net/test/read.cgi/ehon/1076577467/

1) 好きな絵本の題名を1つだけ教えてください。(例:てぶくろを買いに)

2) どんなところが好きですか?(例:子ギツネがかわいい。店の人間が優しくて驚いた)

3) どの板からきましたか?(例:このアンケートが貼られていたスレの URL をお知らせください)


ご協力ありがとうございました。
発表は発表をもって代えさせていただきます。

発起人:絵本明
フリーのコンパイラってないんでつか?
いろいろ見たけどシェアウェアっぽくて・・・。
>>888
(゚Д゚)ハァ?
>>888
ある
>>889
こんなにあからさまな釣りに釣られるなんてw
892デフォルトの名無しさん:04/02/12 22:50
拡張子って日本語で何文字でもつけられちゃうのね。
セーブダイアログでファイルの種類を指定するフィルターの項目でさ、
やってみたら、すごい量の日本語文字列の拡張しても問題なく動くよ。
893デフォルトの名無しさん:04/02/13 01:02
フルパスからディレクトリ名を削除して、
ファイル名だけを取り出す良い方法は何か無いですかね?

良く、エディターのタイトルの部分に、ファイル名を表示したりするじゃないですか。
自分もそんな感じでファイル名を表示してやろうと思ってるんですが、
やはり、文字列操作をして、一番最後の¥マークから下の文字をゲットすると言うめんどくさい
ことをしなければいけないのでしょうか?
>>893
Path.GetFileNameでフルパス渡すだけ。
ツールバーのButtonSizeをいくら大きくしてもボタンのイメージは
16x16固定なんでしょうか・・・・
32X32にしたいんですが。
896デフォルトの名無しさん:04/02/13 01:18
>>894
おお、早速ありがとうございます。
助かりました。
>>895
画像のサイズを32x32にしてみては?
どれか1つだけでいいから。
898デフォルトの名無しさん:04/02/13 03:13
byte[]型のデータがあって、
それとは別のint[]型の配列や構造体などがあったりしたとき、
結局はbyte型に換算すれば同じ容量のデータなのですが、型が違うので
=演算子ではストレートに代入できないって言うときは、
いちいち細かく1byteごとに型を変換しつつ代入して行く処理を自分で書かなければ
行けないのでしょうか?
それとも、もっと簡単でスマートなやりかたと言うものがあるのでしょうか?
詳しい方がいらしたらご教授ください。
Cで作成したDLLをC#で利用したいんですが
インポートした関数と文字列のやり取りをする場合
どのようにすれば良いのでしょうか?
配列のやり取りは出来ないので、ポインタを渡すしかないように思えるんですが、C#ではポインタは使えないんですよね?
>>898
unsafe コードにしてやれば無理やり代入出来る。
↓こんな感じ。
unsafe
{
fixed(byte* p= src)
{
dest = *(StructType*)p;
}
}

>>899
MarshalAs 属性で検索すべし。
901デフォルトの名無しさん:04/02/13 04:26
自分は898ですが、
どうやら、object型に変換してから更にbyte型に変換することによって
何とかなるようです。
902デフォルトの名無しさん:04/02/13 06:49
いや、できると思ってたらやっぱりできませんでした。
どうもobject型を経由して型をキャストするとかは駄目みたいですね。
しょうがないので、
1byteごとに代入して全byte分ループさせて行く方法で解決しました。
900の方法ですが、自分のはおそらくc#オンリーバージョンでc++のコードとか
コンパイルできないのでそもそも駄目なんじゃないかと思ったので試してみてません。
すんません。
でも、お気持ちは嬉しいです。
>>898

MemoryStream ms;

ms = new MemoryStream();
BinaryWriter bw = new BinaryWriter(ms);
bw.Write(100); // Int32
bw.Write(Math.PI); // Double
byte[] b = ms.ToArray();

ms = new MemoryStream(b);
BinaryReader br = new BinaryReader(ms);
int i = br.ReadInt32();
double d = br.ReadDouble();
>>902
>>900はC#のコードだよ。
unsafeのなかだとC#でもポインタ演算子*を使えるようになる。

>>899
StringBuilderクラスを使うとか
905895:04/02/13 08:29
>>897
ImageListにImageSizeとかいうプロパティがありました。
こいつがデフォルトで16x16で32x32にかえたらいけました。
VScrollBar で質問です。

this.vScrollBar1.Maximam = 100;
this.vScrollBar1.LargeChange = 24;
this.vScrollBar1.SmallChange = 12;

のとき、this.vScrollBar1.Value が 77 以上にいかないのですが
これはどういった理由からなのでしょうか?

Value を 100 まで OK にしたい場合はどのように設定すべき
なのでしょうか? よろしくお願いします。
>>906
Value値の範囲は

Maximum + 1 - LargeChange
908デフォルトの名無しさん:04/02/14 22:49
テキストエディタとかワープロってのは
一般的に新たに書き加える部分を覚えてて、上書きの時はその部分だけを追加するような、
形式になっているのでしょうか?
自分的には、そんなめんどいことやってられねえやって気分になってしまいますよ。
まあ、自分はゲーム用のダンジョンエディタを作ってるわけですが。
普通、こう言うのって全読み込み、全書き込みでも良いですよね?
メモリに収まらないくらい長大なデータならいろいろとやる必要あるのでしょうが、、。
909645:04/02/15 00:08
>>908
Ctrl+Zのために何をやったかは覚えてるけど、保存は全部あたりまえ。
910デフォルトの名無しさん:04/02/15 01:04
そうか!どっちにしろundoのために
一回一回、何をやったかは覚えなければいけないのか。
大変だな。
まあ、良いか、そんな高度な機能追加する必要もなさそうだしな。
911デフォルトの名無しさん:04/02/15 01:41
空きディスクや空きメモリを取得するにはWMI使わなくちゃならんのですか?
MSはWMI覚えることを強制してるのですか?.NETで楽して開発できるはずじゃないのですか?

もっとあっさりと取得できる方法はないのですか?
912デフォルトの名無しさん:04/02/15 01:50
C#を勉強しようと思うんだけど、どの本を買おうか迷ってます。
「C#によるプログラミングWindows 上・下」が人気あるけど、
2冊あわせて1万って高すぎ・・・。でも内容はしっかりしてそう。
「C#.NETプログラミングマニュアル .NETプログラマーズライブラリシリーズ
」は安いし、日本人が書いているので、こっちもよさげ。

Javaは結構扱えるので、プログラミング経験はあります。C++はあまりわかりません。
C#でのWindowsプログラムの作り方や、デリゲートなどのC#の言語仕様が知りたいです。

よろしくお願いします。
913デフォルトの名無しさん:04/02/15 03:43
>>880
それはピクチャーボックス自体の
位置とサイズを任意に移動できたりするからですよね。
フォームデザイナとかで。
後、コードからでも結構簡単にプロパティを変えることでいろいろと操作できますよね。
なるほど。
分かりました。
914デフォルトの名無しさん:04/02/15 08:14
構造体にインスタンスフィールド初期化子を指定できないのは何故ですか?
>>914
構造体はインスタンスじゃないから
>>912
1冊1万なんて普通ジャン
>>912
オンラインの入門記事は結構あるよ。
>>912
@IT読み尽くせば。
ここの吉松さんのデリゲート再入門が分かりやすい。
「C#によるプログラミングWindows 上・下」はWebで2章分読める(知ってたかな?)
919デフォルトの名無しさん:04/02/15 17:17
>>916-918
ありがとうございます。
「C#.NETプログラミングマニュアル .NETプログラマーズライブラリシリーズ
」の内容はWebの記事だけで、ある程度カバーできそうですね。

思い切って「C#によるプログラミングWindows 上・下」を買おうと思います。
920デフォルトの名無しさん:04/02/16 13:26
>>915
すいません。
でも、クラスだってそれ自体はインスタンスじゃないですよね。
インスタンスになる可能性のあるものでしょ。
そういう考え方なら構造体だって同じな気がするのですが、、、。
あ、揚げ足とかそういうのではなく、純粋な疑問です。
921デフォルトの名無しさん:04/02/16 14:22
>>920
値型はデフォルト値で初期化するようになっているから
構造体は〜 だった。
>>920
そういう仕様だから(仕様に整合性がない?)
924デフォルトの名無しさん:04/02/16 15:58
なるほど。
まあ、要するに、
そういう仕様なんだと理解しておけば良いんですね。
なんとなく分かりました。
ありがとうございます。
925デフォルトの名無しさん:04/02/16 16:15
構造体にコンストラクタをつけて
それで初期化するようにすれば良いんだけどな。
クラスなら、別にコンストラクタではなくて
フィールド初期化子でも直接初期化できるから、
その辺でちょっと不満が出てしまうモナー。
構造体をパラメータに渡したり戻り値にしたりするときのことを考えればわかるだろ。
クラスをパラメータに渡したり戻り値にしたりするときのことを考えればわかるだろ。
928デフォルトの名無しさん:04/02/16 18:48
>>926
>>927
すいません。どっちも何で分かるのかが分かりません。
言いたいことの趣旨が理解できません。
分かるようにお願いします。

もしかして、>>927>>926に対する反論と言う形になっているわけですか?
だったら分かります。
>>928
MyStruct a = methodReturnsMyStruct();

aのフィールドは初期化されるのか?
結局メソッドの戻り値が代入されるのに?
逆に初期化されないのか?
それは勝手に省略しても大丈夫なのか?

パラメータに渡す場合も同じ。

それとstruct導入の大きな理由にパフォーマンスの向上があった。
値型はもともと、小さくて、コピーできて(しなければならなくて)、頻繁に利用するデータ向けだから。
あえて初期化子もデフォルトコンストラクタも禁止することで速度を上げてる。
> aのフィールドは初期化されるのか?
> 結局メソッドの戻り値が代入されるのに?
.NETってその程度の最適化もされないの?
>>930
次の2行嫁や。
> 逆に初期化されないのか?
> それは勝手に省略しても大丈夫なのか?
932デフォルトの名無しさん:04/02/16 19:37
逆に初期化って?
勝手に省略してもいい気がするけど、何で駄目なのですか?

つまり構造体のインスタンスを作ったときに、
そのフィールドにどういう値が入るかという問題でしょ。
それは、代入してもいいし、最初から入っててもいいし、コンストラクタでもいいし、何でも別に
いいじゃないですか。
つまりクラスと同じで良いんじゃないですかね。
そんなことコンパイラが適当にやってくれそうな気がするのですが。
933デフォルトの名無しさん:04/02/16 19:39
>それとstruct導入の大きな理由にパフォーマンスの向上があった。
>値型はもともと、小さくて、コピーできて(しなければならなくて)、頻繁に利用するデータ向けだから。
>あえて初期化子もデフォルトコンストラクタも禁止することで速度を上げてる。
まあ、この最後の3行ならば十分自分の頭にも理解できます。
>>932
その初期化に副作用があるかもしれないじゃん。
勝手に省略したらプログラム動かなくなるかもよ。
初期化で副作用起こすようなタコプログラムは動かなくていいと俺も思うが
言語仕様で禁止することはできないし。
Cのように”未定義”とでもすりゃいいけどいまどきそりゃ無いだろ。
935デフォルトの名無しさん:04/02/16 20:28
全然わからん。
普通、クラスのフィールドでもコンストラクタで初期化するもんじゃない?
937名無しさん♯:04/02/16 21:13
早めに次スレ立てときますた。
http://pc2.2ch.net/test/read.cgi/tech/1076933504/l50
938デフォルトの名無しさん:04/02/16 21:16
まあ、普通は確かにそうだけど、
それとは別に、初期化子を指定することもできるわけで、
構造体には何でそれができないのかが、やはりちょっと気になったわけで、
何か指定できないようにした方が、良いちゃんとした理由があるのかなと思ったわけですよ。
で、どうやらこれといった特別な理由はなさそうだと言うのが自分の印象ですが。
まあ、もともと大した疑問じゃなくて、msの言語に対する仕様の理念とは何かを
聞いておきたいだけのちょっとした質問に過ぎないので、別にそれでも良いんですけどね。
釣りかよ・・・
構造体のコンストラクタには、一つ以上のパラメータが無ければならないというのが一つの答えになってるんじゃない?
>>940
いや,だからその制約が必要には思えないって話だろうが…
値をコピーするときにデフォルトコンストラクタが呼ばれるようにするかしないかで問題が発生するってんだろ。
C++ならコピーコンストラクタで解決だが。
943デフォルトの名無しさん:04/02/17 16:15
ちーたんは夜の妖精だから、い
んらんでとってもイケナイ娘なの。
これからはじまる素敵なパーティ
が、私を狂気の渦へいざなうの。
黒いドレスに身をつつみ、あやし
く光るその瞳には、この世の全
てを欲する悪魔が住んでいるの。
するどい視線で獲物を狙って、あ
みタイツの隙間から滴るエキスで
まえもうしろも濡れ濡れになるの。
せまくて暗い通路の奥で、はじけ
んばかりの快感が私を襲うの。
スクリプティングでC#のクラスを利用しようとしているのですが、次のようなコードで
WebRequest の Type を取得しようとすると TypeLoadException を投げてきます

抽象クラスの Type の取得はどうすればいいのでしょうか?

static void Main(string[] args)
{
  try {

    Type req_type = typeof(System.Net.WebRequest);
    Console.WriteLine(req_type.FullName);

//  string type_name = "System.Net.WebRequest";

    // 元々は type_name を入れてた
    Type request = Type.GetType(req_type.FullName, true);

    Console.WriteLine(request.FullName);

  } catch ( TypeLoadException e ) {
    Console.Write(e.Message);
  }
}
945944:04/02/17 18:21
く、すみません、事故解決してしまいますた(鬱
AssemblyQualifiedName で指定してやると逝けました
946デフォルトの名無しさん:04/02/17 21:49
intやfloatも構造体です、と言えば分かってもらえるかな?
>>946
バカ登場
>>949
再びバカ登場
サンプルどおりにプログラムを組んでもコンパイルできません。
どこがおかしいんですか?

#include <stdio.h>
void main(void){
    printf("Hello, world.\n");
}
↓age厨
>>949
スレ違い。
それはC言語です。CとC#は違います。
ここはC#のスレです。
>>951 メール欄
サンプルどおりにプログラムを組んでもコンパイルできません。
どこがおかしいんですか?

(defun fib (n)
(if (or (= n 0) (= n 1))
1
(+ (fib n) (fib (- n 1)))))
>>953
それ無駄多い。反復的手続きに汁。
>>953
無限ループになってるよ。こうしろ。

(defun fib (n)
  (if (or (= n 0) (= n 1))
      1
      (+ (fib (- n 1)) (fib (- n 2)))))

>>954の言うとおり反復的プロセスにしたほうが断然効率がいいがな。
956 :04/02/18 01:04
datagridのdatasourceをdataviewにすると、datagridstyleculumとか設定しても
無反応なんだが どうして? datasourceをdatasetにしてdatamember指定すると
うまくいくんだが。。。。
>>954
樹状再帰主義なので嫌だ
C#でPHPソースを解析するコードを書いています。
PHPの変数の正規表現は「\$\w+」のはずで
(厳密にやるつもりはないのでこれで十分です)
秀丸で検索してもマッチします。
しかしC#でライブラリを利用してこの正規表現を使おうとすると
「認識できないエスケープシーケンスです」
というエラーが出ます。
どういう正規表現にすればC#で使えるのでしょうか?
>>958
\はエスケープシーケンスなので\を文字列中で表現するなら
\\と書くか、
@"\#\w+"と@プリフィクスを付ける。
#ってなんだよ……
961958:04/02/18 16:10
>959
解決しました。
ありがとうございます。
んんん・・・そんな単純なことですか・・・
確かにヘルプのサンプルに@がついてたような気が・・・
どうも申し訳ありません。
962デフォルトの名無しさん:04/02/18 21:35
教えてください。
複数のFormを持つプロジェクトで共通に使用する定数や変数ってどこに記述するのでしょう?
どこでも勝手に記述しろ。
964デフォルトの名無しさん:04/02/18 22:05
初心者ですが、宜しくご教授ください。
WindowsフォームでListViewとButtonを作り
さらにListView上にLargeImageListと
ListViewItemでアイコンを作りました。
シングルクリックでアイコンを選択したあと
ボタンを押したらどのアイコンが選択されたかの
情報が欲しいんですが
どうやって取得すれば良いでしょうか?


>>964
TreeView1.SelectedNode
>>965
ありがとうございます!

964です・・・
鬱市
968965:04/02/18 22:25
まちがえたリストビューだった。
ListView1.SelectedItems
で選択されているListItemのコレクションが取得できる。

>962
そういう時こそ厨房御用達兵器「Singleton」の出番だ!
970964:04/02/18 23:19
>>968
ListView1.SelectedItemsでしたか…
それは一度試してみたんですが
ListItemのコレクションとやらを
どう操作したらいいのかわからんかった…
971最凶VB厨房:04/02/18 23:35
ListView.SelectedListViewItemCollection slic=listView2.SelectedItems;
foreach (ListViewItem lvi in slic)
{
Console.WriteLine(lvi.Text);
}
//(゚ロ゚;))((;゚ロ゚)
>971
いやー、C#実はさっぱりわからんのだけど、
そのConsole.WriteLineの出力ってどこに出るの?
(IDE上で動かせばIDEのどこだかに出るのかな)
973最凶VB厨房:04/02/18 23:59
デバッグウィンドウかコマンドプロンプト上か。

ビルド時のオプション指定の違いかな。推測。
974デフォルトの名無しさん:04/02/19 12:11
ごめん、そのオプション教えてくれ。
俺もコンソールに出力しながらデバッグしたいんだが、やり方がわからん。
using System.Diagnostics;
Debug.WriteLine(hoge); じゃだめなのか?
976最凶VB厨房:04/02/19 19:58
>>974
///////////////////a.cs
using System;
public class a
{
public static void Main(string[] args)
{
Console.WriteLine("(゚ロ゚;))((;゚ロ゚)");
System.Threading.Thread.Sleep(5000);
}
}
/////////////////////////
csc /t:exe a.cs
/////////////////////////
csc /t:winexe a.cs
>>972-974
「表示」→「その他のウィンドウ」→「出力」