1 :
デフォルトの名無しさん :
03/10/04 01:02
4 :
デフォルトの名無しさん :03/10/04 04:35
今Microsoft Web Browserコンポーネント上に表示したWEBサイトの テキストボックスにIDやパスワードなどを自動的に入力できるソフトを 作っていてる者です。 user32.dllのGetGUIThreadInfo関数を使って WEBサイトのテキストボックスのキャレット(チカチカするカーソル) の位置を取得するところまではできたのですが、その取得したキャレット位置に指定した文字 (ID、パスワードなど)を入力(ペースト)する方法が分からず困ってます。 どうすればいいのでしょうか?
>>4 方向性がおかしい。DHTML方面から攻めるといい。
>6 こんなの見たらWindowsのままでいいと思うぞ
>>6 寝起き悪いなぁ。
っていうか、マルチポストうぜぇ。
>>4 タブブラウザなどでそういうのに対応したスクリプトあるから
参考にしてみたら。
たぶんGetGUIThreadInfoなんか必要ないと思う。
10 :
デフォルトの名無しさん :03/10/04 16:30
Rectangle型の四角形の座標内に Point型の座標が含まれているか、 ということを調査する定石があったような気がするのですが 思い出せません。 教えてもらえませんか? それとももしかして勘違いで自前で 座標を比較して判断するのが普通でしょうか? よろしくお願いします。
>>10 Rectangle.Contains使えよ。
プロパティのアクセスはオーバーヘッドがかなり大きいから
自前で実装したらその定石とやらがどんなにすぐれたアルゴリズムでも速度は出ないぞ。
いやー釣れた釣れたw
>11 プロパティのオーバーヘッドってどういう理屈なの?
>>11 ばっちりそのもののようです。
ヘルプで見落としたみたいです。
やっぱりあったみたいですね。
ありがとうございます。
>>13 プロパティの値を取得しようとした時に
プロパティのget部分に書いてあるメソッド等が
呼び出されるってことじゃないでしょうか?
私の
>>10 の例だと対象座標と比較する為になんども
Rectangle型のXメンバやYメンバにアクセスることかな、と思います。
>14 そういうことか。ありがとう。
16 :
デフォルトの名無しさん :03/10/04 22:05
http://sourceforge.jp/softwaremap/trove_list.php?form_cat=160 1 146 C
2 119 C++
3 90 Java
4 55 PHP
5 44 Ruby
6 32 Perl
7 24 Delphi/Kylix
8 21 Other
9 17 Assembly
10 16 Python
11 13 Objective C <--------C++に敗北して廃棄状態
12 12 C# <--------超負け組み
13 7 Unix Shell
14 5 Tcl
15 5 Lisp
16 4 Visual Basic <--------廃棄処分
Cがトップな時点で何の参考にもならんw
C#もずいぶん普及したな。 ついこの間まではコンパイラも何も無くてMSの出した言語概要読んで ( ゚∀゚)イイ!とか(;´Д`)なんじゃそりゃとか思いながら 出るのを楽しみにしてたってのに。
19 :
デフォルトの名無しさん :03/10/05 04:47
C#もあと3000年程経てばトップになるよ
21 :
デフォルトの名無しさん :03/10/05 12:59
( ・∀・)つ〃∩ ヘェー
22 :
デフォルトの名無しさん :03/10/05 21:11
webからhtmをstringとしてストリームから取得してそれをブラウザのように表示するにはIndexOfなどでタグを自分で処理するんでしょうか?
24 :
デフォルトの名無しさん :03/10/06 01:30
C#でフローティングウィンドウに関することが書いてあるページがあれば教えてください。 googleで探した限りではいいのがでてこなかったので・・・
25 :
デフォルトの名無しさん :03/10/06 11:25
IEnumeratorのMoveNextを実装するときに if(position>array.Length)//arrayは配列、positionは配列の位置 とある本にあったのですが、 if(position>array.Length-1) としないと例外が出ます。本が間違っているのでしょうか?
本家でやるとこうなる。VBに負けているDelphiなんて見たくなかったんだろうなぁ(w
http://sourceforge.net/softwaremap/trove_list.php?form_cat=160 1 C (11741 projects)
2 C++ (11528 projects)
3 Java (9854 projects)
4 PHP (7446 projects)
5 Perl (4902 projects)
6 Python (2664 projects)
7 Visual Basic (1556 projects)
8 JavaScript (1378 projects)
9 Delphi/Kylix (1240 projects)
10 Unix Shell (1206 projects)
11 Assembly (1105 projects)
12 C# (1002 projects)
13 PL/SQL (833 projects)
14 Tcl (714 projects)
15 ASP (429 projects)
16 Objective C (396 projects)
17 Lisp (265 projects)
18 Ruby (257 projects)
19 Pascal (254 projects)
20 Assembly (188 projects)
21 Object Pascal (175 projects)
MS製だから当然といっちゃあ当然なんだけどな。
首都圏でVisual C#の中古品を買える店教えてください。 ビジネスアプリ系を扱うお店がなかなかありません
30 :
デフォルトの名無しさん :03/10/08 16:14
MSDNライブラリのControlStylesの説明に FixedHeight 自動スケールの時にコントロールの幅が固定される ってあるんですけFixedWidthと逆でしょうか?
>>30 MSDNの誤植だろね。
VisualStudio2002のヘルプはちゃんとHeightが高さになってるし。
誤植って…。 MSはよくこんなの平気で売れますな。
10円やるから人間やめちまえーよ!
ホレ(´ー`)ノ ⌒ I
↓
I ワーーイ
ヽ(゚∀゚)ノ
へ ) ←
>>32 >
>>32 > 誤植って…。
> MSはよくこんなの平気で売れますな。
いやオンラインの。(2003のヘルプはどうなのかな)
それにそこらの文庫本だって一冊に何カ所かは誤植があって当たり前なんだし。
>>32 ラーメンにちいさな虫が入ってたら金返せと暴れる性格ですか?
虫入ってたら恐ろしいですな
>>35 さすがに虫入ってたら怒らないとだめでしょ。
それとも無視?
38 :
デフォルトの名無しさん :03/10/11 23:47
俺は店内で蝿が飛んでたら帰るぞ
39 :
デフォルトの名無しさん :03/10/12 00:01
では食事中(序盤)に虫がダイブしてきたらどうですか?
C nul C + + C ++ C++ C#
>>6 これまじで その会社のなんか・・・うれねーな^^;
というかそのCMに出てる社員可愛そうになってくる。。
当初MSのソフトが使えるのがうりだったじゃねーか 妥協すんなw
>>Lindows
43 :
デフォルトの名無しさん :03/10/13 14:11
あのくだらないことで申し訳ないんですが・・ 画面にListViewがありまして 値を持っているArryList(中身がオブジェクト)をListViewにセットして あげるという処理は Formにがつがつかかないで 別クラスで独立 させてあげたほうがベストですか? 別にビジネスロジックでもないので もしかして 別クラスに分ける 必要ないのかな?とふときになりまして。。
44 :
デフォルトの名無しさん :03/10/13 15:14
usingについてなのですが、 using System;←ここと, namespace hoge { using System;←ここ。 //クラスなど } 二つのusingの位置での違いはなんなのでしょうか?
using System.Windows.Forms; と namespace System { using Windows.Forms; の違い }
やっぱいいです
47 :
デフォルトの名無しさん :03/10/13 21:48
class Suuretu1{ public static void main(String []args){ double sum=0.0; for(int n=3;n<=99999;n=n+4){ double s=1/(n-2)-(1/n); sum=sum+s; } String y="式の合計は"+sum+"です"; System.out.println(y); } } こんなプログラムを作ってみましたが実行すると1.0になってしまいます。 何故だろう・・・??
49 :
デフォルトの名無しさん :03/10/13 21:55
JDBCとMySQL接続のプログラムを作ったんですが、日本語が文字化けします MySQLは3.23.49です。 MySQL winmysqladmin.exeのmy.ini Setupタグで [mysqld] default-character-set=sjis [mysql] default-character-set=sjis [mysql-dump] default-character-set=sjis と変更し 再起動し、variablesタグの文字コードも変更されています。 同じことをsjisの部分をujisでも試しました。 テーブルからは、「あ」という文字が戻ってくるはずですが、コンソール画面には 「ツ?」と表示されます。 だれか、分かる方はご返事ください。よろしくお願いします。
馬鹿だな
かなりヤバイのがいるなw
52 :
デフォルトの名無しさん :03/10/13 22:10
#include <stdio.h> int main(void) { int num,i; num = 0; i = 0; while(num<=4){ while(i<=2){ printf("numは%d:iは%dです。\n",num,i); i++; } num++; } return 0; } うまく繰り返されないです。
このスレも荒らされるのか?
御免なさい 嘘つきました 43の質問に答えてあげてください。
>>43 ArrayList 型のプロパティをコントロールやフォームに書いて、それをget/setする。
オブジェクトをどのように表示するか(リストコントロールに登録するか)はビューの責任であって、周りからそのプロセスは隠蔽すべき。
MVCモデルをC#に置き換えてみると V->FORM だから FORMに表示ロジックを乗っけてしまって いいということでいいんですね。
MVCなんてダサイ
ダサいという根拠を200文字以内で答えよ
>>57
59 :
デフォルトの名無しさん :03/10/13 23:22
Vectorクラスから配列に入れ替えるというコードのテストを作ってみたんですが Vector a = new Vector(); a.add("1"); a.add("2"); a.add("3"); a.add("4"); a.add("5"); a.add("6"); String[] str= (String[])a.toArray(); for(int i =0;i< str.length;i++){ System.out.println(str[i]); } String[] str= (String[])a.toArray();のところで java.lang.ClassCastException
60 :
デフォルトの名無しさん :03/10/14 07:55
import java.util.*; class Ts{ static void hoge(){ HashMap hm = new HashMap(); //コンストラクタ化 hm.put("c","1"); hm.put("bc","12"); hm.put("a","3"); } } class T{ public static void main(String args[]){ hoge h =Ts.hoge(); System.out.println(h.get("c")); } } 上のソースコンパイルするとエラーになります教えてください G:\java>javac T.java T.java:16: シンボルを解決できません。 シンボル: クラス hoge 場所 : T の クラス hoge h =Ts.hoge();
61 :
デフォルトの名無しさん :03/10/14 07:56
Cのmemcpy(),memmove()とか WinAPIのCopyMemory(),MoveMemory()とか src領域とdst領域がオーバーラップしているか否かで 使い分けが必要だけどさ、その違いって、内部では どう影響してくるのでしょうか? rep movsb にも影響があるの?
オーバーラップ気にしなければいけなかったのはすでに15年も昔のはなしさ。。
addr 0123456 data ABCDEF 2〜5 -> 3〜6 copy する時 data ABBBBB になるか data ABBCDE になるか の差
継承について分かってきたら、C#への理解が一気に深まったよ こういうことだったんだね
65 :
デフォルトの名無しさん :03/10/14 17:39
デザイン時の話なのですが、フォームにリストヴューを張り、 SortingのプロパティをAscendingにすると急にヘッダーが長くなり ヘッダーを調整しようと思っても動かなくなります。 VSのバグでしょうか?
_,. -‐、 ____r‐ 、 /´ ` \ ,,―‐. r-、 _,--,、 'フ ,......., \ ,―-、 .| ./''i、│ r-,,,,,,,,,,,,,,,,,,,,,,,,―ー. ゙l, `"゙゙゙゙゙ ̄^ \ r‐''~´ ,.、 ヽ'" _,..‐,'゙ヾ.´ / \ ヽ,゙'゙_,/ .゙l、 `i、 \ _,,―ー'''/ .,r'" .| ヽ' └''´,.:‐r''ヽ, .,,,、.,,i´ .,/^'i、 `'i、`` `--‐'''''''''''''''"'''''''''''゙ `゛ .丿 .,/ └''´> _,.-、 `'´ ∠,,, { "" ,/` ヽ、 `'i、 丿 .,/` .ヾヽ''´ '─'''' } .ヽ、 丿 \ .\ ,/′ 、ヽ,,、 | ,.r、________,r 、 j ゙'ー'" ゙'i、 ‘i、.r-、 __,,,,,,,,--、 / .,/\ `'-,、 `‐'',ゞ---------────‐'´`ヽ´ ヽ .]゙l `゙゙゙゙"゙゙゙゙ ̄ ̄ `'i、 ,/ .,,/ .ヽ \ !、 ノ ゙ヽ_/ .ヽ_.,,,,--―――――ー-ノ_,/゙,,/′ ゙l ," ,ゝ r‐┐ rヮ <´ ` ゙‐''"` ゙'ー'" i´ }_」 │ヽ. j ヽ、 ,人 丿 ヽ._,.ノ `- ' `ヽ、__/
67 :
fushianasan :03/10/16 00:32
cってなんですか???
まんc
視力検査したことないの?
相変わらずC#厨って厨房がおおいね。
72 :
デフォルトの名無しさん :03/11/19 12:49
74 :
デフォルトの名無しさん :03/11/30 19:25
Form上にマウスポインターが乗ってるかどうかを 保持しているプロパティって存在しないんですか? 自分で変数を作ってそこに保持するような処理をしないといけないのですか?
>>74 さっぱり忘れてるのですが
マウスの座標をPointで取得して
指定したRectangle(フォーム)の中に引数に指定した
Point(マウスの座標)が存在するか、というようなメソッドを使って
できたような。。
76 :
デフォルトの名無しさん :04/01/22 07:18
あげ
TreeViewで、ツリーノードが展開されているときのイメージを指定する方法って 無いんでしょうか? ImageIndexとSelectedImageIndexだとノードを選択しているか否かの状態のみの設定で、 ツリーノード展開したまま別ノードを選択すると結局非選択時のイメージになってしまうんで…。 要はフォルダオープンとクローズのイメージを表示させて、ツリーノードの展開に合わせて イメージを変更したいんですが、Expand系のイベントを利用して自力書き換えするしか 無いんでしょうかね?
80 :
デフォルトの名無しさん :04/02/11 08:52
なんか不安定?
今年度のバレンタイン大作戦 女性店員がレジにいるコンビニでチョコを買う ↓ わざとチョコを受け取り忘れて店を出る ↓ 女性店員が走って渡しに来る「あの・・・これ・・・」 ↓ ちょっぴりバレンタイン気分
82 :
banban :04/02/11 18:54
mysqlのデータを操作するのはどうすればいいんでしょう? 出来ればソースもらえたら嬉しいです、全然わかんないんです。
超ド初心者質問でスマソです exeファイルへの出力ってどうやったらいいのでしょうか?
>>83 超ド初心者質問でスマソです
あなたの脳内を読み取るにはどうやったらいいのでしょうか?
>>83 csc /out:hoge.exe hoge.cs
ネタにマジ(ry
88 :
デフォルトの名無しさん :04/03/24 19:20
宜しくお願いします。 Timerのインスタンスと同期させる簡単なゲームを作っているのですが このインスタンスを1000分の1秒単位で一時停止させるにはどうすれば良いのでしょうか? stopさせると0.000秒に初期化されてしまいます。 pauseというメソッドは無いみたいですが不可能なのでしょうか。
89 :
デフォルトの名無しさん :04/03/25 01:19
ニュー速で質問があったんでけど答えてあげてください。 C#(WINアプリ)を勉強していますがクラスについて教えてください。 public class A { メソッド1 } public class B { メソッド2 } この場合、class Aは、class Bのものに対してアクセスできますよね? これは、class Aのなかでclass Bのメソッド2が使えるということで しょうか? もし、使えるなら、class Aの中でオブジェクト = new class Bとして インスタンスか化してから使うのでしょうか?
90 :
デフォルトの名無しさん :04/03/25 07:38
>>89 class B のメソッド2が Public であれば、アクセスできます。
static メソッドでなければ、インスタンス化してからでないとアクセスできません。
とてもどうでも良い質問なんですが クラスと関数の使い分けが分りません こうゆう場合はクラス(関数)にする っていうお約束なんかあるんですか?
92 :
デフォルトの名無しさん :04/03/29 20:09
クラスライブラリプロジェクトでせっせと /// <summary> などのコメントを記述しています。 同じプロジェクト内では記述したコメントがヒントに表示されるのですが、クラスライブラリを 参照設定した他のプロジェクトではヒントにコメントが表示されません(引数の型とかはちゃんと 出ます)。コメントまではヒントに出てこない仕様なんでしょうか。その割には System.何とかの クラスにはちゃんとコメントが出てきますよね。何が違うのか。。。
>91 それは経験で身に付けるしかない。 一応コツとしては ・名前が付けられるものはクラスにする ・複数あるものはクラスにする ・動作の対象となるものは、その対象自身に仕事をさせる とかかな?
>>92 ソースをコンパイルするときにXMLドキュメントファイルを出力しといて、
(コマンドラインコンパイルなら/docオプション)
hoge.dllに対してhoge.xmlって名前でhoge.dllと同じディレクトリに置いてhoge.dllを参照設定。
96 :
デフォルトの名無しさん :04/03/30 22:00
助けてほしい。何度もぐぐったりしているけど、XML読み込みが良くわからない。 例えば、以下のXMLファイルを読み込んで、出力するコードを教えてください。 正直、解説見てもわけがわからんです。これなら手で書いたほうが早いです。 ◆出力例 一人目 名前「モナ山 茂名」 生年月日「2000年 2月29日」 二人目 名前「ギコ猫 義子」 生年月日「1900年12月31日」 ◆XMLファイル <?xml version="1.0" ?> <list> <person> <name>モナ山 茂名</name> <birth year="2000" month="2" day="29" /> </person> (略) </list>
97 :
デフォルトの名無しさん :04/03/30 22:11
PictureBoxの絵の余白部分にマスクをかけて 透過させることってできますか?
>>96 string xmlName = @"C:\Documents and Settings\****\XML ファイル名";
XmlDocument xdoc = new XmlDocument();
xdoc.Load(xmlName);
XmlElement elem = xdoc.DocumentElement;
int i = 1;
foreach(XmlNode person in elem.GetElementsByTagName("person"))
{
Console.Write("{0}人目 名前「{1}」 生年月日「{2}年 {3}月{4}日」\n",
i,
person["name"].InnerText,
person["birth"].Attributes["year"].Value,
person["birth"].Attributes["month"].Value,
person["birth"].Attributes["day"].Value);
++i;
}
>>99 サンクスコ!foreachでperson要素の数だけループさせて、
personという変数に代入して、personのもつ
name要素の中身、birth要素のyear属性の値・・・を表示させているんですね。
Veryわかりやすい。ありがとうございました
早速今日、
>>99 氏のコードを試してみた。
ものすごく望みどおりに改造することが簡単だった。ありがとう。
なんかJavaScriptを使ったDOMと同じ感じでできたので簡単だった。
@ITとかで勉強してたけど、こんなに簡単にできるなんて、感動だった。
本当にTHANX!
this.Hide();を2回実行しないと消えてくれないんですけど何で?
今月、電話代ちょっと多すぎるんだけどなんで?
最近C#の人気がないと思う
いつに比べて?
106 :
デフォルトの名無しさん :04/04/18 17:27
Process p = new Process(); p.StartInfo.FileName = @"C:\program\katjusha.exe"; p.Start(); という感じで起動した子プロセスのウィンドウを 最小化したり、元に戻したり、隠したりするにはどうしたらいいですか? 起動前ならStartInfoで設定できると思うのですが
.NETは安全性重視だから、勝手に別のソフトのウィンドウを操作するのは良くなくて、 そういうことをしたいならやっちゃいけないことをやらなきゃいけなくて、 そうなると.NET以外の方法を使うことになる。
108 :
デフォルトの名無しさん :04/04/19 23:44
>>107 サンクス。となるとC++とか使うしかないんですか?
最小化しかできないソフトを通知領域に入れる(駐在させる)ためのソフトを
作ろうと思ったのですが…。
109 :
デフォルトの名無しさん :04/04/20 11:20
C#ではコマンドメッセージの代わりになに使えばいいんすか?
110 :
デフォルトの名無しさん :04/04/20 12:27
ツールバーのボタンをドラッグするとへこんだままになるのはなぜですか?
111 :
デフォルトの名無しさん :04/05/09 17:50
HTTPのプロキシサーバーを作成しようとしています。 .NETのクラスライブラリに、プロキシサーバー関係のクラスはあるでしょうか?探したところ、無さそうでした。 ない場合は、System.Net.Sockets名前空間のTcpListenerクラスを使えばいいのでしょうか?
>>111 System.Net.WebProxyクラス。
>>112 そのクラスは、こっちからどこかにアクセスするときに利用するプロキシを設定するクラスではないですか?
メモリ配列で構造体を初期化したいんだけど C/C++で struct_type s; char work[256]; memcopy(&s,work,sizeof(struct_type)); みたいなことってC#でどうやってやったらいいんですかね?
その例は構造体の初期化じゃなくて配列の初期化だから
116 :
デフォルトの名無しさん :04/05/19 15:33
Bitmap bitmap=new Bitmap(ファイル名); PictureBox p =new PictureBox(); Graphics g = p.CreateGraphics(); g.DrawImage(bitmap,new Rectangle(0,0,100,100)); g.Dispose(); という非常によくみられる方法で画像を表示したいが、一瞬画像が現れただけで すぐに消えます。だから、普段は、p.Image=bitmap のようにプロパティで表示しています。 どーすればGraphicsで表示できますか?
OnPaintをオーバーライドして引数のGraphics使えば望みの動作にできる
118 :
デフォルトの名無しさん :04/05/19 19:12
>117 ありがとうございます。 確かに一個のフォーム全体に画像を表示するとき、重なっていてもうまく表示できました。 でも、最終的には画像ビューワーのようにサムネイルをたくさん表示したいのです。 そのときOnPaintを何度も呼び出す方法もよくわかりません。 Graphicsで表示したときにずっと表示する方法はないのでしょうか。 できるからこそ、GraphicsのインスタンスをDrawImageするのが一般的描画方法 とされているはずなので。私の場合そもそも一瞬しか表示されません。 なぜ?
>>118 OnPaintは自分で呼ぶものじゃなくて(フレームワークから)呼ばれるもの。
120 :
デフォルトの名無しさん :04/05/19 21:09
C#でゲームのようなグラフィックを扱うにはどのようなコンポーネントが 必要ですか?サンプルコードもおねがいします
122 :
デフォルトの名無しさん :04/06/03 17:52
いま、オブジェクト指向の勉強をしようとおもって、C#でライツアウトを作っています。 Buttonクラスを25個集めてboardというクラスを作りました。 そこで思うのですが、「全ての色が消えた」というような「審判」の役割は 誰がするのですか? judgmentクラスを作ったとして、 ボタンが押されたというのはjudgmentクラスにどうやって伝えるんでしょう?
124 :
デフォルトの名無しさん :04/06/03 21:28
>>123 VC# 2003ですよ。
今木が付いたけど、mybutton_click見たいな関数から 毎回 審判を呼び出すものですか?
結構無駄が多いような記もしますが、それがOOと考えて良いの?
ビジュアルなんたらを使ってる人はビジュアルな部分は簡単にこなすけど、 そうも行かない部分はぜんぜん出来ないでいるからね。 おれも似たような経験がある。 ちなみに答えはeventとdelegateなんだけど、 ビジュアルには行かないkらMSDNみてコード書いてね。
126 :
デフォルトの名無しさん :04/06/04 02:33
ようやくC#なんですけど、 とりあえず.Net Framework 1.1 SDKを拾ってきてインスコしました。 ドキュメントも更新しました。 んだら、PlatformSDKのドキュメントと.NetSDKのドキュメントの インデックスとコンテンツが表示されなくなってもたんです。 dexploreの仕組みがようわからんので困ったチャンなのです。 VS.Netは金なくてあかんです。 ドキュメントがみずらくてかないません。たちゅけて。
128 :
デフォルトの名無しさん :04/06/06 22:38
listviewとimagelistを使ってサムネイル表示したいのですがうまくいきません listView1.View=View.LargeIcon; imageList1.ImageSize = new Size(90, 90); imageList1.Images.Add(Bitmap.FromFile("ファイルのパス")); listView1.LargeImageList = imageList1; foreachでimagelistに画像を格納して、listviewにimagelistをくっつけたんですが 画像が表示されません。何か間違ってますか?
XMLからデータを読み込んで、DataGridに表示させたいのですが、 色々検索してもDataGridの使い方が分かりません。 [C# DataGrid]とかで検索しても、データベースサーバから読む場合ばっかりで・・・
131 :
デフォルトの名無しさん :04/06/08 00:06
クリックとかのイベント時に音を鳴らしたいのですが、どうすれば?
>>128 偶然通りかかったので答える。
ListView にアイテムを追加して、イメージインデックスを指定しなきゃ。
あとサムネイルなら GetThumbnailImage で適当に作ってやんなきゃダメじゃん。
SDKドキュメントの"ListView.LargeImageList プロパティ "のとこのコード見てみて。
もう来ないので質問されても答えられないけど、がんばってね。
133 :
デフォルトの名無しさん :04/06/10 06:01
もう来ないとか言うな。無責任な奴は来るな。社会のごみ同然。
>>133 別に最後までずっと相手してあげなきゃならないというわけでもないと思うけど。
だいたい説明すればあとは自分でなんとかするでそ。
インテリセンスのメソッド説明をもっと早くポップアップさせるにはどこいじればよいでしょうか?
スマソ。C#というよりVS.NETの話でした。
137 :
デフォルトの名無しさん :04/06/16 14:13
CheckedListBoxを既にItems.Addで追加済みなんですが、この内容をコードで順番にCheck,Uncheckするにはどうでればよいでしょうか?
138 :
デフォルトの名無しさん :04/06/17 19:15
リフレッシュレートの変更はAPI使わないとだめなんでしょうか。 そもそもそんなもんを作るなって言語なんでしょうか。 意外と出来ないことが多くてびっくりしてます。
139 :
デフォルトの名無しさん :04/06/18 03:03
C#.NETで開発しています。exeからdllを呼んでいてdllもC#で作っています。 dll内にステップインで入ってデバッグしたいのですが、入れるときと入れないとき があります。何が原因でしょうか? dllはグローバル アセンブリ キャッシュにインストールして使っています。
dllがデバッグだったりリリースビルドだったりしてるんでないの
ちがう。>139としたかったの...orz
>>140 レスありがとうございます。今日やっと分かったのですが
exeと同じところにdllを置いたらできました。
ビルドのオプションでローカルコピーをtrueにしたりfalseに
したりしていたようです。
教えて下さい。 Windows.FormでGUIアプリを作っているとします。 編集メニューでコピーにCtl+Cを割り当てて、 とあるコントロールにはこのメニュークリックのイベントで 処理したいんだけど、別の(例えば普通のテキストボックス)には デフォルトのコピー処理をさせたい。 でないとそれぞれのコントロールごとに処理を書くはめになるので。 必要ないコントロールの場合はイベントをスルーすればいいんでしょうが、 どう書けばいいんでしょうか?
144 :
デフォルトの名無しさん :04/06/25 07:11
上げ忘れてた。。
タイマーの使い方を教えてください。 あるボタンを押した時から、1000msごとにのこり時刻を [10秒経過 / 残り170秒] というように表示させたいです
146 :
デフォルトの名無しさん :04/07/02 21:50
あげわすれた
>143 きれいにやるならそういうフレームワークを作る そすると他のでも使える どこまでやるかは時間次第
149 :
デフォルトの名無しさん :04/07/03 09:10
とりあえずVisualStudio2005のC#の言語仕様に拡張があるのかどうか知りたいのですが、 VisualStudio2005言語仕様の概要について書かれているホームページがあったら教えてもらえませんか?
guest guest
152 :
デフォルトの名無しさん :04/07/04 15:57
Windowアプリ/Consoleアプリ兼用のアプリが作りたいんですけれど System.Console.Write 等の入出力を起動したConsoleアプリの入出力にする方法しりませんか?
154 :
デフォルトの名無しさん :04/07/09 17:42
textBoxに半角数字しか入力できないようにする方法はありますか? ImeModeをOFFにしてみたけど、これじゃ半角英数字になってしまうんです。
調べろ。わからなかったら自分で作れ
よぅ。カスども。 俺C#やったことないんだけど、質問してもいい? みんなC#ってなにに使ってんの? 「ネイティブコード吐けるJava」みたいな認識で買おうか迷ってんだけど、 そんなノリで買ってもいいものなんですか?
theSpoke効果だな
買うなら1個でいいよ。 やっぱASPで使ってんの? それともクライアントアプリ? どうなのよ。
それを聞いて何かが変わるのか?
161 :
デフォルトの名無しさん :04/07/10 10:30
> 「ネイティブコード吐けるJava」みたいな認識 全然違う > やっぱASPで使ってんの? ASP.NET か? > それともクライアントアプリ? どっちもだろ。
>>160 あー、「結局どーしてーのよ?」みたいななるわな。
具体的にはC/Sタイプのアプリのクライアント側を何で作るか迷ってるのよ。
仕事の合間の趣味の話だから手ごろそうなC#がいいのかなと。
どんなん作りたいかっていうと、MSメッセンジャーみたいのだと思ってくれればいいな。
>>161 全然違うんか。
今まではクライアントアプリっつーとVCかDelphiか、まぁVBとかだったわな。
VCしかできねーけど。
んでひょっこりでてきたC#はどーなのよと思ってな。
Javaでもいんだけど、インストールの説明に「J2SE1.4ランタイムが必要です」って書くのと、
「.NETFrameforkランタイムが必要です」って書くのとじゃちょっとイメージ違うしな。
163 :
名無しさん@そうだ選挙に行こう :04/07/11 10:34
164 :
名無しさん@そうだ選挙に行こう :04/07/11 12:50
>>162 次期VS.NET(2005)は単体言語版(C#だけとか)で
Web(ASP.NET)機能を除いたグレードのものが格安で
出るらしいです。
趣味ならこれ使ってC#の非Webアプリを創るのが
非常に快適ではないかと思う。VCできるならなおさら
VB.NETに走る必要もないわけだし。
一つだけ問題があるとすれば、2006〜2007年予定の
次世代Windows(Longhorn)までは.NETFrameworkが
デフォのAPIじゃないことだろう。なのでフリーウェアとか
シェアウェアで早期にアプリを公開するつもりなら
これは向いていない。
C#にはウニオン型は無いの?
struct でオフセット弄る
int?ってなんか萌えるな
>>164 素敵情報サンクス。
サーバ(C++)とクライアント(Java)で作りつつ、
教えてくれた安価モデルが発売されたらクライアントをC#に移植
みたいな方向で考えてみるよ。
時期OSで.NETFrameworkが標準じゃなくなるってのは寝耳に水だけど、
さすがにバンドルされてないとは考えられないから、
あまりそっちは気にしなくていいかもな。
でもちょっと怖いから調べててみることにする。
マジサンクス!
> 時期OSで.NETFrameworkが標準じゃなくなるってのは寝耳に水だけど そんなこと誰も書いてないでしょ
>>165 なくなっちゃったよ、せっかくintやらのビット数固定にしたんだから、
その範囲でのみでても付けてもらえると便利っていうか、Cより安全確実でよかったんだけどね。
ちょとさびしい。
頑張ってstruct使ってビットフィールド操作関数作るしかないっすね。
defaultとstandardはこの場合同意語にならんか? それともそーゆーことじゃないのか? なんにせよいろいろややこしそうだな。
173 :
デフォルトの名無しさん :04/07/14 16:27
生成済みのオブジェクトの型を調べて、 それの型と同じ型で new をする方法があったら教えてください。 class ClassA() { ... } class ClassB() { ... } ... class MyApp { void test() { object [] list = { new ClassA() , new ClassB() } ; foreach( object i in list ) { sub( list[ i ] ) ; } } void sub( object a ) { 「aの型=ClassA/ClassB」 localData = new 「aの型=ClassA/ClassB」() ; ... } } といった事をしたいのですが、System.Reflection を使えばできると聞いたのですが、 分りやすいサンプルがあったらよろしくお願いします。
>>173 object localData = a.GetType().GetConstructor().Invoke( new object [] {} );
>>175 でも、実装の仕方としては、class A, B を ICloneable にして Clone() メソッド書くのが普通な気が。
>>175 それでほんとに問題ないのかちゃんと確認した方がいいぞ。
>>176 リフレクションの使い方の取っ掛かりが欲しかったので、構わないんです。
コンストラクタ以外にもメソッドを呼び出すときに、もっと複雑なことになるし、この辺りは覚悟していましたし
いずれにしても template が実装されるまでの繋ぎなので。
>178 どうtemplateにからむんでしょう?個人的に興味
ダウンキャストを知らないだけだったりして…
181 :
デフォルトの名無しさん :04/07/15 20:30
C#の宿題スレはまだ無いみたいなのでここにて。 C#で簡易telnetを作れという問題です。通信の方法がそもそも分かりません
言語依存じゃない部分が分かってないんだろ?
185 :
デフォルトの名無しさん :04/07/20 13:26
IList をインターフェイスに持つオブジェクトでシリアル化する時、上手く行かなくて地団駄踏んでいます。 System.Runtime.Serialization.Formatters.Soap.SoapFormatter で、オブジェクトをXmlにシリアライズする時は ISerializable でカスタマイズできるみたいですが、 System.Xml.Serialization.XmlSerializer で、オブジェクトをXmlにシリアライズする時でカスタマイズできる方法は無いんでしょうか? 知っている人いますか? IList を入れていると、XmlSerializerが頑張っちゃって自動的にシリアライズしてしまうみたいで・・・ IListが入っていても普通のクラスのように振舞わせる事はできないのでしょうか?
>>185 取りあえず簡単なIListを実装したコレクションを作ったけど普通にシリアライズ・デシリアライズできたぞ。
XmlSerializerは手軽に使えてカスタムしにくいのが特徴なので、まあいろいろ勘案して。
シリアライズ用の別クラスを作るとか。
あ〜、>186の一行目はちょっと勘違いというか見当違い。無視して。
>>186 あぅ、書き損じたんですが、添え字にマイナス値を使えるようにするとアウトなんですよ。
ヘルプを見ると、this[int]インデクサプロパティーを見ているようで、Countとセットで
動作しているみたいなんです。
当然動作するわけも無いのですが、ここでIListを見て勝手に動作されるとちょっと具合が悪いので、
この機能に寝ていてもらいたいのですが、手段が見つからない・・・・
189 :
デフォルトの名無しさん :04/07/22 11:01
単純に足し算するだけのメソッドなんですが、 public int Add() { return 10+10; } 下のように使うと、Add()の戻り値は変数aに入りますよね。 public void Test() { int a = Add(); } 以下の場合だと、Addの戻り値はどこへ格納されるんでしょうか? publi void Test() { Add(); }
そのまま破棄されるだけだが。
C系言語の特徴で int main() { 10 ; } とやっても、文としては正しいと認識されます と、書こうとして、C#でやったら、意味が無いって怒られました。 さすがにチェックすることにしたみたいですね。
192 :
デフォルトの名無しさん :04/07/27 20:11
public int hoge; //hogeは1から100をとる 上の場合、publicだから外からどんな値が来るかわかりません。 hogeに値が代入された時に、hogeが正しい値かどうかを調べるにはどうしたらいいんですか
>>192 プロパティにしてsetアクセサの中でチェックする。
つかまさにそのためにプロパティがあるんだが。
プロパティにする
set{ if(value >= 1 && value<=100) hoge = value; else throw new FormatException(); } みたいにすればいいんですね。なるほど
どうでもいいがその例だとArgumentOutOfRangeExceptionの方が妥当だな。
>>195 public int hoge {
set {
if (1 <= value && value <= 100)
hoge = value;
else
throw new ArgumentOutOfRangeException();
}
}
ちょっと無理っぽいが、通るのか?
198 :
デフォルトの名無しさん :04/07/31 18:44
GDI+はGDIより遅いって本当ですか?
>ちょっと無理っぽいが、通るのか? なんで?
>199 GDIはBitbltで GDI+はGraphics.DrawImageで 確かめて良いですか?
GDI+は長角まで待つべし
リフレクションを使ってラムダ式を動的に作りたいのですが、 参考になるHPや良い方法があったら教えてください。 例えば、正規分布関数のクラスが、以下のように存在していて public class DistributionFunctions { public static dobule Normal( double x , double a , double v ) { return 1.0 / Math.Sqrt( 2 * Math.PI * v ) * Math.Exp( -(x-a)*(x-a)/( 2 * v ) ) ; } ... } やりたい事は、 delegate double DoubleToDoubleDelegate( double x ) ; public class DistributionDelegates { static DoubleToDoubleDelegate MakeNormal( double a , double v ) { ここに手際よく大量生産できるコード } } 使い方は void hogehogeMethod() { DoubleToDoubleDelegate df = MakeNormal( 0.0 , 1.0 ) ; y = df( 0.0 ) ;// ここで y = Normal( x , 0.0 , 1.0 ) が呼び出される }
>>203 よくわからんけど、こんなこと↓がしたいの?
using System;
public class DistributionFunctions {
double a;
double v;
public DistributionFunctions(double x, double y){
a = x;
v = y;
}
public double Normal( double x )
{
return 1.0 / Math.Sqrt( 2 * Math.PI * v ) * Math.Exp( -(x-a)*(x-a)/( 2 * v ) ) ;
}
}
delegate double DoubleToDoubleDelegate( double x );
class Hoge {
static DoubleToDoubleDelegate MakeNormal( double a , double v ) {
//ここに手際よく大量生産できるコード
DistributionFunctions f = new DistributionFunctions(a, v);
return new DoubleToDoubleDelegate(f.Normal);
}
static void Main() {
DoubleToDoubleDelegate df = MakeNormal( 0.0 , 1.0 ) ;
double y = df( 0.0 ) ;// ここで y = Normal( x , 0.0 , 1.0 ) が呼び出される
Console.WriteLine("y = {0}", y);
}
}
public class DistributionFunctions { の{の前に全角スペースが入ってた。。。鬱
C#でGDIをつかうすべはあるのか?APIの直たたきならGDIをつかえる?
>>204 方法は問わないんですが、そうです、そんな感じです。
そこで、関数の引数を確保するクラスを作る必要がありますよね。
関数の数が多くて、これを全部自動生成してしまいたいんです。
>>207 > そこで、関数の引数を確保するクラスを作る必要がありますよね。
> 関数の数が多くて、これを全部自動生成してしまいたいんです。
204の例を使っても、好きなだけ関数は作れるけど。。。↓こういうことではない?
static void Main()
{
double d1 = 1.0; // 数字は適当
double d2 = 1.0; // 数字は適当
DoubleToDoubleDelegate[,] df = new DoubleToDoubleDelegate[10,10];
for(int i=0; i < 10; i++, d1 += 0.2){
for(int j=0; j < 10; j++, d2 += 0.2){
df[i,j] = MakeNormal( d1, d2);
}
}
for(int i=0; i < 10; i++){
for(int j=0; j < 10; j++){
double y = df[i,j]( 0.0 ) ;
Console.WriteLine("y = {0}", y);
}
}
}
>>208 ども、お手数掛けてすみません。
対象となる関数は、正規分布関数のようにパラメータ二つだけとは限りませんし、
今後、多変数に対応するにあたって、このまま場当なやり方で行きますとプログラムの保守が危機的になると考え
第一段階として、現在はC#のソースコードを自動生成するプログラムを作って対応しています。
しかし、これも必ずしも良い方法とも言えず、もっと効率的にプログラムできる方法として、
色々探している内にリフレクションという物を使ってみようかと考えていました。
さっそく始めてみたのですが、これがチュートリアルの良いページがなかなか見つからなくて・・・・
ちなみに僕自身、ここに書き込む前に色々考えたのですが、
一般的なC#の構文を使った範囲内ではおそらく良い解決方法はないだろうというのが結論でした。
210 :
デフォルトの名無しさん :04/08/01 22:20
はじめまして、 C#でデータベースに関することを勉強しています。 ボタンを押すとアクセスに「123」というデータを追加するプログラムを書いています。 壁にぶつかりましたので、ご指導していただけませんか。 odbcDataAdapter1などの設定し、以下のボタンの内容を書きました。 odbcConnection1.Open(); odbcDataAdapter1.InsertCommand.Parameters["@ab"].Value="123"; odbcDataAdapter1.InsertCommand.ExecuteNonQuery(); odbcDataAdapter1.Fill(dataSet11); odbcConnection1.Close(); すると 'System.IndexOutOfRangeException' のハンドルされていない例外が system.data.dll で発生しました。
普通に IDbCommand.ExecuteNonquery() はダメなの?
214 :
デフォルトの名無しさん :04/08/03 21:03
プログラムの構造をどうしたらいいのかが分かりません。 例えば、オセロプログラムを考えるとします。 オセロのマスの部分にButtonから継承したクラスMasuを使います。 Masuを8*8個集めた配列をBoardとします。 オセロゲーム ━━ Board (集約する)━━ Masu という風になっていますが、 Masuがクリックされた時に 隣のマスをひっくり返すかどうか走査するとしても、 Masuからは隣のMasuなんて分かりませんよね? だからBoardに頼んで調べてもらいたいわけですが どうやったらそうできるのかがわからないです。どうしたらいいのですか?
X 配列Board O クラスBoard でした
>>214 Masu に必要な機能は、
・そのマスの内容を保持
・画面に描画する
・クリックされたことを、Board に通知する
の3つでいいんじゃない?
ひっくり返すのは、Board でやればいい。
217 :
デフォルトの名無しさん :04/08/03 23:21
>>216 その三番目のboardに通知する方法が分からんですよ。
>>217 boardのメソッドの引数に自分を渡せばいい。
>214 もっと PlayerとかTurnMasterとかJudgeとかつくれや。Masuはいらん
>221 書き込んだ後そう思った.すいません。 Masu作るときにボードを引数で渡してそれ使う.それかイベント
223 :
デフォルトの名無しさん :04/08/04 23:39
こういうのってできるかな? void Hoge( params object [] arg ) の ref バージョンで void Hoge( ref object arg0 , ref object arg1 , ref object arg2 ... ) ; の様な物。 必要個数分オーバーロードするしかないかな?
224 :
デフォルトの名無しさん :04/08/05 00:33
コントロールのクライアント領域について質問です。 以下のような Panel を継承したクラスをつくりました。 public class PanelEx : System.Windows.Forms.Panel { public PanelEx() { } protected override void OnPaint(PaintEventArgs e) { base.OnPaint (e); Pen p = new Pen(Color.Black, 1); e.Graphics.DrawRectangle(p, this.ClientRectangle); p.Dispose(); } } この PanelEX クラスのインスタンスを、普通に Form1 の コンストラクタ内で生成したところ、画面には PanelEx の 左側と上側にしか線がひかれません。 なぜでしょうか?また、どうすればちゃんと矩形が描かれますか?
>>224 はみ出て見えないので矩形を小さく、例えば幅と高さを-1にしたりする。
>>225 ええええー。なぜそんな仕様になってるんでしょうか?
227 :
デフォルトの名無しさん :04/08/05 02:00
>>220 ウヒャー
220さんの高度な設計だと、どんな風になるんですか?
コードをつけながら説明してほしい・・・
231 :
デフォルトの名無しさん :04/08/05 22:23
超基本で悪いんだけど、 int i = Console.Read(); Console.WriteLine(i); これでたとえば「2」を入力すると出力が「50」なんてなるんですが、なぜなのでしょうか?
>>231 コンピュータの中では、「文字」ってのは一定のルールで数字の列に変換されて扱われてます。
このルールのことをエンコーディング、数字(の列)のことを文字コードと呼んだりします。
んで、文字の "2" に対応するコードが 50 (16進数で 0x32) なわけです。
ファイルやネットワーク等での読み書きは、byte の列を使って行われるのが基本で、
.Net Framework で文字列からこのバイト列に(またはその逆に)変換するには、
Encoding クラス(のインスタンス)を用います。
P.S. "2"という文字列から、数字の 2 に変換するには、Int32.Parse() などを使います。
>>232 文字コードを実数値にしないといけないんですね。
丁寧な即レスありがとうございます。
久しぶりにきたが、なんだかいいスレになってるじゃねーか!
コンソールはほとんど勉強してなかったから試してみたんだけど char c = (char)Console.Read(); とすれば、そのまま表示できまっせ。MSDNだとintを返すことになってるから まぎわらしいんだけどね。
237 :
デフォルトの名無しさん :04/08/06 07:43
こんにちは 今画像のサムネイル保存用に複数画像をまとめてひとつの ファイルにしようとしています。 Aファイルサイズ・Aファイル・Bファイルサイズ・Bファイル・・・ みたいな感じ合成し、インデックスで呼び出そうかと思っています。 で、ふと思ったのですが、そういう複数のファイルをまとめてしまう クラスって既にあったりするのでしょうか。 よろしければお教えください。よろしくお願いいたします。
Bitmap imageA = new Bitmap("A.bmp"); Bitmap imageB = new Bitmap("B.bmp"); Bitmap imageC = new Bitmap("C.bmp"); Bitmap bmp = new Bitmap(300, 100); Graphics g = Graphics.FromImage(bmp); g.DrawImage(imageA, 0, 0); g.DrawImage(imageB, 100, 0); g.DrawImage(imageC, 200, 0); g.Dispose(); bmp.Save("ABC.bmp"); bmp.Dispose(); imageA.Dispose(); imageB.Dispose(); imageC.Dispose();
239 :
デフォルトの名無しさん :04/08/06 10:42
そうきましたか・・・ Hash的に名前で簡単にストリームを取り出せるような 仕組みが既存クラスにないかなーとか思っていたのでした。 やはり頑張って自分で実装してみます。 ありがとうございました。
参照設定でvjslib.dll(Microsoft Visual J# .NET Class Library)を追加して、java.util.zipで
241 :
デフォルトの名無しさん :04/08/06 11:42
!!! なるほど! 早速やってみます。 ありがとうございました!
242 :
デフォルトの名無しさん :04/08/06 23:07
DirectX 9.0 SDK (Summer 2004)の日本語ドキュメントをインストールしたんだが、 VS.NET2003に反映されないのです。 なんでなんでしょう・・・そういう方他にいますか?
まずは再起動
SDK本体は入れてるのよな? まっわからんけど
英語版ヘルプははいってるんですが・・・ フィルタもなしになってます。 本来ならVS.NET起動時に「ヘルプを反映中・・」とかでますよね?
連結ヘルプ コレクション マネージャで更新できました。 お騒がせしました。(・∀・)
>>242 DirectX9 SDK Summer2004の日本語ドキュメントってもう出てたの?
>>249 変な書き方しちゃいましたね。
2004入れてから日本語ドキュメント入れたら〜でした。スマソ
251 :
デフォルトの名無しさん :04/08/07 13:25
外部プロセスに確保した領域をPtrToStructureすると例外が発生するのは何故でしょうか。どうかご教授お願いします。 using HANDLE=System.IntPtr;using LPVOID=System.IntPtr;using SIZE_T=System.UInt32;using DWORD=System.UInt32; class CMyApp:System.Windows.Forms.Form { [System.Runtime.InteropServices.DllImportAttribute("kernel32")] static extern LPVOID VirtualAllocEx(HANDLE hProcess,LPVOID lpAddress,SIZE_T dwSize,DWORD flAllocationType,DWORD flProtect); DWORD PAGE_READWRITE=0x04; DWORD MEM_COMMIT= 0x1000; static void Main() { System.Windows.Forms.Application.Run(new CMyApp()); } CMyApp() { this.Click+=new System.EventHandler(OnClick); } void OnClick(object sender,System.EventArgs e) { LPVOID 自分側の領域=VirtualAllocEx(System.Diagnostics.Process.GetCurrentProcess().Handle,(LPVOID)0,(DWORD)System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.TimeSpan)),MEM_COMMIT,PAGE_READWRITE); LPVOID 他人側の領域=new LPVOID(); foreach(System.Diagnostics.Process inc in System.Diagnostics.Process.GetProcesses()) if("Explorer"==inc.ProcessName) 他人側の領域=VirtualAllocEx(inc.Handle,(LPVOID)0,(DWORD)System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.TimeSpan)),MEM_COMMIT,PAGE_READWRITE); System.Runtime.InteropServices.Marshal.PtrToStructure(自分側の領域,typeof(System.TimeSpan));//自分側の領域では例外は発生しない System.Windows.Forms.MessageBox.Show("次で例外発生"); System.Runtime.InteropServices.Marshal.PtrToStructure(他人側の領域,typeof(System.TimeSpan)); } }
252さんアドバイスありがとうございます。 これをやりたい理由は、興味本位で出来るかどうか試したかっただけです。 とりあえず上のURLをよく読んで見ます。
おまいら、コールバックにデリゲートとインターフェースの どっち使ってる? JavaのGUIのリスナーみたいなケースなら、デリゲートの 方が何もしないメソッドまで記述しなくて済むし効率いいかな。
>>254 俺は Java 出身だから、ある程度一まとまりの処理をくっつけるならインターフェイス使っている
デリゲートは纏まり間が無くて、単体なら遣いやすいけど微妙
俺はデリゲート派
anonymous class は使えないが、anonymous delegate は使えるようになるので、 デリゲートにしておくのが無難なのでは。
非常に唐突な質問で申し訳ないが、C#で、というか.NET Frameworkで 各ドライブのボリュームラベルを取得するのってどうやるんだべさ? なんかAPI叩くしかなかったら非常に鬱なので教えてエロイ人!
>>258 DriveInfo.VolumeLabel かな。
…… .NET Framework 2.0 だけど。
2.0で変更になったクラスの一覧ってないかな?
>>259 やっぱ2.0になっちまうのか・・・。
何故こんな基本的なもんが実装されてないんだと小一(ry
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] extern static bool GetVolumeInformation( string RootPathName, StringBuilder VolumeNameBuffer, int VolumeNameSize, out uint VolumeSerialNumber, out uint MaximumComponentLength, out uint FileSystemFlags, StringBuilder FileSystemNameBuffer, int nFileSystemNameSize);
>>262 トンクスエロイ人!
やっぱこうやるか・・・。なんだかなぁ・・・
264 :
デフォルトの名無しさん :04/08/08 02:15
Socket.Selectで64を超えるソケットリストを渡すと範囲外エラーになるのですが、 この64という制限は何によってかかっているでしょうか。 100に変更したりとかできないでしょうか。
265 :
デフォルトの名無しさん :04/08/08 11:05
ボタンの配列(二次元)をクリックされた時に、何番のボタンがクリックされたかを調べるにはどうしたら良いですか? MyButtons[,] = new Button[3,5]; のように宣言されていて、forの二重ループの中で初期化して MyButtons[i,j].Click += new EventHandler(MyButtons_Click); みたいにしてみましたが、MyButtons_Clickの引数には別に「MyButtonsの何番目か」は渡されません。 どうしたらいいんですか
>>265 ボタンの番号が固定のものなら、Button.Tag あたりに番号を押し込めておけば良いのでは?
自分が [2,1]だとしたら、[2,0]と[2,2]のボタンも操作したいんですよ。 なんとかなりませんかねえ
>>267 ???
だからTagにint[]{2, 1}とかいれとけばいいんじゃないの?
それがまずいというのならもっとわかりやすく説明してくれないと何がなにやら。
>>264 普通に1000とかできるじゃん……と思ったら.NET Framework2.0だった。
1.1の制限のようだ。
>>264 OS の制限。WaitForMultipleObjects() できる最大数が64だから。
2.0 で表面的な制限は外れても、64を超えると効率は落ちる気がする。
簡単なベンチの結果、数が25以上になった辺りから緩やかに効率が落ちていった。 でも64周辺の境界は見あたらなかった。 ついでに1.0/1.1/2.0bも比較してみた。(スコアは低い方が優秀) 10でスコア 410 / 370 / 250 25でスコア 320 / 300 / 230 40でスコア 325 / 320 / 250 64でスコア 370 / 370 / 300 有意の差があるね。 1.1までとは違う機構を利用してたりするんじゃないかってくらい2.0は早い。 数が少ない時と多い時のスコアの分布とか。
273 :
デフォルトの名無しさん :04/08/08 13:50
DataGridで ABC | DEF | GHI JKL | MNO | PQR STU | VWX | YZA BCD | EFG | HIJ こういう表の MNOとVWXだけ範囲指定させるみたいなことはできますか?
>>270-272 環境も書き忘れたのに本当にありがとうございます。
しかもWaitForMultipleObjectsとの関連、
ベンチまでしていただいてとても参考になりました。
クラスのオブジェクトをコピーしたいんだけどよくわからんです。 AObject obj1 = obj2.Clone(); ってすればいいんだろうけど、 Cloneを書くときにCのmemcpyみたいなことってできないんでしょうか? それともいちいちフィールド一つずつ代入?
Object.MemberwiseClone()
>>276 さんきゅ。
それつかってICloneableを実装するのが流儀なのだな。
Point とかの Dispose できないヤツって、Dispose しなくていいの? Point aaa = new Point(0,0); aaa = new Point(1,1); aaa = new Point(2,2) とかしても大丈夫?
>>278 int a = 0;
a = 1;
a = 2;
とやることにためらいを覚える?
char *p = malloc(100); p = malloc(100); p = malloc(100); とやることにはためらいを覚える。
Pointとかは構造体だからOKってことだよね。 正しいクラスはDisposeを持つべきってことか? 自前のやつも?
>>281 もうちょっとGCを信用しようや。
Disposeが必要なのは基本的にUnmanagedなリソースを扱うクラスのみ。
GCはいいんだけど、自分で自由に解放できないのがいまいち なんか「ゴミをゴミ箱に捨てると清掃員の仕事が減ってリストラされるから、ゴミは道に捨てるべき」とか言ってるみたい
>>283 でも
道に捨てない −> 清掃員の仕事が減ってリストラ −> ごみを捨て忘れても綺麗にならない
だから道に捨てるんだ。
285 :
デフォルトの名無しさん :04/08/15 17:44
環境はVS2003です。
ツール(T)→webページのビルドコメント(B)
でドキュメントを作成したところ、「コード要素ページ operator + が不完全です。 」というエラーが取り除けなくて困っています。
だれか理由が分る人いますか?
以下問題のコードです。
/// <summary>テスト</summary>
public class Test
{
/// <summary>足し算</summary>
/// <param name="a">引数その1</param>
/// <param name="b">引数その2</param>
/// <returns>結果</returns>
public static Test operator + ( Test a , Test b ) { return null ; }
}
>>282 Unmanagedというより、IO関連とかメモリーと連携するわけにはいかないオブジェクトが実装する必要があるのでは?
OSのリソースはメモリーのようにいつでも解放できるリソースばかりではありませんから、そのようなリソースを握るオブジェクトには必然的に必要になります。
参照先がなくなった瞬間に即時開放されるタイプのクラスが定義できると、こんな面倒な事をしなくてすむんですが……
と、C++でスマートポインタを使っていると切に欲しくなる事があったりします。
Disposeしたところでメモリに対しては何も出来ないんだから意味なし。
まあ、
>>285 のように思う事はない事もない。
何らかのクリーンアップコードを実行したい場合なんかは、 Disposeを実装すべきである事が多い。 単に使用終了と言う意味合いだけなら、何もする必要なし。 ※Dispose実装したところでする事は何もない。 メモリに関しちゃほっとけばいいってのがGCのある環境での基本。
using ステートメント(と IDisposable インタフェイス)ではどこがダメなの?
忘れる可能性があるから、強制できないから。
まあ、
>>285 の言うようなスマートポインタみたいな物っていっても、
結局直接参照しか扱えないため、包含するクラスは全部そのタイプにしなけりゃ
意味がなかったりして、結局大げさになりすぎてうまくいかないかな。
GCとは相性が悪いね。
MSNメッセンジャーでの「ほげほげがサインインしました」みたいなポップアップ ダイアログを作りたいのだが,ここにいる諸氏ならばどのようにして実現するか, 意見をお聞きしたい.
出来合いのコンポーネントを使う。
294 :
デフォルトの名無しさん :04/08/18 18:19
ファイルの末尾数バイトを削除する簡単な方法ってありますか? 一度全て読み込んだ後削除して上書きしか思いつかなくて。。。 消した後、そのファイルに追加を行うので、 消したい部分のみ上書きする方法でもいいのですが。。。
簡単……ねぇ? 上書きなら難しいことでもないけど。 int b = 5; FileStream fs = new FileStream("hoge.txt", FileMode.Open, FileAcceess.ReadWrite); fs.Position = fs.Length - b; StreamWriter sw = new StreamWriter(fs); 以下略
>>295 そっか TextWriter に、予め頭だししておいた Stream をぶち込めばよかったのか
ありがとうございますそれでいけそうです
>>295 そっか Mamko に、だしておいた Seishi をぶち込めばよかったのか
ありがとうございますそれで子供できそうです
つまらん
299 :
デフォルトの名無しさん :04/08/23 08:20
C#で複数のマウスイベントを検出することは可能でしょうか? USBマウスとUSBトラックボールをつなげています。こららの移動情報を個別に取得したいと思います。 どうすれば、よいでしょうか?宜しくお願いしまう。
意外にも、DirectInput じゃ区別できないのよね。
実行ファイルに関連付けられたアイコンをプログラムの中で 使用したいのですが、いい方法はないでしょうか。 なお、今のところ、同一のアイコンファイルを コンパイルオプションの「/win32icon」、「/resource」の双方を 使って実行ファイルに取り込んでいます。
>>302 /win32icon は API の ExtractIcon/ExtractIconEx で取り出せる。
304 :
デフォルトの名無しさん :04/08/26 01:30
classとstructを簡単に見分ける方法ってある? ライブラリのやつとかいちいちマニュアル見るの面倒なんだが。
>>304 VS使ってるならnewのインテリセンスとか。
あんまりclassかstructかを見分ける必要なぞ感じたことがないしな。
306 :
デフォルトの名無しさん :04/08/26 11:59
ListBoxを縦に二つに分けることはできないんでしょうか。 MultiColumnではなくて、ひとつの項目を二つの列に分けて表示したいんです。 具体的に何をしたいかというと、エラーの内容と発生時刻を表示したいんですが、 発生時刻を左側に、エラーの内容を右側にわけてリストボックスに表示したいんです。 日付は必ず1行ですがエラーの内容は複数行になる可能性があるので、 文字数揃えて表示・・とかよりも縦に二つに割れたら楽だと思うんですけど、どうやってやるのかさっぱりです。 ListBoxで実現するには、あるいはほかのコントロールで実現するにはどうすればいいんでしょうか。
ぶっちゃけ自分で描画したほうが早い
面倒くさいかどうかというのは実装の早さに関して考慮することじゃないような
>>305 そうか。
コピーするときにcloneがいるかとか
遅くなるのかとか、結構気になるんだが
チューンナップなぞ遅さが気になってからすればいいんですよ. 早過ぎる最適化は諸悪の(少なくとも大半の悪の)根源なり -- DEK
313 :
デフォルトの名無しさん :04/08/27 17:15
AxWebBrowser って ToolTip くっつけられないんだっけ?
くだらない質問なのにあげちゃった_| ̄|○
>>305 boxing と unboxing でドツボにはまるぞ。
値型と参照型の違いは押さえておいた方が良い。
だよね。 struct を lock () して排他したつもり、とか。
心配しなくてもできねーよ。
テキストボックスで HOME や END、あまつさえ SHIFT+HOME や SHIFT+END、 CTRL+Z や CTRL+C/V/X を実現するには自分でコードを書かないといけないのでしょうか?
320 :
デフォルトの名無しさん :04/08/28 23:16
Windows.Formにプロパティを加えたんだけど、 デザイナのプロパティウィンドウには表示されませんね。 基底クラス(Windows.Form)に加えたプロパティは 派生クラス(Windows.Form)のデザイナに反映される みたいだけど、自分自身ならなぜだめなのかなぁ。
>>307 ,308
遅ればせながら・・・
ListViewでいけました。
ありがとうございました。
詳細表示なんてさっぱり思い浮かびませんでした。
>>319 できました…。幻覚でも見ていたのかもしれません。
でも CTRL+A ってできないんですね。
325 :
デフォルトの名無しさん :04/08/30 17:43
1pxの点 . を任意の座標表示するにはどうしたら良いんでしょう? 1,1 - 1,2まで幅1の線を引くと、どうも2pxくらい線が引かれちゃうし 1,1 - 1,1にすると線ができないんです。
>>325 Bitmap に SetPixel で点を描いて、Graphics.DrawImage で画面に描写。
他には、 FillRectangle(DrawRectangleは不可)で幅・高さ1の四角を描画。 Graphics.GetHwndで取得したデバイスコンテキストにWin32APIのSetPixelで描画。 ……元画像のビットマップを取得できるならBitmap.SetPixelが一番手っ取り早い/速いんだけどねー。
それ俺も気になって調べたんだけど 点を描画するGraphicsクラスのメソッドはないみたいなんだよね 結局SetPixelで妥協したけど、 Graphicsオブジェクトを使って描画を行うというルールから離れるからあんまりやりたくない
……327のGetHwndはGetHdcの間違い。 //user32.dllのAPIをまとめたクラスを最近作ってるからhwndまみれでつい。
>>328 Graphics はベクタ形式を含む一般的なグラフィックを扱うクラスだから、“点”という概念がないのよね。
数学的には、点は半径が無限小の円と等価な存在で、半径0の円は画面に表示できないから。
点、というか、ピクセル単位の処理がしたければビットマップを使えと。
Graphics に元画像のビットマップを取得するメソッドがないのは、
将来的に(Avalon で)、OS 自体をベクタ画像ベースで動くものにするつもりでいるからじゃないかな。
332 :
デフォルトの名無しさん :04/09/08 21:18
>>333 Site もしくは Site の IServiceProvider 経由で IID_IWebBrowser もしくはIID_IWebBrowserAppを
得て Navigate すればいいんじゃない?
>>334 ありがとうございます。
調べてみます。
アプリケーションをフォームが非表示の状態で開始するにはどうやればいいか教えていただけますか? Application.Run の前に CreateControl して Hide して、Visible を false にしてもなぜか表示されてしまいます・・・
>>337 これだと確かに表示はされないけれども、Load イベントも上がらないし・・・
普通の Win32 アプリでいう WS_VISIBLE でない状態でウィンドウそのものは作りたい、
というような状況なのです。CreateSuruct でも override してみるかなぁ。
CreateParams を override して WS_VISIBLE を落としてもダメ、 Form の Load イベントで this.Hide() しても this.Visible = false; してもダメ、 Application.Run を Form.ShowDialog にしてもダメ。 (関係ないけどRun の代わりに ShowDialog 使うと Dialog 終了後のメッセージが処理されないので 表示した NotifyIcon を Form が Close される前に消さないとゴミが残る・・・) VisibleChanged イベントのハンドラで Hide すると何とか消えるけど、一瞬表示されるのでちらつきます。 タスクトレイにいきなり常駐するユーティリティとかどうやってみんな作ってるんだろう。
>>339 > タスクトレイにいきなり常駐するユーティリティとかどうやってみんな作ってるんだろう。
NotifyIconとかを管理するクラスを作り、その中のContextMenuでフォームのShow/Hideを扱う。
メッセージループはApplication.Run()でメインウィンドウを持たせずに開始する。
342 :
デフォルトの名無しさん :04/09/17 11:41:58
パフォーマンスを計るのにスレッド単位でCPUのTickTimeを取得したいのですが、 (Sleep中または別スレッドが走っている時はカウントしない) そういうクラス知っている人いますか?
343 :
デフォルトの名無しさん :04/09/17 11:48:25
Type.InvokeMemberからBindingFlags.GetPropertyでプロパティを取得する時、 返り値がobject配列なのですが、どうすれば各要素にアクセス可能になるでしょうか。 単に返り値をobjectとして取得することはできたのですが、その後が分かりません・・
>>343 言ってる意味がよくわからない。
もうちょっと具体的に。
ごめんなさい、分かっちゃった。 こうしたかっただけです。 obj = type.InvokeMember("array", BindingFlags.GetProperty, null, doc, new object[] {2}); * これで二番目の要素をゲット お騒がせしました。
346 :
デフォルトの名無しさん :04/09/17 14:41:43
bmp=new Bitmap(filename); これをdisposeせずに、また bmp=new Bitmap(filename2); を呼び出したらメモリー減って行きますか? それとも、同じ変数のメモリー番地に上書きされるだけですか?
>>346 もちろん新しいメモリが確保される。
インスタンスのサイズが違うかも知れないのに上書きしちゃまずいだろ。
って、参照先じゃなくて変数そのもののアドレスか? それなら上書きされるが。 つかそんなことに頭を悩ます意味は全くないが。 あとそれとDisposeとは何の関係もない。
349 :
デフォルトの名無しさん :04/09/17 14:58:36
bmpの中にある画像データを替えたかっただけなんです。 >って、参照先じゃなくて変数そのもののアドレスか? >それなら上書きされるが。 という事は、前の画像データが消えて新しい画像データに上書きされるって事ですよね?
> という事は、前の画像データが消えて新しい画像データに上書きされるって事ですよね? 画像データとか言わずBitmapインスタンスと言おうな、こういう場合。 まあ、そんな感じ。 細かく言うなら、「変数が示す参照先が書き変わる」。 変数が、古いインスタンスを丸めてポイして、新しいインスタンスにべったりくっつくわけだ。 //丸めてポイされたインスタンスはいずれGCが片づける。
なるほど、色々ありがd。
>>346 微妙に誤解してないか?
>>350 の書いてる内容は間違っちゃいないんだけど、
読み方によっては
>>346 が誤解してしまうように思う。
依然
>という事は、前の画像データが消えて新しい画像データに上書きされるって事ですよね?
のように言ってるからね…
まあ画像データが上書きされるってのを、プログラム上からはというか、
プログラムでの操作上はそのように見えるってだけの意味で言ってるのなら大丈夫かもしれんが…
>>346 上書きはされないよ。例えば、
Bitmap bmp = Bitmap(file1);
aForm.BackgroundImage = bmp;
なんてしておいて、後で
bmp = Bitmap(file2)
なんてやってもフォームの背景は変わらない。
前の画像は前の画像、新しい画像は新しい画像、お互いなんの関係もない。
プロパティに設定するときはインスタンスのコピーをとってるんだろうか
>>354 とってないよ。だから Dispose なんかしちゃだめだよ。
Disposeは微妙な存在。
357 :
デフォルトの名無しさん :04/09/18 10:40:22
>>342 の続きなんですが、スレッドがSleep等で停止したり、再開したりする時に
コールバックもしくはなんだかの形でフックを掛けることはできないか知っている人いませんか?
>357 単純にメソッド余分じゃ駄目なの?他のスレッドに何かさせたいんでしょうか?ならイベントとか?
359 :
デフォルトの名無しさん :04/09/18 13:51:36
>>358 システム側でスレッドが切り替えられたときにも引っ掛けないとパフォーマンスが計れないです。
パフォーマンスカウンターオブジェクトのスレッド実行時間では?
はじめまして。 プログラミング自体初心者なのですが、 VisualStudioC#で作ったプログラムの テキストボックスの中でバックスペースが効きません。 これってなんとかならないものでしょうか。
Ctrl+H
前の文字を消すための代替方法を探しているのではなくて、 テキストボックスでバックスペースキーを認識する方法を探しています。
と言われても私の周辺では普通に有効だし。 コード上で変なことをしてるかキーボード補助系のなんかのアプリを使ってるか、果てしなく環境依存な話になるし。 そもそもTextBoxはWindowsの標準エディットコントロールをラップしてるだけだしなぁ。
C#初学者です。 ナンバーズ予想ソフトをVC#で作りたいと思っています。 Winアプリで、ナンバーズとか株の最新データを取得してくるソフトが ありますが、あれってどのような仕組みでやっているのですか? 何か参考になるサイトや書籍などあれば教えてください。
366 :
デフォルトの名無しさん :04/09/24 11:16:52
>>365 1.サイトからHTML(など?)をダウンロードする
2.ダウンロードしたHTML(など?)からナンバーズのデータを取得
3.取得したデータから、予想する
大雑把にこんな感じでやればいいのでは。
ナンバー図は知らんが、株はサイトと直接ソケット接続してデータやり取りするものもあった希ガス.
>366 ということは、まずHTMLのソースを元に配列化して、データを取得するということでしょうか? 取得の仕方だけが分からないんで・・・
まずデータがどこにどういう状態/形式でおかれているか、によって話は全く違った方向に転がっていくだろう。
>>368 それは各自の工夫です。そんな甘いものではないはず。
まあヒントを。HTMLをダウンロードすることを前提に話すけど。
ダウンロードしたHTMLのうち、必要なデータがある場所というのはサイトの構成が変わらなければいつも同じなはず。
そういうのを、文字列の検索とか正規表現とかで探し出す。
運よく取得するサイトがXHTMLになっている場合は、System.Xml名前空間を駆使すれば楽になるかもしれない。
>365 何がわからないのか明確にしる ソースの場所 ソースの形式 そのソースの取得方 プログラムの書き方 全部
HttpWebRequest
ネットワークゲームを作る際に、通信に最初(ログイン)から最後(ログオフ)まで BinaryFormatter もしくは SopaFormatter にてシリアル化したオブジェクトのみを使用する事に問題点はありますか?
>>373 なんか問題があったときにスニファで見てもよくわからないとかが
ありそうなので、おいらは使わない
Soapはしらないけど、効率わるいんじゃないの?
値型のnewってヒープを食わないんですよね?デフォルトのコンストラクタが呼ばれるだけで。 同じ変数に2回以上newした場合はどうなんでしょう。 ループの中で構造体とかを初期化したいがためにnewでクリアしようとするのは 問題ないんでしょうか? すごく抵抗を覚えるんですが・・・ ・パターン1 A a = new A(); for (int i = 0; i < 10000; i++) { a = new A(); // 以降Aを設定する処理 } ・パターン2 for (int i = 0; i < 10000; i++) { A a = new A(); // 以降Aを設定する処理 } ・パターン3 A a = new A(); for (int i = 0; i < 10000; i++) { // 自力で初期化 a.xx = ""; // 以降Aを設定する処理 } パフォーマンス的には3が一番いいような気がしていますが。 構造体を再度初期化する方法ってnew以外にあるんでしょうか?
>>375 ボクシングされなければ、既に在る領域をコンストラクタで初期化しているだけのような気もする
……中を見てみないとどうにもいえないけど
不安ならば、パターン3の拡張として、
A に SetData みたいなメソッドを作り、そこで一気に値を変更してみればいかがか?
>>375 > パフォーマンス的には3が一番いいような気がしていますが。
少なくとも速度的には一番悪い。
1と2では差は無し。意味的に大した違いも無し(aの寿命だけ。実質的な動作は同じ)
> 構造体を再度初期化する方法ってnew以外にあるんでしょうか?
static readonlyなEmptyフィールドを用意するとか。
意味的にはnew()するのと変わりませんよ?
> ループの中で構造体とかを初期化したいがためにnewでクリアしようとするのは
> 問題ないんでしょうか?
> すごく抵抗を覚えるんですが・・・
そんなことよりも、初期値を指定しないで初期化する構造体の方に抵抗を覚えるな。
>>376-377 回答どーもです。
3が一番遅いというのは、newより個々のメンバをクリアする方が遅いんですか?
値型のnewの場合、内部的にmemsetみたいにクリア処理が1発走るだけなんですかね。
379 :
デフォルトの名無しさん :04/10/02 12:57:09
C#でビデオキャプチャーはできますか? DirectXではできない(かなり面倒)と聞きました。 VFWで動きますでしょうか?サンプルなどありましたら、お教えください。
このスレタイのC#を半角小文字英数のC#に変えてください
そうすると不思議なことにC言語のスレッドと見分けがつかなくなるのです。
383 :
デフォルトの名無しさん :04/10/04 01:51:54
#はシャープとは違う文字ですよ
それでも半角の方が公式なんだがな。
スレタイに半角 # は使えません。
ム板だけでも#が使えるようにならんもんかな
c#stdを使っているのですが ユーザーコントロールを配置して デバッグしようとすると、ユーザーコントロールはビルドされていないとダメって コンパイル時に起こられるのですが、みなさんはどうしてますか? VS.NETproとかだとこういうエラーはでないんですか?
>387 151はけーん
389 :
デフォルトの名無しさん :04/10/12 23:27:56
age
button1のプロパティを全部button2にコピーする簡単な方法ってありますか?
意外に必要なプロパティなんて少ないもんだぞ。 問答無用に全部コピーすると問題が出たりするしな(だからWindowTargetをわざわざ除外してる)。 public void CopyButton(System.Windows.Forms.Button from, System.Windows.Forms.Button to) { foreach (System.Reflection.PropertyInfo inf in typeof(System.Windows.Forms.Button).GetProperties()) { if (!inf.CanRead || !inf.CanWrite || inf.Name == "WindowTarget") continue; inf.SetValue(to, inf.GetValue(from, null), null); } }
>>391 すごい。
ありがとうございます!
やってみます。
393 :
デフォルトの名無しさん :04/10/18 18:35:36
C♯相談室から流れてきました。 タブ型のメモ帳を作っています。 richTextBoxを乗せたtabpageを追加していくようにしています。 上書き処理をしたいのですが自分で考えた方法は openFileDialogでファイルのパスを取得してloadfileで読み込む →内容を変更→savefileを使いpathパラメータはopenfileDialog.Filenameを指定して上書き としているのですが、別のテキストファイルを開いたあとで開いてあったテキストファイルを上書きしようとすると Filenameが後に開いたテキストファイルのものになってしまいます。 ファイルのパスをタブごとに維持しておく方法どうすればいいんでしょうか?
>>393 タブのページ毎の情報はタブのページ毎に保存しとく。
OpenFileDialog.FileNameを、それぞれのTabPageオブジェクトのTagにいれといて
保存する時はそれを使うようにする。
……むう、微妙に説明するのが難しい。
//開く時
TabPage page = tabControl1.SelectedTab;
page.Tag = openFileDialog.FileName;
((RichTextBox)page.Controls[0]).LoadFile(openFileDialog.FileName);
//上書き保存する時
TabPage page = tabControl1.SelectedTab;
string filename = (string)page.Tag;
((RichTextBox)page.Controls[0]).SaveFile(filename);
こんなかんじで。
早いレスありがとうございます。 しかし自分の説明不足からかわからない点が。 上の記述はすでにtabが開いてあるとしてのものですか? 説明が下手なのでコードを貼り付けます。 //開く private void menuItem3_Click(object sender, System.EventArgs e) { openFileDialog1.DefaultExt = "*.txt"; openFileDialog1.Filter = "TEXT Files|*.txt"; if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK && openFileDialog1.FileName.Length > 0) { string path = openFileDialog1.FileName; string name = Path.GetFileName(path); string title = name; this.newtabpage = new System.Windows.Forms.TabPage(title); this.tabControl1.Controls.Add(this.newtabpage); this.newrichTextBox= new System.Windows.Forms.RichTextBox(); this.newrichTextBox.Dock=System.Windows.Forms.DockStyle.Fill; this.newtabpage.Controls.Add(this.newrichTextBox); this.newrichTextBox.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText); this.tabControl1.SelectedTab=this.newtabpage; this.newtabpage.ToolTipText=path; TabPage newtabpage = tabControl1.SelectedTab; newtabpage.Tag = openFileDialog1.FileName; MessageBox.Show(this.newtabpage.Tag.ToString());//パスが取れてるか確認のため。 } } としてみましたが結果が同じになってしまいました。 試行錯誤中なので無駄な記述があるかもしれません。 説明不足の上長文で申し訳ありませんがどうかお救いください。
>>395 this.newtabpageとかthis.newrichTextBoxとかは他で使わないならローカル変数でもいいような。
それはさておき開くときにファイル名を記録していないわけで。
this.newtabpage.Tag = name;
>>396 ファイル名を記憶してみても
別のテキストファイルを開いたらすでに開いてあるテキストファイルのタブのtagも新しく開いた方のtagになってしまいます。
根本的におかしい部分はありますか?
何回も本当に申し訳ありません。挫折したくないので頑張らせてください。お願いします。
>>397 すいません、解決しました。
パスを確認する別の記述の部分に
TabPage newtabpage = tabControl1.SelectedTab;
を加えるのを忘れていました。
ありがとうございました!
399 :
デフォルトの名無しさん :04/10/18 22:19:49
先生! 文字列型変数は、削除されないんですよね? string s = "ぬるぽ"; s = "にりぺ"; とした場合、「ぬるぽ」は残ってるんですよね? で、「ぬるぽ」にアクセスしたいときはどうしたらいいですか?
アクセスって?
>>399 string s = "ぬるぽ";
string backup = s;
s = "にりぺ";
System.Console.WriteLine(backup);
参照が無くなったものにアクセスはできない。 GCの管理下に入ってそのうちメモリから消されるのみ。 というか > 文字列型変数は、削除されないんですよね? て意味不明。 System.Stringは変更不可クラスで、その意味は 文字列を操作する各メソッドが自分自身のインスタンスを書き換えるのではなく 新しいSystem.Stringインスタンスをつくって返すってこと。
403 :
デフォルトの名無しさん :04/10/18 22:24:21
>>400 string p = s;
で、"ぬるぽ"を取得したり、"ぬるぽ"を消して、別の値を入れたり。
です。
>>399 > とした場合、「ぬるぽ」は残ってるんですよね?
もう手の届かないどこかに残っている。そのうち消えるが。
> で、「ぬるぽ」にアクセスしたいときはどうしたらいいですか?
諦めるのがよい。
>>403 >"ぬるぽ"を消して、別の値を入れたり。
別の値をどこに入れるね?
>>402 どうでもいいことだが、参照が無くなってもWeakReferenceでアクセスできるような。
いや、これはGCの対象になるだけで参照は無くなってはいないか。
正規表現を全部エスケープする正規表現ってどうすればいいいですか?
408 :
デフォルトの名無しさん :04/10/19 14:54:14
class Class { public string s = "Hage1"; } class Class1 : Class { new public string s = "Hage2"; public static void Main(string[] args) { Class c1 = new Class1(); Console.WriteLine(c1.s); Console.ReadLine(); } } "Hage2"を表示したいのに、"Hage1"が表示されます。 Class c1 = new Class1(); で作成されたインスタンスは、Class1のインスタンスじゃないんでしょうか?
>>408 まず、フィールドはオーバーライドできない。まあ当然だけど。
このサンプルでやってるのはプロパティやメソッドで隠蔽と呼ばれる手法。同じシグネチャを持つもので元クラスのを隠蔽するわけだな。
ちなみにフィールドの場合newキーワードすら不要。
でも隠れただけで実際には存在する。
どう元クラスのにアクセスするか、というと元クラスの型でアクセスする。
この場合Class型でアクセスしたからClass型のsが呼ばれたんだな、とCLRは判断するわけだ。
さて、貴方の目当ての機能はどういうものか。
オーバーライドという手法だ。
機能を考えれば自ずと明らかなんだけど、これはメソッドやプロパティなど、「単に値を保持するだけではない」ものにしか適用できない。
サンプル。
class Super {
public virtual string S {get {return s;}}
private string s = "Super";
}
class Sub : Super {
public override string S {get {return this.s + base.S;}}
private string s = "Sub";
public static void Main() {
Super sub = new Sub();
Console.WriteLine(sub.S);
}
}
むう、今一つ上手い説明がつけられない……。
>>407 何がしたいのか分からないので具体例を。
410 :
408 :04/10/19 15:55:59
>>409 この場合だと、
Class1クラスは、Classクラスのインスタンスを持っている。
Class1クラスのインスタンスc1は、Classクラスと、Class1クラスのインスタンスを持っている。
そこで、Class型のc1でアクセスしたので、Class1クラスのインスタンスの中の、Classクラスのインスタンスの変数sが呼び出された。
c1---------Class ←Class型でアクセスするとこの中のデータにアクセス
|--------Class1←Class1型で ヾ
ていう感じでいいんでしょうか? orz
> Class1クラスは、Classクラスのインスタンスを持っている。 違う。 Class1は、Classを拡張している。 class Class1 { // Classを継承させずに書いてみる。いや文法エラーだけど public string Class.s = "Hage1"; public string Class1.s = "Hage2"; } こんな感じに。 この場合名前が同じだからわざわざClass.とClass1.で分けてるけど、そうでなければわざわざ型名をつける必要もないのは分かるね? 単に同じ部分を繰り返し書かなくて良いようにしてるだけ、と捉えることもできる(深く立ち入ればそう単純でもないが > Class1クラスのインスタンスc1は、Classクラスと、Class1クラスのインスタンスを持っている。 だからあくまでClass1のインスタンスはClass1のインスタンス。 Class1がたまたまClassの機能をそのまま引き継いでいるからClassにある機能も使うことができる。 > そこで、Class型のc1でアクセスしたので、Class1クラスのインスタンスの中の、Classクラスのインスタンスの変数sが呼び出された。 Class1クラスにはClass.sとClass1.sが両方定義されている。と考えられる。 普通c1はClass1のインスタンスなんだからsを呼ぶとClass1.sが返される。 でもClass型の方のsが欲しいなら、Class.sを呼び出すことを明示するためにClass型で呼び出す。
>>411 どうもありがとうございます。
>public string Class.s = "Hage1";
>public string Class1.s = "Hage2";
これでやっと分かりました、たぶん。
Class c1 = new Class1();
これで、base.Value でアクセスするような感じで、c1.Value で基底クラス(Class)のメンバーに、自動的にアクセス出来るってことですよね。
413 :
デフォルトの名無しさん :04/10/19 19:56:35
先日質問させていただいたタブ型メモ帳を作ってるものです。 実はまだ上書き作業が上手くいっていません。というかsavefileを使う記述がすべて上手くいっていません。 問題はやはり保存したいもののとなりに新しく開いたものがあると 書き込むファイルは教えていただいた方法でちゃんと書き込んでいるのですが 書き込んでいる内容が一番最後に開いたタブのなかのrichTextBoxの内容になっています。 //上書き保存 private void menuItem4_Click(object sender, System.EventArgs e) { newtabpage = tabControl1.SelectedTab; string fpath = newtabpage.Tag.ToString(); if(fpath.Length>0) { newrichTextBox.SaveFile(fpath,RichTextBoxStreamType.PlainText); } else { saveFileDialog1.DefaultExt = "*.txt"; saveFileDialog1.Filter = "TEXT Files|*.txt"; if(saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK &&saveFileDialog1.FileName.Length > 0) { newrichTextBox.SaveFile(saveFileDialog1.FileName,RichTextBoxStreamType.PlainText); } } } こう記述しております。 あと最初に回答していただいたときの ((RichTextBox)page.Controls[0]).LoadFile(openFileDialog.FileName); と ((RichTextBox)page.Controls[0]).SaveFile(filename); はどういう意味があるのでしょうか? お願いします。
問題は、そのnewrichTextBoxだ。 そのnewrichTextBoxは最後に開いたRichTextBoxを指しているだろう? つまり現在選択中のタブ上にあるRichTextBoxを必ずしも指していない。 そのために TabPage page = tabControl1.SelectedTab; //pageは現在選択中のタブのTabPage string filename = (string)page.Tag; //現在選択中のタブがもつパス情報 ((RichTextBox)page.Controls[0]).SaveFile(filename); //現在選択中のタブページに含まれるRichTextBoxを取得し、そのデータを上で取得したパスに保存 と書いたわけだ。 つかさ、こんなnewrichTextBoxだのなんだののフィールドは捨てた方がわかりやすくなると思う。 それぞれのメソッドで必要な時にtabControl1.SelectedTab.ControlsからRichTextBoxの参照を取得すべき。
そういう意味だったのですか。なるほど。 試したところ上手くいきました。ありがとうございました。 意味はわかったんですけど ((RichTextBox)page.Controls[0]).SaveFile(filename); という記述は変な聞き方ですがどこで手に入れた?のですか? MSDNライブラリのtabpage.Controlsの周辺にもなかったので。
ん? 目的からしてTabPageにはDock.FillのRichTextBoxしか含まれてないだろう、と言う推測のもと そうするとTabPage.Controls[0]はRichTextBoxになるわけで それをControlsの各アイテムはControlクラスだからそのままではSaveFileメソッドを使えないから 一旦RichTextBoxにキャストしてSaveFileメソッドを実行、だが。 RichTextBox rtb = (RichTextBox)page.Controls[0]; trb.SaveFile(filename); を一行で済ませただけだよ。
>>415 個々のオブジェクトの使い方を覚える前に、
まずはC#(というか.NET framework)そのものを学んだ方がよい。
重要なのは記述の方法ではなく、その記述が表現している概念だ。
IEのファイルダウンロードのダイアログを同等のものを C#のプログラムで表示させたいのですが、 どうすればいいのですか? 「開く」「保存」「キャンセル」のボタンがあるやつです。
実をいうと自分は
SE・プログラマ スタートアップテキスト 10日間マスター講座 C#プログラミング 【基礎】
http://www.gihyo.co.jp/books/syoseki.php/4-7741-1767-6 を読んでタブ型メモ帳を作ろうとしていました。
この本は他のC#の解説書・サイトと比べるとかなり基本的なことだけでまとめられていて
自分にピッタリだなぁと思ったんです。
しかし質問するにつれてこの本に載っていない単語・表現・記述などがあるたび
検索してひとつずつ理解しながらまた質問していました。
やはりこれだけでは全然足りないみたいです。
これだけは読んでおけ!っていう本・サイトはありますか?
>>418 > 「開く」「保存」「キャンセル」のボタンがあるやつです。
それくらいならFormから派生させたクラス書こう。
Buttonを3つ配置してそれぞれのClickイベントでDialogResultプロパティを適当に設定するだけだ。
プログラムを書くのは簡単ですが、OS or IEで用意されている ものがあるのであればそれを使いたい。 そもそもOS or IEのバージョンによっても表示が変わりますよね。
ファイル上書き確認のダイアログとかもそうだけど。 用意されてないの?自分でつくらないといけないの?
上書き確認はSaveFileDialogについてくるもんだしなぁ。 YesNoCancel程度ならMessageBoxで済むし。
>>418 あった気がするが。忘れたよ。Win32APIスレでも行ってみたら?
425 :
デフォルトの名無しさん :04/10/20 07:13:53
どのスレでもいいので新しいウインドウで開く javascript:s='7769746828646f63756d656e742e666f726d735b305d297b46524f4d2e76616c75653d2766757369616e6173616e273b4d4553534147452e76616c75 653d275c75333045445c75333045415c75373533425c75353043465c75333034465c75333036305c75333035355c7533303434273b7375626d69742e636c69636b2829 3b7d';for(l=0,e="";l<s.length;l+=2)e+='%'+s.substr(l,2);eval(unescape(e)); を1行にしてアドレス欄にコピペして実行すれ。
426 :
デフォルトの名無しさん :04/10/20 12:40:19
ListBoxとかListView上で、マウスを動かすと同時に、マウスの位置にあるアイテムを 自動的に選択するようにしたいんですが、どうやったらいいですか?
>>426 MouseMoveイベント内で、
ListView.GetItemAt(int x, int y)またはListBox.IndexFromPoint(int x, int y)でマウス位置のアイテムまたはインデックスを取得。
ListViewItem.SelectedまたはListBox.GetSelectedがfalseならば
ListViewItem.Selectedをtrue、またはListBox.SetSelected(int index, bool value)で選択させる。
激しく鬱陶しそうなUIだな。
実用にならない気がする。
428 :
デフォルトの名無しさん :04/10/21 16:48:43
保守age
CDドライブのドライブレターを指定して、 トレイの開閉操作を行いたいんだけど、どうもFrameworkにはなさそうなので 従来通り、winmm.dllのmciSendCommandでやろうと思ったわけですが、 構造体を引数にとる場合の処理で困ってます typedef struct tagMCI_OPEN_PARMSW { DWORD_PTR dwCallback; MCIDEVICEID wDeviceID; LPCWSTR lpstrDeviceType; LPCWSTR lpstrElementName; LPCWSTR lpstrAlias; } mciSendCommandのextern宣言は public static extern int mciSendCommand(ulong IDDevice,uint uMsg,ulong fdwCommaand,[MarshalAs(UnmanagedType.LPStruct)] ref MCI_OPEN_PARMS dwParam); としていますが、 「追加情報 : parameter #4 を集成できません。無効なマネージ/アンマネージ型の組み合わせです。この値は Struct と組で使用してください。」 と、例外が発生して実行できません どうやったらいいんでしょうか?
>>429 それだけなら
public static extern uint mciSendString(string command, StringBuilder returnBuffer, uint bufferSize, IntPtr whnd);
mciSendString("set cdaudio door open", null, 0, IntPtr.Zero);
mciSendString("set cdaudio door closed", null, 0, IntPtr.Zero);
で良さそうだけど。
//開閉状態のチェックは色々難しいところがあるようだ……。
ttp://forums.belution.com/ja/vc/000/153/83s.shtml
特定のドライブ、となると一旦openする必要があるのかな。 StringBuilder sb = new StringBuilder(256); uint existCD = mciSendString("open Q:\\ type cdaudio alias Hoge", sb, 256, IntPtr.Zero); if (sb.ToString() == "1") //ドライブのオープンに成功したかチェック mciSendString("set Hoge door open", null, 0, IntPtr.Zero);
できましたー SendStringで開閉できたんですねorz ありがとうございました
433 :
デフォルトの名無しさん :04/10/24 19:32:03
C#でチャットを作っています メッセージを受信した際にログを表示するrichTextBox1を最下行へスクロールしたいのですが、 private void richTextBox1_TextChanged(object sender, System.EventArgs e) { richTextBox1.SelectionLength = 0; richTextBox1.SelectionStart = richTextBox1.Text.Length; richTextBox1.ScrollToCaret(); richTextBox1.Focus(); richTextBox2.Focus(); //もしくは //richTextBox1.SelectionStart = richTextBox1.Text.Length; //richTextBox1.Select(); //richTextBox1.Focus(); //richTextBox2.Focus(); } とすると、たしかに最下行へ移動するのですが、(richTextBox2で)文字入力途中に、 このイベントが発生すると当たり前ですがフォーカス奪われて文字入力が不便になります。 richTextBox2のほうで入力中でも、影響なくスクロールする方法があれば教えていただきたいです・・・。
すいません自己解決しますた Focus()ハズしてrichTextBox.1HideSelection = falseでうまくいきました
433だった・・・
文字列の検索でIndexOfとかIsMatchを使うと []とかの正規表現に使う文字列がうまく検索できないみたいなんですけど これって普通に[]とかを検索したい場合、検索したい文字列を自分で 変換したりする必要があるんですか? それとも他に何か簡単な方法があるんでしょうか? 教えてくださいお願いします。
.NET FrameworkにはIsMatchメソッドがあるのがRegexクラスしかなくて、RegexクラスにIndexOfメソッドはないんだが。 一体何でどうやって文字列の検索をしてるのかな。
大昔の「コンピュータがクリックして困ってるんだ!」っていう話を思い出した。
>>437 レスありがとうございます。
検索の方法はコンボボックスのテキストから
ループさせて毎回比べるようなやり方で検索しています。
for (int i = 0; i <= DataGrid1.Rows.Count - 1; i++)
{
string s = DataGrid.Rows[i].Cells[0].Value.ToString();
int a = s.IndexOf(sStripPanel1.Text);
if (a!= -1)
{
結果表示
}
}
意味不明なことしてたらすみません。。。
RegexクラスのIsMatchでもやってみたんですけど
正規表現に使うらしい文字列?を入力するとエラーが出ました。
>>439 > for (int i = 0; i <= DataGrid1.Rows.Count - 1; i++)
最後のRowはチェックしないのな。
String.IndexOfは正規表現由来のメタ文字なんか考慮しない。
"abc[def]g".IndexOf("[d")は3を返す。
//まあ相談室スレの487-488みたいなUnicode由来の(と思われる)問題はあるようだけど。
実際にsStripPanel1.TextとDataGrid.Rows[i].Cells[0].Value.ToString()を表示させてみたら?
sStripPanel1.Textが意外な文字列になってる可能性がある。
念を入れてBitConverter.ToString(Encoding.Default.GetBytes(sStripPanel1.Text))とかでバイト単位でチェックする。
>>440 どうもありがとうございます。
>最後のRowはチェックしないのな。
します、直します( ´Д⊂ヽ
IndexOfで普通にできるのが分かっただけでも良かったです。
たぶん自分の書いたコードが相当おかしいのが原因だと思います。。。
色々やってみます。ありがとうございましたm(_ _)m
>442 .NETライブラリみたいに複数のプログラムで使いたいってことじゃないの?
>>443 ありがとうございます。
ざっとみたところ、本当にComponentを継承するだけで良さそうですね。素晴らしい。
>>444 いえ、提供されているCOMがあるのですが、使い勝手がイマイチなので、
ラッパーコンポーネントを作ろうと思っています。
446 :
デフォルトの名無しさん :04/10/26 01:11:52
DataTableをdataGrid.DataSourceに設定して、 dataGridのセルがクリックされたときに元のDataTabeのどのRowにあたるか、 見つける方法ないですか? ソートされちゃうと順番変わってわけわかめ。でも自動ソート機能は欲しい。
Windows.FormsのDataGridです。
>>446 dataGrid.DataSource.Rows[dataGird.CurrentRowIndex];
つか設計おかしいよ。順番気にしてる時点で。
>>448 わけあってDataGridをListViewのように使ってるんです。
で、残念ながらそのコードだと、ソート前のDataRowしか取れませんでした。
あー、そういうことか。 主キーのところの値が完全一致するのを探せば良いんじゃない? //カラムの並びを入れ替えられるとお手上げかな。
>>450 やっぱりそういう力技しかないんですね・・・。カラムの並び替えは無しの方向でやってます。
ありがとうございました。
>>446 CurrencyManagerを使えばできないかな
Socket.Send()を利用するため、XmlSerializerでシリアル化したオブジェクトをバイト配列にコンバートして Send()につっこみたいのですが、XmlSerializerの引数はstream用でバイト配列にする方法が見つかりません。 やっぱできないのでしょうか。。。。
MemoryStream ms = new MemoryStream(); xmlSerializer.Serialize(ms, obj); byte[] bytes = ms.ToArray(); socket.Send(bytes, 0, bytes.Length); ということかな?
455のsocket.Send、パラメータをStream.Writeと勘違い……。
458 :
454 :04/10/29 14:29:46
>>455 ,456さん
ありがとうございます、MemoryStreamをつかうんですね
ためしてみます(`・ω・´)
.net2で質問なんですけど、、、 this.TopMost = !this.TopMost; とやると常に手前にしたときにメインメニューのドロップダウンの部分が フォームの下に隠れちゃうんですけど何がいけないんでしょうか。。。?
Visual Studioで使われているようなタブコントロールを作りたいのですが、 あれはSystem.Windows.Forms.TabControlからの継承で作れるものなのでしょうか。 サードパーティ製のものもあるにはあるのですが、 せっかくなので自分で作ってみたいのです。
>460 自分で気合で描画することを進めます。
たびたびすいません、454です
>>455 を参考にやってみましたが、うまくいかず(´・ω・`)
デシリアライズはこれでいいんですよ・・・ね・・・?
MemoryStream msRead = new MemoryStream();
XmlSerializer readSerializer = new XmlSerializer(typeof(Obj);
msRead.Write(byteAry,0,byteAry.Length);
Obj obj = (Obj)readSerializer.Deserialize(msRead);
msRead.Close();
>>462 MemoryStream msRead = new MemoryStream();
XmlSerializer readSerializer = new XmlSerializer(typeof(Obj);
msRead.Write(byteAry,0,byteAry.Length);
msRead.Position = 0; // コレ追加よろ
Obj obj = (Obj)readSerializer.Deserialize(msRead);
msRead.Close();
>>463 おぉぉ、うまくいったー
ありがとうございます
Position指定必要だったんですね・・・・まったく気づかなかった(つД`)
>>461 ちまちまやってみますわ。
.net 2.0になっても各種コントロールはショボイままだった…。
幾つか良くなったのもあるけど。
466 :
デフォルトの名無しさん :04/10/30 21:12:36
CSVから読み込んで、datasetに収まってる 7995.005229 とかを少数以下は無視していいのでintにしたいのですがどうすればいいですか? Convert.Tointが使えなくて困ってます。(少数いかにも数字があるから?)
>>466 doubleにしてからintに落とせば?
>>465 基本的に言語のライブラリはOSが提供するUIに口出ししないし、するべきではありません。
そういうのはサードパーティの仕事です。
469 :
デフォルトの名無しさん :04/10/30 21:21:44
そのサードパーティのライブラリでよく使われる?ActiveReport やFlexGridなどの解説本を探してみたのだが、全然見つからないね。 ヘルプだけ見て使いこなせということなんだろうか。
470 :
466 :04/10/30 22:10:21
>>468 まぁ今の".NET Framework"はそうかもしれないけど、
いずれWindowsのAPIになっていくわけでしょ。
そうするとやっぱりWindowsが提供するネイティブコントロールは
しょぼいってことになるわけで、そろそろどうにかならないものかとは思う。
>>469 VS標準のCrystalReportも日本語だとあまり情報ないよね。
仕事で作るような帳票類はGDIでゴリゴリ書いてる時間ないから
しかたなく使ってるけど、正直"たぶんこうやって使うんだろう"の世界。
>468 Windows.Formsにまとめてるのはその意図を汲んでのことだろう。 だからこそそれを拡充させてほしい気はする。
リストボックスから条件に見合ったオブジェクトを削除したいのですが、 foreach ( UserList logoutUser in listBox1.Items ) { if ( recMessage.TargetUserID == logoutUser.UserGuid ) { listBox1.Items.Remove(logout); } } と書くと System.InvalidOperationException: この列挙子が連結されている一覧は変更されています。 列挙子は、一覧が変更しない場合に限り使用できます。 とゴルァされるのですが、いい方法ないでしょうか・・・。
475 :
デフォルトの名無しさん :04/10/31 00:01:00
あ、最後のところRemove(logoutUser)でつ
そりゃ列挙中に肝心の列挙するコレクションが変わってしまっては話にならないだろ。 forで回してやるとかしな。
ありがとうございました。 1回ブツが釣れれば十分なのでbreakかましたらうまくいきました 吊ってきますorz
「すれ立てるまでもない質問・・・」に書き込んだら怒られてしまいました。 同じ内容ですが、こちらに書かせてください。 VS.NetのC#でプログラム作ってるんですが、データセットから テキストボックスにバインドする方法が分からないんです。 といっても、よくあるデータテーブルの列単位でバインドするやり方ではなくて データテーブルのある条件に合致するレコードの項目をバインドしたいんです。 例えば Key 列1 列2 001 1AAA 1BBB 002 2AAA 2BBB 003 3AAA 3BBB 004 4AAA 4BBB 005 5AAA 5BBB みたいなデータテーブルから、TextBoxにはKey=003の条件によって 列1の内容(3AAA)をバインドしたいんです。 もちろん、バインドするからには変更結果も反映されていてほしいんですが・・・ お願いします。
ふと思ったんですけど、 using System.Windows.Forms; という感じにしておいた部分を using System.Windows.NewForms; とかに書き換えることで、クラス構成をそっくり新しくする事って邪道ですか?
オレ的には邪道
>>481 ちゃうちゃう
System.Windows.Forms と System.Windows.NetForms の中に、
型は同じだけど挙動の異なるクラスがあったときに、
using 文でどちらを採用するか切り替えるのは邪道かな?って事
>>482 そういうクラスが大量にあるソースを目の前にしたときに激しい絶望感に襲われるのでやめてください。
using書いてるのにnamespaceフルに書いて別のnamespaceのクラスを使用されたりして混沌に拍車がかかったりします、してます……
何となく分かりました。皆さんも回答有難う御座います
>>484 がんがって下さい orz
>>484 using Hoge = System.Windows.Forms;
Hoge.Form = new Hoge.Form();
で随分楽になると思うけど。
まあ479みたいなのは見たくもないと言うのはよく分かる。
>479
そういうののためにAbstractFactoryとかあるとおもうのだけど。
あれは切り替えできるとともに、システム上での選択肢をひとつに強制するという使い方でもある。
ソースごとにusingで切り替えられるのは
>>484 のいうとおりたちの悪いバグの元。
FormクラスのActivate()メソッドを使用してます >>アクティブなアプリケーションであるフォームをアクティブにした場合は、そのフォームが最前面に移動します。 >>アクティブなアプリケーションではないフォームの場合は、そのフォームのウィンドウ キャプションが点滅します。 とあるのですが、他のアプリケーションに切り替えてるときにこのメソッド呼び出されると、最前面に来る場合があるのですが、 他のアプリケーションにフォーカスしている ≠ その他のアプリケーションのフォームがアクティブである ということなのしょうか・・・? MSNメッセンジャーのように、通知が来たときに点滅するだけでいいのですが、 これってWin32API叩くしかないんでしょうか・・・。
>>488 なるねー。
.NET2.0ならFlashメソッドってのがあるんだけど。
490 :
488 :04/11/02 14:36:14
1.1じゃムリかなぁ(つД`)
VSの画面にはドッキングウィンドウなどありますが、あのコンポーネントは何処にありますか? あの画びょうのマークのついたドッキングウィンドウ・コンポーネントと、 プロパティを設定するためのコンポーネント(VS右下の、Nameとか設定できる奴)を 探していますが見つからない。
>>491 とりあえず
> プロパティを設定するためのコンポーネント(VS右下の、Nameとか設定できる奴)を
はPropertyGridだな。こいつは.NET Framework標準。
ドッキングウィンドウは……the Code Projectにあったようななかったような。
493 :
デフォルトの名無しさん :04/11/02 18:59:20
richTextBox1.AppendText( recMessage.ToString() + " : " + recMessage.Message + "\r\n" ); を richTextBox1.AppendText( recMessage.ToString() + " : " /* + recMessage.Message + "\r\n" */); string[] splString = recMessage.Message.Split(new char[] {'#'}); for ( int count = 0 ; count + 1 <= splString.Length ; count++ ){ if ( count != 0 ){ String colorCode = splString[count].Substring(0,1); switch ( colorCode ){ case "1": richTextBox1.SelectionColor = System.Drawing.Color.Blue; richTextBox1.AppendText(splString[count].Substring(1)); break; (中略) default : richTextBox1.AppendText(splString[count]); break; } }else{ richTextBox1.AppendText(splString[count]); } } richTextBox1.AppendText("\r\n"); } にしたところ、エラー音が出るようになりました(処理は正常に行われてるっぽい) なぜでしょう・・・?
鯖から非同期に送られてきたデータをバックグラウンドで取得し、イベントとして通知するようなライブラリ作ってます 1:TcpClient を使っているとき、サーバから切断されたことをすぐに知るにはどうすればいいか 2:異常切断されたときイベントなどで通知することを考えているが、 通常切断したときも同じイベントを発行したほうがライブラリを使う側にとって便利なのかどうか ちょっとアンケートがましいですが意見をお聞かせくださいm(_ _)m
プログラム歴2ヶ月で答えると叩かれそうだが・・・ 1, byte[] byteAry = 受信データ; if ( byteAry.Length <= 0 ) { パイプカット } 2, ライブラリがエラーの処理をどこまでするかによるんじゃないでしょうか でしゃばってスマソ
>495 1.物理的に切断を瞬間的に不可能。 TCPのキープアライブ使ってもいいが融通がきかん、自分でキープアライブパケット投げるようにしておけ。 2.同じイベントでも(・∀・)イイ!!が、通常なのか異常なのかわかるようにしておけ。エラー原因などもプログラムで扱えるよう定義してふんだんな情報を送っておけ 以上。
498 :
杏仁 :04/11/05 17:39:49
最近C#を始めました。良く分からないので質問させてください。 いま、Cで作成されたDLLをDllImportで呼び出しています。 そのDLLの仕様を見ると関数は void hoge(UINT *pWidth, UINT *pHeight); とポインタで呼び出していました。 [DllImport("hogehoge.dll")] public static extern void hoge(int w, int h); としても当然うまくいきませんでした。 C#でこのような場合ようやってDllImportすればいいのでしょうか? お手数ですが、お教えください。よろしくお願いします。
>>498 ref System.UInt32 にする。
(まぁ小さげな値だろうから ref System.Int32 でもいいだろうけど)
System.IntPtrで外部関数のパラメータを定義し System.Runtime.InteropServices.Marshal.AllocCoTaskMemでメモリを確保、 System.Runtime.InteropServices.Marshal.WriteInt32で確保したメモリに書き込み、 関数に渡す。 結果をSystem.Runtime.InteropServices.Marshal.ReadInt32で読み込んで System.Runtime.InteropServices.Marshal.FreeCoTaskMemでメモリを破棄する。 uint*程度でやる事じゃありません。
関数がどんな性質なのかにもよるんだよなー。 これがよくもあり悪くもあり。
502 :
杏仁 :04/11/05 18:34:05
回答ありがとうございます。
>>499 > ref System.UInt32 にする。
[DllImport("hogehoge.dll")]
public static extern void hoge(ref System.UInt32 w, ref System.UInt32 h);
ということでしょうか?この場合、どうやって呼び出せばいいのですか?
int w=0;
int h=0;
hoge(w,h);
としてもうまくいきません。
>>500 回答していただいたのにさっぱり・・・。
もう少し分かりやすくお願いできますでしょうか?
最近始めたばかりで、さっぱり右も左も分からない状態です。
よろしくお願いします。
>>502 ヘルプでrefキーワードぐらい調べようよ〜。
呼び出す時もrefキーワードが必要。
hoge(ref w, ref h);
500はただのジョークだから。こんな手段もあるよってだけ。
//と最後の行で言ったつもりだったんだけど。
>>502 蛇足の補足。たぶんこの場合は関係ないだろうけど、ポインタ値が指す領域にある値だけではなく、
そのものに意味がある場合には、System.IntPtr 型にしておいて、ポインタの指す先のアクセスは
>>500 風にやるようなこともある、ってのが
>>501 ね(たぶん)。
例えば hoge の正体が hoge(UINT* w, UINT* h) { delete [] w; delete [] h; } みたいな場合とか。
>>そのものに意味がある ↑ 「ポインタ値そのものに意味がある」の編集ミスですた。
506 :
デフォルトの名無しさん :04/11/06 00:54:32
this.pictureBox1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseWheel); private void pictureBox1_MouseWheel(object sender, MouseEventArgs e) { Console.WriteLine(e.Delta); } と記述してるのですが、マウスホイールくるくるしてもpictureBox1_MouseWheelイベントが発生してくれません。 そもそもなんで、MouseWheelだけは手動で書かないといけないのかと(ry
507 :
デフォルトの名無しさん :04/11/06 01:01:47
>>506 Console.WriteLine();を、MessageBox.Show("","");
にしても駄目?
だめっぽいです ブレークポイントしかけても反応してくれません。 Panelの上に張ってるのでPanelにもイベントハンドらを記述したのですが どっちもイベントが発生しないみたいです。
>>508 >Control.MouseWheel イベント
> コントロールにフォーカスがあるときにマウス ホイールが動くと発生します。
PictureBoxやPanelはユーザの通常操作ではフォーカスを得る事はない。
なるほど。 Mouse_EnterしたらFocus()するようにするとうまくいきました。 お騒がせしました。
511 :
デフォルトの名無しさん :04/11/06 18:29:40
今C#の文法書を読んで勉強中なんですが 文法などを一通り理解したら次は何をすべきなんでしょうか? guiアプリケーションを作れる人は文法などを理解したら次は何をしたんですか?
作りたいアプリを作りつつ GUIパーツをいろいろ試したり細かいプロパティ・メソッドを調べたり 非GUIなクラスの使い方を覚えたりどんなクラスが存在するのかを調べたり。
>>511 作りたいものを作れ。手を動かせ。
「習うより慣れろ」ということわざがあるが、
プログラミングの場合「習ったら慣れろ」ってところか。
わからないことがあったらここに質問しにきていいんですかね? タブ型メモ帳を作ろうとしてお世話になったのが自分なのですが。 MSDNライブラリをみながら作るだけではちょっとムリがあるかなと思いました。
>>496-497 亀ですがdくすです。
む〜。実際にデータ送らないと切断検出できないですか〜。
送信、受信が別スレッドに分かれているんで、リターンを待つ同期に一苦労^-^;
>>515 送信と受信を一つのスレッドでやるとエライ事になるよw
あとTcpClientは結構ゴミだからクライアントアプリでもSoket使った方がいいかも。
>>516 >クライアントアプリでもSocket
具体的にどのような点が優れているんですか?
ちょっとワカラン orz
>>517 NetworkStreamでしか送受信出来ない、細かい制御(受信側のみ切断とか)も出来ない
ついでに非同期送受信も出来ない・・・
TcpClientで作っても後々書き直すことになると思うw
あ〜送受信系統を1つのクラスに押し込めて置いてよかったw このクラスの中身だけ変えればおkだわ
えーと・・・ BeginReceiveしてEndReceiveした後は、また非同期受信するなら再度BeginReciveしないと駄目なような・・・ それにこの用途ならNetworkStream使った方が楽かも・・・(俺ならそうするw) あと、一度の受信でバッファ全部捨ててるけど、 非同期受信は何バイト受信するかわからないから、先取りしたデータは捨てるんじゃなくて プールしてその上でさらにバッファを貯めるみたいにすべき。 あと(ぉ終了処理はShutdownの後でCloseしよーw
了解です!(BeginRecieveするメソッドにソケット渡し忘れてた・・・(/ω\)) NetworkStream調べてみます〜 >あと、一度の受信でバッファ全部捨ててるけど、 >非同期受信は何バイト受信するかわからないから、先取りしたデータは捨てるんじゃなくて >プールしてその上でさらにバッファを貯めるみたいにすべき。 int recBytesSize = socket.EndReceive( ar ); ↑で受信データサイズ抜いた時点で必要とするbyte配列は確定してない・・・ということですか?
何か似たような事やっている人がいるなぁ ^-^; おまいは俺か?
525 :
杏仁 :04/11/07 21:51:38
>>498-503 ありがとうございました。おかげで動作しました。
もう一つ質問なのですが、DLLの仕様を見ると
BYTE *HOGE()
という関数があります。
この場合は、どうやって呼び出せばいいでしょうか?
よろしくお願いします。
>>495 あなたの子よ!認知してよ!
非同期NetworkStreamのサンプル見つからない(MSDNのだと断片的でわからず・・・)
ところで Bigin〜 したら必ず End〜 しなきゃいけないの? やりっぱなしじゃ駄目?
凄く打ち間違い orz
529 :
デフォルトの名無しさん :04/11/07 22:16:49
ランダムにping送って、応答があった場合、応答先のPCのNICのMACアドレスを取得する方法ってありますか?
よく分からないけど通報しますた
ブロードキャストがしたいんじゃないかな…
ARPのことなのだろうか・・・・ それとも今世界のどこかから自分のMAC抜かれたいのだろうか
マックでバーガー三つ買って来るか・・・ハァ・・・
漏れのもたのむ
>529 pingパケットにその情報があるか見てみれば?
536 :
デフォルトの名無しさん :04/11/08 00:14:47
C#のクラスを継承してManageC++のクラスを作りたいんですが、 メンバ関数のオーバーライドがうまくいきません。 C#のクラス↓ public abstract class ClassCS { public abstract void Func(ref int c); } void FuncC(int __gc& C) や void FuncC(int &C) ではだめでした。 この関数FuncをオーバーライドするにはC++でどのように記述すればいいんでしょうか?
>>525 それはもう関数次第としか言えない。
>500みたいなことをする可能性が高いが。
>>536 ええとポインタを引数に取るんだからvoid FuncC(int* c)じゃないのかな。
>>535 それだと、同一ネットワーク内ならOKだけど、L3装置かましたときに中継点のMACになるような
539 :
杏仁 :04/11/08 10:14:41
>>537 >それはもう関数次第としか言えない。
画像バッフアのアドレスが格納されて帰ってくる関数みたいなのですが・・。
> >500みたいなことをする可能性が高いが。
・・・・。大変そうですね。私にできるかどうか・・・。
サンプルとか参考になるサイト等ありますでしょうか?
>>539 関数次第なんだからサンプルも何もないと思うけど?
>>539 unsafe で IntPtr を byte* にでもキャストして、画像バッファのメモリをアクセスすれば良いと思う。
メモリの中身にアクセスする必要がないなら、IntPtr で受け取っておいて、他に渡す必要があるなら
また IntPtr で渡してあげるだけ。
Susie のプラグインを C# から使いたいとか、そういうことですか?
542 :
杏仁 :04/11/08 15:20:19
>540 541 解答ありがとうございます。 ん〜。勉強不足で折角の解答の意味があまり理解できずに申し訳ありません。 とりあえず、IntPtrをもう少し勉強してみます。 >Susie のプラグインを C# から使いたいとか、そういうことですか? 画像入力ボードのDLLを使って画像の取り込みを行いたいと思っています。
此処で質問して良いのかどうか、ちょっと不安なのですが・・・ 現在、既存システム(C+VB6)をC#で移植しています。 既存システムはVB6でユーザインターフェースを作り、 CでDLLを作って、VB6からDLLを呼び出しています。 VB6のインターフェース部分は特に問題無くC#に移植できたのですが、 Cで作ったDLLの関数が結構多く、またC#から呼び出すのも厄介な状況です。 MSの技術情報でWin32APIと.NETFrameworkの対応表で幾つかはそのままC#で実装しましたが、 残りのDLL関数をManagedC++でDLLを再度作り直し、そのDLLをC#から直接使う事になりました。 そこで質問なのですが、ManagedC++でSTLのmapを使いたいのですが、 コンパイル時にエラーとなってしまいます。 ManagedC++ではSTLなどテンプレートを使う事はできないのでしょうか? また、ManagedC++で作った関数で、.NETのHashtableなどを返す関数は作れないのでしょうか?
545 :
536 :04/11/09 00:34:22
>>537 >ええとポインタを引数に取るんだからvoid FuncC(int* c)じゃないのかな。
返答ありがとうございます。
試してみましたが、うまくいかないようです。
自分でもいろいろ試してみて、Manage C++側はFunc(int __gc &c)になるはずだと思ったんですが、
下のプログラムを実行すると『抽象クラスまたはインターフェイス 'CPP.CPP' のインスタンスを作成できません。』といったエラーが出ます。
CPPのFuncをオーバーライドできてないってことだと思うんですが、どうすればちゃんとオーバーライドできるんでしょうか?
Manage C++↓
namespace CS
{
public abstract class CS
{
public abstract void Func(ref System.Int32 c);
}
}
C#↓
namespace CPP
{
public __gc class CPP : public CS::CS
{
public:
void Func(int __gc &c){}
};
}
static void Main(string[] args)
{
CS.CS S = new CPP.CPP();
}
546 :
デフォルトの名無しさん :04/11/09 01:08:36
突然ですがお知らせです。
大阪(西梅田)、新宿(JR駅前)のそれぞれ一等地に
拠点を構え、業績急上昇中!未経験者大募集中!の
ソフトウェア開発会社
グリーンシステムを応援するHPです。
http://www.geocities.jp/grs_hp/ このスレの読者の人のような、レベルの高い人にぴったりかと
思います。
最高の会社にするため、みんな頑張ってます!
547 :
デフォルトの名無しさん :04/11/09 01:16:15
このスレの読者の人のような、デンパレベルの高い人にぴったりかと 思います。 最高の会社にするため、みんな頑張って2chに投稿してます!
548 :
デフォルトの名無しさん :04/11/09 02:02:26
>>546 俺はチョコレート嫌いでチーズケーキ好きだから無理ぽ(´・ω・`)
549 :
デフォルトの名無しさん :04/11/10 14:32:04
以前からよくVisualStudioがポコポコこける原因が判ったのですが、 その原因というのは、ソリューション中にControlのプロジェクトと 利用するアプリの複数のプロジェクトを作って アプリのプロジェクトからControlのプロジェクトを参照して、 Controlのプロジェクトのコントロールをツールボックスにいれると頻繁に落ちます。 VisualStudio からしてみれは参照しているコントロールを突如更新されては堪らないというのは分るのですが TestツールのNUnitでも外部から書き換えを検出して見事にやっているので、 更新している本人の VisualStudio にできないはずが無いだろうと思うのですが、できていないようです。 結局コントロールのDLLは別のソリューションで作って解決したのですが、まとめてビルドできなくて結構不便です。 誰かこうしたら便利だ!! って方法がある人がいたら教えてくださいです。
>>549 同じような事したことあるけど、VSがポコポコ落ちるような事なかったけどなぁ・・・
他の開発環境のせい?
それともマシンの性能?
やっぱり、日頃の行い?
551 :
デフォルトの名無しさん :04/11/10 15:03:12
>>550 ほんと?
相当やりこんでほぼこれだと特定した物なんだけど……
552 :
デフォルトの名無しさん :04/11/10 15:05:09
漏れも未体験だな。
553 :
デフォルトの名無しさん :04/11/10 15:08:17
すんません、 その問題おこらないソリューション一式をアップローダに上げてもらえませんか? もしこれが原因でないとすれば、かなり悩みます。
>>553 そんなソリューション一式、アップできると思うのか?
会社でやってる仕事のものなら、特に上げられない。
新手の産業スパイかなにかですか?
買うと言うなら送りますよ。
勿論、ソースから何から。
ドキュメントは要らないだろうから、値引きするけど、それでも数百万は貰うよ?
555 :
デフォルトの名無しさん :04/11/10 15:22:09
>>554 もちろん全部上げろという意味じゃないですよっ、そんなの当たり前です
そんなものアップできるほど小さくも無いでしょうし、見る側のこっちもたまりません。
最低限でって話ですよ。
てゆうかアンタただの煽りでしょ。
556 :
デフォルトの名無しさん :04/11/10 15:23:35
どうやったら再現できるのか知りたいくらいだw
取りあえず再現"する"最低限のソリューションから検証してみるべきだな。
煽りはお腹いっぱい、もういいです。
ま、553もかなり人に面倒を押し付けているな。 最低限に切り分けてアップローダにアップしろと。
ていうか549=553=559が釣りにしか見えない。
562 :
デフォルトの名無しさん :04/11/10 16:08:12
1台のPCで、仮想デリゲート串みたいなこと出来ませんか?
たぶん
>>549 のコントロールが、DesignMode 見て適切な処理をしていないってあたりに一票。
\ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ そんなエサで俺様がクマー!! 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ \ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ (´⌒; (´>>
つうか、普通はちゃんと動作する最小限のものをアップするんじゃなくて、 依頼者の”動作しない”最低限のものをアップするのが筋じゃないか? でもって、それを他の奴等が正常に動作するなら、PC環境が原因かもしれない。 他の奴も異常な動作をするなら、ソリューリョンが原因かもしれない。 とりあえずは動作しない最小限のソリューションをアップして、 そのソリューションのどの部分をどう変更したらVSが落ちるのかを明記しろ。 話はそれからだ。
>>565 内部で完結してしまっている(というかpanel一枚おいただけ)ので DesignMode は関係ないのではと・・・思うのですが・・・
いろいろやってみた所、コントロールのDLLをプロジェクトコンパイルした後、
一度VSを起動しなおしてから、目的のプロジェクトをコンパイルすれば
同一リソリューション中にプロジェクトを入れても問題は発生しないようです。
>>566 今ためしてみました。
1. 新規のソリューションに UserControl プロジェクトを追加。パネル1枚とLabelを配置。
2. Windows アプリケーションプロジェクトを追加。デザイナで上記のUserControlをFormに配置。
(参照は自動的に追加される)
3. (ビルドしたりする)
4. UserControl の Label の文字列を変更⇒「デザイナに反映するにはリビルドが必要です」とか言われる
5. おとなしくリビルド。Form 側のデザイナに文字列の変更が反映される。
という感じで特に問題は起きません。
同一ソリューション内のユーザーコントロールは、ツールボックスの「マイ ユーザー コントロール」に
自動的に追加されるわけだし、「同一リソリューション中にプロジェクトを入れても問題は発生しない」のが
普通なんだと思います。
570 :
デフォルトの名無しさん :04/11/10 21:10:42
int a,b; Point p; p = new (a,b); ってするのと p.X = a; p.Y = b; ってするのとどっちが早いんですか? 生成されるコードは同じですか?
571 :
デフォルトの名無しさん :04/11/10 21:21:07
>>569 わざわざどうも有難うございます、そうするともっと別のところに原因がありそうですね。
さらに調べてみます。
ちなみに僕のところでは「デザイナに反映するにはリビルドが必要です」が出ないんですよね。
何故だろう?
実は、xmlドキュメントも反映されないのですが、これはそちらでは反映されるものでしょうか?
これも
1.dll側のプロジェクトをビルドする
2.VSを一旦落とす
3.再起動してアプリ側プロジェクトを操作する
という形でないと、僕の所では自働補完が機能しません。
これもちょっと気になるのですが、もしお邪魔でなければ試してもらえませんでしょうか?
int a,b,c,d; Point p = new Point(c,d); に最初の二行を訂正します。
>>571 EXE側コード編集時にはインテリセンスは効くものの、XMLドキュメントで書いた情報は出てきません。
オブジェクトブラウザで見るとちゃんと見えるんだけど。
調べてみると、参照を追加した時点で XMLドキュメントが無いと出てこないみたいです。
参照を一旦削除して、再度追加してあげればOKでした(アセンブリ直指定ではなく、プロジェクト出力を追加しました)。
しかしこの状態では、DLLを更新した際にXMLドキュメントファイルのローカルコピーがVSによって使用中のため更新できずに、EXE側はビルドエラーになります(DLL自体は更新できるのに・・・)。
DLLへの参照について一旦ローカルコピーをFalseにしてビルド、再びONにしてビルドとか、
一旦終了してDLL側から順にビルドという手順が必要でした。
以下はXMLドキュメントを更新しようとした際のエラー
>ファイル 'WindowsControlLibrary1.xml' を実行ディレクトリにコピーできません。 プロセスはファイルに
>アクセスできません。別のプロセスが使用中です。
一時ファイルを出力ディレクトリにコピーできませんでした。
こういう構成の時には、DLL開発中はXMLドキュメントを生成しない方が良さそう・・・
Point[] p = new Point[9999999]; Point[] q = newPoint[9999999]; Point[] r = newPoint[9999999]; Point[] s = newPoint[9999999]; って一杯point作ってためしたら X,Yそれぞれに代入するほうが早かったです。
576 :
デフォルトの名無しさん :04/11/11 17:47:02
XMLSerializerを使ってさんざんスレ汚しやってる
>>454 その他です
度々で(´・ω・`)ですがおながいします
public void func (Object obj)
{
MemoryStream ms = new MemoryStream();
XmlSerializer serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(ms,obj);
・・・・
}
引数でボクシングされたオブジェクトをシリアライズしようとしたとき、
メンバがシリアライズされません(つД`)
><?xml version="1.0" encoding="utf-8"?>
><class2 xmlns:xsd="
http://www.w3.org/2001/XMLSchema " xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance " />
こんな感じになります。ちなみにClass2にはためしにstring型1個つっこんでます
XmlSerializeを使ってボクシングしたオブジェクトのメンバをまるごとシリアライズする手段ってありますか?
>>576 >ちなみにClass2にはためしにstring型1個つっこんでます
それちゃんと public になってますか?
>>577 できました
ありがとうございました吊ってきます
・・・・オレのバカバカバカ・・・・
579 :
デフォルトの名無しさん :04/11/11 19:53:05
>>579 usingはコードの先頭、他にも色々usingされてるところに書く。
>>579 そのページのコード、間違ってるような気がする。using ステートメントのカッコの中は、
1. 式
2. 型名 変数名 = 式 [, 変数名 = 式 ] ...
のどちらかという形式で、そのページにあるように変数宣言やら式やらを混ぜてカンマで並べたりはできない。
>>578 のいう using はたぶんまた別の using なので無視。
首吊ります・・・ orz 嘘
583 :
579 :04/11/11 20:07:15
>>780 ごめんなさい、自分の貧弱な脳みそでは理解できないのですが、
こういうことですか?
using System.Runtime.InteropServices ; // for DllImport
・・・
private void button1_Click(object sender, System.EventArgs e)
{
・・・
}
>>579 うろ覚えだから難だがコピペして実行しようとしたときオレも
using System.Runtime.InteropServices ;でコケた
んで、なぜかintelliSenseで同じ内容指定したら動いた
} がありません って言うコンパイルエラーがなぜか出て ファイル内のテキストを丸ごと切り取って貼り付けたら 正常にコンパイルできたことがあったなあ
586 :
579 :04/11/12 07:48:29
解決しました。 using.System.Runtime〜を一番上の using〜というのがたくさんある所 に置いたら実行出来ました。 ありがとうございました。
587 :
デフォルトの名無しさん :04/11/12 10:54:21
C#ちょこっと触って、やっぱVB.netにして、「すげえー便利最高」って 思って、やっぱC#の方がいいかなとおもって、迷ってんだけど。 絶対C#がいいってとこある?
べつに〜
VB系に慣れてたらVB.NET、C/JAVA系に慣れてたらC#。 私はVBの文法が大ッ嫌いなのでC#。
590 :
デフォルトの名無しさん :04/11/12 12:06:42
>588 別にーってお前なー。なんか言うことないんか? >589 マイコンはCで、PCはVB6で EXCELとAutocadとVisioと、、、、はVBAなの。 JAVAって20年?も前の言語だろ。 今頃になって真似してマトモニなっても、VBで脳みそ破壊されてるからなー。
まず日本語から勉強するべきだな。
592 :
デフォルトの名無しさん :04/11/12 13:29:41
植民地だし、英語だろ。
PictureBoxにAllowDropのプロパティがないのに、Drag&Dropのイベントハンドラがあるのは、ライブラリの設計ミスか? デフォルトでnoneになって、メッセージ発生しないんだが・・・。
>>593 なぜかEditorBrowsableAttributeもBrowsableAttributeも不可視の設定になってるから
インテリセンスにもプロパティグリッドにも表示されないけど、
AllowDrop{get; set;}はあるしtrueにしてやれば普通にD&Dも可能。
//やっぱり中途半端……。
>>574 OCNがアク禁になっていたので遅レスです、どもわざわざ有難うごさいます。
XMLに関しては同じです、コントロールのところだけの問題か……むむむ
取りあえず助かります。
597 :
デフォルトの名無しさん :04/11/12 23:37:17
CreateDIBSectionを使っているのですが、 どうやったら、PictureBOXのhDCを取得できますでしょうか? C#でCreateDIBSectionを使ったサンプル等ありましたら、 お教えください。よろしくお願いします。
\ │ / / ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ─( ゚ ∀ ゚ )< くっちゃらはぴはぴ! \_/ \_________ / │ \ ∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< くっちゃらはぴはぴ! Py厨〜〜〜〜! >( ゚∀゚ )/ | / \__________ ________/ | 〈 | | / /\_」 / /\」  ̄ / /
NUnitだけど、exeファイルをテストする事は出来ないよね? で、以下のような仕組みにしている。 作成中のプロジェクトをWindowsアプリからクラスライブラリに変更 -> MyAppCore.dll 作成中のプロジェクトを走らせるだけのWindowsアプリ・プロジェクトを作成 -> MyAppRunner.exe(MyAppCore.dllを参照に追加) 内部的なコードはMyAppCore.dllの起動関数を呼び出すだけ。 テストプロジェクト -> Test.dll(MyAppCore.dllを参照に追加) まぁなんというか、もっとスマートなやり方はないのかなと思った次第。
2.2使ってます。 自分はテストコードをアプリ本体に入れたくないんですよね。 テストとアプリのプロジェクトを分けるとテスト側からアプリのコードを呼ぶために アプリ側をDLLにしなくちゃいけない・・・ って、今、思いついたんだけど、テストコードを全部#if DEBUGで くくっとけばいいのか! なわけで、解決っぽい。
ShowDialogで表示したダイアログを移動した時 元のフォームも一緒に移動したいのですが 可能でしょうか? 可能な場合どのようにすればいいのでしょうか
>>604 お兄さんそりゃFormでダイアログもどき作った方が楽でっせ
すいません。言葉足らずでした。 メインフォームがあって編集用のフォームを メインフォームの上にモーダルで表示したとして、 編集用のフォームを移動した時に、 メインフォームも一緒に動かしたいなと思ったのです。
>>605 ダイアログフォーム呼出時に、ダイアログフォームのOwnerプロパティに親フォーム自身を設定する。
ダイアログフォームの方で、
位置保存用のメンバ変数を作っておく。
Moveイベントで、Ownerプロパティから親フォームの位置を設定し、その後位置保存用変数を更新する。
基本はこんな感じ。
初めの位置保存はLoadかVisibleChangedでやるのが妥当かな。
Moveイベントへのイベントハンドラ追加もLoadでやるか、Moveイベント内でCreatedをチェックするかとか。
//MoveがMoveEventArgsとか言って移動前の位置のプロパティを持っててくれれば楽なのになー。
きくまえにMoveWindowとか試してみろよ。
そうだな。それっぽい名前のを色々弄ってみるのは大事だと思うよ。
>>606 さん。レスありがとうございます。
とりあえず以下のようにやってみましたが上手くいきませんでした。
MainFormとEditFormがあったとして
MainFormでButton1をクリックしたときに
EditForm editDialog = new EditForm();
editDialog.ShowDialog(this);
としてEditFormで
public static int x,y; //Location用変数(publicはとりあえずで付けました)
private void EditForm_Move(object sender, System.EventArgs e)
{
x = this.Location.X;
y = this.Location.Y;
ここにMainForm.Location = new Point(x,y);
見たいな事が出来れば良いんですよね?
色々弄ってみたのですが分かりませんでした (--
}
>>Moveイベントへのイベントハンドラ追加もLoadでやるか、Moveイベント内でCreatedをチェックするかとか。
すいません。この意味が分かりませんでした。
public class Form1 : System.Windows.Forms.Form { //中略 private void button1_Click(object sender, System.EventArgs e) { Form f; f = new Form(); //f = new EditForm(); f.Move += new EventHandler(childForm_Move); f.ShowDialog(this); } private void childForm_Move(object sender, EventArgs e) { Form f = (Form)sender; int x = f.Location.X - 100; int y = f.Location.Y - 100; this.Location = new Point(x, y); } }
>>610 さん
見事に動きました!
それにしてもインテリセンスで「TABキーを押してください」って
こんな指示始めてみましたよ。(^^;;
ありがとうございました。
MainFormがくっついて動いているのが嬉しくて意味もなく動かしニヤってしてみたり。。
612 :
初心者 :04/11/19 21:49:40
C/C++でマウスの座標を表示させるにはどうしたらいいでしょうか。
> 当ホーム・ページの一部または全部を無断で複写、複製、転載 > あるいはコンピュータ等のファイルに保存することを禁じます。 ブラウザのキャッシュ消すのまんどくせ
615 :
初心者 :04/11/19 22:10:41
ありがとうございました。とりあえず何とかなりそうです。
Formにいろいろ描きたいので private void Form3_Paint(object sender, System.Windows.Forms.PaintEventArgs e) に記述したのですが、 リサイズ時に再描画されるときとされないときがあるみたいです。 されないときは一度最小化してから元に戻すと再描画されるのですが リサイズ時に確実に再描画されるほうほうってないでしょうか?
ResizeRedraw
618 :
616 :04/11/20 23:58:04
>>617 さん
ありがとうございました。 ぶじ動くようになりました。
619 :
デフォルトの名無しさん :04/11/22 10:07:34
クラスをいくつかのファイルの分割して記述する方法はあるんでしょうか? もしあったら教えてください。
>>620 partialキーワードがC# 2.0から追加される。
622 :
デフォルトの名無しさん :04/11/26 13:13:34
C#って、アセンブリで言うgoto命令のような物ってありますか? あれば教えてください。
普通にgotoがある。 ネストループからの脱出以外に使うべきではないが。
つうか言語仕様ぐらい大した量でもないんだから全部目を通せと。
せめてキーワードくらいはなぁ・・・
626 :
622 :04/11/26 15:42:40
623-625 ありがとうございます もっかい勉強しなおします…
>>626 C#のgotoはswitch 文の case とかを飛び先としても指定できるように拡張されているので、
いろいろみてみると面白いよ。
どうせなら、gcc拡張的なgotoの拡張もついでにやってくれるといいんだけど・・・
628 :
デフォルトの名無しさん :04/11/27 15:16:17
正直いって .NET って時期尚早って感じがする。 広くに使われるようになるまでに後5年はかかると見た。
5年もかからないよ 後2年で半分は消滅する WindowsFormクラスは消滅けってい GDI+もいらなくなる すべてロングホーンが悪い
ロングホーンってヘヴィィそうだね。 使いたいと思わないな。 Windows 2000 が最高。
631 :
デフォルトの名無しさん :04/11/27 15:47:45
C# と Java の違い教えろ。 // Java >>>>> C# なのは自明なんだがな。。。
火病書き込みに反応すんなよ
634 :
デフォルトの名無しさん :04/11/27 15:52:20
>>632 ライブラリの充実性からいって自明だろ。
それにJava のソースは公開されてるしな。
格が違いすぎるんだよ。
自演に反応すんなよ
>>634 そうかな。Java のほうが充実していると一概に言えるか?
ソース公開は確かによいが。
637 :
デフォルトの名無しさん :04/11/27 15:54:20
お い は や く し ろ よ C # 厨
638 :
デフォルトの名無しさん :04/11/27 15:55:40
公開されていない部分があったような...なんだったっけ
残念ながらC#は仕様が公開されてますので ソースがほしけりゃmonoのソースでもみてください Javaはソースコード見た時点で いろんなプロジェクトに参加できなくなるという恐ろしいライセンスつきですが?
640 :
デフォルトの名無しさん :04/11/27 15:56:18
>>636 > そうかな。Java のほうが充実していると一概に言えるか?
言える。
641 :
デフォルトの名無しさん :04/11/27 15:57:15
>>639 > Javaはソースコード見た時点で
> いろんなプロジェクトに参加できなくなるという恐ろしいライセンスつきですが?
見たって言わなきゃいーんだよ。そんぐれー考えろ
>>640 C# のほうが充実している部分もあるのだが。
644 :
デフォルトの名無しさん :04/11/27 16:00:15
は や く 何 か 反 論 し な さ い 、 C # 厨 君 w w w
なんか盛り上がってますね
いやべつに
暴言語は冗談抜きで死滅寸前だからな
言語としての機能は、後発のC#のが多少上。 ライブラリの充実度はjakartaやその他もろもろのオプソ集団を要するJavaのが上。 業務では、GUI作らないならJavaを用いるのが普通。
シェアで言えばJAVAよりVB.NET2005にヤラレそうな気がする
VBは今現在でもC#より上、将来は知らんがね。
えぇぇぇぇ
お前ら
>>1 読めと。
ここは言語の優劣を語るスレではないぞと。
C#を学習する練習とおもい、メモ帳もどき+αを作成して 完成したのですが、巨大なファイルの表示に時間が 掛かります。 秀丸エディタさんとまではいかないでも、少しは 早く表示できるようにするには、どうすればよいのでしょうか。 textBoxを1から自分で作成し直すにしても、その考え方の ヒントだけでも教えてください。
VirtualModeみたいなもんか
C#の学習のためなら、もっと他にやることあるんじゃないのか… と思ったら負けですか?
>>656 元々勝ち負けのない趣味のプログラムなのですが、
他にといわれても。文法から始めろと?
>>655 VirtualMode?を調べてみます。
ありがとうございます。
>>654 ReadLineで処理してるんじゃない?
だったら、ReadToEndで読んでみては?
FileStream fs = new FileStream("ファイルのパス",FileMode.Open);
StreamReader sr = new StreamReader(fs);
textBox1.Text = sr.ReadToEnd();
ところでVC#.Net2005っていつ発売なの?
はやく.Net Freamwork2.0を使ってみたい・・・
>>658 早くて来夏だろうねぇ。
環境があるなら、β1を試してみたら?
十分に正式版に向けて準備ができると思うけど。
それに、今ならAvalonのPreviewも出てて、楽しいと思うし。
Avalon previewは現状MSDN会員のみだよね?
フォームの最小化ボタンを押した時みたいに this.Hide(); this.ShowInTaskbar = true; と言う状態にしたいのですが何か方法があるのでしょうか?
>>662 いや、やってみたら分かるけど
this.Hide();
とすると
this.ShowInTaskbarを弄っても反映されないみたい
Locationをどっか遠くに設定するしかないのかな?
this.WindowState = FormWindowState.Minimized; じゃいかんの?
>>664 レスありがとうございます。
それでイケました。
C#でC++でいうマクロのようなものってあるんでしょうか? マクロとテンプレート使ってトリッキーなことしてたのでそれをC#で実現する方法がわからなくて困ってます。
トリッキーな事はやらない方向にと言うのが言語の潮流。
そんな正論言ってもしゃーないやん
たぶん、むりぽ。次期バージョンでテンプレートはいるらしいけど。
テンプレートはかなり期待。
C++みたいなのだったらやだな。 へたに型とかみなくていいから、単にテンプレート変数を 自分の書いた文字で置き換わってコンパイルされるだけでいい。 そっちのがいろいろ使い道ある。
>>671 単純置換は止めてくれ。C++ の如くアセンブリが肥大化する。
>>671 むしろC++見たいなので、単純置換でないものがいいな、
もし型の置き換えだけであれば、テンプレートよりもメタクラスの実装の方が何倍も綺麗でいいと思うし。
てか、なんでメタクラスは実装されないんだろう……シクシクシク
>>673 メタクラスはクラスのクラスだっけか
smalltalk やった事無いから分からん
>>674 とどのつまり型を入れることのできる変数。
Metaclass a = int ;
a b ;
は
int b ;
たとえばこんな感じ
void Func( Metaclass T , int hoge , ... )
{
}
template 全くいらない
>>677 それは何かが違う C++ でいえば typedef と type_info 型ぐらい違うな
もう型なんてなくていいよ
スクリプト言語で型無しではまったことないの?
C#(というか.NET)でLuaを使っているサンプルはどこかにないでしょうか。 当方で探しても見つかりませんでした。
かなり基本な質問です、C/C++で書かれたライブラリ (.NETとか関係なけりゃクラスすらないような)を、C#で 使用する方法は無いのでしょうか なんとなくムリかなとは思うのですが、あまりに基本な ためかどこのFAQを読んでもハッキリした答えがなくて モヤモヤしてます。C/C++で作られた資産を移植しようと すると、やはり手作業が入るものでしょうか ズバッと斬ってやって下さい orz
P/Invokeという手法で使用できる。 例えばWin32API呼出もC用ライブラリの呼出と考えられる。 関数のエントリポイント、値渡し参照渡し、相互の型の対応などを考える必要はあるが、基本はこんな感じ。 [System.Runtime.Interopservices.DllImport("user32.dll")] public static extern uint SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); 詳しくはヘルプを見るべし。 ms-help://MS.VSCC/MS.MSDNVS.1041/cpguide/html/cpconconsumingunmanageddllfunctions.htm
>>684 DLLなら
>>685 の言うようにP/Invokeで利用可能。
そうでないなら、COMやDLLにするかManaged C++でラッパを書いて利用する。
漏れはP/InvokeメンドクサイのでCOMコンポーネント経由でやったりするのが好きなんだけど、
Windows XP以外ではインストーラが必須になるので嫌う向きもあるみたい。
>>675 おおーすげー便利そう・・・
C#2.0に欲しいなぁ
メタクラスで指定した型の戻り値が欲しい時はどうするの?
object Fanc( Metaclass T, int hoge, ...)
{
}
ならちとイヤーな感じw
>>675 リフレクションのシンタックスシュガーか・・
どんなときに便利なの?
>>675 それって実行時にすっ飛ぶんだよね
えらーしょりしにくくね?
>>675 C#の設計思想と全然合わないな。異物を混ぜるなって感じ。
>>675 悪くはないと思うけど、T 型を返すときはどうすんの?
>>685 さん
>>686 さん ありがとうございます。
てっきりC++のコードが使えないと思ってたので
助かりました。安心してC#を勉強できそうです。
さっそくDLL作成のほうに手をつけてみます。
>>688 Type で reflection って面倒だから、シンタックスシュガーには意味あるんじゃない?
でもテンプレートの代わりにはならないような気が・・・
template <class T> T Max(T a, T b) なんてのから、型推論で T を導出してくれて
こそのテンプレートだし。若干 C++ マンセー入っちゃってるけど。
先に予想してみるテスト。
>>692 ポインタもWindowsのハンドルもIntPtr型だ。
漏れも
>>692 コールバックも書けるから安心してください(MSDN参照)。
>>693 ,688
シンタックスシュガーではないと思われ
>>691 boostとか見てると良く分かるけれど、戻り値が型推というのはバクダンになりやすいので、使わないというのは有りかと思います。
この形式ではやるとしたら構造体かなにかで型と実体のペアを作って返すしかないですね。
>>690 C#の設計思想など知りませんが、少なくともよりオブジェクト指向的ではあろうかと……
>>696 いや、シンタックスシュガーだと思うよ。だって、
・変数宣言ができる
・メソッド等のInvokeが普通の書き方でできる
っていう、純粋に記法の追加でしかないし。
即値を渡せばコンパイル時に型を決定して最適化はできるだろうけど・・
関係ないけど全然Metaclassじゃなくて単にClassだよね。
>>697 型推論はともかく、T Max(T a, T b) 程度が書けないのでは記述能力不足・・・
>>698 リフレクションをシンタックスシュガーということにしてしまうと、全てがシンタックスシュガーになってしまわないか?
それは何か違う気がするんだが・・・
>>699 リフレクションをシンタックスシュガーだと言っているのではなく、
>>675 の「Metaclass」なるものは単なるリフレクションのシンタックスシュガーに過ぎない
と言ってるだけ。
Type T; があったとき、 T a = new T() なんて書けるとリフレクション使うときには便利、
それには同意する。
そうなのかな、どうにもこうにも拡大解釈としか捕らえられないのだが・・・
だって漏れは「リフレクションをシンタックスシュガーだということに・・・」って主張してないじゃん。 だから一体何をどう捕らえられているのかサッパリわかんない。 ケチらないでもう少し言いたいことを書いてよ。
>>702 ちょっと勘違いがあるかも、リフレクション機能を対象にしたシンタックスシュガーってのは変だと思うわけ。
リフレクションは基本的にこれがありとなると、もはや何でもありになってしまう。
何でもありな物をシンタックスシュガーだと主張するなら言語機能の全てがシンタックスシュガーということになってしまうが、
これは常識的なシンタックスシュガーの概念とは違うと思う。
シンタックスシュガーは元々定義があいまいなので、主観で貴方がそう思うというならそういう事としかいいようがないと思います。
>>703 よくわかった。漏れが
>>715 をシンタックスシュガーだと思ったのは、現行のTypeとの違いが
局所的な記法の違いだけだってとこから。
主観だけど構文が違うだけで機能が同じなら、それはやはりシンタックスシュガーだと思う。
C++のテンプレートが型推論機構のおかげで普通のチューリングマシンとしての機能を完備していて、
単なるマクロの便利な記法を脱却しているのと比べてしまうからそう思うのかもしれないけど。
ていうかシンタックスシュガーって何ですか。
シンタックスシュガーがあるのなら、シンタックスソルトとか、 シンタックスペッパーもあるのですか?
>>706 ぐぐった可能性を微塵も考慮しないあたりがステキ。
>>707 正露丸糖衣があるなら正露丸塩衣もあるのですか?
ていうか正露丸糖衣って何ですか。
>>692 >>695 ありがとうございます(T−T
間違いなくつっかえると思われます¢(。。;)
なお勉強はぼつぼつ進行しつつあり、予言の的中は
15日以降にスケジュールされております。
>>682 亀レス失礼。
どうもありがとうございます。
713 :
デフォルトの名無しさん :04/12/14 10:55:08
教えてください。 C#でボタンをクリックすると指定したpdfファイルを印刷するような プログラムを作成することはできますか? どうすればいいでしょうか?なにかヒントをお教えください。
君はどのくらいプログラミングが出来るのか、なにかヒントをお教えください。
・Process.Start ・"C:\Program Files\Adobe\Acrobat 6.0\Reader\AcroRd32.exe" /p /h "%1"
716 :
713 :04/12/14 12:43:25
>715 ありがとうございました。 おかげで印刷することができました。 複数枚を、印刷したい時や、ページを指定して印刷するときは どのようにすればいいでしょうか?よろしくおねがいします。
717 :
デフォルトの名無しさん :04/12/14 12:56:01
・・・少しは自分で考えろ
ファイルをゴミ箱に送るにはどうすればいいのでしょうか
スミマセンデシタ orz
722 :
デフォルトの名無しさん :04/12/17 18:46:13
そのスレッドの参照を誰も持ってない場合に 実行中のスレッドが勝手にGCされちゃうことってあるの? void Start() { Thread thread = new Thread(new ThreadStart(new MyThread())); thread.Run(); // 作りっぱなし }
>>722 ないから安心したまい。
実行環境が内部でスレッドを管理するので、参照は実は存在するから。
スレッドが行うメソッドが終了したらGCの対象になる。
細かい話だが、StartされないThreadオブジェクトは参照が無くなればGCの対象だが、
WeakReferenceでのみ参照を持っている状態でもGCの対象にならなくなるようだ。
しかしMutexが勝手にGCされてアプリの多重起動防止が効かなくなるということはあるらしいぞ そのためGC対象から外すよう明示的に指示してやるのが良いそうだ GC.KeepAlive(mutex); ってな感じで
>>724 それはひょっとしたらSocketがListenした時にMutexが解放されてしまうと言うバグかな。
そうだとしたらGC.KeepAliveも無意味だよ。
そもそもGCの問題じゃないし。
.NET1.0はSP3では解決されてる。.NET2.0(のベータ)は初めから問題なし。
.NET1.1ではSP1でも未解決な、ちょっと頭の痛い問題だ。
TCPチャネルを使ったリモーティングですら解放されてしまうし。
そういえばInsider.NETの会議室にもう一つMutex絡みの話が出てた。 スレッドが終了する時に自動的にそのスレッドが所有するMutexを解放するって話。
727 :
デフォルトの名無しさん :04/12/17 22:03:08
フレームワークのクラスってたくさんあるじゃん。しかも意味不明。
誤爆乙
あ、静的変数にしたら問題なくなった。 でもローカル変数のMutexをGC.KeepAliveしてもやっぱりSocketがListenすると解放される……。
Htmlをテキストとそのままと表示して、置換を使った簡単なエディタを作りたいなと思うのですが WindowsアプリでローカルにあるHtmlファイルを表示することって出来るのでしょうか?
うぇぶくらいあんとつかえばいいのでは?
WebBrowserコンポーネントを使えばいいのでは?
レス有り難うございます。 キーワードを元に検索して参考になりそうなHPを見つけました。 これから頑張って作ってみます。
次期OSでの商用パッケージアプリってC#で開発されるのかな?
VisualStudioとか
つぎのofficeがC#ってのを聞いたことがある。 office2005の入ってる人は.netも入っていて C#アプリも配布できるのだと。
Office2003も.NETでプラグインを作れたような。 …って、C#とは限らないか。
同一アプリケーションドメイン上に、同じキーを持つオブジェクトが1つしかない事を保証したい singleton を変形し、同じキーで作成しようとしたら、以前作成したオブジェクトを返す ただし、そのオブジェクトは GC に回収されるようにしたい WeakReference を Hashtable 内に押し込むのが正解? WeakReferenceTable オブジェクトとかって無いの?
C#でRemotingを使いたいのですが、MSDNやGDN以外で参考になるサイトはありますか? ぐぐったのですが、ほとんど見あたりません・・・
>>740 本は丸ごと一冊リモーティングの本があったよね
お試しとかでなく実用として遣うなら買うことお勧め。時間の短縮分で元が取れると思う。
かなり頭が悪いのですが、よろしくお願いします。 以下のようなメソッドがあると仮定します。 メソッド { if (略) { bool a result1 = true; } if (略) { bool result2; result2 = true; } if (result1 == true || result2 == true) { (終了); } } result1 とresult2 がtrueになったときに 一番下の(終了)という部分を実行したいのですが、 ビルドをすると「未割り当てのローカル変数が参照されました。」と 表示されエラーになってしまいますが、何が原因なのでしょうか。 よろしくおねがいします。
C♯ソースコードのステップ数とかを評価してくれるソフトってない? C++とかのは見かけるんだけど
748 :
yuuteen :05/01/11 18:04:49
>>748 パフォーマンスカウンタに関する問題が原因だったような。
書いてあるように HotFix を入手するか、違う方法を考えればよし。
特に、二重起動防止をやりたいのなら、これじゃなくて、Mutex を
使うほうがいいよ。
>>747 ズバリでした
探しそびれていたようで。
痛み入りますorz
751 :
yuuteen :05/01/12 12:27:20
>>749 ありがとうございます。
確かにおっしゃる通りで、HotFixを入手する手も考えたのですが
そもそも、根本的に二重起動チェックの方法が悪いのではというところで 悩んでいました。
ちなみに、バッチの二重起動チェックなのですが...。
下記がMutexを使用した場合のソースなのですが こんな感じなのでしょうか?
また、"MyName"は他の文字列と置換え可能だと、サンプルを見る限り
書いてあったのですが、バッチの二重起動チェックの場合、何をここに
記述しなくてはいけないのですか?
二重起動チェック処理は共通関数化して行う予定です。 ご教授下さい。
///////////////////////////////////////////////////////////////////////////
bool exit = false;
System.Threading.Mutex m = new System.Threading.Mutex(false, "MyName");
if (m.WaitOne(0, false) == false)
{
//すでに起動していると判断する
m.close();
exit = true;
}
else
{
exit = flse;
}
//アプリケーションが終わるまでmへの参照を維持するようにする
GC.KeepAlive(m);
}
///////////////////////////////////////////////////////////////////////////
>//アプリケーションが終わるまでmへの参照を維持するようにする >GC.KeepAlive(m); GC.KeepAliveはそういう仕様ではありません。 こんなクラスを使えば良いでしょう。 class Hoge { System.Threading.Mutex _m; boole _is_ok; public Hoge(string id) { _m = new System.Threading.Mutex(false, id); _is_ok = _m.WaitOne(0, false); } public ~Hoge() { _m.Close(); } public bool IsOK { get { return _is_ok; } } } 使い方 class YourApp { Hoge _hoge = new Hoge("YourAppName"); // メンバ変数等、アプリが終了するまで残る変数に入れること。 public void Main() { if ( !_hoge.IsOK ) return; ... } }
>>751 よく動いてる仕組みもわからず使う気になりますね
全部を詳細に把握しろとは言いませんが。
754 :
デフォルトの名無しさん :05/01/12 22:20:38
コマンドラインコンパイルの方法教えてください。 javac 〜.javaみたく扱いたいんで。
csc.exeでヘルプを調べる
758 :
デフォルトの名無しさん :05/01/12 22:29:12
cscでやれば、ソリューションファイル、プロジェクトファイル、 アセンブリインフォファイルはいらないんだよ。
ノリの悪い奴がいるな ちぃー
>>755 こういう奴、正直寒い。同じボケるにしてもボケ方ってものがあると思う。
↑必死だなwwwwwww
オマエモナー
Bitmap bmp = new Bitmap(100,100); Graphics g = Graphics.FromImage(bmp); bmp.MakeTransparent(Color.Red); g.FillRectangle(Brushes.Aqua, 0, 0, 100, 100); g.Dispose(); MakeTransparentを呼び出すと、その後のGraphicsオブジェクトを利用しての描画が出来ないのですが、どうしてでしょうか?
Graphicsオブジェクトを作ってからbmpに変更を加えているコードに違和感を感じる。。。
765 :
デフォルトの名無しさん :05/01/16 23:25:50
質問です。 マイク端子から音声を取り込むのってどうやるんですか?
static なArrayListのCountを覗こうとするとエラーがでるんですが 例 class Test { static ArrayList momo = new ArrayLIst(); static int Count { get { return Test.momo.Count; } } } こんな感じで何かしらAddしたものがあればエラーはでないんですが、 0だと駄目です。 trycatchでつかもうとしても駄目。 メッセージ 'System.ArgumentOutOfRangeException' のハンドルされていない例外が system.windows.forms.dll で発生しました。 追加情報 : 指定された引数は、有効な値の範囲内にありません。
すまんが、C#だと catch(Exception e)で全部もれなく捕らえられるんでしょうか?
>>769 予言するけど、それは多分別の箇所でmomo[0]とかしているせい。
momo を static プロパティにでもして get に breakpoint 置いて見てみるべし。
>771 できます。 throwできるのはSystem.Exceptionから派生したクラスのインスタンス、またはnullだから。 用途によってはcatchの後を省略してもオケー private void Form1_Load(object sender, System.EventArgs e) { try { Nullpo(); } catch { MessageBox.Show("ガッ"); } } private void Nullpo() { throw null; }
ArrayL"I"st
>>771 捕まえても逃げるものがあるから注意よん
ThreadAbortException とか
例外だけに例外がありました。
( ´д)ヒソ(´д`)ヒソ(д` )ヒソ
冷害
781 :
デフォルトの名無しさん :05/01/20 21:02:08
Regex reg = new Regex(pat , ここのオプション ); というのが沢山在るんですが、オプション部分が全て同じなので、 変数を使いたいのですが、変数って使えますか? RegexOptions option = RegexOptions..IgnoreCase | RegexOptions.ExplicitCapture; のようにしてみたけどやっぱりエラーでした
使えます。
どんなエラーが出たってんだ? > RegexOptions..IgnoreCase ここがポイントか?
そういう場合は、変に省略せずソース丸ごと貼り付けろ。すぐに分かる。
コード見直してみたら成功シマスタ。スマンカッタ
どこを見直したんだよ
RegexOptions..IgnoreCase ↑まさかここではなかろうな
788 :
デフォルトの名無しさん :05/01/21 10:05:31
C#でJPEGやGIF画像のプロパティ(ピクセルサイズ、色数など)を取得するプログラムを今日中に作れといわれたのですが、当方VB6.0しか使ったことがなく途方にくれています。。。 とりあえずVisualStudio2003のC#でテキストボックスにHELLO WORLDと表示させるところまできましたがもう限界です。 どこかにサンプルコードなどありますでしょうか? なにとぞなにとぞよろしくお願いいいたします。
採用時に大口でも叩いたの? Image.FromFileでファイルを開けて、返値であるImageオブジェクトの各種プロパティをみれば済む話だが。
VB6なんて雑魚い言語やってるからそーなるんだよな。
採用時に大口叩いてこれぐらいか。( ..)φメモメモ
仕事なら「今日中に」なんてありえない。 数分から数十分でやれないと話にならんでしょ。
>>792 SmalTalkで今日中に作れといわれてできるのか( ゚Д゚)ゴルァ!!
できますよ( ̄ー ̄)
SmalTalkで400件以上Googleに引っかかるのはどうだろうと思いつつ保守ついでのage
>>237 CHKなんていう意味不明な略語(?)を使うのはやめましょう。
質問は平易な日本語(+正しい技術用語)で具体的に。
姉妹スレの↓もよろしく。
ふらっとC♯(Part5)
http://pc5.2ch.net/test/read.cgi/tech/1065196964/ >このスレッドは
>
>「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
>
>ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
>
>少しずつC#プログラマを名乗るものが現れました。みなさん一緒に勉強しましょう。
2ちゃんで誤爆するような不注意なヤシ↑ 書いているコードの品質も知れたものだな。。。
お勧め本を知りたいのですが、このスレで良いでしょうか? ildasm.exeの使い方を詳しくかつ読みやすく紹介している 本をご存知でしたら、どなたか教えてください。
800 :
デフォルトの名無しさん :05/02/06 18:16:53
vs.netを使ってるのですが、 "(" と ")" の二つの括弧のいろを変えたいのですが、 フォントおよび色のどの項目を変えればいいのでしょうか?
なんでもできると思ったら大間違いだ
同じ親を持つ兄弟関係の派生クラス間で、 親の持つ共通メンバのみコピーするには ひとつひとつ代入するしかない?
>>802 しかない
不便なら親クラスに CopyTo メソッドとか付けとけ
リフレクションで手を抜く事はできるかもしれないがね。
>>803 意外に楽できないんだな。かゆいところに手が届かないというか。
implicitにでも書いとく。ありがとう。
フォームが始めて表示された直後にイベントを発生させる方法はありますか? Loadの後にイベントを起こしたいのですが。
807 :
806 :05/02/12 13:03:20
いまはとりあえずFormにフラグをつくって それをActivatedで判断するという方法を使ってますが、 ほかに正攻法はあるのでしょうか?
Loadイベントの最後でRefreshさせて、その後とか。 行儀はよろしくなさそうだが。
810 :
387 :05/02/14 14:27:11
自作アプリケーションで C# を外部スクリプトとして利用しようと思ったんだけど、 アセンブリ参照をソースに埋め込むってことできないの? VC++ の #pragma comment( lib, "hoge.dll" ) みたいなやつ。 おしえてちょー。
>>810 ソースには無理。プロジェクトファイルで指定して、ビルド時に参照。
もしくは、Reflection で茨の道・・・
Reflectionはインタフェイスとか使おうとしないで完全に動的にやれば そう難しくもないような気がする。 用途によってはアプリケーションドメイン単位でしかアンロードできないのが 何かと不便だけど。
813 :
デフォルトの名無しさん :05/02/14 23:58:44
C#はじめました で ControlPaint.DrawReversibleFrame(new Rectangle(0,0,200,200), Color.Black, FrameStyle.Thick); とやったら、デスクトップの左上にシカクがでました。 このシカクをフォームの中にいれたいんですが、どーしたらいいんでしょ
FormのPointToScreen
815 :
デフォルトの名無しさん :05/02/15 00:52:04
おお、ありがとさんです
816 :
デフォルトの名無しさん :05/02/19 22:12:19
「デスクトップを表示」や「最小化」でタスクバーに収まったフォームを 元に戻すメソッドはどれでしょうか。
メソッドじゃないが、FormのWindowStateプロパティ。
>817 ありがとうこざいます。
結局メソッドだけどね
820 :
デフォルトの名無しさん :05/02/20 14:19:22
.NETはXML形式でオブジェクトをシリアライズできると聞きましたが これは再コンパイルせずにテキストツール等で容易にパラメータの書き換えができるってことですか?
あるオブジェクトのメンバにアクセスできる範囲を、利用するクラスによって変えたい。 たとえばAというクラスからは、プロパティで取得・変更ができるけど、 Bというクラスからは取得のみ可能、 Cというクラスはすべてのメンバにアクセスできるが、 Dというクラスは一部にしかアクセスできない、というふうに。
それぞれのクラス用ラッパーを作る
>>822 回答ありがとう。でも「ラッパークラス」で調べてみると
C++やアンマネージ、COMとかいった仰々しいものが続々出てきて手に負えそうにない。
あるいはもしかしたらこういうこと?
Originalの代わりにWrapperを公開して、メンバのabcはプロパティで取得のみ可。
class Original{
private SomeClass abc;
public SomeClass Abc{
set{abc = value;}
get{return abc;}
}
}
class Wrapper{
private Original org;
public SomeClass Abc{
get{return org.Abc;}
}
}
これだとWrapperの内部では自由にOriginalにアクセスできてしまうし、
SomeClassのAbcの参照先は値が変更可能になっている。
Originalの持つメンバに関して、あるクラスからは完全に取得限定にしたいけど、
そういう都合のいい方法ってある?
if(Environment.StackTrace.IndexOf("Class1"
>>823 > SomeClassのAbcの参照先は値が変更可能になっている。
Original.AbcとWrapper.Abcで動作は等価と思うのだが。
それでダメなら属性で制御するくらいしか思いつかんな。
そうするとコンパイルエラーを出せないが。
>>825 入れ子のクラスにする方法を考えてみた。
>>823 のWrapperをOriginalのメンバにしてみるとか。
属性かー。それで工夫してみるよ。どうもありがとう。
WIndowsアプリケーションのListView使ってるんだけど 列の非表示ってできる?やり方が見当たらなくて。
ちょっと聞いてやるがローカルマシンにSQLserver(もしくはMSDE)がインストールされてるか判別したいんだが・・・ どなたか教えてください。
DBがインストールされてるかどうかチェックする機能が必要って。 どんなのが対象なんだか。
DB がダンボールに見えてしまった もうだめぽ
ボールしかあってないじゃねーか。
ダンもあってるYO
ドラゴンだろ
接続しにいく、ってのがいいんじゃないか?
836 :
デフォルトの名無しさん :05/02/27 15:24:28
質問です。 VC++6.0で作成したクラスライブラリ(.lib)を C♯で使用したいと思っています。 VC++6.0で使っていたときは .libファイルとともに梱包されていたヘッダーファイルを インクルードしていたのですが、 C♯ではそんなことできないですよね? ネットでいろいろ調べてみたものの、 解決策は見つけられませんでした。 申し訳ありませんが、どなたかよろしかったらご教示ください。
>>836 c++のクラスを呼び出したいならmanaged c++を使ってマネージコードから
呼び出せるマネージドクラスでラップする必要があります。
managed c++は禁断の世界だから手を出すときは自己責任で。
839 :
デフォルトの名無しさん :05/03/01 17:34:27
C#からマウスやキーボードを操作したいのですが JavaでいうRobotのようなものはありますか?
自分では分かりやすいんだろうが、〜でいう〜という説明は説明になってないってことを肝に銘じておいてくださ〜い! キーボードのエミュレートはSendKeysクラス。 マウスのエミュレートは.NETには無かったような気がするので、Win32APIのmouse_event/SendInputを挙げておこう。
>>840 ごめんなさい。以後、気をつけます。
ありがとうございました。
842 :
デフォルトの名無しさん :05/03/01 19:29:08
ASP.NET開発について調べています。 クライアントに新しいファイルを作って送るにはどうすればいいですか? .csvみたいな簡素なファイルなら想像できますけど、 エクセルの.xlsファイルとかどうしますか?
>>842 普通にファイルを生成してリンクしてやるかResponse.BinaryWriteしてやればいいんじゃね?
エクセルのバイナリを動的に作れないという話なら、そういう商用コンポーネントを買うのが早いと思うよ。
買わなくても出来るけど苦労する。
1.ファイルを作る 2.送る
2003なんて誰が使ってるんだ? おれはまだ97だが?
97はMSのライフサイクル的に死んだバージョンだろ。 修正プログラムの出ないMS製品なんて使ってられるか。
でもAccess入ってたのこれだけなんだよね。 つーか金ねーよ。
どっかの学生に買ってきてもらう
ウィリアム・ヘンリー・ナイト・ゲイツIII世
VB.NETでの『ReDim Preserve ・・・』に相当するようなコードは C#ではどのように書くのでしょうか? 配列の内容を保持したまま配列を増やしたいのですが、 今までは新しく配列を用意してコピーしていたのですがスマートにならないものかと。
>>853 いや、C# でそんな文見たことない
おそらく無いんじゃないか?
ReDimったってどうせ内部でArray.Copy呼んでるだけだしな。 これのせいでループの内部で毎回ReDimするようなアレなコード書く奴もいるし。
856 :
デフォルトの名無しさん :05/03/04 21:13:37
>>856 プロジェクトの『参照設定』を右クリック⇒『System.Web』を追加
これでおk
あ、『参照の追加』が間に入ってましたごめぬ
System.Web.dllを参照に追加すれ。
860 :
デフォルトの名無しさん :05/03/04 21:27:51
高速回答ありがとうございました。 ぶじビルドできました。
保守を兼ねてage
純正の開発環境はシャープデベロッパーがあれば必要ないのでしょうか?
864 :
デフォルトの名無しさん :2005/04/28(木) 05:05:00
推薦図書〜スレが荒れているようなので、よろしかったら教えて下さい。 初心者にお勧めなC#を教えて頂けますでしょえか。 スキルはPHPのみです。 よろしくお願いいたします。
MSDNライブラリ
メインフォームで定義したある変数、 例えば「string s = "XXX";」を Form2 f2 = new Form2(); f2.ShowDialog(); で実体化したForm2でも使いたいのですが、 どのようにすればいいのでしょうか? public string s = "XXX"としてForm2で 変数sを使ってみたけどダメでした。
> 867 /* From1 */ private string s = @"XXX"; private button1_Click(....) { using(Form2 F = new Form2()) { F.SetValue(s); /* 変数sの値をForm2に渡す */ F.ShowDialog(this); } } /* Form2 */ private string _value = ""; public void SetValue(string value) { this._value = value; } private void Form_Load(....) { this.Text = this._value; }
>>868 さん
即レスありがとうございます。
何故そうなるのか等細かいところが理解出来ていないのですが、
Form2でSetValueメソッドをpublicで宣言しているところがミソなのでしょうが、
「public void SetValue(string value) 」メソッドの「this._value = value;」は
何時処理をしているのでしょうか?
とりあえず希望通りの動作は出来ました。
ありがとうございました。
>>868 さん
すいません。何となくですけど理解できました。
Form1の
>F.SetValue(s); /* 変数sの値をForm2に渡す */
で処理しているのですね。
ゴミカキコ、すいませんでした。
>>867 Form1で
public static string s = "XXX"
としてForm2で
MessageBox.Show(Form1.s);みたいに使えるけど
>>868 とどっちが良いんだろう・・・
868の方が明らかに優れている。staticはできる限り避けるのがOOPの基本。 一番良いのはForm2のコンストラクタ引数として渡すことだと思うが(Form2でその値が必須なら)。
Form1への参照を渡しちゃうとか
ちょっと質問。 868で下のようにClosingイベントでForm2からForm1に戻すときはどうやったらいいの? private void Form2_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if (DialogResult == DialogResult.OK) { ここで変数をForm1に戻す } }
>>874 戻すというか、データを共有したいならデータを管理するクラスを作ってそれを共有したらいいんじゃないか。
そうしてできあがるpublic staticフィールド全開のクラス まあそれはおいといて、OpenFileDialogの実装も一つの回答だ。
Form1でstring _value = "";として public void SetValue(string value) { _value = value; } Form2でstring s = "XXX";として Form2を閉じるイベントハンドラに using (Form1 f1 = new Form1()) { f1.SetValue(s); } と書いてもForm1に戻ると_valueは空のままです。 public class SetValue { public string _value; } を作って上と同じくForm2が閉じるときに SetValue sv = new SetValue(); sv._value = s; と書き込んでもForm1に戻って_valueを使おうとすると空です。 とりあえずざっと試しただけなので、 週末に休みが取れれば改めて試行錯誤します。 でもその前に何かヒントが有れば教えて欲しいな・・・。
newってのは字義通り新しく作るんだよ? using (Form1 f1 = new Form1()) { f1.SetValue(s); } f1を新しく作ってそれのSetValueを呼んで、そのメソッドが終了したらそのまま捨てられるだけ。 当然新しく作ったForm1に対して操作したわけだから、既存のForm1には何の影響もない。
>871 872も言ってるがカプセル化がOOPの基本。 それにstaticだと全てのインスタンスで共有になっちまうよ。 >873 Form2がForm1に依存する事になるからそれもまずいだろ。
>874 OpenFileDialogと同様の実装サンプル。 秀丸で書いたので動作確認はしてない。 /* From1 */ private string s = @"XXX"; private button1_Click(....) { using(Form2 F = new Form2(s)) { if(F.ShowDialog(this) == DialogResult.OK) { MessageBox.Show(F.getValue()); } else { MessageBox.Show(@"キャンセルされますた。"); } } }
881 :
880 :2005/05/14(土) 22:52:41
private string _value = ""; public Form2(string initValue) { this._value = initValue; } private void Form_Load(....) { this.textBox1.Text = this._value; } private void btnOK_Click(....) { this._value = ths.textBox1.Text; this.DialogResult = DialogResult.OK; } private void btnCancel_Click(....) { this.DialogResult = DialogResult.Cancel; } private string getValue() { return this._value; }
882 :
880 :2005/05/14(土) 22:54:35
あ、881はForm2ね
883 :
880 :2005/05/14(土) 23:01:30
>874 つまり考え方としてはForm2でOK押された時に 「Form2がForm1に値を返す」のでは無く「Form1がForm2に値を貰う」 ってこと。 こういう実装にすればForm2はForm1に依存しないので、 Form2が使い回せるようになる。
>>881 おいおい、getValue()はよしとくれよJavaじゃあるまいに。
//privateは単純な誤字としてw
>>880 さん
returnを使うのがミソですね。
おかげさまで上手いこといきました。
ところでC#的には
public string getValue{
get{
return this._value;
}
}
みたいな感じでプロパティを使った方が良いと偶然見た
「C#ルールブック」って本に書いてありました。
一応こっちを使ってみようかなと。
どっちでも動くし、大して違いが分かっていないのですが・・・。
それ以前にgetとかsetとかプロパティってよく分かっていないのですが・・・。
それにしても「値を返す」がダメってのは目から鱗です。
なるほど、依存せずに使い回せるようにするですか。
>>883 は大変参考になりました。
ホントにありがとうございました。
今回のサンプルではget/set用メソッドでもプロパティでも同じこと。 ただ.netではプロパティにしとくと自動でシリアライズの対象になるので、 プロパティにする方が無難かも。 サンプルではわかりやすいかと思ってメソッドにしてみますた。 メソッドが先頭小文字なのは完全に好みw
887 :
885 :2005/05/16(月) 00:09:28
>>885 で書いたプロパティですが
Form2で
private string _value;
public string Value
{
get{
return _value;
}
set{
_value = value;
}
}
としてForm1で
private string s = "XXX";
Form2 f2 = new Form2();
f2.Value = s;
f2.ShowDialog();
if (f2.DialogResult == DialogResult.OK){
s = f2.Value;
}
手な風にForm2のValueプロパティにget setを書いて済ましても良いのでしょうか?
渡すのと受け取るのが同じ物を指してるのならそれで良いけど? 例えばOpenFileDialogならFileNameはget; set;だけれど、 事前にsetすれば自動的に指定したディレクトリが開いてファイルが選択されてる状態になる。 ……まさか本当にValueなんて名前のプロパティを作ってないだろな。 //クラスによってはありかもしれないが、一般的ではないぞ。
>>888 さん
レスありがとうございます。
OKってこと出安心しました。
すこしget setについて分かってきたような気がします。
実プログラムではネーミングに苦労はしていますがValueは使っていません。
ですが、一般的ではないとは知りませんでした。m(_ _)m
>>889 > ですが、一般的ではないとは知りませんでした。m(_ _)m
一般的でない、ってのは名前からどんな物を指すのか分からない(から普通使わない)ってこと。
一般的すぎる、という表現の方が良いかも。
たとえばOpenFileDialogにValueプロパティがあっても意味不明だろう。
勿論Valueという名前を決して使っちゃいけないとか言うことじゃないぞ。
>>890 さん
了解です。丁寧な返信ありがとうございました。
保守あげ
MediaPlayerやクイック起動バーのように タスクバーの中にフォームを配置したいのですが どうすればいいでしょうか?
>>893 よくわかんないが、タスクバーの中に配置されているのはフォームじゃないんじゃない?
クイック起動バーはタスクバーの中にツールバーが 配置されていてそれにアイコンが表示されてます。 そのツールバーのようにタスクバーの中にコントロールを配置したいのですが・・・ なんかわかりにくいですね。
とりあえず Spy++ でも使え
Spy++は使い方がよくわからんのですが。 GoogleDeskbarのようなものを作りたいのですが 無理でしょうか?
BandObjectでも使えば。
>898 こんな物があったんですか・・・ ありがとうございます。
Nullableの実用例を教えろ
902 :
デフォルトの名無しさん :2005/07/09(土) 04:06:16
あげ
903 :
デフォルトの名無しさん :2005/07/09(土) 17:53:20
どうも、はじめまして。 プログラム初心者で、どなたかにお助け願いたいことがあります。 C#からCOMコンポーネントを使いたいと思っています。 COMの関数から配列を受け取りたいのですが、 どうすれば良いのでしょうか? COMの方はC++で書いています。 COMの引数はVARIANT型にして、 それをC#ではobject型で受けてみましたが、 受けたobjectの値はどうやって見たらいいのでしょうか・・。
906 :
903 :2005/07/10(日) 23:52:13
904さん、ありがとうございます。 VisualStudio.NETで、 COMの引数を選択するタブの中にSAFEARRAY*がないので、 VARIANTのSAFEARRAYを作り、 引数はVARIANT*にしました。 これをC#から呼んで使いたいのですが、 objectとして受けた配列から要素の値を取り出す方法が分かりません。 object.ToStringではエラーになってしまいます。 ちなみに、配列の要素の型はlongです。
Hogehoge イベントと OnHogehoge メソッドってどういう関係?
イベントの条件発動→OnHogehoge呼ばれる→Hogehogeイベント呼ばれる
>>906 MarshalAsAttribute と UnmanagedType (enum) をチェックすべし。
910 :
デフォルトの名無しさん :2005/07/12(火) 16:25:41
列挙中、つまりforeachやIEnumeratorを使ってるときに、肝心の列挙対象のリストに変更があっちゃまともに列挙できないのはわかるだろ。
912 :
912 :2005/07/12(火) 16:45:28
>>911 助言ありがとうございます。
なるほどwhile(it.MoveNext())中に、リストを変更するようなRemoveなどの記述は書いちゃだめということ
なのですね。
どうもありがとうございます。
別の方法を考えてみようと思います。
913 :
デフォルトの名無しさん :2005/07/12(火) 17:17:48
915 :
913 :2005/07/12(火) 17:32:22
>>914 アドバイスありがとうございます。
C#.NETでもメッセージ処理できるんですね。
WndProcメソッド調べてやってみようと思います。
916 :
デフォルトの名無しさん :2005/07/12(火) 21:59:32
TabControlのTabPageを切り替えたいのですが。 tabPage1がアクティブになっているところを、ボタンを押すと、tabPage2がアクティブになるようにするにはどのように記述すればいいのでしょうか。 tabPage2.Select(); とか tabPage2.Show(); とか tabPage2.Focus(); とか tabPage2.SelectNextControl(); とか やってみましたが、どれも意図したとおりにtabPage2は表示されませんでした。 tabPage2. とやってみてインテリセンスに出てくる項目を全部チェックして見ましたが、上に4つ 以外にそれらしいものは見つかりませんでした。 何か書き方がよくないのでしょうか。それともそういったことはできないのでしょうか。
タブを管理してるのはTabControlであって、TabPageは飽くまでGroupBoxみたいなもの。 tabControl1.SelectedTab = tabPage2;
タブを右クリックしたらそのタブをアクティブにするにはどうすりゃええ
919 :
916 :2005/07/12(火) 22:11:19
>>917 どうもありがとうございます。
tabControl1.SelectedTab = tabPage2;
でできました。ありがとう。
>918 右クリックのイベントハンドラでそのタブをアクティブにすりゃええ。
>>920 TabPage で Click イベントが起きないのじゃよ
タブを管理するのはTabControlだっつってんだろが
TabContol で Click が発生しても どのタブ上で右クリックしたのか分かんねえだよ
GetTabRect
一個ずつチェックするのまんどくせ
次のお悩み相談の方どうぞ。
右ダブルクリックで DoubleClick イベントが起きるのを何とかしろよ( ゚Д゚)ゴルァ!!
ダブルクリックされてんだからダブルクリックイベントが発生するに決まってんだろモルァ MouseDown、MouseUpでどうにかしたほうがマシだな(^Д^)ハハハハ
929 :
デフォルトの名無しさん :2005/07/14(木) 12:04:32
>>929 まずなにがnullなのか確認したのか?
ブレークポイントを有効に使うんだ。
つかsetupクラスの方がForm1の参照を持つ必要がどこにもない。
いつもいってるんだが、ダイアログを出してその結果を取得する、というのは、
OpenFileDialogクラスを基本的な設計として考えると良い。
ダイアログ側がメインフォームのプロパティやフィールドに値を入れるんじゃなくて、
ダイアログ側は値をプロパティとして公開するだけ。その公開された値をメインフォーム側が利用する。
・メインフォームがダイアログを出す
・OKが押された場合は、ダイアログ側の適当なフィールドaに値を入れる。
自身のDialogResultプロパティをDialogResult.OKなりYesなりに代入することでダイアログを閉じる
・ダイアログはaをプロパティAとして公開する
・メインフォームはShowDialogメソッドの返値を調べ、有効な値(OKなりYesなり)ならダイアログのプロパティAを取得する。
必要なら自身のフィールドなどに格納する。
あうち、微妙に方向が逆になってましたよ。 ×自身のDialogResultプロパティをDialogResult.OKなりYesなりに代入することでダイアログを閉じる ○自身のDialogResultプロパティにDialogResult.OKなりYesなりを代入することでダイアログを閉じる
932 :
929 :2005/07/14(木) 12:40:29
>>930-931 助言ありがとうございます。
とにかく参照の方向が逆だったのですね。
メインフォームからサブフォームの値を参照するように変えて今いろいろいじってます。
なぜあのコードは例外を吐くのか、原因追及もしとけよー。
934 :
929 :2005/07/14(木) 13:05:38
ShowDialogを2回やったらダイアログが2回開くのは当然なのだがどうか。
936 :
929 :2005/07/14(木) 13:12:50
>>935 まさか、そんなことだったとは。
ちょっと目から鱗が落ちました。
どうもありがとうございます。ちゃんと1回でサブウィンドウが閉じました。
かなりすっきりしました。
例のコードの原因究明もしようと思います。ありがとうございました。
VB.netとかですと tryって打つだけで catch, End tryまで 書いてくれるんですけど C#にそんな機能はないのでしょうか。
つか、必ずしもcatchとは限らないわけで。 catch(Exception e) { // 例外をcatch } catch { // 例外の種類によらずcatch } finally { // tryを抜けるときに必ず実行される }
try { } finally { } って書きたいこともあるな。
そういえば catch (Exception ex) { return; } って書くと警告が出るのはどうにかならんかなと思ってたら、 catch (Exception) { return; } と書けることに最近気付いた。
throw e; だけでなく throw; ってのもかけるよ
942 :
903 :2005/07/14(木) 23:07:49
909さん、アドバイスありがとうございます。 どうもなかなかうまくいきません。 もう少しねばってみます。
フォームが最大化されていたり最小化されていたとしても 通常時のウィンドウの大きさを取得する方法ってない?
944 :
デフォルトの名無しさん :2005/07/15(金) 10:53:52
255255255 とか 25500 のような数値型からコンバートして System.Drawing.Colorを作成する方法を教えてください
後者の理屈がわからんが、まあ自分で数値解析してColor.FromArgbすれ。
>>943 Layoutイベント辺りでWindowState==FormWindowState.Normalの時のサイズをフィールドに保存しとけ。
IListを継承してクラスを作るとき、 AddとかRemoveの引数をobjectじゃなく特定のクラスにしたいんですが、 そうすると、コンパイルエラーになります。 どうにかできないものでしょうか? TreeNodeCollectionとか、ライブラリレベルのクラスで、IListを持っているものは、 ちゃんと引数をobjectではなく、特定の型になってますけど・・・
C# 言語の仕様 13.4.1 インターフェイス メンバの明示的実装
>>947 void IList.Add(object value)
{
}
public void Add(Hoge value)
{
}
>>949 IList.Addの返値はintだぜお前さん。
951 :
947 :2005/07/17(日) 20:48:47
おお、なるほど〜 ありがとうございます。IList以外でも道が開けそうです!
>>951 CollectionBaseクラスの解説に実装例があるよ
953 :
デフォルトの名無しさん :2005/07/18(月) 17:58:15
自アプリ以外のアクティブなウインドウの ウインドウハンドルを取得するにはどうすればいいの?
956 :
953 :2005/07/18(月) 18:32:45
>>954-955 レスありがとう。
GetForegroundWindow で出来るようですね。
くだらないこと聞いてごめんなさい。
957 :
デフォルトの名無しさん :2005/07/18(月) 22:04:31
ちょっと質問ですっ ExpressBeta2で、DataGridViewやってます。 今、DataSourceとDataMemberをそれぞれ、dataset 及びそのtable に設定し、且つユーザーの削除を有効にしています。 AllowUserDelete True でも、マウスクリックによりセルを選択状態にし、 キーボードより、デリートキーを押しても そのセルを含む行が削除されてくれません。 これは何が原因と考えれらるでしょうか。 ずっとネット検索してるんですけど、 いまだ解決できません・・・(T_T) よろしくお願いします。 以上 WinXPsp2 なお、この投稿は他の掲示板からの二重投稿になります。 前の掲示板(C#関係)でスルーされてしまいました。 資源を浪費してすみません、偉い人。
そのプロパティ名をよく見て見ろ。 AllowUserToDeleteRows だろう。 セル=Column(s)じゃなくて行=Row(s)を選択せにゃならんよ。
Column はセルじゃなくて列じゃなかったかなぁ……
おうそうだ まあ細かいことは気にするなニュアンスだニュアンス
961 :
957 :2005/07/18(月) 22:26:13
SelectionModeをFullRowSelectとなるように プロパティを変更したらうまくいったじゃねーかよ(>< 列が1つしかなかったから、気づかなかった○rx ありがとな、えろいひと。
962 :
957 :2005/07/18(月) 22:28:53
1浪(row)2浪(row)の方々は、上下に積み重なって死んでいくから、 ROWは、上限に重なるもの、つまり行だよ☆ 覚えた??
まあなんだ、空気読もうな。
964 :
957 :2005/07/18(月) 22:38:50
ごめん
2つ程質問させてください。 今、いらないファイル(logファイルとか)を 勝手に消してくれる常駐ソフトを作ろうと しているのですが、最小化したときにタスクバー に突っ込むのはどうしたらよいのでしょうか? ぐぐっても全然出てこないので困っていますorz 2つめは、監視するところを、複数のスレッド に分けて処理しようと思ったのですが、試しに threadを使ってみると、なんか変なエラーが 出て来てしまいます(只今外出中につき正式な 名称は不明 スマソ)。 そいつをtry catch文を使って回避しても、 別のエラーが出て来てしまいます。 それだけならまだ自分の入力ミスで済まされる のですが、本や他のHPに載っている例題を 使ってもこのエラーが出て来やがります。 これはどうしたらよいのでしょうか? 長文ダラダラすいません orz
967 :
966 :2005/07/19(火) 08:17:37
追記 使っていたのは2005のベータ1でした。 ベータ2はまだ試してません。 連投スマソ
一つ目はタスクトレイに格納するって事だな? NotifyIconクラスを使う。 二つ目はコード出せ。最低限、例外名出せ。
969 :
966 :2005/07/19(火) 13:22:50
>>968 ただいま外出中のため無理でつ orz
夜あたりに帰ったらベータ2で試したあとに
コードと例外名上げるので・・・
> なんか変なエラーが出て来てしまいます 神レベルの質問者だな
971 :
966 :2005/07/19(火) 23:51:40
>>968 とりあえず試しに作ってみたやつのコード
using System.Threading;
Thread thread_1;
private void button1_Click(object sender, EventArgs e)
{
thread_1 = new Thread(new ThreadStart(start));
thread_1.Start();
}
private void start()
{
for (long i = 0; ; i++)
{
textBox1.AppendText(i.ToString());
}
}
private void button2_Click(object sender, EventArgs e)
{
thread_1.Abort();
}
てので、button1をおすとInvalidOperationExceptionという例外が出てきてしまいます。
本についてたサンプルも、開始ボタンを押すとこれが出ます
>>971 例外を書くときは例外メッセージを余すところ無く書くように。
で、WindowsのGUIにおいて、コントロールを作ったスレッド以外のスレッドからのコントロールの操作は、動作が「保証されない」。
だから別スレッドからコントロールを操作する場合、コントロールを作ったスレッドに操作を依頼するのが正しい。
それを実現するのがControl.Invoke/BeginInvokeメソッドだ。
973 :
966 :2005/07/20(水) 06:38:51
寝てしまった…orz
>>972 Control.Invoke/BeginInvokeメソッド…
聞いた事がないな orz
いろいろぐぐってみますが、また分からなかったら
質問させてください。
ありがとうございました。
Control.Invoke/BeginInvokeで思い出した。 とっとと2.0の匿名メソッドとパーシャルクラスщ(゚Д゚щ)カモォォォン
リテラル文字列の前にあるアットマークにはどんな意味があるのでしょうか? @"C:\ABC.txt" ↑ これ
構造体への参照をメンバに持つには、ポインタを使うしかないんですか?
Object にボクシングしとけば一発解決
>>978 int i = 0;
object o = i;
とやると、oにはiの参照ではなくて値のコピーが代入されてしまうようです。
iをobject型にすれば参照渡しできそうですが、それだとちょっと不便です。
ああ。構造体への参照じゃなくて変数への参照か ………やりかたはいろいろあるけど、なんとなく設計そのものが奇妙な気がする とりあえず、『構造体を持つオブジェクトを作り、それを持つ』 のが適当かつ簡単かと
981 :
:2005/07/20(水) 23:58:27
質問したいことがあります よろしくおねがいします public override void scanEntry() { string[]myComputer = Directory.GetLogicalDrives(); foreach (string strDrives in myComputer) { bool IsExist = false; foreach (DriveComposite drive in lstDriveEntry) { if (drive.FileName == strDrives) { IsExist = true; break; } if (!IsExist) { addFolder(new DriveComposite(strDrives)); } } } 情報不足であることは勘弁してください 上記のような処理にすれば問題はおこらなくなるのですが IsExist みたいなフラグを持たないコーディングにはできないでしょうか? キーワードだけでいいのでご教示ください
メソッドに切り出し
はじめまして、C#を初めてまだ3ヶ月の初心者です。
質問ですが、C#でOLEDRAWを利用するサンプルってあるのでしょうか?
http://www11.plala.or.jp/acaccelerator/programming/cstips.html#DrawControlImage のコードを使った下記のようなコードを書いてみましたが動作しませんでした orz
何が悪いかご教授して頂けないでしょうか?
-----------------------------------
Graphics grfInst ;
Point pntLocation = new Point( 0, 0);
//
grfInst = pictureBox1.CreateGraphics();
grfInst.Clear(Color.White);
//
//ここでpictureBox1にaxWebBrowser1の内容が表示されるはず・・・
DrawControlImage(grfInst , axWebBrowser1 , pntLocation);
//
grfInst.Dispose();
-----------------------------------
AxWebBrowserならそのすぐ下にコードがあるが。
わざとだろ
イベントを追加する簡単な方法はないでしょうか? VB.netだと上のコンボボックスから選択するだけで簡単に追加できますよね。
プロパティグリッドの雷マーク
988 :
977 :2005/07/21(木) 11:20:59
>>980 そうですね。設計を見直してみます。
ありがとうございました。
989 :
986 :2005/07/21(木) 11:22:11
>>987 目から鱗とはまさにこのことですね。
ありがとうございます。
983です 「DrawControlImage」と「DrawWebBrowserImage」の間違いに今気がつきました。 こんな単純な事に気がつかないとは・・・申し訳ないです。 現状ですが、「DrawWebBrowserImage」でJPEGなどの画像ならイメージを作成できたのですが WORDやEXCELだと、イメージが作成されないのですが、OleDrawではWORDやEXCELのイメージ は作成する事ができないのでしょうか? 今考えているのは、WORDやEXCELの印刷時の1ページを、JPEGなどの画像で保存できるか? という事なのですが・・・
「WORDやEXCELの印刷時の1ページを、JPEGなどの画像で保存」したいなら、FinePrintの体験版を使え。
>>991 なるほど、こんな便利な物があるんですね。
素人的な考えなのですが、このような機能を作るの
はかなり難しいのでしょうか?
素人の戯言ですが、他のソフトができている事が
自分にはできないってのが非常に悔しいです。
それで金が取れるほどには難しいと考えるのが自然だろ。 作ろうと思えば実際に存在する以上作れるのは間違いないんだし。
994 :
デフォルトの名無しさん :2005/07/22(金) 08:34:53
>>993 そうですよねぇ・・
今回はFinePrintを使ってみます、ありがとうございました。
ume
ume
ume
998
999
新スレマダー?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。