C♯相談室 Part20

このエントリーをはてなブックマークに追加
931929:05/01/23 20:16:54
>>930
できます。以前、そのようなプログラムを作成しました。
プロセスが実行中(数値計算でした)も、フォームが凍らないタイプです。
家に帰ったら、サンプルを貼ります。がんばってください。
932デフォルトの名無しさん:05/01/23 20:36:33
>>929
リクエストが返ってこないからだろう。
他のホストで試してみたらどうなる?
933930:05/01/23 20:47:13
>>931お願いします。
頑張ります。
934デフォルトの名無しさん:05/01/23 21:02:59
プロセスとスレッドを混同している予感
935デフォルトの名無しさん:05/01/23 21:04:30
軽量プロセスだからいいんじゃね?
936デフォルトの名無しさん:05/01/23 22:13:37
C#でWordを操作するソフトを趣味で開発しています。
このサイトを参考にしています。
http://www.ne.jp/asahi/office/okada/macro/
しかしながら、
With .Parent
End With
というのがよくわかりません。
確かに、FindクラスにParentというものがありますが、
Parent.Deleteのような使い方ができません。
やりたいことは、このサイトと同じことなのですが・・・・。
ちなみに、wdReplaceALLとかwdReplaceOneとかで同じことが
できるか試してみましたが、うまくいきませんでした。;
wdReplaceOneを設定すると、Find.Executeの返り値が検索終了後falseに
ならないからうまくいきませんでした。
937936:05/01/23 22:19:02
938デフォルトの名無しさん:05/01/23 22:25:42
WithはVBのキーワード。詳しくはヘルプ。

で、Parentが返すのはobject型なわけで、objectにDeleteとかがないのは分かるよね?
object a = "hoge";
a.IndexOf("o");
とかできないのと同じ。
適切な型にキャストしてやりましょう。
//ブレークポイントで何型か調べるとか。
939デフォルトの名無しさん:05/01/23 22:34:50
やっぱり混同してる予感
940931:05/01/23 22:58:55
>>930
お待たせしました。
参考になれば幸いです。
private void ProcessRun(string filename)//プロセス制御
{
process=Process.Start(filename);
process.EnableRaisingEvents=true;
process.Exited+=new EventHandler(Process_Exited);
//プロセス終了時を取得状態にする
MainText.Text=String.Format(" {0} / {1}",listcount,filelist.Items.Count);
}

private void Process_Exited(object sender, EventArgs e)
{
if(listcount>=filelist.Items.Count)//実行していないプロセスがないなら
{
MainText.Text="Process Done";//処理終了
return;
}
else
{
ProcessRun(filelist.Items[listcount++].ToString());
//次のプロセス開始
}
}
941931==936:05/01/23 23:04:33
>>938
レス39です。
当方、withがVBだ、等はばっちりです。
質問時には、すでにキャストも試みました。
object型がDeleteないのとかもばっちり把握しています。
object型は使用時、キャストを利用するのが一般的だと、存じています。
デバッグでどの型にParentをキャストしてあげれば、
Deleteメソッドを使えるのかがわかりません。
表現がおかしいですね。
Deleteメソッドを搭載したどのクラスにキャストすればよいのか
わかりません・・。調べられるものなのですか?
調べるコツとか教えていただけると助かります。
Goto End;
942931==936:05/01/23 23:07:22
>>940
念のため追記。
int listcount;
private void PlayButton_Click(object sender, System.EventArgs e)
{//プロセス開始
listcount=0;
if(filelist.Items.Count==0)
{
MainText.Text="No Process";
return;
}
ProcessRun(filelist.Items[listcount++].ToString());
}
943デフォルトの名無しさん:05/01/23 23:14:22
基本的なことを教えてください。
クラスのフィールドとして定義され、かつ同時にnewされた
フィールドは、実際にはいつnewされるのでしょうか。
コンストラクタでしょうか?

public class Test
{
 private ArrayList al = new ArrayList();
}
944デフォルトの名無しさん:05/01/23 23:15:54
>>941
一旦.Parentをobjectにでも突っ込んで、その次の行でブレークしてみる。
自動変数の項目にそのオブジェクトが何型かも書かれてる。

>>940
>930が求めてるのは自分で起動するわけではないプロセスについての監視じゃないのか?
そうならWMI、ManagementEventWatcherと言うキーワードを出しておこう。
945931==936:05/01/23 23:21:20
>>944
>>parent
タンクスコ!

>>944
>>930
そうであれば、ほかの方、ヨロシコ!
946931==936:05/01/23 23:23:30
>>943
僕は、コンストラクタでnewしてるよ。
いつされるか、わからないから、とりあえず一般的な手法として。
947デフォルトの名無しさん:05/01/23 23:24:39
>>943
コンストラクタメソッドの実行前。
948931==936:05/01/23 23:25:02
public class Test
{
 private CmyClass mc = new CmyClass();
}

public class CmyClass{
public CmyClass(){
Messagebox...
}
}
とかすれば、わかる希ガスるん。
949名無しさん♯:05/01/23 23:25:36
次スレ立てときますた。( ゚д゚)ノ
http://pc5.2ch.net/test/read.cgi/tech/1106490240/l50
950デフォルトの名無しさん:05/01/23 23:28:34
乙と言えば乙だが、このスレは950よりも前に次スレ立てる縛りでもあるのか?
951デフォルトの名無しさん:05/01/23 23:30:52
>>949
乙。
教えて君で申し訳ない。
最小化でタスクトレイ?(時計の脇のノートンとかがあるところ)に入れたいんだが
どうしたらいいんだろう。
952930:05/01/23 23:34:29
みなさんいろいろありがとうございます。
説明不足ですいません(汗)
プロセスの監視をしたいので>>944さんのを参考にさせていただきます。
953931==936:05/01/23 23:38:09
>>951
ShowinTaskbar = false;
で、
ツールからNotifyIconをD&D。
アイコン作って、・・・。
宇宙仮面に載ってるよ。
954デフォルトの名無しさん:05/01/23 23:40:32
>>953
ありがとう、とりあえず宇宙仮面に逝ってくる
955名無しさん♯:05/01/23 23:42:05
>>950
まあ本当は950過ぎてからなんでしょうけど、つーか縛りはないですよ。

>>951
漏れはWindowsFormsは忘れ去ってるので、他を当たってくだされ。
956デフォルトの名無しさん:05/01/24 00:05:56
24時間前は900あたり。スレ消費が早いな。
957908:05/01/24 00:35:11
>>909トンX!!
958デフォルトの名無しさん:05/01/24 01:01:40
RTFの仕様詳しく説明してるとこ教えてください。
C#が生成せるRTFはワードパッドが生成するRTFと全然違って困ってます。
959デフォルトの名無しさん:05/01/24 01:11:24
>>958
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnrtfspec/html/rtfspec.asp
これかな。
日本語訳はMSDN Japanにはないみたい。よく調べてないですが。
960デフォルトの名無しさん:05/01/24 01:33:51
誰かPowerToolsのTrue WebGridとか使ってる香具師いる?
961デフォルトの名無しさん:05/01/24 01:42:13
使い勝手はどう? とか、ちょっと上手く動かないんだけど。とかなら分かるが、
使ってるかどうかのアンケートに意味があるのか?
962デフォルトの名無しさん:05/01/24 13:23:22
ArrayListで作ったコレクションって、どんなオブジェクトもAdd()出来てしまいますよね。
前もって指定された形式以外のオブジェクトが入らないようにできるコレクションクラスって
何かあるんでしょうか?

それとも、MSDNにインタフェースについての記述があるように、
どんな時も自作コレクションクラスを作って、自分でその辺の管理をするべきなんでしょうか?
963デフォルトの名無しさん:05/01/24 13:29:01
.NET1.1までならフレームワークに用意されてるのはstringに対するStringCollectionくらいかね。
.NET2.0でジェネリクスが追加される事で汎用的な型指定コレクション・List<T>クラスが使えるようになる。
964962:05/01/24 13:35:43
有難うございます。やっぱり2.0出てくるまで簡単には出来ないんですよねぇ。
いいです。今回は、何も気付かない振りして、実装しちゃいます。
まぁ、2.0も今年中には出ますよね。
どうも有り難うございました。
965デフォルトの名無しさん:05/01/24 14:02:00
>>962
自前のコレクションクラスを作って、
Addするときに期待しないものが来たら例外を投げるようにするとか。
966962:05/01/24 14:05:18
>>965
まさしく、そんな予感がしていたんですが、面倒そうだったので・・・
そうなんですよね、正しくはそうあるべきだと思います。
でも〜。・゚・(つД`)・゚・
967デフォルトの名無しさん:05/01/24 14:05:30
>>962
CollectionBaseクラスを継承しる
968デフォルトの名無しさん:05/01/24 16:02:17
>>966
どっかに専用コレクションクラスを生成するツールがあったぞ
969デフォルトの名無しさん:05/01/25 11:47:39
PictureBoxをマウスのドラッグで縮小、拡大させたいのですが、
参考になるHPとか本を誰か知っていませんか?
読み込んだ画像の上でクリックすると、画像の四隅にポイントが出て、
そのポイントをドラッグすることで画像が縮小、拡大する。みたいな。
情報があれば、よろしくお願いします。
970デフォルトの名無しさん:05/01/25 12:13:45
>>969
ウィンドウそのものを縮小拡大ではなくて、PictureBoxコントロールを縮小拡大ですか?
そうであればControlとかPictureBoxを継承して自前で作るしかないような気がします。
MouseMoveあたりでマウスの位置を検出して端に近ければ四隅にポイント表示。
四隅に近くてクリックされている間はコントロールをマウスの位置に合わせてリサイズ。
もっと簡単な方法もあるかもしれませんが一応。
971デフォルトの名無しさん:05/01/25 16:51:57
>>969
そういうコンテナを作ってドッキングさせるとか
972デフォルトの名無しさん:05/01/25 21:24:58
MainMenu のアイテムがクリックされた場合の処理は、
アイテム毎にイベントハンドラを増やさないといけないのでしょうか?

例えば、次のような事をやりたいのですが、なにかいい方法は
ありませんか?

メニュー1_________メニュー2_______メニュー3
__アイテム1-1______アイテム2-1______アイテム3-1
__アイテム1-2______アイテム2-2______アイテム3-2
__アイテム1-3______アイテム2-3______アイテム3-3

のようなメニュー構成になっている時に、
アイテム1-x がクリックされた場合の処理は、メニュー1 の Click で
拾ってメニュー1の中で処理させたいのですが…。

今は、アイテム1-1, アイテム1-2, アイテム1-3 など全ての項目の
Click イベントに1つずつちまちまと処理を追加していっています。

何かいい方法はないでしょうか?
973デフォルトの名無しさん:05/01/25 21:30:00
イベントハンドラ共有して、senderを見て発生元調べてswitchで分岐したら。
974デフォルトの名無しさん:05/01/25 22:23:42
そういうの登録する仕組み作っとけ
975デフォルトの名無しさん:05/01/25 23:25:08
ArrayListを配列にして使用できるんでしょうか。こんな感じで。

ArrayList[] testList = new ArrayList[10];
testList[0].Add( "abc" );

コンパイルは出来ても2行目でエラーになります。
出来れば楽なんですが・・・。
976デフォルトの名無しさん:05/01/25 23:29:22
配列もただのオブジェクトなわけで、newしても入れ物を作るだけ。
入れ物の中身は自分で作って下さい。
977デフォルトの名無しさん:05/01/25 23:30:12
ArrayList[] testList = new ArrayList[10];
testList[0] = new ArrayList();
testList[0].Add( "abc" );
978975:05/01/25 23:37:56
>>976
>>977
即レス感謝です。もういちどnewしておく必要があるわけですね。納得です。
979デフォルトの名無しさん:05/01/26 11:53:42
ほかの人のソース見ていてinternalが多用されているのですが、
本を読んでもprivateとinternalの違いがよく分からないのです。
教えてください。
980デフォルトの名無しさん