1 :
デフォルトの名無しさん :
2006/09/10(日) 11:27:27
4 :
デフォルトの名無しさん :2006/09/10(日) 12:09:06
こんにちは、お世話になります。
C#で他のプロセスがロック(使用している)ファイルを読み込もうとすると例外でエラーになってしまう
のですが、これを読み込むにはどうしたら良いのでしょうか?
>>1 スレ立て乙
Windows の設計にケチを付ける気か
デリゲートのBeginInvokeメソッドの引数に object @object というものがありますが、 この @ はどういう意味なんでしょうか?
asyncの意味ではないだろうか。
言語仕様見れ 2.4.2 識別子
>>6 object はキーワードなんでキーワード以外の使い方をするには @ をつける
なるほど、@object という識別子は言語仕様で許されるのですか。 納得しました。 /チラシの裏 試しに delegate void A(object @object); というデリゲートを宣言したところ IAsyncResult A.BeginInvoke(object @object, AsyncResult callback, object @object) というシグネチャのメソッドが生成されました。 /チラシの裏
CILになればパラメータ名なんて無意味だから大丈夫なんじゃね
13 :
デフォルトの名無しさん :2006/09/10(日) 18:32:15
Button Btn1 = this.Controls["controlname"]; Btn1.PerformClick(); 任意の名前のボタンを押した時の動作をシミュレートするために、 上記のようにしたのですが、コンパイルは通るのですが、 実行時に、実体がどうのこうのと怒られます。 何か間違ってますか。環境は2.0です。
Button にキャストしてないのにコンパイル通るのか?
発生したのはNullReferenceExceptionだと思うのだが 本当にその名前であってるか? >14 VBのを書き換えてるのかも。
Cの構造体の様に静的に初期化をする事はできますか? struct{ int id; string name; }hoge; hoge h[] = {{0,"hoge0"},{1,"hoge1"} } みたいな 組み込みの型の配列ならできたんですが、 ユーザ定義型のやり方がわかりません・・・
17 :
13 :2006/09/10(日) 19:04:06
ごめん。もっと正確に書きます。 Button ButtonTmp = (Button)this.Controls["OperationButton" + this.OperationNumber.ToString()]; ButtonTmp.PerformClick(); ボタン名が OperationButton1〜OperationButton10 まであって、 OperationNumberが保持してる番号によって押すボタンを変えたく、こう書きました。 デバッグ時のエラーは、15さんがおっしゃるように、 「NullReferenceExceptionはハンドルされませんでした。 オブジェクト参照がオブジェクト インスタンスに設定されていません。」 と出ます。 念のため、ボタン名に変数を使わず直接指定しても同じエラーになりました。
>>16 struct Hoge {
int id;
string name;
public Hoge(int id_, string name_){
id = id_; name = name_;
}
}
Hoge[] h = new Hoge[] {
new Hoge(0, "hoge0"),
new Hoge(1, "hoge1"),
};
19 :
16 :2006/09/10(日) 19:10:06
20 :
13 :2006/09/10(日) 19:18:01
解決しました。 パネル内にあるコントロールは Controls["controlaname"] ではなく、 Controls.Findメソッドを使うとのことでした。
>>18 引数名にアンダーバーとか付けて区別するのはルール違反だろ
メンバ変数の方に付けるか、
public Hoge(int id, string name)
{
this.id = id; this.name = name;
}
にするべき
たしかに
>>21 C++ の頃はよくそんなのやったんだけどね。
メンバ変数に id ってのがあったら、コンストラクタの引数で id を使えなくなるから。
それに、メンバ変数の頭に m_ つけたり、末尾に _ 付けるってのもよくやってた。
でもやっぱ、C# 的には this.id = id; ってすべきだと思う。
>>21 >public Hoge(int id, string name)
のidを icとかにタイプミスしても大丈夫?
同じ変数に割り当てられました。って警告出るな
this.id = id 定番だけどNGのもと。
見てないけど メモリリークだな。
WndProcんとこ、 else if (msg.Msg == WM_CHANGECBCHAIN) { if( (IntPtr)msg.WParam == this.NextHandle ) this.NextHandle = (IntPtr)msg.LParam; else if ( NextHandle != IntPtr.Zero ) SendMessage(NextHandle, msg.Msg, msg.WParam, msg.LParam); return; } じゃね?
return
的確なご指摘ありがとうございます。 さっそくコードを取り込んでデバッグしてみます。
32 :
デフォルトの名無しさん :2006/09/11(月) 22:20:11
複数枚のbitmap画像を連結させて一枚にしたいのですがどうすればよいでしょうか
並べて表示させたいのか くっつけて1つのファイルにしたいのか
34 :
デフォルトの名無しさん :2006/09/11(月) 22:24:22
でかいBitmap用意して、ぺちぺちコピーしてったらいいんじゃね。
35 :
デフォルトの名無しさん :2006/09/11(月) 22:25:34
一枚として取り扱えるようにしたいです。 分からないのでpictureboxを並べて表示させてましたがそこから先で扱いが分からないので一枚として扱いたいです。
連結後の大きさのBitmapオブジェクトを作成 そのGraphicsオブジェクトを取得してDrawImage
”Graphicsオブジェクトを取得してDrawImage”の意味すら分からない状況ですがイメージは掴めました。 調べながらなんとかしてみます。ありがとうございます。
38 :
デフォルトの名無しさん :2006/09/11(月) 23:23:24
調べるといったそばからあふぉな質問ばかりでスイマセンが。 連結したGraphicsオブジェクトをPictureBoxに表示させるにはどうすればよいのでしょうか。 GraphicsオブジェクトをBitmapにするのもわからないし。 勉強不足でほんとすいません。
Graphics を連結させるのではなく、Bitmap を連結させるのでは?
でっかいBitmap作成 new Bitmap(サイズ)ね。 でっかいBitmapから Graphicオブジェクト作成 Graphic.fromImageだっけ?
Graphicsオブジェクトは特定のbitmapに書き込める筆記用具のようなものです。 絵じゃないよ。
42 :
デフォルトの名無しさん :2006/09/11(月) 23:33:49
???益々意味が。。 Bitmap でかいやつ = new Bitmap(サイズサイズ); Bitmap 小さいの = new Bitmap(なんか); Graphics g = Graphics.FromImage(でかいやつ);→グラフィックスにしてるつもり g.DrawImage(ちいさいの, 位置);→でかいグラフィックスに小さいのをならべたつもり そっから先が。というかそもそも間違ってるのかも。
でっかいBitmap用のGraphicオブジェクトでDrawImage(bitmap). 必要な回数だけDrawImageを繰り返す。
>>42 picturebox.Image=でっかいbmp;
refresh();
>>42 Graphics.FromImage は Image を Graphics に変換するんじゃなくて
《Image に描画するための Graphics オブジェクトを作成する》 んだぞ?
46 :
31からずっと :2006/09/11(月) 23:42:43
できたーーーー。 ImageとGraphicsの違いってか意味が分かってなかった。 ほんとありがとうございます。 VC触って4日目なんですがオブジェクト?とかその当りをちゃんと勉強します。ほんとどうもです!
VC かよ。VC はスレ違いだぞw
VCだとするとCLI?
>>47 すいませんC#でした。無料らしいから落とした。C#の方が新しいぽいからC#にした。よしなんか作ろうと思って手探りでやってみた。助けてもらったありがとう\(^o^)/ヤルゼ
>>49 初めて間もないのに君は才能あるな。
CS-Boyと名乗りなさいw
本当に才能あるやつはこんなところで質問する前に理解するけどな。 と無粋なレスをしてみる
52 :
ぼよん :2006/09/12(火) 00:12:16
アニメーションGIFのファイル出力したいのですが どうやってらできるんでしょうかね? 標準のライブラリとかなさそうですしネットで検索しても見つかりません。
ファイル形式調べる。 そのとおりにファイルに出力。
55 :
ぼよん :2006/09/12(火) 00:27:13
えー・・・ごりごり書くしかないのですか・・・ 泣きそうです。 地味にやってみます。
出来るかどうかわからないけど… ダミーgif(フレーム設定済み)をフリーウエアで作る 以下 自作アプリ 読み込んで書き換え 保存 読み込む フレーム変える 書き換え保存 以下繰り返す。
57 :
デフォルトの名無しさん :2006/09/12(火) 02:19:35
よろしくお願いいたします。 MainFormで作成したテキストボックスに、 MainFormとは異なるクラス(クラス名:Class)で得られた値を 表示したいと思っています。 Classで得られた値をMainFormに返してテキストボックスに 表示すればいいと思うのですが、一つのメソッドで 複数回テキストボックスに表示したいため、 テキストボックスの変数をメソッドに渡すことを考えました。 private TextBox txt; // TextBox // MainForm.cs private MainForm(){ Method(txt); } // Class.cs private Method(TextBox txt) { TextBox.Text += "aaa"; <-ここで止まる TextBox.Text += "bbb"; } 以上のように作ったとき、Method内で処理が止まりました。 他クラスで得た値をTextBoxに表示するにはどのようにするのが よろしいでしょうか?
txt.Text += "aaa";
そのコードだと、そこで止まらないと思うぞ。 つっこむところはたくさんあるな。酔っぱらってる俺でいいならつっこむぞ。 ・TextBoxの名前にtxtはやめとけ。普通文字列かと思うだろうが。 ・MainForm()内の Method(txt) は Class.csに記述されたクラスのMethod(TextBox txt )を呼んでないぞ。 仮にそちらをClass1とすると、 Class1 class1 = new Class1(); とインスタンス化してから class1.Method(..)と呼ばないといけないぞ。 しかもClass1のMethodをpublicにしないといけないぞ。 ・Class.csのMethod(TextBox txt) だけど、引数として渡したTextBoxを使ってないぞ。 private Method(TextBox txt) { txt.Text += "aaa"; txt.Text += "bbb"; } としないと意味がないぞ。 ・Textプロパティを二度変更してるけど、意味がないぞ。後の値になるだけだぞ。
60 :
59 :2006/09/12(火) 02:32:08
最後の指摘は間違ってるぞ。+=を見逃したぞ。すまんだぞ。
Method メソッドの戻り値がないな
>>57 というより、コンパイルが止まったんだろ?
そうだと言ってくれ。
>他クラスで得た値をTextBoxに表示するにはどのようにするのがよろしいでしょうか? [1] OtherClass に public string[] Text プロパティだかメソッドだかを用意してアクセス [2] MainClass のインスタンスを OtherClass に渡して MainClass.SetText(string[] texs) を呼ぶ [3] イベントでも使う とりあえず3種類。どれでも好きなの使え
class MainForm.csのクラス
{
private MainForm() //←これMainFormクラスのコンストラクタだっりする?
{
//つーかコントロールの初期化してないってもありえるぞ
Class1 class1 = new Class1();
class1.Method(txt);
}
}
-----------
class Class1
{
public void Method(TextBox txt)
{
txt.Text += "aaa";
txt.Text += "bbb";
}
}
……だぞ。
>>63 そういうレベルの話じゃないと思うぞ。
65 :
デフォルトの名無しさん :2006/09/12(火) 03:56:40
メソッド名を大文字ではじめるのが気に入らない
C#では大文字ではじめることが推奨されてますが
67 :
デフォルトの名無しさん :2006/09/12(火) 06:38:47
Javaはどんどんやばい方向に向かってるな 信者はついていってるのか?
C#って存在価値あるの?
69 :
57 :2006/09/12(火) 17:56:22
59-66のみなさん、ありがとうございます。 申し訳ございません、簡略して書きすぎてしまいました。 実際のコードでは、以下のようにしています。 63さん、ありがとうございます。[1]か[2]の方法で考えてみます。 [3]のイベントを使う方法については、調べてみます。 class MainForm.csのクラス public MainForm(){ // コンストラクタ InitializeComponent(); // テキストボックスの初期化 } private void btn_textbox(object sender, EventArgs e){ Class class1 = new Class(); class1.method(txt); // txtはテキストボックスに当てた変数 } class Class { public Class(){ // コンストラクタ } public void method(TextBox txt){ txt.Text += "aaa"; txt.Text += "bbb"; } }
Textに2回連結する意味が分からない
可読性重視?
txt.Text += (ry より、txt.AppendText(ry のほうがよくないかい?
その辺はうまくオーバーロードされてんじゃないの? と適当言ってみる
txt.Text += "aaa" + "bbb"の方がたぶん最適化されるから速い
txt.Text += (ry と txt.AppendText(ry は動作が違う
.AppendText("aaa" + "bbb") がベスト。
気にする必要なし
まぁそうなんだけど
つーか同じタイミングで2回連結するんなら連結した文字列("aaa"+"bbb")を返すメソッドにして メインの方でAppendTextすればいいだけじゃないの?
80 :
デフォルトの名無しさん :2006/09/13(水) 21:50:56
PictureBoxをクリックしたときにPictureBoxでの座標を得るにはどうすればよろしいのでしょうか
PointToC(ry
なんで略すの? Point p = pictureBox1.PointToClient( Control.MousePosition );
>>82 VC#ならその辺まで入れれば候補確定すんじゃね?w
文字列検索ソフトを作ろうと思うのですが 項目内特定の文字列の色を変えるにはどのライブラリを使えばいいんでしょうか? リストビューだと項目内全部色が変わるので
お前は RichTextBox でも使ってろや
87 :
85 :2006/09/14(木) 03:19:33
>>86 ファイルのパスもリストアップしたいので
クラムは必須なんです
ハマグリが必須なプログラムってどんなのだ?
90 :
32 :2006/09/14(木) 14:21:00
たびたびスイマセン。 複数の画像をマウスで自由に移動させれるようにしたいのですがどうすればよいでしょうか。 パズルというか福笑いのようなものをイメージしているのですが。
もうc#でも何でもいいんだな。 ゲームの本読んでべんきょうしてね。
92 :
32 :2006/09/14(木) 14:33:48
あーそうか別にC#の質問ではないですねスイマセン失礼します
わかんねえけどこんな感じかな? マウスのボタン押した場所に動かせる画像があるか調べる。(座標の比較) あったらその中の一番上の画像を選択したと記録。 マウスのボタンを放したら画像選択を取り消し。 選択中にボタン押したままマウス移動したら選択画像の移動処理。
94 :
デフォルトの名無しさん :2006/09/14(木) 20:34:37
メニューのショートカットキーについてなんですが、 VS2005で使われているように、(Ctrl+W)+(Ctrl+W)でWebヘルプ起動という ような感じにショートカットキーを設定したいのですが、どうしたらいいですか?
KeyUp とか使って自前で管理汁
>>96 やっぱりそれしかありませんか…
ありがとうございました。
98 :
デフォルトの名無しさん :2006/09/15(金) 09:03:29
誘導されてきました。 あるクラス(関数?)から「品名1、品名2」(topic)についての 「名称、数量、値段」(item)の数値が吐き出されてくるんですが これをlistviewにDetail表示するために 文字列を結合して "名称:数量:値段:名称:数量:値段" のような文字列にし 作った文字列をtopicの数ごと分割、さらにitemごと分割して表示するクラスに渡して表示していたのですが もっと上手な表示方法ありませんでしょうか・・・・ ↓こんな表にしたいんです ┏━━━┳━━━┳━━┳━━┓ ┃ ┃名称 ┃数量┃値段┃ ┣━━━╋━━━╋━━╋━━┫ ┃品名1 ┃りんご ┃10 ┃1000┃ ┃品名2 ┃みかん┃30 ┃1500┃ ┗━━━┻━━━┻━━┻━━┛ わかりにくくて申し訳ありませんが、よろしくおねがいします
「あるクラス」からはどういう風にデータを受け取ってんの? データの件数は可変or固定?
100 :
デフォルトの名無しさん :2006/09/15(金) 10:18:18
>>99 「あるクラス」は実は取ってつけた物で、よくわからないんです
string[] topic = {"品名1"、"品名2"};
string[] item = {"名称"、"数量"、"値段"};
としたとき「あるクラス」から吐き出されるものは
品名1の名称
品名1の数量
品名1の値段
品名2の名称
品名2の数量
品名2の値段
という順で一つづつstringになって出てきます。
string[] item = {"名称"、"数量"、"値段"、"在庫"};
とすれば
品名1の名称
品名1の数量
品名1の値段
品名1の在庫
品名2の名称
・
・
となります。
データの件数はtopic×itemの数になります。
>>100 > という順で一つづつstringになって出てきます。
というのはstring[]が返ってくんの?
それとも何かメソッドを呼ぶたびに毎回違うstringの値が返ってくるとか?
102 :
デフォルトの名無しさん :2006/09/15(金) 10:54:29
コールバック(?)とかで中身に関してはDLLくっ付けただけなのでよくわかりません・・・・ string[] topic →┏━━━━┓ string[] item ┃blackbox┃ ┗━━━━┛
103 :
デフォルトの名無しさん :2006/09/15(金) 10:56:06
>>102 データ受信コールバック(?)とかコメントされているだけで
中身に関してはDLLくっ付けただけなのでよくわからないんですが・・・・
string[] topic →┏━━━━┓→string string string........
string[] item ┃blackbox ┃ string string string string stringいっぱい
┗━━━━┛
こんな感じになってるみたいです
言ってることがよくわからん メソッドのシグニチャはどうなってんだ string[] Method( string[] topic, string[]item ) なのか? とりあえず糞仕様なことは確か
>>103 C#の用語で語ってくれ
自分なりに咀嚼した解説は不要
そして目的を明確にしろ
>>98 を見るところでは、こういう処理をしたいと思うのだがどうか
1.あるクラスから値を受け取る ← あるクラスとやらの仕様は変更できない
2.受け取った値を整形する ← この処理の効率化を知りたい
3.ListViewに表示するクラスに2の値を渡す ← このクラスは変更できるのか?
まずこれを明確にしろ
・あるクラスとやらの戻り値の型
・あるクラスとやらから戻ってくる値のサンプル
・上記で言う3のクラスに渡すための方法と、型、値のサンプル
・ListViewに表示するためのクラスは変更できるのか
断片的な処理と目的だけを書いてもコミュニケーションは成り立たない
自分自身が理解で規定無いのであれば、少なくとも我々との共通言語である C# ベースで語ってくれ
106 :
デフォルトの名無しさん :2006/09/15(金) 12:25:47
>1.あるクラスから値を受け取る ← あるクラスとやらの仕様は変更できない
>2.受け取った値を整形する ← この処理の効率化を知りたい
>3.ListViewに表示するクラスに2の値を渡す ← このクラスは変更できるのか?
内容がわからないため変更できないのは1番だけです
2、3番に関してはこれから改良にするにあたって
無くなっても変わってもかまわないと考えています。
>・あるクラスとやらの戻り値の型
string型で返ってきます
>・あるクラスとやらから戻ってくる値のサンプル
>>100 のような順番に文字列が出てくるだけです
>"名称:数量:値段:名称:数量:値段" なぜこんなことしてるんですか?
108 :
デフォルトの名無しさん :2006/09/15(金) 12:45:36
>>107 一つづつ出てくる値をlistviewに表示していく方法がわからなかったもので、
一度全ての値を結合させて、また分割して一気にlistviewに表示してました。
でも、もっとよい方法があればなぁと思ってここにきました
>>108 結合して分割して・・って、単純にそれを省けばいいんじゃないの?
110 :
デフォルトの名無しさん :2006/09/15(金) 12:54:32
>>109 そうなんですが、
listviewに表示する際には配列で1行分渡さなきゃならないんじゃないかと理解していたもので。
しかも文字列が個別に出てきちゃうもんだからどうしたもんかと
>>106 > >・あるクラスとやらの戻り値の型
> string型で返ってきます
と
> >・あるクラスとやらから戻ってくる値のサンプル
>
>>100 のような順番に文字列が出てくるだけです
は、一致しませんが
string型であってstring[]じゃないんだよな?
そうなると
>>104 の推測とも違う
一体どういう処理になるんだ?
とりあえずそのクラスから文字列を引き出してDebugに書き出すだけのコードを書け
I/OのIがハッキリしないのにOに至る処理なんてアドバイスできない
>listviewに表示する際には配列で1行分渡さなきゃならないんじゃないかと理解していた ということは今はその理解は改まったということだよね? それなら何の問題が? 取得した文字列を結合せずに1つずつ表示していけばいいんじゃないの
その関数とやらの戻り値の型と引数の型を書け。 話はそれからだ
勝手な推測だけど CALLBACK MyCallBack(string ReturnValue) じゃないかな
DDEかなんかでやりとしてるんだろうな。
116 :
85 :2006/09/15(金) 13:15:13
HRESULT Method( string[] topic, string[]item ) だろ多分。
119 :
85 :2006/09/15(金) 13:18:26
>>117 ちゃんと英語で書いてくれないとわかりません
デフォルトでついてるライブラリですか?
>>119 Wha'dya mean 'Library'?
121 :
85 :2006/09/15(金) 13:22:46
正しくは what r u say meaning it is lib
>>119 オーナードロって自分で描画コードを実装するって事だよ。
クライアント領域クリアしてデータを分析して、それにあった文字を好きな色で描画するだけ。
お前書けんの?
123 :
85 :2006/09/15(金) 13:25:33
>>122 描画コード?
そんな難しいのじゃなくて標準ではないのですか?
リストビューに特定の文字列だけ色変えれるようなやつ
なんでこんなすごく頻繁に使う機能がついてないのかねー
(・∀・)カエレ!!!
>>123 知らない。
アクセスも昔、特定行だけ色変えることができなかった。
以上で終了。
126 :
85 :2006/09/15(金) 13:30:09
なんか荒らししかいないみたいね 来るスレ間違えたみたい 他スレで同じ質問するけどマルチとか言わないでね
>>126 嵐ねえw
そっち行ったらここのスレを貼っといてね
ここで嵐にあいましたってw
128 :
98 :2006/09/15(金) 13:38:31
>>115 そうなんです
だから値を吐き出す関数の部分よくわからなくって・・・・
topic item とくればddeでしょ。 とりあえず格納用のオブジェクト作ってコレクションに収納じゃだめ?
>>128 関数の扱いが分からないのか、取得した文字列の操作が分からないのか、ListView処理の定石を知りたいのか、ハッキリしてくれ
いくら初心者向けのスレとはいえ、流れがあまりに幼稚すぎる
>>123 特定の文字だけ色を変えるListViewインタフェースなんて見たこと無いな
頻繁に出てくるってくらいなら、分かりやすい例を教えてよ
単に結果をリストっぽく出したいならWebBrowserコントロールでHTML表示したら?
コピペもできるし親切でいいじゃん
Expression使えばListViewに近い動作にもできるし
132 :
98 :2006/09/15(金) 15:52:48
>>130 関数の中身はDDE使って値を取ってきてくれるDLLをくっつけたので変えようがないと思うんです
stringでたくさん吐き出されてくる文字列を
どのようにして
>>98 のようにlistviewに表示すればエレガントですか
と質問変えたほうがいいかもわかりません・・・・
133 :
85 :2006/09/15(金) 15:54:53
>>131 リストアップだけだと、検索文字列がどこにあるか、
ちょっと探さないとだめじゃないですか
すぐに見つけやすいように、文字の色もしくはバックグラウンドの色を変えたいんですよね
その方が便利だと思いませんか?
htmlって・・そんなダサいのはやりたくないな
>>132 どのようにして listview に表示しているのか、まったく想像できないんですが……
136 :
98 :2006/09/15(金) 16:12:16
>>133 > すぐに見つけやすいように、文字の色もしくはバックグラウンドの色を変えたいんですよね
> その方が便利だと思いませんか?
はい、便利です
ただし、ユーザ側の利便性と、開発者の利便性を同列にしないこと
> htmlって・・そんなダサいのはやりたくないな
ユーザが便利であることが重要であり、開発者のエゴは心の奥にしまって置いてください
どうしてもオーナードローもHTMLもイヤだというならWPFでも検討してください
まだ正式版じゃないですが
>>136 結局ListViewの使い方がわからないのね。
ListViewItem item = new ListViewItem("text1");
item.SubItems.Add("text2");
item.SubItems.Add("text3");
lv.Items.Add(item);
前スレの最後に感動した
質問です。 あるファイルが更新されたらされた分だけテキストボックスに表示するという linuxのtailコマンドのようなプログラムを作っています。 ファイルサイズが変わったタイミングでファイルをSystem.IO.StreamReaderで 読み込みその内容をテキストボックスに書き出すというやり方で作ろうと思うの ですが、前回ファイルの最後まで表示したら、次にファイルが更新された時は 前回のファイルの最後だった位置から読み込みを開始したいのですが、 StreamReaderではそれはできないのでしょうか? 開発環境はVS2005 EE です。 わかる方いらっしゃいましたら宜しくお願いいたします。
141 :
85 :2006/09/16(土) 01:04:45
>>140 バッファで読み込みたいんだろ?
できるよ
ワロス
>>141 あ、StreamReaderでできるんですね。
ありがとうございます。
StreamReaderで読み込んでいる位置を取得する方法と、
特定の位置から読み込みを開始する方法がわからないので、
できればそこの部分をご教授頂けるとありがたいです。
>>143 Stream での読み込み位置の取得・設定方法は分かるか?
145 :
140 :2006/09/16(土) 01:53:14
>>144 Streamはわからないです。
StreamReaderではなくStreamを使えばいいって事でしょうか。
調べてみます。
>>145 StreamReader.BaseStream.Seek()
>>145 StreamReaderのBaseStream.Positionをファイル読んだ後に保存して、次にファイル読む前にそれを設定してやればいい。
StreamReader.BaseStreamとFileStream.Positionを調べてくれ。
>>145 System.IO.FileStream fs = new System.IO.FileStream();
fs.Seek(0, SeekOrigin.Begin);
149 :
140 :2006/09/16(土) 02:30:20
>>146 ,147,148
おー、ご親切にどうもです!
さっそくやってみます!
>>98 は
ListViewItemConverter について語りたかったのかな?
リッチテキストボックスに関する質問です。 リッチテストボックス内の特定の文字を探し出して色を変えたりする 方法はわかったのですが、テキストボックス内に追加するときに色を 指定する方法ってないのでしょうか? append時に色を引数に指定できたりしたら便利なのですが。 どなたか宜しくお願いいたします。
>>151 AppendTextはTextBoxBaseから継承しているのでRichTextBox独自の機能はサポートしていません
RichTextBoxを継承してAppendTextのRTF版を実装してはいかがでしょうか
質問です。 プログラム上からcsc.exeのあるパスを取得したいのですが、どうしたらいいでしょうか? やはり自分で検索を掛けるしかないのでしょうか?
大抵のことは Microsoft.CSharp.Compiler.Compile から何とかなるのではないか
System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
Microsoft.Build.Utilities.ToolLocationHelper.GetPathToDotNetFrameworkFile() (2.0のみ)
コンパイルしたいんなら
>>154 かMicrosoft.Build.Tasks.Csc(2.0のみ)を使えば?
>>154 それだと、適用できないコンパイラオプションがあるみたいで、
どうもうまくいかないのですが…
>>155 ,156
取得できました!ありがとうございました。
>>158 Microsoft.CSharpでコンパイルし始めたのがずいぶんと前なので
詳しくは覚えていないのですが、リソースファイルとか
アイコンの設定などが出来なかったような気がします。
そりゃ調べ方が足りんかっただけだな
先日からC#をはじめた超初心者ですが、教えてください。 よく入門本に書いて有るとおりに、単純にフォームにデータセットのテーブルをドラッグして見たのですが ナビゲータボタンを操作しても一向にデータの追加も、更新が行われません。 ほかには一行もコードを書いていない状態でこれなんですが、いったいどこが悪くてこうなっているのか ご存じの型教えてください。
>>161 入門書の手順どおりやってますのレベルなら、
VS2003と2005でいろいろ違うから、
その入門書の対象としてるバージョンと自分の環境を合わせとけ。
163 :
デフォルトの名無しさん :2006/09/18(月) 10:37:32
GUIしか作ってないから動くはずがないだろw
>>162 一応環境は合わせています
>>163 秀和の入門書ですけど、この記述によるとこれだけで単純に入力や更新削除は出来ると
記載されて居るんですがGUIしか作っていない状況なんですか?
どなたか教えて下さい。
以下のC#コードを実行すると、3行目がコメントアウトしている/いないにかからず、
A1.bmpとA2.bmp は同じファイルになります。
Bitmap BitmapA = new Bitmap(@"C:\A.jpg");
BitmapA.Save(@"C:\A1.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
// Bitmap BitmapB= new Bitmap(100, 100);
BitmapA.Save(@"C:\A2.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
ところが、A.jpgの横幅が奇数ドットの時?は3行目がコメントアウトしているか
していないかで違うファイルができてしまいます。
(画像は同じに見えるがcmpすると違う)
これってやっぱり.NETのバグなんでしょうか?
ちなみにA.jpgは
http://www.watch.impress.co.jp/av/docs/20060313/ceb8_06.jpg です。
166 :
165 :2006/09/18(月) 11:51:37
↑訂正 × 3行目がコメントアウトしているか していないかで違うファイルができてしまいます。 ○ 3行目をコメントアウトしていると同一ファイル、していないと違うファイルができてしまいます。
>>164 まず本に書いてある手順通りにやってみてよ
「できます」「やれます」ってキャッチコピーだけ見て質問してない?
161の説明不足ですな。 手順を知らずに解決できるのはエスパーです。
コンパイルなんてないぞ。 デバッグ開始だろ?
>>165 >以下のC#コードを実行すると、3行目がコメントアウトしている/いないにかからず、
>A1.bmpとA2.bmp は同じファイルになります。
これが正常な動作
>ところが、A.jpgの横幅が奇数ドットの時?は3行目がコメントアウトしているか
>していないかで違うファイルができてしまいます。
これが本当ならバグ
>>165 C#2005でちょろっとやってみたが、確かにそうなった。GDI+のバグだろう。
ちなみに二回目のSaveの前にBitmapB.Dispose()したら2つのBitmapは同じになった。
173 :
165 :2006/09/18(月) 22:09:41
>>171 ,172
レスありがとうございます。
やっぱりバグですか・・・
今作っているソフトではSaveでファイルに保存するのではなく
MemoryStreamに保存してそこから画像のハッシュ値を生成しているので
1bitでも違ってしまうと致命的なんですよね・・・
使い終わったBitmapはすぐDispose()するようにしてみます。
ありがとうございました。
>>173 海外のサイトで似たような事例見たことあるけど、物理処理とのタイミングが合わずに発生するバグだった気がする
そこではSleepなどで時間を置くことで対処していたが、Disposeで対処できるならそっちのが良いと思う
176 :
165 :2006/09/19(火) 04:49:11
>>174 ,175
レスありがとうございます。
ソースを見直して使い終わったリソースはすぐDispose()するようにしてもだめで、
ビットマップ生成後Sleepを入れてみてもだめで(念のためSleepとDoEventsをforで何度も繰り返すようにしてみたがだめ)
結局、画像を読み込んだビットマップ Bmp_org に対して Bitmap tmp=new Bitmap(Bmp_org) として
このtmpからハッシュを作成するとなぜだかうまくいきました。
なぜうまくいくのかよくわからないのでちょっと怖いのですが、趣味で作っているソフトなんで
まあこれでよしとします。
ありがとうございました。
すみません。緊急でどうしても教えて頂きたいんですが よろしいですが?
まあ書いてみたら? 答が見つかるかどうかは保証できないが
>>179 ほんとうですか。ありがとうございます。
普段自分で調べてるのでほとんど2ちゃんねるとか使ったことないので
でも、今回ばかりはほんと急ぎで調べている時間がないので
助けて頂きたんです。よろしくおねがいします
急いでるんじゃなかったの(´・ω・`)?
釣られんなよ
どうせここまで引っ張った質問も@ITあたりで見つけた結論が面倒なやつだろ
「disposeすれば大丈夫なんですか?」みたいな
もしくは結果がバグ起因でKBにも載ってるやつとか
>>177 では質問をどうぞ
はじめまして。 CとC++とWin32でプログラム組んだことはあるんですが 今度、.netでWindowsアプリ作ることになりました。 C++で書く場合、どうすればいいでしょうか? とりあえず .net Framework2.0 を入れてみました。 あとは.netのリファレンスとSDKがあれば 作れますか? C++で作るならC#のコンパイラ?は必要ないですよね
VCExpressをインスコせよ
>>184 レスありがとうございます。
それはいわゆるIDEですよね?
それがないと作ることは不可能ですか?
もしできても、相当苦労するってことでしょうか?
>>185 無くてもいけるよ。フリーのIDEもあるし
メモ帳でもいいし
苦労するねー。特にGUI作る場合。
IDEでぺたぺたコントロールを張ったりインテリセンスで楽したりすることを 想定して作られたライブラリだからな
188 :
デフォルトの名無しさん :2006/09/19(火) 18:02:03
イベントのことで質問なのですが、 例えばコントロールの描画に、自作の描画を「追加」する場合、 (A)OnPaintメソッドをオーバーライドする(メソッド内でbase.OnPaint呼ぶ) (B)Paintイベントハンドラに自作描画関数を追加する という2種類の方法があると思うのですが、この2つの使い分けがよく分かりません。 多分、大抵は結果としては同じだけど、何か特別な場合はこちらを選ぶべきとか、 再利用性を考えるとこちらにすべきとか、ケースによって使い分けがあるように 思うのですが、経験が浅いため想像がつきません。 どういったケースにどちらを使うべきとか、両者の違いを簡単に解説して頂けたらと。。
>>188 コントロールを継承してその中に自作の描画処理を追加した場合、そのコントロール全てでその描画が適用される
コントロールのイベントに自作の描画処理を追加した場合、そのイベントでのみ描画が適用される
同じ描画処理を使いまわしたいなら前者、一つだけに描画したいなら後者
>>188 (A)はなんらかのコントロールを継承したクラスで定義する。
base.OnPaint(つまり継承元のOnPaint)の前後に好きな処理を追加できる。
またbase.OnPaintを呼ばなければ完全に描画をコントロールできたりする。
実際、Paintイベント自体がbase.OnPaint()を遡って行った先の
Control.OnPaint()でファイアされてる。
特定のコントロールインスタンスだけにイベント付けたいならPaintを追加する。
そのクラスなら全部イベント発生させたいならOnPaintを定義する。
>>185 自分はエディタとcsc.exeでやってる。
なんでVC#Expressを使わないの?無料なのに
194 :
183 :2006/09/19(火) 19:41:19
ここは .net もOKのことならOKかと思ってました。 すれ違いですいません。 とりあえず、できそうです。 みなさんありがとうございました。
>>165 ビットマップの横バイト数が4の倍数でないとき、各ラインのパディン
グでゴミが入るのは、Windows的には「そういうもの」だと思ってたけ
ど。
ファイルごとハッシュ計算するのが間違いでしょ。
196 :
177 :2006/09/19(火) 20:59:55
誰も教えてくれそうになので 今から首釣ってきます。 さようなら
はいはい 釣り乙
198 :
183 :2006/09/19(火) 21:30:17
Microsoft(R) Visual C# 2005 Compiler version 8.00.50727.42 for Microsoft(R) Windows(R) 2005 Framework version 2.0.50727 を使ってコマンドラインでC#のコードをコンパイルしたいのですが、 なかなかうまくいきません。 ウィンドウをひとつ表示させるためのコードと コンパイル時に必要なオプションを教えてください
199 :
183 :2006/09/19(火) 21:36:37
事故解決しました。
200 :
188 :2006/09/20(水) 07:56:58
>189-190 大変分かりやすかったです。ありがとうございました。
201 :
デフォルトの名無しさん :2006/09/22(金) 02:08:18
ある自作dllをC#プログラムに組み込んで使用したいと思っております。 ただ、このdllの戻り値がHRESULT型や引数にBSTRを使っており、 どのようにこれらの型を使えるようになるのかわかりません。 例えば、HRESULT method(BSTR str1, BSTR str2)というのは、 Dllimportの下にどのように書けばいいのでしょうか? おそらく、COMを使うための書き方があるのだと思うのですが、 わかりません。 教えていただけたら幸いです。 using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace TEST { public partial class TEST : Form { [DllImport("TESTDLL.dll")] // TESTDLL.dllが使いたいdll(COM) // この部分にどのように宣言していいのかわかりません。 public TEST(){ InitializeComponent(); } private void btn_method_Click(object sender, EventArgs e) { // この中にdll関数を使いたい } } }
static IntPtr method(string str1, string str2) でいいんじゃね
>>201 そのDLLが間違いなくCOMならDllImportでなくてCOM Interopを使う。
プロジェクトの参照設定
204 :
201 :2006/09/22(金) 02:30:30
202, 203さん プロジェクトの参照設定でdllを登録してみました。 そうすると、BSTR→string, HRESULT→voidというように 各メソッドの引数が変わったように思います。 なるべく、HRESULTの型など、オリジナルのまま(といえばいいのかな?) を使いたいと思っていますが無理でしょうか・・・?
dll なら static IntPtr method([MarshalAs(Bstr)] String s1, [MarshalAs(Bstr)] String s2); と宣言して、 ふつうに method("a", "b"); てな感じで。 でもそれdllじゃなくてCOMオブジェクトのメソッドでそ? CoCreateInstance から自前でやれるんじゃなかったら参照の追加で作られるラッパに 頼るのがいいと思うけど。
HRESULTはともかく BSTRをそのまま扱いたいってどういう場面?
207 :
201 :2006/09/22(金) 02:45:02
205, 206さん ありがとうございます。 CoCreateInstanceを自前でやりたいと思っております・・・ ただ、みなさんの話が私にはまだ高度すぎて、よくわかっておりません。 COMを扱うこと自体初めてでとまどっております。 206さん、 そのまま扱いたい理由として、BSTR→stringなど、ラッパによって 引数が変わることにより、動作などが異なるかなっていう安直な 考えをしてしまったためです。HRESUT→voidになったら、HRESULT を返さないから、HRESULTを返すメソッドが成功かどうかわからない かと思って。
>>204 string は BSTR にマーシャリングされるし、
S_OK 以外が帰ってくるような場合には ComException がスローされる。
たぶん
>>207 HRESULTがvoidになるのではなく、HRESULTでエラーが帰ってきた場合はCOMException例外になる。
COMExceptionのErrCodeでHRESULTの値は参照できる。
>CoCreateInstanceを自前でやりたいと思っております・・・ ここから自前でやりたいならVC++2005をお勧めする。
自前でやるならHRESULTはPreserveSig属性でintで受けれるかな?
>>207 MarshaクラスとSystem.Runtime.InteropService 以下のクラスを調べればOK。
ネイティブのBSTRとかHRESULTとかは基本的にIntPtrで宣言しておいて、
string -> BSTR は Marshal.StringToBstr とか。使い終わったら Marshal.FreeBstr。
記憶で書いてるので多少違ってるかもしれないけど。
個人的には時間の無駄だと思う(言葉遣い悪くてごめん)。
213 :
201 :2006/09/22(金) 03:07:39
208-212さん ご返信ありがとうございます。 「マーシャリング」とかIntPtr型をやはりしっかり理解していないように 思います。このような状態で質問してしまって申し訳ございません。 勉強します。 212さんがおっしゃるとおり、CoCreateInstanceを行うのは時間の無駄? になるのかもしれません。C#の習得にはよいのかもしれませんが・・・ まずは「参照の追加」をして、このdllを使用したいと思います。 ちなみにHRESULT→void型になったのメソッドのエラー検出は、 try-catchを使ってCOMExceptionを検出するというので正しいでしょうか?
214 :
デフォルトの名無しさん :2006/09/22(金) 06:04:14
ファイルからデータを読み込んでそのままstructにコピーしたいんですけど、 どうしたらいいですか? struct st{ char a[50]; char b[30]; } ↑のような感じのstructにしたいんですけど、エラーが出てしまいます。。 コラム数が多いので、st.a =....みたいなカタチはさけたいです。。 よろしくお願いします。
>>214 struct st{
char[] a;
char[] b;
public st(int size_a, int size_b){
a = new char[size_a];
b = new char[size_b];
}
}
st s = new st(50, 50);
エラーの内容を書きましょう。 データをbyte[]に読み込んでそれを単純にstructにしたいんだろうが、 固定長の配列が定義できないのだろうか? よくわからんのでヒントになるかどうかわからん。 [MarshalAs(UnmanagedType.ByValArray,SizeConst=50)] public char[] a;
217 :
デフォルトの名無しさん :2006/09/22(金) 11:52:41
宜しくお願いします。 フォーカスがある間、一時的にTextAlignが変更される仕様の TextBoxを作ろうとしてます。 例えば、通常は左寄せで、入力中だけ右寄せに変わり、フォーカスが 他へ移ると左寄せに戻ります。 //Sample void TextBox1Leave(object sender, System.EventArgs e) { this.textBox1.TextAlign = HorizontalAlignment.Left; } void TextBox1Enter(object sender, System.EventArgs e) { this.textBox1.TextAlign = HorizontalAlignment.Right; } しかしこれを実行し[Tab]キーで移動しようとすると、 Leave時に、(TextAlignを左寄せに変更しようとして?)フォーカスが 他へ移動せずこのTextBoxに戻ってしまいます。 それが原因で、再度Enterイベントが発生してTextAlignが右寄せに戻って しまうどころか、[Tab]キーでのフォーカス移動さえできません。 Leave時に、フォーカスが他へ移動しつつTextAlignを変更できる方法や 解決策はないでしょうか?
keyDownでたぶけんしゅつ 終了?
マウスの移動した場合はどうする。
class TextBoxEx : TextBox { private bool CancelFocus; protected override void OnGotFocus( EventArgs e ) { if( this.CancelFocus ) return; this.CancelFocus = true; this.TextAlign = HorizontalAlignment.Right; this.CancelFocus = false; base.OnGotFocus( e ); } protected override void OnLostFocus( EventArgs e ) { if( this.CancelFocus ) return; this.CancelFocus = true; this.TextAlign = HorizontalAlignment.Left; this.CancelFocus = false; base.OnLostFocus( e ); } }
221 :
デフォルトの名無しさん :2006/09/22(金) 14:02:21
Vista RC1 の csc.exe で /target:winexe を付けても、 実行すると DOS窓が出て来てしまう……orz どなたか回避方法を教えてください m(._.)m
222 :
217 :2006/09/22(金) 14:05:13
>>220 思い通りの動作になりますね…。
うーん、なぜ。
とりあえず実現できると分かり、ほっとしました。ありがとうございました。
LostFocus使えば、CancelFocus使わなくても動くっぽいですね。
LostFocusは使用があまり好まれないみたいですが、動作上はLeaveと何が違うんだろ…。
223 :
デフォルトの名無しさん :2006/09/22(金) 14:22:07
電卓のライブラリを作成し、プロジェクトで参照設定しましたがツールボックスに 電卓のコントロールが表示されません。 ソリューションエクスプローラからドラッグアンドドロップすれば、ツールボックスに 登録されるとのことですが、追加できません。 使用方法を教えて下さい。
IConponentかControlから(間接でも可)継承してる? それと、そのコンポーネントをデザイナで編集用に開いてるときは表示されないよ
225 :
デフォルトの名無しさん :2006/09/22(金) 14:31:33
>>224 レスありがとうございます。
>IConponentかControlから(間接でも可)継承してる?
していません。
>それと、そのコンポーネントをデザイナで編集用に開いてるときは表示されないよ
電卓は別ソリューションでビルド済み(ライブラリの参照のみ)なので開いていません。
電卓クラスはpublicになってる?
コントロールじゃないって… そのクラスは何者? どうやって表示してるの?
Componentでは?
229 :
デフォルトの名無しさん :2006/09/22(金) 14:47:13
∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄
どうやって作ったの?
232 :
デフォルトの名無しさん :2006/09/22(金) 14:58:28
皆さんすいません。 言い方が正しくありませんでした。 電卓コンポーネントは、電卓プロジェクト(ウインドウズライブラリ)内に作成したフォームでは使用可能です。
ツールボックスアイテムの追加 → .net → 参照?
234 :
デフォルトの名無しさん :2006/09/22(金) 15:39:58
>>233 大変ありがとうございます。
ツールボックスへの追加ができました。
皆様、お忙しい中アドバイスありがとうございました。
>>222 の自己レス。
>LostFocus使えば、CancelFocus使わなくても動くっぽいですね。
というのは間違いで、CancelFocusの判定は必要でした。
.NET Framework 1.1 だと SSL + Basic 認証が通らなくて、2.0 だと正常に通るんですけど、
HttpWebRequest req = (HttpWebRequest) WebRequest.Create("
https://gmail.google.com/gmail/feed/atom ");
req.Credentials = new NetworkCredential("(UserName)", "(Password)");
req.GetResponse();
↑このコード、何か問題ありますか?(;´Д`)
こんばんわ、お世話になります。 C#でデスクトップにドッキングするものを作る事は可能でしょうか?。またドッキングしている ように見えるアプリはサイズと配置を調整しているだけなのでしょうか?。
>>237 タスクバーみたいなやつ?
ならSHAppBarMessageでググれ
>>238 調べてきました。タスクバーに関連する情報を収得できる事はわかりましたがタスクバーもどき?を
作るのとは少し違う感じがしました。使い方を知らないだけかも^^;。
今日は遅いのでまた明日詳しく調べてみたいと思います。
ありがとうございました。
>>215 レスありがとうございます。
初期化で入れる方法もありますよね!
>>216 レスありがとうございます。
エラーはSyntax error, bad array declarator. To declare a managed array the rank specifier precedes the variable's identifier
だそうです。。。
>データをbyte[]に読み込んでそれを単純にstructにしたいんだろうが、
そのとおりです。本当はchar[]に読み込んでやりたいんですけど;
Marshal、よくわからないんですけど、なるほど、そういうやり方もあるんですね。
ptrToStructureは使えますか?
教えてちゃんでごめんなさいm(__)m
ググってもよくわからなかったんで(^^;
>>239 タスクバーにドッキングするバーならBandObject
242 :
236 :2006/09/22(金) 23:54:44
自己解決。AllowAutoRedirect = false にして 301 を自前で処理すると取れるようになりました。 なぜだああああ!!!!。・゚・(ノД`)・゚・。
244 :
デフォルトの名無しさん :2006/09/23(土) 00:42:25
本の話なんだけどいいかな? Cを一通り勉強したあと、C#の勉強を始めたんだが、 「C#によるプログラミングWindows」ってどうかな? Amazonでの評価は良かったんだけど、 オブジェクトも含め、全てのコードを自分で書くっていうスタイルが珍しい。 まず言語を集中して覚えたほうが良いのかな。 この本を読み終えればそれなりの力はつくのかな? 読み終えた人の感想が聞きたい。
じゃばらーにかこまれてかたみのせまいC#なおいらにみらいはありまんか?
C#って評判悪いんですか?
さあ
うまく作ったC#のアプリは最初の起動とメモリの消費量こそ問題はあるが、 動いてしまえばネイティブとあんまり変わらん。
C言語で stdlib.h に記述されていた system 関数のC#版はありますか。
こんなのじゃだめなん? string program = @"C:\Windows\System32\CMD.EXE"; string argument = @"/c dir c:\windows /p"; Process extProcess = new Process(); extProcess.StartInfo.FileName = program; extProcess.StartInfo.Arguments = argument; extProcess.Start();
extProcess.WaitFirExit(); を最後に付けると、DOS窓が閉じられるまで 待ってくれる。
×WaitFirExit ○WaitForExit
253 :
249 :2006/09/23(土) 08:03:40
>>250-252 やはり「1行だけで」とはいかなさそうですね。
それはいいとして、起動が確認できました。dクス。
Process.Start 静的メソッドもあるが。
>>246 C# スレでその質問して、悪い返事が返ってくるわけねぇじゃん。
巣にお帰り
DataGridViewで、ヘッダやセルのAutoEllipsisをfalseにしたいのですが、 AutoEllipsisプロパティがないみたいです。 等幅フォントを使用しているので、省略記号(...)が非常にうざいです。 文字列がはみ出す分は単に表示されないだけでよいのですが、どうしたらいいでしょうか。
うんちゃらDefaultCellStyleプロパティで WrapModeかんちゃら
259 :
デフォルトの名無しさん :2006/09/23(土) 14:26:20
フロントラインのプログラム教えてほしいんだが
いきなり前線と言われても、その、困る
261 :
257 :2006/09/23(土) 14:56:51
>>258 ありがとうございます。
WrapMode=true で、折り返しになり省略記号な消えたので良い具合なのですが、
折り返された2行目の文字が下から微妙に見えてしまいます。
これを見えなくしたいのですが…。
行高さやフォントの大きさは仕様上変更できず、
またPaddingで上を空けて文字を下げるようにすると、ちょっと文字が下がりすぎの
ように見えるし、フォーカス時の点線枠もPadding分下がってしまいます。
WrapMode = falseにすればいいんちゃう
263 :
257 :2006/09/23(土) 15:39:28
WrapMode = false の状態で、
>>257 の問題が起きます…。
265 :
デフォルトの名無しさん :2006/09/23(土) 22:38:48
やっぱりいきなりWinプログラミングするよりも、 コンソールアプリで勉強したほうが身に付くのかな?
作りたいものを作ればよし
オブジェクト指向という立場から見た場合、その両者の区分けに意味はないと思う。 ま、私自身は Hello World から始めるべきだという考えだがね。
>>265 俺的にはWinプログラミング推奨。
先にイベントドリブン方式に慣れてからコンソールやった方がいいかなと。
Application.Run つまりメッセージループは1つで、Form は複数の STA スレッドから作成される…… という設計は間違っていますか? やりたいのは、非同期スレッドから入力用のダイアログを表示したいってことなんですが、 Invoke で表示すると、NotifyIcon からのメッセージが何故か処理できなくなってしまいまして orz
>>265 今現在、どの程度知識があるかによって変わってくると思う。
プログラム初めての場合、GUIプログラム特有のイベントドリブンも一緒に理解しないといけないので、
コンソールアプリの方が、動きを追うのが楽なので C# の習得に注力できるのでよいと思う。
C#をある程度知っている or JavaやC++などのプログラム経験があるなどの場合、GUIプログラムを
やっても、問題ないと思う。
まぁ、実際はモチベーションの違いでなんとでもなるけどね。
モチベーションが高ければ、覚えることがいっぱいあっても何とかなるもんだし。
>>271 GUI アプリで別スレッド作って HttpWebRequest.GetResponse
ただし 401 出たら認証ダイアログ出したい
そんだけ
認証ダイアログはどっちのスレッドで作ってるの?
別スレッドの方……に作ろうかと考えていまして。
「NotifyIcon からのメッセージ」は何を意味してるのか分からん そのままウインドウメッセージ? それともメソッド実行?
>>275 すいません。言い忘れてたことが (;´Д`)
別スレッドから BeginInvoke 用いて呼び出したメソッド内で MessageBox を表示していたのですが、
表示している最中に NotifyIcon をクリックするなどしてイベントを発生させると……その時点でソフトが固まる現象がありまして。
その関連で、Invoke とモーダルダイアログは相性悪いのかな、と思ったのですが……
277 :
デフォルトの名無しさん :2006/09/24(日) 04:32:09
今ブラウザを作ってるんですが、お気に入りにfaviconを表示させるように
したいのですがどうすればいいのでしょうか?
お気に入りの .urlファイルのfaviconのアドレス(例えば IconFile=
http://www.youtube.com/favicon.ico )
に直リンクするのか?それともインターネットキャッシュから取ってくるのか?
多分一回見たやつはキャッシュからとると思うけど判別方法とか分かりません。
ていうかキャッシュのicon全部favicon.icoって名前なのにどうやって判別してるか
わかんないし・・
しかもそのicoファイルをimageListに加えるのかとかtreeViewにどうやってimageIndex指定
するのかも分からない・・・
助言お願いします。
あと、お気に入りに加え履歴も作りたいのですが、treeViewを二つ作るのか、
ひとつのtreeViewの中身を入れ替えるのかどちらがいいんでしょうか?
どうぞよろしくおねがいします。
>>276 スレッドやメッセージループをよく理解してないに10バーツ。
>別スレッドから BeginInvoke 用いて呼び出したメソッド内で MessageBox を表示していたのですが、
>表示している最中に NotifyIcon をクリックするなどしてイベントを発生させると……その時点でソフトが固まる現象がありまして。
それは問題なく動く。
回答がほしいなら再現性のあるコードをアップしたほうが早い。長いようならアップローダつかってな。
>>277 自分でダウンロードして自分でキャッシュしたらええやん
>imageListに加える
imageList.Add( icon );するだけ
>treeViewにどうやってimageIndex指定するのか
treeView.ImageList = this.imageList;して
treeViewNode.ImageIndex/ImageKeyを設定するだけ
まず使いたいコントロールのドキュメント見ろ。話はそれからだ
>treeViewを二つ作るのか、
>ひとつのtreeViewの中身を入れ替えるのかどちらがいいんでしょうか?
入れ換えるのが非効率なら2つ作れ
まあ基底クラス作って2つ派生しろ
×imageList.Add( icon );するだけ ○imageList.Images.Add( icon );するだけ
教えてください 表示されているmonthcalender から月の最初の日と最後の日を取得するにはどうしたらいいのでしょうか?
要するに月の日数が欲しいってこと? DaysOfMonth かなんかそんな感じのプロパティかメソッドかが DateTime にある
データグリッドビューの縦スクロールバーを表示するようにしても 行数が少ないとき(スクロールの必要がないとき)は勝手に消えます。 これを常に表示するようにしたいのですが、方法はあるでしょうか。 もちろんスクロールの必要がないときに表示しても機能的に意味がないのですが、 デザイン上の都合です。
284 :
201 :2006/09/24(日) 18:39:58
COMオブジェクトの参照追加についてこのスレッドで 質問していた者です。 戻り値のHRESULTについて、S_OK以外の戻り値を COMExceptionでcatchしようとしたのですが、全く例外処理が 走りません。わざとS_OK以外を返すようにメソッドを使ったとしても。 COMの例外処理を行うにはまだ何が処理、設定が必要なのでしょうか? 1. COMオブジェクト「仮名:COMObj」を「参照の追加」のCOMで追加 →HRESULT型を返すメソッドがvoid型になる。HRESULT型の戻り値がほしい 2. 以下のコードを記述 ...using一部省略 using ComObject // 追加したCOMオブジェクト using System.Runtime.InteropServices; namespace COMCall { public partial class COMCall : Form { ComClass comtest = new ComClass(); // CobObj内のクラス public COMCall(){InitializeComponent();} // コンストラクタ private void btn_on_Click(object sender, EventArgs e){ try{ comtest.ComMethod(); // ComMethod()はCOMObj内のメソッド return; } catch(COMException ee){ //このcatchにどうしても飛ばない int intError = ee.ErrorCode; } } } }
上のほうに出てなかったっけ? それか C#相談室かどこか。
286 :
269 :2006/09/24(日) 18:54:25
……ごめん。
>>276 のコード、よくよく見てみたら MessageBox.Show が別スレッドで実行されてた。
解決解決。よかったよかった (*ノ∀`)
……本当にごめん orz
288 :
(^-^) ◆MONSOON/qo :2006/09/24(日) 19:07:53
289 :
デフォルトの名無しさん :2006/09/24(日) 22:19:57
C#ってやっぱり最初にC言語を学ばないとついていけませんか?
別に
むしろC#からの方が非オブジェクト指向に汚染されなくていいかも
292 :
デフォルトの名無しさん :2006/09/24(日) 23:57:41
質問です。 ListViewでアイテムのクイック時 Ctrlキー を押してクイックした時と 同じように選択したいのですが、どのようにすれば良いのでしょうか? ちょうどListBoxのSelectionModeのMultiSimpleの機能です。 お願いします。
MultiSelect
294 :
292 :2006/09/25(月) 00:26:20
>>293 MultiSelectも試したのですが、MultiSelectですと複数選択するときに
Ctrlキーを押しながらクイックしなければ選択することが出来ませんでした。
したい事は、Ctrlキーを押さなくてもクイックで複数選択出来るようにしたいのです。
何で誰もクイックに突っ込まないんだ
文字列のことで質問なんですが string str = "hoge"; としたあと return "" +str; とするのは一体どういう事をしてるんでしょうか? return str;と同じ意味なんでしょうか?
297 :
デフォルトの名無しさん :2006/09/25(月) 17:38:07
writer.WriteByte((byte)trackBar1.Value);
writer.WriteByte((byte)trackBar2.Value);
writer.WriteByte((byte)trackBar3.Value);
writer.WriteByte((byte)trackBar4.Value);
writer.WriteByte((byte)trackBar5.Value);
writer.WriteByte((byte)trackBar6.Value);
writer.WriteByte((byte)trackBar7.Value);
writer.WriteByte((byte)trackBar8.Value);
writer.WriteByte((byte)trackBar9.Value);
...............................
writer.WriteByte((byte)trackBar99.Value);
writer.WriteByte((byte)trackBar100.Value);
このプログラムもっと簡潔にできますか?
それとも上記みたいにベタ書きするしかないんでしょうか?
>>296 そういうのはじめて見ました。
return str;と同じだと思うけど(一般人意見)
その場合はどうか知らないが、 strがnullだった場合にnullを返さないために return "" + str; とすることはある。 "" + null == "" だから。
>>297 trackBarをあらかじめ配列やリストにぶちこんでおいて
for/foreachで回す
300 :
296 :2006/09/25(月) 17:48:31
>>298 null防止のちょっとしたテクニックって感じなんですね。
ありがとうございました
301 :
298 :2006/09/25(月) 19:01:54
よく考えてみるとよくわからない部分がでてきたのですが Cだとnull==""だったと思うんですがC#だと別のものとして扱われるんでしょうか? もし同じだとしたらstrがnullの時 return ""+str;としても 結局return null+null;となってreturn str;つまりreturn null; としたのと同じことになってしまうと思うんですが・・・
302 :
296 :2006/09/25(月) 19:03:39
名前欄間違えましたorz 298じゃなくて296です
C/C++ NULL → 0 C# null + "" → ""
C でも "" != NULL. ""[0] == NULL
>>301 まあ、百聞は一見にしかず
string text01 = null;
string text02 = null;
Console.WriteLine(text01 + text02 == "");
306 :
296 :2006/09/25(月) 21:05:50
>>303 ,304,305
つまり
null一つのとき→”文字”であって”文字列”ではない。だからtext01==""は偽になる
null+nullやnull+""のとき→null+nullだとnull文字を連結したことで文字列になり真になる
null+""だと文字列にnullに文字列を足すので当然文字列になり真になる
という考えでいいんでしょうか・
>>306 ま、良いや。答え教えちゃうか。
>>305 のコードをコンパイルすると
ldnull
stloc.0
ldnull
stloc.1
ldloc.0
ldloc.1
call string [mscorlib]System.String::Concat(string, string)
ldstr ""
call bool [mscorlib]System.String::op_Equality(string, string)
call void [mscorlib]System.Console::WriteLine(bool)
これを逆コンパイルすると
string text1 = null;
string text2 = null;
Console.WriteLine(String.Concat(text1, text2) == "");
分かったなら、続きは自分で調べろ。
>>308 えらい偉そうやなw
思わずレスしてもうたでww
>>309 ……いや、レスした後に口調変だなーと自分でも感じてたり(´・ω・`)
null + "" はコンパイラによって System.String.Concat(null, "") と変換される。
http://msdn2.microsoft.com/ja-jp/library/a6d350wd.aspx このメソッドは null を String.Empty 、すなわち "" として扱う。
よって、 "" と "" を足したことになり、 "" が帰る。
null と null は足せない。
+ 演算子で連結した時に文字列が含まれた場合のみ、String.Concatに変換される。
null は文字列でも文字でもない。インスタンスがないことを表す。
>>311 >null と null は足せない。
((string)null) + null みたいなのは可能だけどね。
ヌルヌル
String.Concatは引数が両方nullならString.Emptyを、 片方がnullならもう片方を返す様に実装されてる。
Concat の実装のされ方に依存するのはどうかと思うぞ 仕様で決まっているのならともかく
>>315 >Empty 文字列は、任意の null 引数の代わりに使用されます。
ドキュメントには、こんな文面が
チラ裏 文字列の連結に+演算子を使うと string hoge = "うほっ"; int foo = 1919; 0721 + foo + hoge + 69 とかでややこしくなるからString.ConcatかStringBuilderを使うようにしている
string? hoge = null;
if(true) { } と if(true) { }; にはどういう違いがあるんでしょうか?
ない ;は何もしない無のステートメント {}だけでひとつのステートメント
return str??""
;
323 :
デフォルトの名無しさん :2006/09/26(火) 11:54:13
299>> >trackBarをあらかじめ配列やリストにぶちこんでおいて >for/foreachで回す んーだけど 配列やリストにぶちこむ時にべた書きになってしまいませんか? コントロールとか全てそうなんですが、 trackBar##.Value ##の部分を変数扱いにできる手法がないものかと(^_^;
スレッドセーフの勉強をしたいと重いMSヘルプにあった一部をコピーして実行 しようとしているのですが、 Delegate void SetTextCallback(String text); が「無効なトークン 'void' が クラス、構造体またはインターフェイスのメンバ宣言で使用されています。」 とエラーになってしまいます。これはどうしてなのでしょうか?。
325 :
デフォルトの名無しさん :2006/09/26(火) 12:34:40
>>323 あっなんかコントロールを配列にする手法があることに気付きました。
>>324 delegate void SetTextCallback(String text);
>>326 先頭が小文字だったのですね
ありがとうございます
度々、失礼します スレッド側でAcceptTcpClient()した場合にフォームを閉じ(×ボタンを押しても)ても 終了しないのですが、これを終了させるにはどうしたら良いのでしょうか?。 Leaveイベントを拾ってソケットを閉じれるのかと考えて試してみたのですがイベントを 拾う事ができませんでした。
329 :
328 :2006/09/26(火) 16:25:21
イベント違いでした すいません
タスクマネージャーみたいにプロセスのメモリやハンドルを取得しようとしてるのだけれど、 GDIオブジェクト数の取得方法がわからない・・・ C++ではGetGuiResourcesというので取得出来るらしいけど、C#で似たようなのはないのだろうか
>>331 thx
おかげで何とかなりそうです
今度は「アクセスが拒否されました。」とExceptionを返されたりもしているけど・・
C C++ VB JAVAのすべてを基礎の基礎程度を学んだ学生です。 何かソフトを作ってみようと思うのですがC#の前にCやC++をしっかり覚えた方がいいのでしょうか? プロンプトでしか動かないのでやる気が落ちてきています。 二つとも半年程勉強しました。 何かオススメの書籍などもありましたらお願いします。
HTAでいいんじゃない?
>>333 お好きなように。突き放しているわけではなくて、モチベーションを
保つことのほうが大事だから。
書籍に関してはC#に限っていえばMSの環境なので
「書籍」に限らず、ネット上に腐るほどあるしMSDNが最高に心強いし、
そもそもIDE優秀でわけ解らなくても書けてしまう。
アイテム数が状況で異なる場合に好きなだけitemを追加しいて行くにはどうしたら良いのでしょうか? ListViewItem[] items = new ListViewItem[10]; では当然エラーになってしまいます・・・。
ArrayList<ListViewItem> items
>>337 List<ListViewItem> items = new List<ListViewItem>();
あるいは
ArrayList items = new ArrayList();
>>248 やっぱりそうなんだ
自分のコードがダサいのが原因かと思ってたけど
341 :
336 :2006/09/26(火) 20:58:54
お返事ありがとうございます。 List<ListViewItem>を使った場合には new ListViewItem()の書き方も変わるのでしょうか? List<ListViewItem> items = new List<ListViewItem>(); int index = 0; items[index] = new ListViewItem(DateTime.Now.ToString("M/d H:m:s")); ← ここでエラーになる MessageBox.Show("dd");
ドキュメント、読め、禿。 List<ListViewItem> items = new List<ListViewItem>(); items.Add( new ListViewItem( DateTime.Now.ToString("M/d H:m:s") ) );
>>341 MSDNで、
System.Collections.Generic.List<T> クラス
を引いてみな。
「エラーになる」ってアンタ。 せめて内容ぐらい書けよ。 // 今回はそれ以前の問題だが。
ヒロシです。マルチスレッドまわりのバグが、再現性皆無で困ってるとです。・゚・(ノД`)・゚・。 form01 を作成したスレッドを thread01、バックグラウンドスレッドを thread02 としたとき、 1: thread01 が thread02.Abort 2: thread02 が ResetAbort ⇒ form01.Invoke を使ってちょっとした処理を なことをしているんですが、Invoke 呼び出し時に thread01 と thread02 がともに busy に orz thread01 が thread02.Join なんてしていれば busy になることは明らかなんですけど、 デバッガで確認しても、Abort 直後に thread01 はメインループに戻っているんで…… 何か、Invoke 呼び出し時の注意点はありましたっけ? あるいは、マルチスレッドをデバッグするときの注意点とか。
>注意点 Thread.Abort()/ResetAbort()を使うべからず
ならどうしろっていうんだよ 他のメソッドも使うなばっかり
>>346 あー。やっぱり使わない方が良いっスか……(´・ω・`)
了解なり。別の方法を考えますー
MOUTHCalendar上のどのコントロールがクリックされたかを知りたいのですがどうしたら値を得るこてが出来ますか? hitarea列挙体があるのはわかったのですが値が取得できず困っていまつ
HitTest
ハンドルできない例外が出たときに出てくるダイアログって、アプリケーション側から利用することはできますか?
答えはNOだ、グリフ!
XPだとテストも同時に書くらしいけど、先生の皆様は書かれてますか? Expressで勉強の身だから、使えるツールがないお…ツールなくても テストスイート作る方法ってあるますけ?
>>353 NUnit-GUIは別にVS拡張使えなくても動くぞ。
テストプロジェクトをクラスライブラリで作って
スタートアップにNUnit-GUIを指定するだけ。
グリーンバー見るためにTestDrivenじゃなくこっち
使ってるやつも多い感じ。俺もな。
355 :
354 :2006/09/27(水) 20:31:25
あーあと、「テストも同時に書く」じゃなく「テストを先に書く」な。
>354様 ありがとうございました!
MbUnitのがかっこいいいお
ディレクトリを作成(Directory.CreateDirectory)して、 全てのユーザに対して読み書きの権限を設定したいのだけど、 どうすればいい? Unix系の777の状態にしたい。 よろしくお願いします。
ASP.NETで呼び出し元のアセンブリ名を取得する方法を教えてください 例えばこういう感じに呼び出すとします hoge.aspx ↓ hoge.dll の Page_Load() 関数 ↓ 複数のdllや関数 ↓ foo.dll の foo() 関数 この中の foo() 関数内で、大本の hoge.dll の「hoge」の部分を取得したいと思っています System.Reflection.Assemblyのメソッドあたりがどうかと思いましたが、GetCallingAssemblyやGetExecutingAssemblyでは思った値がとれませんでした ご存知の方教えてください
>>359 サンクス。
一度見たページなんだが、理解できなかった。
もういっぺんガンガル。
362 :
デフォルトの名無しさん :2006/09/28(木) 16:38:20
Dictionaryのインスタンスから変更不可能なビューを返してくれるメソッドってありますか? JavaのCollections#unmodifiableMapにあたるものです。
最近javaから出張の人が多いな。 .netの案件も増えたし…
今日はじめてReflection使ったんだけど、すごくね? privateだろうがprotectedだろうがメソッド呼びまくれる?
MATLABの evalに当たるようなものはありませんか? たとえば、↓のようにアクセスをするときに string test; test = label1.Text; test = label2.Text; test = label3.Text; 「label?.Text」の数字の部分だけ置き換えて for文などで繰り返し処理したいのですが可能でしょうか?
配列にしてforeach
367 :
365 :2006/09/29(金) 15:59:01
回答ありがとうございます 開発環境は Microsoft Visual C# 2005 を使っていますが デザイナの画面で Form上に配置したLabelを配列化することができるのでしょうか? それとも、コードの方で配列宣言して一つ一つ Form上の表示位置を指定 すればいいという意味でしょうか?
InitializeComponent()の後なら コードで既存のコントロールにアクセスできるでしょうが。 Label[] labels = new Label[]{ this.label1, this.label2, ... this.label999 }; for( int i=0; i<labels.Length; i++ ) { test = labels[i].Text; }
>>367 デザイナで配置したLabelとかのコントロールは
そのFormクラスのフィールドですよ
370 :
365 :2006/09/29(金) 16:17:55
>>368 >>369 3行目の考えがまったく浮かびませんでした
ようやく解決しました
ありがとうございます!
371 :
デフォルトの名無しさん :2006/09/29(金) 16:39:47
質問失礼します。 ReadToEndで読み込むと改行が\r\nという文字列になります。 ここまでは別に良いのですが、 clStr.Replace("\\r\\n", "\n"); と変換を試みても効果がありません。 なぜでしょうか?
>>371 clStr.Replace("\r\n", "\n");
373 :
365 :2006/09/29(金) 16:46:35
>>368 やっぱり解決してませんでした。
配列を初期化するところでラベルの数だけ並べて書くのが面倒です。
この部分もループに出来ませんか?
すいません。 clStr= clStr.Replace("\r\n", "\n"); でした。 失礼しました。
>>373 何が解決していないと?
面倒ならやめちまえ、と言いたいが……
List<Label> labels = new List<Label>();
foreach( Control control in this.Controls )
{
if( control is Label )
labels.Add( (Label)control );
}
376 :
365 :2006/09/29(金) 16:57:40
>>368 のヒントから
>>373 のように手動が面倒と考えて
>>375 のようにforeachで回すと考え付くと言う流れを
閃いたときの嬉しさはプログラマーの醍醐味
勘定にいれたくないLabelまでつっこんじまうけどな。
それ専用のLabelを継承したクラスをつくれば・・・ それだけのためにクラス作るのもあほか・・・。
380 :
デフォルトの名無しさん :2006/09/29(金) 20:14:59
はじめまして。 Visual Studio 2005でC#を使ってプログラムをしているのですが、 Windowsのタイムゾーンのロケールを変更するプログラムを作りたいのです。 String time = TimeZone.CurrentTimeZone.StandardName; で現在のタイムゾーンを取得することはできるみたいですが、 変更する時はどうすればいいでしょうか? やはりAPIを使うしかないですか? 初心者ですみませんが、どなたかよろしくお願いします。
DoubleClick イベントにて Shift キーが押されているかどうか調べたいんですけど、どうすれば良いですか?
Control.ModifierKeys
thx
VS2005でiTuneのように独特のウィンドー形式やスライドバーを作ってみたいのですが可能なんでしょうか?
可能だよ 386 が実現できるかは知らない
A B C Dのラジオボタンが同じパネル上にあるとき、 AとB、CとDのように2つのグループに分けることは可能? パネル上に別のコンテナを載せその中にラジオボタンを配置すれば可能だけど、 そうしなくても済む方法があれば教えてほしい。
ないんじゃね
そういうときのためのグループボックスでは?
AとCだけTabstopをtrueにすればできるんじゃないの? やったことないけど。
昨夜から趣味でC#を始めた者です。プログラミングは初めてです。 CPad for C#.NET2.31 と Microsoft.NET Framework SDK 1.0a (1.1と2.0も入れてます) をインストールしたんですが、CPadで使用するコンパイラ(csc.exe) を見つけることができず立ち往生しています。 1.0aのBinフォルダ内のcorvars.batを実行してから、コマンドプロンプトで cscを実行できるようになり、以下のファイルをコンパイル(csc test1.cs)してやると 成功するのですが、CPadからコンパイルするにはどういう設定をすれば良いか、 偉い人教えてください。 // メモ帳で作成し、test1.csで保存 using System; class test1 { public static void Main() { Console.Write("これは、テストです。 \n"); } }
PATHを通す
初回起動時に csc.exe のパスを聞かれる、とマニュアルにあるのだが
PATHを通す。 っていうのは、具体的にどういう行為をすればいいんでしょうか? Windowsの検索でいくら探しても、csc.exeというファイルが存在しないんです。 ド素人なので、もう少し噛み砕いて教えていただけないでしょうか。お願いします。
デフォルトでは %windir%\Microsoft.NET\Framework\ 以下にあるよ。%windir% は XP なら c:\windows な SDK は program files の方に入るからちょっとややこしいが。
なんとか、csc.exeを見つけることができました。 お騒がせしました。感謝致します。
398 :
388 :2006/09/30(土) 11:06:01
>>389-391 レスありがとう。
TabStopを設定してもだめだった。
Checkedを設定するときにTabStopも強制的に変更されるようだ。
「グループの先頭」のようなプロパティがあれば、
いちいちグループごとにコンテナを用意しなくていいのにと思った。
そういったものがVC++6.0にあったような記憶が。勘違いかもしれないが。
>>392 Visual C# Expressを使えばいいのに
なんでわざわざ…
400 :
デフォルトの名無しさん :2006/09/30(土) 11:11:05
有料だと思ってるか、プロダクトキーをMSがちゃんと掲載されてることに気づいてないか。
VS2005 は重いんよ // 私は主にテキストエディタ使ってる身で CPad とやらがどうかは知らんが
>>401 気持ちは分かるけど、
本腰入れてプログラミングするときには、起動遅くてもVSの補助機能が魅力だし、
逆にさらったソース見るとかだけなら秀丸とかのエディタで十分な気が。
CPad for C#ってシェアウェアなのなw(送金義務は無いけど) しかも2001年で更新止まってるしw そんなの使うなよw
Visual C# Express環境に PSDKインストールしたらどうなる? F1のヘルプブラウザからAPIとかCOMとか見れるようになる?
無理
406 :
392 :2006/09/30(土) 13:14:59
Visual C# Express は一応インストールしたんですが、 ちょっと自分には敷居が高い気がしました。(マシン的には重くないです。) で、メモ帳で書いて、コマンドプロンプトからコンパイル&実行を試したわけです。 そして、メモ帳で書くより専用エディタの方が色分けしてくれるから・・・という理由で、CPadへ。 使い勝手がよく、エディタ内でコンパイル&実行ができるので、自分には合ってると思いました。 みなさんは、やっぱりVSを使ってるんですか?
てかVS.NET以外ありえない
いやいまさらVS.NETはありえない。 はいいすぎかもしれんが。
マシン的に重い、以外で使わない理由がない。
VSを使わないならC#を使う意味がかなり薄くなる
411 :
392 :2006/09/30(土) 13:35:44
さっきの、test1.csをVSのスタートページにドラッグアンドドロップすると、 コードは表示されるけど、デバッグ開始ボタンが押せないので、テストできないんです。 それで、VSは自分には無理だ。。。と思ったんです。 ちなみに、「同時に覚えるC++,Java,C言語」という本を見ながら、C#も試しているところです。
新しいプロジェクトでコンソールアプリケーションを選んで作成 test1.csをそのプロジェクトに追加すればOK
問題や疑問を解決する方法を調べることができない人は 言語やツールに何を使ってもプログラミングなどできんぞ。
414 :
392 :2006/09/30(土) 13:47:13
>>413 おっしゃるとおりですが、小学生に対して自分で調べて微積分を解け・・・という状況に近いです orz
>>412 プロジェクトに追加したらデバッグ開始ボタンを押せるようになりました。でも、ビルドエラーが。Mainに波線が入っているので、やり直してみます。
つかExperssはVSじゃないし
>>414 良書を与えれば小学生でも自力で調べて微積の勉強くらい出来そうなもんだけどな。
全ての小学生ができるとはいわないけど。
日本ではその機会が与えられないだけで。
C# とか VS に関する資料はウェブ上探せば腐るほどある。
417 :
392 :2006/09/30(土) 14:54:29
なんというか、正論は正論ですが、 それを言っちゃ、このスレの存在意義が無いのでは? 優れた参考書が本屋に捨てるほどあるから、学校も予備校もいらんよ。というのと同じような・・・ orz >このスレッドは >「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 >ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 >勇気をもって書き込んでください。
>>417 優れた参考書を買ってから、それを持って塾に池。
手ぶらで学校や予備校に通うなよ(;´Д`)
419 :
392 :2006/09/30(土) 15:01:12
う〜ん ここがいちばん初心者向けなスレだと思ったんですが・・・orz
初心者かどうかなんて関係ない (;´Д`) 本を見れば理解できることを、なぜわざわざ聞くのかと小一時間
「初心者ですが・・・」が免罪符になると思ってる馬鹿が多い。
VisualStudioじゃなくて秀丸で書いてる 使いこなせてないのもあるが、 コード自動生成がどうも気持ち悪くてしょうがないのと オートフォーマットで{の前に必ずスペースを付けやがるのが困る。 (オプションが見つからない) つか勉強なら一から自分でゴリゴリ書いていった方が覚えると思ふ。
>>420 リアル厨房か工房くらいと見受けられるが、
C# 云々関係なく1つアドバイスするなら、
このスレや、C# に関する質問に限らず、世の中全般の話、
>>421 の言葉を肝に銘じておけ。
言わなくていい発言はしない方がいいんだよ。
425 :
420 :2006/09/30(土) 15:27:49
426 :
392 :2006/09/30(土) 15:30:46
ちょ・・・ >このスレッドは >「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 >ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 >勇気をもって書き込んでください。 これは釣り?
>>422 ・自動生成しない
・オートフォーマットしない
でいいんでは?
突っ込まれると思った。 要は秀丸に慣れてるからw プログラミング経験は殆どスクリプト言語でIDEは殆ど使ったこと無かったし。
賑やかな所、お世話になります。 名前入力用の別ダイアログを開いてOKボタンを押したら入力された名前を拾いたいと 考えているのですがどうしたら宜しいのでしょうか?。 名前入力にはテキストボックスを使用しています。 Login login = new Login(); if (login.ShowDialog() == DialogResult.OK) { string nick = login.nick; ← こういう感じの事をやりたいのです }
>>426 みたいだねw
スレタイに「初心者用」って入ってるから、自分は初心者だと名乗ったら怒られるというのもねw
431 :
392 :2006/09/30(土) 16:42:23
>>430 ほんとそうです。「怒らないから言ってごらん・・・・・・ゴルァァァァ!!」 みたいな ^ ^
ド初心者としては、こんなふうに思います。
・マジレスが欲しい。
・答えられないなら流して。煽らないで。
・上級者は他所で質問して。
・本を読んでもその行間が理解できない、ということを分かって欲しい。
・プロなあなたもド初心者の時期があったはず。
すまん、オナニーです。 継承とかを使わずにコンポーネントを拡張する方法を思いついたので嬉しくてつい。 必要な拡張を取捨選択できるのも良いなと思うんですが、どうでしょう。 /* コントロールのドラッグでフォームを移動させるプラグイン */ public class FormMover_Plugin{ private Control Target; private Form Mover; private Point PrevPos; public FormMover_Plugin(Control Target,Form Mover){ this.Target = Target; this.Mover = Mover; Target.MouseDown += new MouseEventHandler(this.OnMouseDown); Target.MouseMove += new MouseEventHandler(this.OnMouseMove); } private void OnMouseDown(object sender, MouseEventArgs e){ PrevPos = new Point(e.X, e.Y); PrevPos = Mover.PointToScreen(PrevPos); } private void OnMouseMove(object sender, MouseEventArgs e){ Point pta = new Point(e.X, e.Y); pta = Mover.PointToScreen(pta); if ((e.Button & MouseButtons.Left) == MouseButtons.Left && PrevPos != pta){ Mover.Location = new Point(Mover.Location.X + pta.X - PrevPos.X,Mover.Location.Y + pta.Y - PrevPos.Y); PrevPos = pta; } } }
433 :
432 :2006/09/30(土) 16:48:23
>>429 Loginにpublic string nick_strを定義。
OKボタンクリック時のイベントにテキストボックスの値をnick_strに代入。
呼び出し元からnick_strを参照
434 :
430 :2006/09/30(土) 17:06:01
>>431 味方したけど。一応マジレスしておく。
「初心者」だと名乗ったことそのものが叩かれた原因じゃなくて。
"初心者の癖に噛み付いてきた"ってところだね。
要するに、教えを請う立場の態度じゃなかったということ。
実世界と同じでしょ?
>>431 > ・マジレスが欲しい。
できる限りしてる。
本とかドキュメントにそのまま書いてある事は別。
> ・答えられないなら流して。煽らないで。
大抵は質問内容が答えを導くのに不足している。
だから聞き返す。
> ・上級者は他所で質問して。
特にこのスレに上級者が行うような質問ってのは無いように思うが。
専門性の問題はあるにせよ。
> ・本を読んでもその行間が理解できない、ということを分かって欲しい。
その理解できない行間を質問すればいい。
行そのものに書かれてる事まで聞くな。
> ・プロなあなたもド初心者の時期があったはず。
だから何?
436 :
392 :2006/09/30(土) 17:15:34
マジレスして頂いて感謝してます。 ”初心者の癖に・・・”というのは、よく分かります。 実世界でも、自分が回答する立場のスレでも、よく感じることですからね。
>>435 取りあえずお前の考えがこのスレ住人の総意とか思っちゃってませんか?
>>402 >
>>401 >気持ちは分かるけど、
>本腰入れてプログラミングするときには、起動遅くてもVSの補助機能が魅力だし、
>逆にさらったソース見るとかだけなら秀丸とかのエディタで十分な気が。
余計なお世話だな。キレてるのもしかしてこいつ?
439 :
392 :2006/09/30(土) 17:18:26
>>435 連投失礼します。
>できる限りしてる。
という言葉に優しさを感じました。なるべくピンポイントに質問できるように努力しようと思います。
>>437 いんや、そう言う立ち位置の回答者もいるってだけのこと。
>>392 へ。
おまえマゾか?普通これだけメタ糞に言われたら腹が立つもんだが。
443 :
392 :2006/09/30(土) 17:23:43
>>441 楽しんでるつもりはないんですけどね ^^
このスレで質問できなくなったら、ほかで質問できないから、ある意味必死なんです。
必死ならそういう学校へ行って勉強しろよ。 こんなネットの匿名掲示板で必死にならないでさ。
445 :
392 :2006/09/30(土) 17:29:04
>>444 プログラミングは昨夜始めたばかりなので、まだ専門学校へ行くとか、そこまで具体的に考えてないんです。
あくまで、趣味の一つとして始めましたから。(こういうこと言うと、プロに叱られそうですが。)
いつか時間があるときに、専門学校へ行きたいとは思ってるんですけどねぇ。
まず初心者ならそんな特殊な環境使うなって話だ。 初心者にも便利で親切な機能がテンコ盛りな環境が タダで提供されてるんだからそれを使え。
ただの趣味なら必死になるなよ┐(´ー`)┌
>>392 がコテ付けたり外したり必死になっています。
>>446 今度から素直にVC#2005EEを使うことにします。特殊環境じゃ、回答者側も困りますもんね。
>>447 確かに、ただの趣味ですから、特に切迫しているわけではないです・・・ orz
>>448 ざっと読みました。他スレで回答側を演じているので、質問スレの掟は人並みには理解してるつもりですが、
自分が質問側になると、なぜか冷静さを失ってしまうんですよねぇ。
ほうらコテ付け忘れた。お前もうどっか行っていいよ。
453 :
392 :2006/09/30(土) 17:52:08
Orz 他スレでコテ無し回答し、ここでコテ付け忘れ。 まるで449が自分のような状況になってる(笑) ちなみに、451=392です。449は自分じゃないです。 といっても信じてもらえない位置関係。
454 :
392 :2006/09/30(土) 17:53:37
ここもID表示があれば orz
>>451 エンタープライズって・・・金持ってるなぁ。
それにしてもスレの進行が早いですね
>>433 ありがとうございます
逆の事をやろうとして苦労していました
458 :
392 :2006/09/30(土) 18:00:36
ここで 「Express Edition ですって。」 と、 コテ無し回答したら、大当たり。ってオチですね(笑) そろそろスレ汚しを終わりにします。ほんと、失礼しました。 楽しかったです。
質問です。 リッチテキストの足し算ってどうすればいいのですか? 普通のテキストと違って+しても足してくれないし…
392はアレな気がするが >> ・プロなあなたもド初心者の時期があったはず。 >だから何? 435のこの返答は参考にしたいと思った。他山の石としてだが。
初心者にありがちなのは、本来解決すべき問題を放っておいて むちゃくちゃな方向に勝手に行き、そこで詰まってから質問。 初心者が難しい環境でうまくいかないのは当たり前。 誰かが VC# 使えって言ったのがファイナルアンサー。 あとはVC#の本を買ってきて1冊通して読むなり、ネットを十分に 回ってから次の質問をすれば問題ない。 ピアノの初心者が、両手でひこうとしたら難しくて私にはできませんでした。 だから片手でひくことにしましたって言って片手でうまくひく方法を質問してる ようなもの。そりゃ片手でうまくひく人だっているし、練習になるかもしれない けど普通しない。
質問です。 ListBoxで SelectionMode = SelectionMode.MultipleExtended にしているのですが、 すべての項目を選択状態にすればどうすればよいのでしょう。 for (int i = 0; i < lb.Items.Count; ++i) { lb.SelectedIndex = i; } とすると、最後の項目しか選択されません。(SelectionMode.MultipleSimpleならうまくいくのですが)。 for (int i = 0; i < lb.Items.Count; ++i) { lb.SetSelected(i, true); } でも同様でした。 #lb.SelectedIndex = i; で選択項目に追加されるのは仕様としてどうなんでしょうね・・・
>>459 RichTextBox の Text プロパティで良いのか?
それなら AppendText 使えばいいが。
>>462 どっちでもすべて選択されるけど。何か余計なことしてないか?
465 :
462 :2006/09/30(土) 20:10:44
>>464 すみません、その通りでした。
KeyDownイベントで Ctrl+A が押されたら全選択する というように書いていたのですが、
押されたAがそのまま送られて、Aで始まる項目(それがたまたま最後の項目だった)を選択していたようです。
KeyEventArgs.SupressKeyPress を true に設定したらちゃんと動きました。
MultipleSimpleでうまく動作していたのは、フォーカスが移っても選択状態が変わらない仕様だったためのようです。
どうもありがとうございました。
466 :
459 :2006/09/30(土) 21:57:48
>>463 Textではなく、Rtfです。
書き忘れすいません orz
>>466 自前で RTF 解析して付け加える必要があるな。
付け加えるだけならそう面倒でもないと思う。
>>467 やはり解析しないと駄目ですか orz
rtfの仕様調べてメソッド作ってみます。
ありがとうございました。
>>461 口だけで、1行もソースは出せないんですね。
あたまでっかちくん。
もうあきた
( ^ิิ౪^ิ)
デリゲートにキスして
Formを最小化した後に元に戻すと ちっさいままなんですが、どうすれば元の大きさに戻せるのでしょうか?
474 :
デフォルトの名無しさん :2006/10/03(火) 17:58:07
>>473 もうちょっと具体的な情報を出してくれないと474みたいにさぶいレスしかつかないよ。
そもそもC#の話なのかい?
ヒント:最大化
.NETでタブダイアログを実現するのはどのようにするのが一般的でしょうか? MFCだと、CPropertyPageを継承したりしてやるのが普通なようなんですが、 .NETでは、TabControlを使うのが普通でしょうか? 他に方法はありますでしょうか?
TabControlでいいんじゃね
早速回答ありがとうございます。 実は、MFCのプログラムを.NETに移植しているのです・・・ 問題無さそうなので、TabControlでやってみます。
480 :
デフォルトの名無しさん :2006/10/03(火) 21:22:09
初歩的な質問ですみません。 Array.Copyで処理時間が掛かってしまって悩んでいます。 これに代替する処理ってありますか? 取り急ぎで申し訳ありませんが、どなたかご教授下さい。 ちなみに処理は以下のようになっています。 for (int i = 0; i < splitNum; i++) { string[] array = new string[arraySize]; Array.Copy(item.Data.ToArray(), i * dataSize, array, 0, array.Length); temp.Data.AddRange(array); }
item dataSize temp が何なのか分からない
>>480 本当に Array.Copy() に時間がかかっているのか?
item.Data.ToArray() とか temp.Data.AddRange(array); とかの方じゃないの?
ちゃんと調べた?
アイテム数が500個とかだと ListViewの選択中のアイテムのテキストを配列に入れるだけで もの凄く時間がかかるんだけど、何か上手い方法はないですか string[] texts = new string[this.ListView.SelectedItems.Count]; for(int i = 0; i < this.ListView.SelectedItems.Count; i++){ texts[i] = this.ListView.SelectedItems[i].Text; }
全体の処理がよくわからんのだけど item.Data.ToArray() はループの外にだせないの?
>>483 毎回 SelectedItems を参照するのは拙い気がする
一度 ListView.SelectedListViewItemCollection に受けたらどう?
>>483 プロパティに何度もアクセスしてるからじゃね
たとえば500アイテムで
int i = 0;
foreach( ListViewItem item in this.listView1.SelectedItems )
{
str[i++] = item.Text;
}
なら0.04sec(デバッグモード)で終わった。
>>483 だと5sec(デバッグモード)。
487 :
483 :2006/10/03(火) 22:32:53
なるほど。 助かりました。
488 :
デフォルトの名無しさん :2006/10/03(火) 22:53:28
C++でのクラスの作成方法とC#でのそのクラスの利用方法を教えてください もしくは、それについてのサイトとかでもいいです。 検索条件とかでもいいです。 お願いします。
>>483 俺も最初そう思って調べてみたのだが、SelectedItems をローカル変数にしてもほとんど差は
出ないようだ。
486 のように foreach で回した方がダントツ早い。
もしかしたら、インデックスアクセスが遅いのかもな。
俺の環境では、1000アイテム追加して、1個おきに500アイテム選択した状態だと、リリースビルドでは
483 のコード: 465ms
下記のコード: 460ms
486 のコード: 4ms
string[] texts = new string[this.listView1.SelectedItems.Count];
ListView.SelectedListViewItemCollection items = listView1.SelectedItems;
for(int i = 0; i < items.Count; i++ ) {
texts[i] = items[i].Text;
}
ちなみに、上記のコードで i を items.Count - 1 からデクリメントさせてみたが大して変化なかった。
質問です MFCのマルチウィンドウのように、一つの親Formに複数の子Formを入れるようにするには どうすればよいのでしょうか?
MDI
>>488 C++/CLIを使うか、ネイティブのDLLの関数をC#からDllImportで呼び出す
SelectedItemsプロパティは内部に保持してる参照を返すだけだから、 実行時にはインライン化されるんでローカル変数に保持しても変わらない。 インデックスによる参照は内部的にLVM_GETNEXTITEMをインデックス回分呼んでるみたいだね。 遅くなるのも当然。
496 :
473 :2006/10/04(水) 09:01:23
>>475 すみません
C#です
あるFormにClientSizeとLocationを設定しています。
それでそのフォームを最小化(タスクバーに収めた状態)にして
もっかい使おうとそのタスクバーのFormをクリックすると
元の大きさではなくて、Formのバーだけの状態になってしまうのです。
なにか設定が必要なのかと思い質問をしました。
最小化中にサイズの取得&設定してないか?
>>497 サイズの保存はFormを閉じる時で
取得はFomをロードするときに勝手にやってくれているようなのです
とりあえず最小化中には自分で設定とかはしてないです
>>498 多分簡単なミスなんだろうけど
ソースを見てみないと無駄にレスを消費するだけ
どうしても解決したいならどっかに上げて
C++/CLIだが、FormClosedイベントが起きたとき元のフォームが見えてるなぁ 元のフォームを開いたコードの後で処理すればいいんだけどね・・・
VS2005 持ってないが DataSourceUpdateMode.OnPropertyChanged が非常に気になる
503 :
デフォルトの名無しさん :2006/10/04(水) 13:36:08
ディレクトリ以下のファイルを検索するのにドライブ名入れるとエラーになるんだけど 回避方法わかりますか? System.IO.Directory.GetFiles()のところで エラー:System.UnauthorizedAccessException はハンドルされませんでした。
504 :
デフォルトの名無しさん :2006/10/04(水) 14:38:07
ファイルを保存するダイアログのインスタンスは private SaveFileDialog mSaveFileDialog = new SaveFileDialog(); ファイルを開くのダイアログのインスタンスは private OpenFileDialog mOpenFileDialog = new OpenFileDialog(); ですが、普通のメッセージボックスダイアログのインスタンスは なんていうネーミングでしょうか? やりたい事はOKボタンのダイアログボックスをインスタンスを作って出力したいのです。
MessageBoxでは
>>503 ドライブのアクセス権で拒否されてるんじゃない?
try catchでくくるしかないのかな?
>>504 MessageBoxはインスタンス作れないから
インスタンスが欲しけりゃ自分でフォームから作るしかなさ
507 :
デフォルトの名無しさん :2006/10/04(水) 16:06:33
実行中はスクリーンセーバーを無効にするのってどうすればいいですか?? お願いしますm(__)m
508 :
503 :2006/10/04(水) 19:21:40
データをファイルから読み込んで、long型としてラベルで表示します。 ファイルから読み込まれるデータ(数値)が そのときによっていくつになるわからないので、 ラベルの長さをlong型の最大桁数にしようと思うんですけど、 long型の最大桁数がわかりません。ちなみに、long型は符号付きです。 誰か教えてください。お願いします
ファイルの保存・開くダイアログも同じようなもんだよ。 MessageBoxクラスを自分で作ったら一緒だ。
> long型の最大桁数がわかりません。
>>2 ここは、人工知能検索エンジンではない
long.MaxValue
むしろ非アクティブなフォームに直接ボタン風の絵を描画する方が楽な気がする
>>513 そのURL先に書いてある通り。
class MyButton : Button
{
public MyButton()
: base()
{
this.SetStyle( ControlStyles.Selectable, false );
}
}
を貼り付けてビルド→ツールボックスにMyButtonが表示される
→ポトペタ→(゚д゚)ウシー
MenuItem.Click から FeedView.BeginEdit を呼び出しても、直ぐにラベル編集が終わってしまう……。 回避方法わかる人います?
FeedView は変数名。TreeView ですバカか俺は orz
って、さっぱり再現できないし。もういやだぁ。・゚・(ノД`)・゚・。
>>515 ありがとうございます。ただどこに貼り付ければいいのでしょうか?
Form1に貼り付けてビルドしましたがツールボックスに出てきませぬ・・・
520 :
519 :2006/10/05(木) 03:31:26
すいません、書き込んだ後適当にやったらできました(汁 ありがとうございました。
521 :
500 :2006/10/05(木) 08:45:57
orz
>>515 このメソッド初めて知った。いま初めてゲイツをわずかに尊敬した。
523 :
デフォルトの名無しさん :2006/10/05(木) 10:27:36
ウィンドウズメッセージの 0x7Eって何でしょうか??
525 :
523 :2006/10/05(木) 10:42:08
>524 ありがとうございます!!
>>521 フォルダ丸ごと上げて再現できるようにしてみれば?
527 :
507 :2006/10/05(木) 16:01:32
SC_SCREENSAVEは拾えてますか?
>>527 画面のプロパティ スクリンーセーバ パスワードによる保護
が有効になってると動作しないことは確認したことがある
対処方法は白根
530 :
507 :2006/10/05(木) 17:42:53
ご回答ありがとうございます。
>>528 Windowsメッセージを取得する用にオーバーライドした
protected override void WndProc(ref Message m)
自体が発生しません。
サスペンドの時は上記は発生するのですが・・・。
よって、SC_SCREENSAVEは拾えていませんです。
531 :
507 :2006/10/05(木) 18:05:55
ご回答ありがとうございます。
>>529 パスワード保護による保護を有効にしても無効にしても
何もあがってきませんでした(T_T)
Visual Studioで、TextBoxとかLabelの縦方向のサイズを変えても、 すぐに元に戻ってしまうのですが、戻らないようにできますでしょうか? VC++6から移植していて、全体にVC++6より大きくなってしまうので困ります。
>>533 どうもありがとうございます。これで、サイズを変えられます。
535 :
デフォルトの名無しさん :2006/10/05(木) 20:34:39
textBoxに書き込まれた文字列を行ごとに配列にぶち込みたいのですが、 文章の最後に改行が入ってる場合の削除方法はどのようにすればエレガントにできますでしょうか? ----------- 1 2 3 4 ----------- ↑うまくいく ----------- 1 2 3 4 ----------- ↑くまった
>>535 List<string>に全部ぶち込んで最終行が改行だったらRemove
string[] arr =Array.FindAll<string>( this.textBox1.Lines, delegate( string line ) { return line.Length > 0; } );
538 :
532 :2006/10/05(木) 22:40:04
何故か、フォントを合わせても、.NETの方が大抵、 入力文字数とか同じにするには、大きなサイズ必要になりますね。 時間がかかるので、.NETでやり易いように作ります。 それと、画面描画が遅くて、徐々に描いているのが目で見て分かるのですが、 これは何とか一気に表示できるようになりませんでしょうか? (VS2005が遅いのとたまに落ちるのも困ります。)
どういうコードでどう遅いのか訊ねさせるのか?
532じゃないけど userコントロールでラベル20個*150コントロールぐらい出して、 更新してるときつい。 やってることは株の価格更新。
3000個もコントロール使う方があほだろ。
542 :
デフォルトの名無しさん :2006/10/06(金) 00:16:55
すいません、教えてください!! VS2003 C#でプログラムを作りました。 右クリックしたときにコンテキストメニューの表示をすることはできたのですが、 最小化して、タスクバー上にあるプログラムを右クリックしても コンテキストメニューが表示されません。 コンテキストメニューを表示するにはどうしたらいいのでしょうか?
Javaをやってるとすんなり使えるようになるな。 しかも、Javaよりいい感じだし。
>>540 ウインドウを3000個同時に表示しているのと同じだから。
遅くて当たり前。
>>540 ああシェアウェア厨か。アホ。そんなんで金取ろうっていうのか。
>>540 そういうことはWPFとかになってからやってください(>_<)
>>539 普通にGUIエディタで作ったソースです。
入力する奴は、40個位でラベルもその位だと思いますけど。
デバッグモードという落ちはないよね?
標準の Anchor とか Dock とか便利だけどレイアウト処理が遅いよね。 ウィンドウをぐりぐりリサイズするとにょろにょろ付いてくる。
551 :
デフォルトの名無しさん :2006/10/06(金) 07:20:04
>>543 調べてみたのですが、初心者なもので・・・
c#でどう使えばいいか・・・
552 :
デフォルトの名無しさん :2006/10/06(金) 10:13:57
すいません、C#のGDI+に関する初歩的な質問なんですがよろしいでしょうか? Application.Run(new Form1());として作成したウィンドウに対して、逐次計算をして 出た座標に点を出力したいのですが、ここで作られたGraphicsオブジェクトをどうやって 取得すればいいのかわからず困っています。ちなみにForm1クラスとはWindowsアプリ ケーションを作るときにデフォルトで作られるクラスです。 要領を得ない質問ですが、意図を汲み取って理解していただける方どなたか教えて頂けませんでしょうか。
553 :
532 :2006/10/06(金) 10:36:33
>>549 Releaseモードも試しましたがあんまり変わらないです。
こういうものだと思って諦めます。
554 :
デフォルトの名無しさん :2006/10/06(金) 12:23:12
C#で構造体のUDP通信をしたいのですが、受け側はバイトをどうやって構造体へ戻すのでしょうか? C++ならキャストかユニオンでいいのですが・・・C#だとどうやって実現すればいいのか解りません。 教えて下さい(;_;)
556 :
デフォルトの名無しさん :2006/10/06(金) 12:43:06
>555 マネージ型の変数アドレス、サイズを取得できません、みたいに蹴られるんだ。 初心者でスマン、アドバイス下さい(;_;)
>>552 Form の Graphics に書いたものは取得できません。
自前で Bitmap を用意して、そこに描画して Form の Paint イベント
(および必要なら適当なタイミング)で画面に書くようにするのが良いでしょう。
>>552 GraphicsクラスのパブリックメソッドのFrom〜
と言うのがいくつかあるからそれを使う。
またはOnPaintメソッドをオーバーライドして引数のGrapficsを使う。
個人的にはPictureBox貼り付けて、
そのイメージからFromImageで作ったほうがいいと思う。
559 :
デフォルトの名無しさん :2006/10/06(金) 12:55:34
GDI+のOnPaintメソッドって、何がきっかけで呼び出されるのでしょうか?
>>559 描画が必要なとき。
ウインドウサイズの変更や重なった部分の再表示など。
>>554 たとえばWin32APIで有名なLOGFONT構造体を受信したとして、
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class LOGFONT
{
public int lfHeight;
public int lfWidth;
public int lfEscapement;
public int lfOrientation;
public FontWeight lfWeight;
[MarshalAs(UnmanagedType.U1)]
public bool lfItalic;
[MarshalAs(UnmanagedType.U1)]
public bool lfUnderline;
[MarshalAs(UnmanagedType.U1)]
public bool lfStrikeOut;
public FontCharSet lfCharSet;
public FontPrecision lfOutPrecision;
public FontClipPrecision lfClipPrecision;
public FontQuality lfQuality;
public FontPitchAndFamily lfPitchAndFamily;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string lfFaceName;
}
}
と定義して、
LOGFONT f;
fixed(byte* p = recvBuf) { f = *(LOGFONT*) p; }
てな感じじゃない?
563 :
デフォルトの名無しさん :2006/10/06(金) 13:02:56
>>558 ありがとうございます。
ちなみに使い方としては
Graphics g = Graphics.FromImage(image);
という事でいいんでしょうか?
もう一つお聞きしたいのですが、イメージをどのウィンドウのどこに貼り付けるという
指定はどうすればいいのでしょう。
初歩的な質問ばかりですいませんが教えていただけませんでしょうか。
>>563 Visual Studio使ってないの?
>>563 そうです。
using (Graphics g = Graphics.FromImage(..)) { 描画. }という感じにすることが多いです。
>イメージをどのウィンドウのどこに貼り付けるという指定はどうすればいいのでしょう。
Form に Panel を置いて、そのPanel のペイントイベントで描画するのが簡単だと思います。
一度描画したらあまり変更しないものならば、Paintイベントは使わないで Panel の
BackgroundImage にそのイメージをセットしてしまってもよいかもしれません。
この場合Panel ではなくPictureBoxでもOKです。
VS2005の編集領域のタブにあるような、タブ+下三角(コンテキストメニュー表示)+閉じるボタン ってどうやって実現するのでしょうか tabControlのプロパティにそれらしいのは見つかりませんでした 普通のボタンを乗せてみようと思ったのですが、タブが多くなると出る左右ボタンがタブの弾の右端に出るため、被ってしまいます オーナードローや自作コントロールは複雑そうなので手が出せません こういう設定できる、そういうコントロールがある(できれば無料)、など情報ありましたら教えてください
>>563 >イメージをどのウィンドウのどこに貼り付けるという
>指定はどうすればいいのでしょう。
質問の意図がわかりません。
貼り付けるっていうのは描画することでしょうか?それともコントロールを
貼り付けると言う意味でしょうか?
>>566 どの部分のことを言ってるのか分からない
まあタブにいろいろ機能付けたいなら自作するしかない
わたしは自作したけど、人様に見せられるようなものじゃないしw
フリーのタブコントロールなんてあんまり見かけないなぁ。
569 :
デフォルトの名無しさん :2006/10/06(金) 16:20:57
>>565 ありがとうございました。
>>567 ある処理を行なって座標の位置を算出し、その処理が終わるたびにウィンドウにその
座標の位置に点を出力したいのです。
もし、お分かりになるのでしたら教えていただけませんでしょうか?
>>569 GraphicsのDraw〜系のメソッド使えば?
DrawLine使うとかね。
もしくはBitmapのSetPixelとか。
Bitmapもっといてそこに描画(
>>570 )
→PictureBox.Imageにそのビットマップを設定
573 :
デフォルトの名無しさん :2006/10/06(金) 17:05:49
>>570-572 UNIX系のC/C++プログラミングしかやったことが無いものでwindowsプログラミング
は全くわからないのです。教科書を読んでみてもOnPaintをオーバーライドしていつ
のまにか呼び出されてどこからともなくPaintEventArgsオブジェクトを取得して
ウィンドウに書き込みを行なっていたり、自分には理解がついて行きません・・・orz
574 :
デフォルトの名無しさん :2006/10/06(金) 17:08:17
表形式の入力コントロールが見当らないけど、 サイドパーティ製のしか無いのかな??
>>573 よけいなことは気にしない
パターン学習でおk
576 :
デフォルトの名無しさん :2006/10/06(金) 18:03:31
>>575 とりあえず、OnPaintでやってるようにpaintEventArgsオブジェクトをmainで
扱えれば後はPenオブジェクトを呼んでなんとかできると思うのですが、それ
はできないんでしょうか。
メインプログラムをOnPaintに書き込んだら異様に処理が重くなって断念しました。
もしかして、座標の変数が変更されるたびに逐一描写してるのでしょうか。
いずれにしても、どうすればいいのやら手詰まりです。。。
>>576 自分でループを持って好きなときに描画したいなら、Paintは使わずに、
Control#CreateGraphicsでGraphicsオブジェクトを取得して直接描画すればいい
C++やってたなら分かるでしょうが OnPaintで色々作業するってことは WM_PAINTが来たときにプロシージャのなかで色々作業することと同じですよ? 重くなって当たり前。 でもOnPaintでやらないってことは、Invalidateされたら消えるってことですよ?
580 :
デフォルトの名無しさん :2006/10/06(金) 18:40:48
>>577 Application.Run(new Form1());
Bitmap bmp = new Bitmap(@"hoge.bmp");
Graphics g = this.CreateGraphics();
g.DrawImage(bmp, 5, 5, bmp.Width, bmp.Height);
という感じでしょうか?
これをProgram.csで書いたらthis.CreateGraphicsが無いと
言われてしまいました。
581 :
デフォルトの名無しさん :2006/10/06(金) 18:43:37
>>578 いや、UNIX系しかやったことが無いもので。
その上UNIX用のGUI用ライブラリのGTKも使った事が無いです。
Graphics g = Form1.CreateGraphics() で出来ない? だめならパネルはっつけてthis.panel1.CreateGraphics()
583 :
デフォルトの名無しさん :2006/10/06(金) 18:57:46
>>582 静的でないフィールド、メソッド、またはプロパティ
'System.Windows.Forms.Control.CreateGraphics()'
で、オブジェクト参照が必要です。
というエラーが出てしまいました。
パネルはGUIデザイナで貼り付ければいいんでしょうか。
>>582 Form1じゃなくてform1だろ
でもMainにだらだら書くのはよくないから、
Form1#Run()とか定義してその中にMainの代わりを書けば
MainはForm1 form1 = new Form1();form1.Run();だけで
本当の初心者なんだな。 悪いこと言わないから本かって呼んだほうがいいよ。 あと Visual Studioの基本は勉強しようね。
Control.Enabledプロパティをfalseにしたコントロールのバックカラーをグレイアウトさせないようにしたいのですが、 falseにしたあとControl.BackColorを変更してもだめでした。 グレイアウトさせないようにするにはどうすればいいのでしょうか?
500って分かる方いませんかね?
>>587 だからフォルダ丸ごと上げてみって
デバッグできるようにしないと
環境としか言いようがないって
>>589 フォルダうpできるうpローダーありますかね?
フォルダを圧縮して解凍すると、C#で読み込むときにエラー出るんですけど・・・。
というより、この前うpしたものも、新規formにアプリケーション設定でLocationとClientSizeを
設定して、Closingイベントに保存のコード書いただけのものなんですが・・・
どなたか同じような状態になる方いませんか?
うちにあるPC3台とも同じになるんですけど・・・
というより、FormにClientSizeの設定をした直後から最小化して
元に戻そうとするとバーだけになるようです・・・
>>590 FormのLocationとClientSizeにアプリケーション設定をバインドしたときの話だよな。
なるよ。
>>591 なりますか!?
元の大きさに戻すにはどうすればいいんですか?
593 :
デフォルトの名無しさん :2006/10/08(日) 04:23:54
beで2chに書き込むときって、いつものPOST内容に何が付加されているんでしょうか?
クッキーにメールアドレスと認証コードが付くだけで ボディには変化はないんじゃないかな
Fiddler おすすめ
596 :
デフォルトの名無しさん :2006/10/08(日) 05:08:19
>>594 ヘッダーってどうすればいいんでしょうか??
Set-cookie: ??
beを使わなくても2chに書き込むときにはクッキーは必須なわけだが
>>590 わざわざ再現さすのがめんどくさいから
フォルダうpすれば?といっているのでは
>フォルダを圧縮して解凍すると、C#で読み込むときにエラー出るんですけど・・・。
なぜ?なんか不具合の全てが環境のせいのような??
599 :
デフォルトの名無しさん :2006/10/08(日) 05:28:33
>>597 取ってきたcookieにbeのログインIDと認証コード付加するわけですよね?
cookie取ってきたとき、Set-cookie:PON=〜〜〜みたいになってたような気がしたんですが・・・
>>592 LocationとClientSize(またはSize)をバインドすると色々おかしくなるのでバインドをやめてコードで取得、設定する。
Form_Load(またはコンストラクタのInitializeComponentの後)でSettingsのプロパティからFormのプロパティに代入。
最小化または最大化してるときの値を保存してしまうとまずいのでWindowStateがNormalのときだけ
Form_ClosingのSave()の前にFormのプロパティからSettingsのプロパティに代入。
>>600 ありがとうございます
よく理解できてませんがorz
色々調べて頑張ってみます!
>>599 be のクッキーを CookieContainer に入れて HttpWebRequest.Cookie に
それでクッキー処理はOKのはず
603 :
デフォルトの名無しさん :2006/10/08(日) 12:51:25
604 :
C ◆.6Hqkk7dyk :2006/10/09(月) 00:19:02
機械の制御をC#ですることになったわけですが、 製作に行き詰ったので質問します。 I/OデバイスのON OFFを 32ビットintに割り当てて使用します。 つまり一個の変数でOutPut CH0 から CH31を制御するわけです。 CH0 と CH2を出力するためには0が29個続いて下位3bitを101とします。つまり 5を引数に渡します。 Outputを変更するさいに、このintを引数として出力メソッドを実行するわけです。 Output(int); で、OFFだったビットをONにしたら必ず5秒後にOFFにしなくてはならない仕様なんです。 つまり下の様な動きになります。 時間 0(S) CH0がONする Output(1)を実行 1 2 CH2がONする Output(5)を実行 3 4 5 CH0をOFFにする Output(4)を実行 6 7 CH2をOFFにする Output(0)を実行 あるCHのOutputがOnで5秒のカウントが始まってる最中に同じCHのOutputイベントが発生したら 5秒のカウントが初期化されて、最後にイベントが発生したときから5秒後にOFFします。 Output各ビットに タイマーを割り当てなくては実現できないでしょうか? 32ビットなので32個タイマーを割り当てることになってしまい、あまり綺麗ではないので いい実装の方法のヒントをいただけたらうれしいです。
DateTime32個作る。 オンしたときDateTime+5秒を記録。 ループ用Thread1個作る。 ThreadでDateTime見て過ぎていればOutput変更 ループ。 もしくはQue使う。
いや過ぎる
>605さん さっそくレスいただきありがとうございます。 DateTime.Now + 5秒を記録ですかー。 なるほど。 ラダープログラム使えば実装超簡単なんですけどね(^^; C#でやる意味がわかんないー(T_T)
すいません 607は604です(^^;
609 :
デフォルトの名無しさん :2006/10/09(月) 11:56:25
RichTextBoxに書き込まれたテキストのキーワードの色分けをするようにしました。 SelectionStartとSelectionLengthを指定してやっているので テキストが長くなるとハイライトでちらついてしまいます。 ハイライト無く奇麗に描画する方法ってありますか?? 検索しても色分けのコードはあってもちらつきをなくす方法を見つけられませんでした。
WM_SETREDRAW
612 :
609 :2006/10/09(月) 13:21:55
>>610 , 611
できました。ありがとうございました。
BeginUpdateして色変えてEndUpdateしただけだと文字が欠けたりするので
Refleshかけているけどこれでいいのかな。
スレタイどおりの未熟者ですが質問させてください。 データベースにbyte[]型でeml形式のメールデータが格納されています。 現在はこれをBinaryWriterでファイルに書き出して手動で読み込んでいるのですが、プログラム内でプレビューする機能をつけたいなと考えています。 BinaryWriterの出力をテキストボックスに書き出そうと試みてあえなく挫折してしまいました。 byte[]からstringに変換するには文字コードの判別等から自前でやらないといかんということでしょうか。 なにか指針を頂ければと思います。
>>613 System.Text.Encoding.GetString
emlならJISじゃね
eml形式って何?MIME?
ISO-8859-1らしいね?
eml 形式 文字コード
Jisで読んだら読めたけど
622 :
616 :2006/10/09(月) 22:56:59
>>617 ただ今帰宅しました。
ソースは職場にあるので(つっても数行ですよ)明日うpします。
>>618 「MIME」がわからなかったんで調べてみました。
>「Multipurpose Internet Mail Extensions」の略。「マイム」と読む。
>日本語など非ASCIIで表現される言語、音声、画像、動画等のファイルをメールで扱うための、ASCII文字列へのエンコード方式の規格。
>ヘッダ、ヘッダのパラメータ、本文、添付ファイルごとに、MIMEとしての扱いがRFCで規定されている。
自分はMS Outlookで使われてる拡張子emlの保存形式のことをさしてたのです。
分かりにくくてすみません。
C#を使うと幸せになれますか?
どんなところ? いま、JavaをやめてC#に移ろうかマジで考えているんです。 よろ。
C# を使うと、宝くじにも当たりますし、彼女も出来ます。 札束風呂に美女と一緒に入りたいのなら、迷わず C# を選ぶべきです。
無駄なコードかかなくて済むからとっても楽。
痒いところに手が届くところ。
M$と心中できるところ
C#終わったら他の言語に乗り移ればいいだけじゃん
Vistaが流行れば勝ち言語
632 :
デフォルトの名無しさん :2006/10/10(火) 00:59:48
だれか、mono使ってる?
Windows Vista出たときにC#でつくってよかったと思えるはず
monaはネイティブコンパイラ?
636 :
デフォルトの名無しさん :2006/10/10(火) 02:06:12
>>635 monoはネイティブコンパイラの間違いだろ?
非ネイティブ。
てか、.NET Framework のクローンなんだし、
そりゃ .NET Framework の中間コード吐く。
>>636 わざとだろ。
638 :
デフォルトの名無しさん :2006/10/10(火) 02:29:12
monoって、コンパイラだけ? 開発環境はついて来ないの?
MonoDevelopってIDEがある
SafeHandle とか CriticalHandle って何に使うの IntPtr じゃ駄目なん
using できる IntPtr と考えろ 便利だろ?
642 :
デフォルトの名無しさん :2006/10/10(火) 09:17:11
すみません、教えて下さい。 VisualStudio2005 StandardEditionを持っており、 FrameWorkを同梱したインストーラを作成したいと思うのですが、 どの手順で作成すればいいのでしょうか? (標準で作成ツールがある??)
別スレッドからInvokeを使ってFindItemWithTextを実行したいのですがどういう風に書けば 良いのでしょうか? delegate void WIWT(); Invoke(new WIWT(ListViewItem fiwt = listView1.FindItemWithText(ml.Groups["title"].Value)));
Invoke(delegate(){ListViewItem fiwt = listView1.FindItemWithText(ml.Groups["title"].Value)});
645 :
643 :2006/10/10(火) 12:14:34
>>644 お返事、ありがとうございます。
色々と試してみたのですが無効な引数が含まれていますとエラーになってしまいます。
Invoke(delegate() { listView1.Focus(); });
Invoke(delegate() { });
'System.Windows.Forms.Control.Invoke(System.Delegate)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。
>>640 あと確実にファイナライザが呼ばれる保証が付く。
継承元のCriticalFinalizerObjectだかを参照
>>645 delegate ListViewItem WIWT();
ListViewItem fiwt = (ListViewItem)Invoke(new WIWT(delegate() { return listView1.FindItemWithText(ml.Groups["title"].Value); }));
VSエディタのように、特定のパターンに色や書式を自動的に設定できるテキストボックスを作ろうと思っています RichTextBoxを継承したコントロールを作り、Changeイベントが発生する度に正規表現で語句を抽出して設定することはできました しかし、ファイルのサイズが大きくなったり、着色するパターンを増やしたりすると処理がどんどん遅くなっていきます 毎回全テキストを対象に処理しているせいだと思うのですが、編集後に適切な処理範囲を特定するアルゴリズムが思いつきません 編集した箇所を特定し、その前後のセンテンスを探してその範囲で再着色とか考えたのですが、書式が入り混じっていると処理の範囲を特定することが難しく、うまいことできません。 高機能なテキストエディタでも実装されていることが多い処理なので、何か有名なアルゴリズムがあるのでしょうか? もしくは簡単に実装できるライブラリとかあるのでしょうか? ご存知の方がおりましたら、御教授願います
StatusStripをウィンドウのBottomに作りましたが、 標準では、Labelとかが左詰になってしまいます。 右詰にする方法はありませんでしょうか? よろしくお願いします。
>>648 表示している部分だけ描画すればいいんでは?
>>649 左端に空のLabel作ってそいつのSpringをtrue、でどうか。
651 :
649 :2006/10/10(火) 18:32:58
>>650 ありがとうございます!あっさり上手く行きました。
652 :
648 :2006/10/10(火) 18:35:40
>>650 RichTextBoxでデフォルトでクリッピングしてくれないのでしょうか?
あと、説明不足でしたが、書式の変更ロジックは描画とは別にしており、それ単体が遅いことが判明しています
そこではテキストを正規表現で検索し、書式を変更する関数を発行してRTFを修正しています
直接RTFを書き換えようかとも思いましたが、RTF自体を学習するのが大変そうなので躊躇しております
この部分がボトルネックなのですが、いい改善策が見つかりません
今いくつか案を考えていて
・RTFを直接操作する
・RTF以外で書式情報を持ち、描画時に対応する(オーナードローはC++/SDK時代でやめたかったのですが・・・)
・Code Projectなどで探す
中々思うように行きません
653 :
643 :2006/10/10(火) 22:06:51
>>647 遅くなりましたが、ありがとうございます。おかげさまで動作するようになりました。
色々と勘違いしていた事が埋まりました。
654 :
デフォルトの名無しさん :2006/10/11(水) 09:57:36
VisualStudio2005のセットアップウィザードでFrameWork2.0を含めたインストーラを作りました。 で、実行してみると、FrameWork2.0をネットからダウンロードしようとするんですが、 これを既にダウンロードしたファイルからインストールさせるにはどうすればいいのでしょうか? 起動条件の"InstallUrl"を消してもダウンロードしようとします。
無理じゃないの?
1÷3 = 0.333... で端数があるか調べる方法はあるのでしょうか?
>>654 プロジェクトのプロパティ → 必須コンポーネント → アプリケーションと同じ場所から(ry
658 :
656 :2006/10/11(水) 12:25:05
自己レス 剰余演算がありました
659 :
デフォルトの名無しさん :2006/10/11(水) 13:24:02
ShowDialog(this)で呼び出したフォームBに条件を入力して、呼び出し元のフォームAを再描画したいです。 再描画のメソッドはフォームAにPublicとして定義してますが、フォームBのOwnerプロパティを探しても見つかりません。 なにか勘違いしているでしょうか。教えてください。
BからAを直接触るより、Bに再描画イベントを定義して そのイベントハンドラとしてAの再描画メソッドを登録した方がいい気がする
661 :
654 :2006/10/11(水) 14:26:39
>>659 フォームB b = Owner as フォームB
b.再描画();
画像をグレースケールに変換したいのですが、 グレーでなく青色になってしまいす。 以下のコードのどこが悪いでしょうか? img = new Bitmap("test.jpg"); for (int i = 0; i < img.Height; i++) { for (int j = 0; j < img.Width; j++) { Byte R = img.GetPixel(j,i).R; Byte G = img.GetPixel(j,i).G; Byte B = img.GetPixel(j,i).B; //グレースケールへの変換 double p = (0.299 * R + 0.587 * G + 0.114 * B); px = (int)p; img.SetPixel(j, i, Color.FromArgb(px)); } } Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img,60,10);
キャストしてますか? ((フォームA)Owner).再描画();
>>663 実際に数値表示してみてわからないようであれば、
駄目だね。
Argbって何かわかってないだろ?
A α R 赤要素 0〜255 G 緑要素 0〜255 B 青要素 0〜255 Aは無視しといて 白色 RGB(255,255,255)) 灰色 RGB(px、px、px) 黒色 RGB( 0,0,0) 青色 RGB( 0,0,255)
>>663 それ、できても使い物にならないくらい遅いよ
Bitmap.LockBitsとかを使って危ない感じの処理をしたほうがいいよ
グレイスケール化なら、ImageAttributes を使った色変換で簡単にできるよ。 SDKのヘルプにサンプルがあると思うけど・・・
669 :
659 :2006/10/11(水) 17:44:22
皆さんレスありがとうございます。
>>660 オライリーのイベントの項をざっと読んでみたのですが、頭が混乱してしまいました。
私にはまだまだ精進が必要のようです。
おっしゃるようにした方がよさそうだという雰囲気は伝わってまいりますが…。
>>664 さんのご指摘のように、キャストをすることによってさしあたっての動作をさせることができました。
C#で複素数を扱う際、定番のライブラリってありますか?
C#でFFT(高速フーリエ変換)を行っているソースまたはライブラリは存在しますか? C,C++では結構見かけるんですが。
C++/CLIでDLL作っちゃえばいいじゃない
>>671 簡単に移植できるだろ。
それともMSILに最適化されたソースが欲しいって事か?
バージョンくらい書いとけと小一時間(ry
UNIX時刻UNIX時刻とは(1970-01-01 00:00:00GMT からの経過秒)を日本の現時刻にスマートに変換する方法はありますか? 逆はTimeSpanつかって書いたのですが、なんか泥臭くて。
>>677 DateTime dt = new DateTime(1970, 1, 1).AddSeconds(雲丹刻).ToLocalTime();
>>678 ありがとうございました。スッキリしました。
>>681 多分、定例発表会かなんかの発表用の資料。
OHPとかでやらなかった?
683 :
682 :2006/10/12(木) 18:14:22
よく見たら卒論の論旨らしいね。 レベル低いのか別に本研究あるのか???
684 :
682 :2006/10/12(木) 18:17:17
他のも見てみたが… 神奈川工科大学恐るべし。
タブ画面を編集をしてて、GUIエディタでエラーが出る状態から抜けられません。 ビルドはできて正常に動作もするのですが、削除したタブにあった ボタンなどの変数を削除するとどうしても、GUIエディタでエラーが出ます。 どうしたら直せるでしょうか?
ちなみにエラーメッセージは次のような感じです。 デザイナの読み込み時に 1 つ以上のエラーが発生しました。エラーは以下に一覧表示されます。コードの変更が必要なエラーもありますが、プロジェクトを再度ビルドすると解決できるエラーもあります。 致命的なエラーです。 (HRESULT からの例外: 0x8000FFFF (E_UNEXPECTED)) 非表示 場所 EnvDTE.CodeFunction.GetStartPoint(vsCMPart Part) 場所 Microsoft.VisualC.CppCodeParser.OnMethodPopulateStatements(Object sender, EventArgs e) 場所 System.CodeDom.CodeMemberMethod.get_Statements() 場所 System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration) 場所 System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager) 場所 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager) 場所 System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)
あ、幾らリビルドしても駄目でしたが、 VS2005を再起動すると、このボタンとかの変数を消しても GUIエディタでエラーが出なくなりました。 VS2005起動時に、GUIを作るので時間がかかっているのと関係ありそうですね。
>>682 や、知ってるよ。ウチはパワポだったけど。
ただ要旨をみれば卒論の内容もおのずと知れてくると。。
まぁ、俺の卒論も修論もひどかったけどね。
理論物理なんて高尚な学問は当時の俺には無理だったよ。
今は本当に後悔してるっつーか、もう一度やらせれ。
private void 削除ToolStripMenuItem_Click(object sender, EventArgs e)という感じで 日本語が入って驚いたのですがC#では当たり前なのでしょうか?
Path.GetDirectoryName の戻り値に関するMSDNの説明がちっとも分かりません>< 戻り値 path がルート ディレクトリを示す場合、path または null 参照 (Visual Basic では Nothing) の ディレクトリ情報を含む String は空の文字列 ("") または null 参照 (Visual Basic では Nothing) です。 path にディレクトリ情報が含まれていない場合は、String.Empty を返します。 英語の方もよく分からん(;´Д`) Return Value A String containing directory information for path, or a null reference (Nothing in Visual Basic) if path denotes a root directory, is the empty string (""), or is a null reference (Nothing in Visual Basic). Returns String.Empty if path does not contain directory information.
692 :
デフォルトの名無しさん :2006/10/13(金) 00:38:31
Treeviewコントロールで子ノードにのみチェックボックスをつけることは可能でしょうか。 もしそうであるならばご教示願えれば。
>>689 C#のソースがUnicodeになったので、
ShiftJIS 2byte目の「\」との衝突を気にしなくて済むようになったから。
Javaで日本語が混ぜれるのを知ったときはびっくりした…。 そういう時代なのかね
すいません。教えてください。 データグリッドを使ってファイル内容を表示したいのですが、 ループを使ってるためか、他の画面にフォーカスを当てたり、画面をクリックすると 画面が固まってしまいます。ループの間、画面を切り替えても うまくずっと表示させる方法はありませんか? 以下がだいたいのコードです。 dsGrid.Tables.Add("CSV"); dsGrid.Tables["CSV"].Columns.Add("#"); dsGrid.Tables["CSV"].Columns.Add("field1"); dsGrid.Tables["CSV"].Columns.Add("field2"); dataGrid1.SetDataBinding(dsGrid, "CSV"); for(int i=0;i<10000;i++){ DataRow rowGrid = dsGrid.Tables["CSV"].NewRow(); rowGrid[0] = i; rowGrid[1] = i; rowGrid[2] = i; dataGrid1.Update(); } よろしくお願いします。
もっと簡単に済ますには、ループの中に次の一行を入れてみてはどうか。 Application.DoEvents();
>>696 &
>>697 Application.DoEvents();を入れたら、動きました!
どうもありがとう!!
Application.DoEvents()はやや重いので、ループの中身が軽い処理の 時は、例えば5回ループ回る毎に一回DoEvents()を処理するように したりすると速くなる事もある。
それもそうだし、2重起動とかも気を付けろ。
>>691 英語の方はよくわかると思うが。直訳はしにくいが和約はこうだ。
戻り値
(パスがディレクトリ情報を含む場合には)パスのディレクトリ情報を格納した文字列(を返します)。
パスが空文字列または null (VB の場合には Nothing)の場合には、 null (VBの場合は Nothing)(を返します)。
パスがディレクトリ情報を含まない場合には空文字列を返します。
>>698 重いとか軽いとかもそうだけど、
>>700 が言うように DoEvents でメニューだされたり
他の何かのボタン押して処理を開始されたりとかそういう心配もした方がいい。
使ってほしくないボタンはEnable=false にしておくとか。
(Multithread の場合も同じだけど)
for (int i = 0; i < listview.items.Count; i++) { } これだと毎回listview.items.Countを実行している事になり遅くなるのでしょうか?
>>704 どの辺がわからない?
ってのはともかく、漏れはもう真面目に答えるのはやめることにする。
お前のせいだ。
>>706 じゃあ、代わりに俺が真面目に突っ込んでおくか。
・「pathがルートディレクトリを示す場合」(nullを返す)が抜けてる。
・「path」はパラメータ名なのでpathのままの方がいい。
あとはそれでいいと思うよ。
でも、実際は(.NET2.0でしか試してないが)pathが空文字列の時は
ArgumentExceptionになるんだけどね。
>>705 たぶんコンパイル時にインライン展開されるから問題ない
ちなみに、配列の場合はLengthプロパティで毎回アクセスした方が最適化が効いて速くなるらしい
>>707 ルートディレクトリってすなわち空文字列じゃん。
いや事実関係はともかく、元の英文では。
>>708 漏れは「毎回LVM_GETITEMCOUNTが送られる」に1票。
その程度でさほど遅くはならないと思うけどね。
>>709 んなわけねーだろw
if path denotes a root directory, (if path) is the empty string , or (if path) is a null reference
だろーが。実際"C:\\"渡せばnull返ってくるし。
ためになる突っ込み
bmpファイルをBitmapにロードして、Graphicsかなんかで描画する場合、 画像全体、もしくは部分を透過処理(FormのOpacityみたいな)する方法ありますか?
717 :
714 :2006/10/13(金) 19:54:00
Javaを使う理由は無くなった。 C#を使おう。 みんなM$に取り込まれよう。
ToolStripMenuを2つのListviewで共有したいと考えております。 クリックされた場合にどちらのListViewでクリックされたのか調べる方法はないのでしょうか?。 private void log_del ToolStripMenuItem_Click(object sender, EventArgs e) { }
SourceControl プロパティ
>>721 ありがとうございます。
SourceControl.Nameでコントロール名を収得する事が出来ました。
ここから更にSourceControl.Name.items.clear();という意味合いの処理を行う事は可能でしょうか?。
>>722 SourceControlを適当な型にキャストしてやれば
>>723 ありがとうございます。
また1つ勉強になりました。
ListView lv = (ListView)cm1.SourceControl;
lv.Items.Clear();
wordに含まれている文字のどれががマッチすればhitとしたいのですがこういう場合は 正規表現を使うべきなのでしょうか?。 string a = "あかおあぁお"; string[] word = {"あ","い","う"}; foreach(string w in word){ if (a.IndexOf(w) > -1) { //hit break; } };
string.split
>>725 wordをchar[]にしてa.IndexOfAny(word)
728 :
デフォルトの名無しさん :2006/10/14(土) 14:17:56
RichTextBoxのUndo/Redoを回数制限無く使えるようにする方法はありますか? 自分で考えたのは見えないRichTextBoxを大量に用意する方法ですが、 さすがにこれはいけてないなと思いまして。
>>725 中途半端な書き方をしてすいません。string[] word = {"ああ","いい","うう"};で実際は複数文字のワードなので
char[]だと使えません。
じゃあそのコードでも正規表現でもどっちでもいいと思う。 自分の好きなほうで。
ListViewを連想配列にできないでしょうか? addだとindexになるのですがこれを任意のキーにしたいのです。 List<ListView> lv = new List<ListView>(); foreach (ListViewItem item in listView_list.Items) { lv.Add(new ListView()); }
.Net1.1と.Net2.0の両方のバージョンのプログラムを作りたいと思っています。 初めに、VS2005C#で2.0ヴァージョンを作りました。 次に、VS.NETで1.1バージョンを作りたいのですが、 プロジェクトファイルははそのまま利用できるわけではないようです。 VS.NETでVS2005のプロジェクトをビルドする方法はありますか?
むり。 っつか両方で動かしたいなら順番逆のが楽だろ。
>>731 コードが意味不明だが Dictionary<TKey, TValue> があるだろ
>>732 手順を逆にしろよ
>>731 そのコードの意味がよくわからん
Dictionary<ListViewItem, ListView> lv = new Dictionary<ListViewItem, ListViewItem>();
foreach (ListViewItem item in listView_list.Items)
{
lv.Add(item, new ListView())
}
こういうこと?
736 :
735 :2006/10/14(土) 21:29:04
×new Dictionary<ListViewItem, ListViewItem>() ○new Dictionary<ListViewItem, ListView>() 被った…
737 :
731 :2006/10/14(土) 21:59:29
>>735-736 ありがとうございます。
Dictionaryの存在をはじめて知りました・・・。
Dictionary<string, ListView> lv = new Dictionary<string, ListView>();
とする事でやりたい事が出来そうです。
ListViewをいくつも保持して何がしたいんだろう…
DataSet(CommboBoxなど用)で DataSet.Clear()の後、RejectChanges()で元に戻らない。 両Methodにはそんな記述はない。バグなんだろうか?
itemを2つのListViewに入れようとするとエラーになるのですがどうしてなのでしょうか? 入れると消えてしまうものだという認識でいいのかな・・・ ListViewItem item = new ListViewItem("abc"); this.listView1.Items.Insert(0, item); this.listView2.Items.Insert(0, item);
> itemを2つのListViewに ListViewItem.ListView プロパティは何を返せばいいんだ
742 :
740 :2006/10/14(土) 23:31:28
自己レス、(ListViewItem) item.Clone()で解決しましたがどういう理由で 複製しなければならないのかかわからない
ListViewは嫉妬深いから二股なんて絶対許せないんだよ
744 :
740 :2006/10/14(土) 23:37:31
>>741 ,743
消えてなくなるわけではなくて同じプロパティを共有しようとしたから怒られた
という事なのでしょうか?。ListViewItemはListViewに関連付けられた唯一無二
のアイテムという事になるという事で合っていますか?。
同じプロパティじゃなくて同じオブジェクトな ListViewやListViewItemがそういう仕様だから勝手に怒ってるだけ string abc = "abc"; this.listView1.Items.Insert(0, new ListViewItem(abc)); this.listView2.Items.Insert(0, new ListViewItem(abc)); これではダメ?
746 :
740 :2006/10/15(日) 00:09:57
>>745 ありがとうございます。
実際にはsubitemもあるのでClone()とキャストで乗り切りました。
>>739 バグなんだろうか?
むしろできたらびっくりだと思うが…
>>747 知ってて書いてる?
前回 DataSet.AcceptChanges を呼び出した以降にこのデータセットに対して行われたすべての変更をロールバックします。
そう受け取るのは勝手だが、実際にはそういう意味ではない。 「行」に対する「変更」、が対象であって、それ以外は変更とはみなさない。 分かりにくいってか、記述があいまいだとは俺も思うよ。 でも普通に考えたらできないと思うだろ。Clearだぜ。消去だぜ。 現在の状態も含めてきれいさっぱりだ。 Clearを元に戻せるってことは、全データを保持し続けるってことだぞ。 こっちのが普通に違和感あるだろ。 ついでに言うと、行のRemoveの方も変更ではなく行自体の消去。
いやそれはわかってる。 その記述を、そのように受け取る、という意味の「そう受け取る」だよ いや、確かに分かりにくかったな。
SQLでTRUNCATE TABLEするとロールバックできないのと一緒だよな
おはようございます。 xml["key"]が存在するかどうか調べる方法はありますでしょうか?。 XmlDocument xml = new XmlDocument(); xml.Load(url); if (xml["key"]){ //xml["key"]があれば実行する }
意味が良く分からんが、null かどうかで良いんじゃね?
>>751-752 Clear()がTRUNCATEと同等なら一文記述すべきだよな>MSDN
とりあえずサンクス
RejectChanges()の使いどころが判らない似非PGですた
>>754 nullで良かったです・・・俺の頭は悪いです・・・。
true falseみたいにnullの反対はあるのでしょうか?。
null の反対は「null ではない」ではなかろうか
759 :
756 :2006/10/15(日) 13:50:46
if (xml["keys"]){ ← boolだと思っていたんです・・・ }
760 :
756 :2006/10/15(日) 13:52:33
ちゃんと考えてみると変数?がないからnullでboolはまた別の話ですよね 頭が悪すぎました-;
!=null
あともう100回と言わないが、3回くらい入門書を読んだ方がいいんじゃないか? この調子だと、ありとあらゆることをここで質問することになりそうだ。
!演算子はオーバーロードできるので、そういう使い方ができるようにすることは可能。 でもXmlNodeやXmlElementではそういうオーバーロードはされてないってこったね。 ※まあ普通はやらないが。
じゃなくてtrue演算子とfalse演算子だった…
ThreadStartに渡すメソッドに、引数を渡す方法が分かりません。 func(int x) があったとし、 ThreadStart ts = new ThreadStart(func(x)) で、エラーになります。
>>765 new ThreadStart(func);
って、ThreadStart の引数じゃなくて、func の引数かゴメン (^-^;; ぶっちゃけ【ない】 非同期デリゲートあるいは ThreadPool が使用できるのなら、そっちを使うのもあり。
ま、Thread からじゃなく、直接呼び出すのなら ts(x) でOKなんだけどな。
デリゲートオブジェクトを明示的に作らなくてもメソッド名だけでOKにしたのは失敗だったと思う 余計にわかりにくい
某サイトで「stringの"+"演算子による結合は処理が遅いため、回数が多い場合はStringBuilderの使用が通例」 みたいなことが書いていたので、作成中のプログラムを書き直したのですが、ほかにも「負荷軽減での常識」のようなものはありますか? また、どれぐらい違うのかも調べたいので、精度の高い計測方法を教えていただけると助かります。
ボトルネック以外にそう言うのを入れるのは却って有害たり得るという前提はOK?
>>765 .NET 2.0 なら ParameterizedThreadStart 使うオーバーロードが追加されたがね。
引数ありのThread作成って新しく出来なかったっけ? 勘違い?
775 :
770 :2006/10/15(日) 21:59:50
>>771 ありがとうございます
結構ありますね;;
CLRプロファイラは難しそうなので、もう少し調べてみます
>>772 実装する前に計測・比較するよう心がけます
>>774 私の環境は1.1なので使用できません;;
>>775 >実装する前に計測・比較するよう心がけます
実装してから計測するように。で、もっとも重い部分からチューンするのが定石。
【最適化の定石は、最適化をしないこと】
>>765 MSDNのParameterizedThreadStartで、こういう解説が有る。
>ParameterizedThreadStart デリゲートおよび Thread.Start(Object) メソッドをオーバーロードすると
>データをスレッド プロシージャに簡単に渡せるようになりますが、この方法はすべてのオブジェクトを
> Thread.Start(Object) に渡すことができるため、タイプ セーフではありません。より信頼性の高い
>方法でスレッド プロシージャにデータを渡すには、スレッド プロシージャとデータ フィールドの両方を
>ワーカー オブジェクトに格納します。詳細については、「スレッドを作成し、開始時にデータを渡す」を
>参照してください。
要するに、
class FuncClass
{
public int x;
public void func() {}
}
というクラスで、予めxに値を設定しておけば。
そのままfunc()の中で、this.x として使えるってこと。
>>775 代わりにQueryPerformanceCounterでも使っとけ。
Visual C# Express Edition をダウンロードするとSP2が必要といわれ、 SP2を落としてもSP2がないといわれるんですがどうしたらいいですか?
SP2ってXPのか?だったらインストールすりゃいい
フォームデザイナでメニューを編集したいのですが、右端は修正できますが、 作成済みのドロップダウンメニューが開かなくなりました。 どうしたらまた、開くようになりますでしょうか? 一応これでも開発はできますが、効率が良くないので何とかしたいです。
開発環境の話?それともあなたが作りたいアプリの話? そのへん明確にして出直してきなさい。全般的に意味不明。
ドロップダウンメニューってなんだろう。 ComboBox の DropDownLost か、ContextMenu の間違いだと思うんだけど……
すいません。 これは、開発環境(VS)の話です。 フォームデザイナでMenuStripを貼り付けると、メニューを追加する位置に、 "ここへ入力"と言うのができて、"ファイル(&F)"とか入力していけるのですが、 メニューの一度入力した部分を、フォームデザイナで修正しようとしても 新規に追加する右端にしか入力できなくなりました。 インターネットエクスプローラで言うと、下のようなのが入力してあった場合、 新規作成(N)でのクリックのイベントとかをフォームデザイナから入力したくても、 開けないので、入力できないと言う状態です。 ("ファイル(F)|編集(E)|..."しか見れず、メニューの右端(IEではヘルプの右) への追加しかできない。) ファイル(F)|編集(E) -----------|---------- 新規作成(N)|切り取り(T) 開く(O) |コピー(C) ... 以前はできたような気がするのですが、できなくなりました。
>>784 入力したものから即座に消えていくのか。
それとも、何かした場合に消えるのか。
>>739 試してないんだけどDataTable.Rows.Clear()だとどうなるの?
listviewのlabeleditではやはりサブアイテムの埋め込み編集は無理なんですよね?
788 :
781 :2006/10/16(月) 18:09:27
>>785 いいえ消えるのではないです。そもそも何も入力できません。
新規にプロジェクトを作って試してみるとフォームエディタで入力できました。
今作っているのは、90画面以上有るのが、関係しているのかもしれません。
解決できそうに無いので、諦めます。
俺はデザイナ上でmenustripの編集してると、他のコントロール等が選択できなくなることがあるな。 VS再起動すれば大概なおるけど。 つか、プロパティウインドゥから編集したほうが早くないかね。そんなに困るかな。
790 :
781 :2006/10/16(月) 19:44:34
さっきは、プロパティウィンドウからも修正できなくなったりしてました。 再起動で普通に修正できるようになりました。 メニューの場合、プロパティウィンドウのItemsから、別ウィンドウを開き、 下の項目の設定をしますが、そこでは 各項目のイベントの処理を設定できないので少々不便です。
791 :
739 :2006/10/16(月) 19:45:09
>>788 90画面って……。いったい何が90もあるのか。
793 :
デフォルトの名無しさん :2006/10/16(月) 20:11:39
企業向けのシステムなら珍しく無いと思うが。
普通はそんなもんひとつのソリューションにまとめないと思うけど。
まさか・・・90個Formあって全部にメニューつけてるとか? いや・・・まさかね・・・そんな事がある訳がないよね
Webサイトで認証のあるページに自動ログインして、 それをWebbrowserに表示させたいのですがどうすればいいでしょうか? WebRequestとCredentialでログインはできるのですが、 その後どうWebbrowserに表示させればいいのかが分かりません。
797 :
781 :2006/10/16(月) 21:11:23
作業を進めている内に、デザイナからメニューの修正もできるようになりました。 (原因不明ですが、どうもお騒がせしました。) ちなみに、メニューがあるのは、数画面です。 VSのおかげか普通のWebシステムよりかなり簡単に画面が作れますね。 もしかすると、ASP.NET辺りだとサクサク開発ができるかも知れませんが。
>>795 俺の「先輩」は画面の再描画用に、ラベルだけ変えた同一機能のフォームを...
なんでユーザーコントロールを使わないの?
意味不明
802 :
デフォルトの名無しさん :2006/10/18(水) 11:07:06
2.0で作成したアプリを、XP SP1のPC上で動かしたいのですが、 そのPCは都合でXP SP2にバージョンアップ出来ず、framework 2.0を入れることができません。 無理やりにでも、このPC上で2.0アプリを動かせませんか。 ネイティブイメージジェネレータ(Ngen.exe)というのが、ネイティブのキャッシュを実行できるらしいので、 そのキャッシュを強引に実行ファイルとしてコピーできるソフトとか、そんなのtんdねえhgyふじこlp;@
<supportedRuntime version="v1.1.4322" /> と書けば何とかなるような気はするが……。 1.1 を強制的に 2.0 で動かすのはよくやるが、その逆は経験なくてね。すまぬ。
なぜSP2に上げられないか書いてみ そこを解決してSP2にすることで、無駄な努力をしなくて済むかもよ
Virtual PCにXP SP2入れてそこで動かせ
>>801 1枚のフォームに90個のユーザーコントロールを貼れという意味かとおもいます。
807 :
802 :2006/10/18(水) 14:21:51
>>803-805 ありがとうございます。よく分かりませんが調べてやってみます。
>>804 そのPCでメインに使ってるソフトがSP2では動作しないためです。全てはこのうんこソフトのせいです。
>>807 そのうんこソフトの名前は?
対処法とかパッチとか知ってる人がいるかもよ
つか、VirtualPCにXPSP1a環境作ってそのソフトだけ動かしたほうが良くね?
SP1aのサポートも間もなく終わるし、今やSP2じゃないとダメってソフトの方が多いし
GraphicsオブジェクトがDisposeされたことを即座に知る方法はありますか?
どういう状況だ
一時的に作業用のBitmapオブジェクトを作成して、 それから取得したGraphicsオブジェクトを返したいのです。 別に、Bitmapオブジェクトを直接返してそのDisposeは呼び出す側に任せてもいいんですけど
Graphicsを継承したものを作って返せばいいじゃない。
>>812 sealed
>>811 GetHdcしてHDCへのポインタとっといて、
GetDCBrushColorとかでHDCが生きてるか調べればいいんじゃないかな。
よく分からんが。
814 :
デフォルトの名無しさん :2006/10/18(水) 19:39:24
>>811 漏れはリソースの廃棄を呼び出し側に任せたくない時は、
クロージャを使って、ロジックをひっくり返してる。
class Foo
{
public delegate void PaintHandler(Graphics graphics);
public void Paint(PaintHandler paintHandler)
{
using (Bitmap bitmap = new Bitmap(...))
{
using (Graphics graphics = Graphics.FromImage(bitmap))
{
paintHandler(graphics);
}
}
}
}
// 以下呼び出し側
Foo foo = new Foo();
foo.Paint(
delegate(Graphics graphics)
{
...
}
);
815 :
デフォルトの名無しさん :2006/10/18(水) 19:44:51
スマン、インデントが失われた。 上みたいな書き方は、クロージャの使える言語なら定石だ。 せっかくC#も匿名delegateが使えるようになったのだから、がんがん使ってる。
匿名にしないほうが読みやすいと思う。
呼び出し側のコードを書き換えてよいなら >GraphicsオブジェクトがDisposeされたことを即座に知る方法はありますか? という要件自体出てこないような気がする。
Graphicsオブジェクトはあんまり気にしなくても良いように作られてるのに。
819 :
デフォルトの名無しさん :2006/10/19(木) 13:03:00
>>816 呼び出し元がdelegateメソッドに変数を渡すケースを想像して欲しい。
匿名でなければ、メンバ変数などのよりスコープの広い領域に変数を置かなければならなくなる。
コールバックメソッドとクロージャは違う。
クラスつかう
821 :
デフォルトの名無しさん :2006/10/20(金) 01:07:25
クラス内のstaticなフィールドを取得する方法はありませんか? FieldInfoは取得OKなんですが、 Object targetなどInvokeMemberに渡す引数がよくわかりません
using System.Reflection; typeof(クラス名).InvokeMember("フィールド名", BindingFlags.GetField | BindingFlags.Static | BindingFlags.NonPublic, null, null, null)
>>822 これでばっちり取れました
ありがとうございました
824 :
デフォルトの名無しさん :2006/10/20(金) 02:19:22
質問です C# スマクラ開発です。 3層構造でプログラムを組んでいるのですが DB更新時にUSERIDを画面側からセットしてあげようと思っています。 結局画面側→ウェブサービス→ビジネスロジック と、userIDを引数で渡すしかしょうがないんでしょうか? 引数でしか処理できないようだったら、今後のことを考えてユーザ情報の構造体みたいなのを1つ 引数として渡したいと思うのですが その場合、そのclassをどこにおけばいいんだろう、と思ってしまいました。 すごい初心者な質問ですが、いい案はありますでしょうか?
SoapHeader とか使うか、 WS-Security 辺り使うか いっそForm認証流用してCookieで渡すか
public class Class { public int Field; } と public class Class { private int field; public int Field { get{ return field; } set{ field = value; } } } とでは何が違いますか? また、わざわざ後者のほうで書くメリットはありますか?
ぶっちゃけ、それだけのコードならメリットはない 一般にプロパティのメリットとしては、 ・値get時/set時に条件を設けることができる ・値setする箇所を一元化できて、値の追跡を容易にする ・えー、↓あとよろしく
>>827 つまりわざわざ後者で書いてる場合は、後で何か処理を付け足すつもりだとか、
そういう意味でしょうか?
んー、そう言う場合もあるだろうし、
フィールドをパブリックにするな、という
MSのデザインガイドラインがあるから、かもね。
以下、引用。
[パブリックまたは保護されたインスタンス フィールドは提供しないでください。]
パブリック フィールドとプロテクト フィールドは適切にバージョン管理されず、
またコード アクセス セキュリティ要求によって保護されません。
パブリックに参照可能なフィールドを使用する代わりにプライベート フィールドを使用し、
それをプロパティを通じて公開してください。
http://msdn2.microsoft.com/ja-jp/library/ms229057.aspx あとオブジェクト指向がうんちゃら、とかカプセル化がかんたら、とか
あるのかもよー
詳しくは↓が教えてくれるよ
│ _、_ │ ヽ( ,_ノ`)ノ 残念 私のおいなりさんだ │ へノ / └→ ω ノ > 自分でやってりゃ世話ねーなー MSのを翻訳すると、 そのクラスを継承とかしたときに、 フィールドだとそのままだけど プロパティなら違う動作させられる、とか、 アクセス権をきちんと設定できる、とか そういうことじゃないかなー ごめんよー酔っぱらっててなー べつに、そのときしか使わないっていうなら、 パブリックなフィールドでもいい気はするよねー
>>829 >>830 では、sealedでもしてない限りプロパティを使ったほうが無難ですね。
即席プログラム以外はちゃんとプロパティ使うようにします。
詳しい解説ありがとうございました。
832 :
デフォルトの名無しさん :2006/10/20(金) 11:46:49
データベースを使用しているのですが、 プログラム起動時、データセットにFillするのにかなり時間がかかります。 この余計な時間を無くすために、プログラムを起動する前に(例えばOSの起動時に)、 別プログラムによりFillしておいてそれを利用するなんてことはできますか。
>>832 どう速くするかを考える前に、どうして遅いのか原因を調べないと。
いくつのテーブルからどの程度の数のレコードを読み込んでるの?
ArrayList hoge = new ArrayList(); for( int i = 0 ; i < 100 ; i++ ) { hoge.Add(null); } hoge[45] = new Unko(); はできるのに ArrayList hoge = new ArrayList(); hoge.Capacity = 100; hoge[45] = new Unko(); ができないのは何故でしょうか
そういう使い方するなら配列でいいだろ ArrayListは配列と違って要素数やインデックスを気にせずにどんどんぶち込んでいけるのがウリ
何故かというのに答えればCapacityを増やしてもCountは増えないから
>>834 仕様だからしようがない。ところで上のforループは、
ArrayList hoge = ArrayLisy.Repeat( null, count);
と書けるみたいだよ。
>>835-837 thx
配列つかわないで、かわりにArrayListつかってるんだけど
あまりよろしくないのかな
宜しくないと言うか、別モンだからな。 個数が決まってるなら配列、動的に追加するなら ArrayList/List<T> 任意のキーを使うなら Hashtable/Dictionary<TKey, TValue>
>>838 用途に応じて使い分ければいいんじゃない?
841 :
デフォルトの名無しさん :2006/10/21(土) 08:59:13
MDIフォームで、 子フォームから親フォームの値を参照するのに、 ↓-----親フォーム(Form1)-----↓ public string f1_Text; //これを子フォームから参照 public Form1(){//コンストラクタ this.f1_text = "Form1です。"; Form2 f2 = new Form2(); f2.MdiParent = this; f2.Show(); } ↓-----子フォーム(Form2)-----↓ public Form2(){//コンストラクタ MessageBox.Show("親フォームは、" + ((Form1)(this.MdiParent)).f1_text); } とすると、ビルドは通るのですが、 Form2のMessageBox.Showで NullReferenceException が発生します。 何が間違ってますか。
842 :
841 :2006/10/21(土) 09:03:35
ごめん、public string f1_Text; の T が大文字なのは単にスペルミス
>>841 コンストラクタとはなんでしょうか?
どこで呼ばれてるかわかる?
>>841 親 Form は、こんな処理しているんだよね……
Form child = new Form2();
child.MidParent = this;
横から失礼
>>841 みたいな事やりたい場合で
どうしてもコンストラクタで処理したい場合、AppDomain経由にする?
コンストラクタでなければならない必要性を作らない
>>847 それはわかってるお・・・
ちょっと気になったんだお(´・ω・`)
派生クラス作って親フォームを引数に取るコンストラクタを作る
つうかインスタンスできてない内にthis渡しちゃダメだろ
日本語でクラスメンバつくって何も問題ないすかね? UTF-8で処理してると思えば なんでもありなんだろうけど private void アイテムチェック(string アイテムネーム) { int カウンタ, ID; DateTime 今日の日付; .... }
失礼 途中で送信してしまった…… 日本語で書いたら可読性が増すかというと微妙な気もするんですが 皆さんは日本語使ってます?
読みやすいけどインテリセンスが使いにくくなる
思いっきりつかってる 読みやすい インテリセンスもそれなりに機能している (変換が確定したところで働く) 私の場合はメリット>>デメリット 小学校から英語学習があったらなぁ・・・
使ってるよ 日本語NGの環境で、辞書みたり考え込んじゃうようなものだったら、 この環境では日本語にしてる
857 :
852 :2006/10/21(土) 19:30:08
なるほど しかし慣れてないと一瞬コメントに見えてしまう 色分けはされてても…… 英単語を考える労力がないからいいのか IMEの切り替えが煩雑なのも……
>>841 放置されていますなw
実行順にならべると、
public Form1(){//コンストラクタ
this.f1_text = "Form1です。"
Form2 f2 = new Form2();
//以下は new Form2() で実行されます。
public Form2(){//コンストラクタ
MessageBox.Show("親フォームは、" + ((Form1)(this.MdiParent)).f1_text);
}
//戻る。
f2.MdiParent = this;
f2.Show();
}
ここでおかしいのはMessageBox.Show時の
this.MdiParentは何なのかということ…
>>851 まじ?
例えば、NativeWindowなネストクラスつくるとき、
親のコンストラクタ内でNativeWindowなクラスのコンストラクタに
親のthis渡したりしたらまずい?
ハンドル渡せばいいのかな?
親のメンバにアクセスしないように気をつければ大丈夫だろ
>>859 その場合は this 渡して HandleCreated / HandleDestroyed でアタッチ/デタッチするのがベターかな。
this 渡しちゃ駄目ってんなら、IContainer.Add が使いづらいじゃないか。
つうかコンストラクタ呼ばれた時点でインスタンスはできてるだろ メンバは初期化されてないかもしれんが
まあやや気持ち悪いにしても、 コンストラクタでなくてもそういう状況は当然起こるので 仕方ないってところだろ。 コンポーネント思考は、そういうなんていうか完全主義みたいな感覚とは やや相容れないところがある。
多分オブジェクト指向的には、コンストラクタが完了するまでは インスタンスはできていない、というのが考え方としては正しいと思うよ。 言いたいことはわかるし、それに文句言う気もないんだけど。
フレームワークのコードもコンストラクタで子にthis渡してるのあるよね。
ProcessCmdKeyなりをoverrideして 押されたキーに対応する文字を得るにはどうすればいいですか。 アルファベットキーとかなら出来るけども、記号の場合、 片っ端から分岐して判別するのはあまりにもだし、 WndProcをoverrideしてWM_CHAR捕まえるればいいのかなと思ったけど、 それだとListViewの場合インクリメンタルサーチでカーソルが動いてしまう。 かといってProcessCmdKeyでreturn true;するとWM_CHARが起こらない…。
文字を取りたいなら WM_CHAR / KeyPress 使うしかないね。 まあ色々諦めれ。
870 :
867 :2006/10/23(月) 21:44:36
ToAscii、ToUnicodeという関数を見つけた、 使い方が良く分からん…がこれでいけるかな
871 :
867 :2006/10/23(月) 23:25:53
これでいけたぜイヤッフゥゥウウウウウウウ!!!!!!! [DllImport("user32", EntryPoint = "ToUnicode", CharSet = CharSet.Auto)] public static extern int ToUnicode(int wVirtKey, int wScanCode, ref byte[] lpKeyState, string pwszBuff, int cchBuff, int wFlags); [DllImport("user32.dll", EntryPoint = "GetKeyboardState", CharSet = CharSet.Auto)] public static extern int GetKeyboardState(byte[] lpKeyState); protected override bool ProcessCmdKey(ref Message msg, Keys keyData){ System.Text.StringBuilder sb = new System.Text.StringBuilder(256); byte[] keyState = new byte[256]; GetKeyboardState(keyState); ToUnicode((uint)msg.WParam, 0, keyState, sb, 256, 0); MessageBox.Show(sb.ToString()); return true; }
Clipboard.SetDataObjectを使って、クリップボードに文字列をコピーする処理なのですが、 Form1からだと上手くいくのに、Form1から呼び出したあるフォーム上では以下のようなエラーが出ます 'System.Threading.ThreadStateException' のハンドルされていない例外が system.windows.forms.dll で発生しました。 追加情報 : OLE が呼び出される前に、現在のスレッドが Single Thread Apartment (STA) モードに設定されていなければなりません。 Main 関数に STAThreadAttribute が設定されていることを確認してください。 Form1から呼び出したフォームでも、上手くいくものと、上記のエラーが出るものがありましたが、原因がまったくわかりません どうすればいいんでしょうか?
原因が全くって、ちゃんと書かれてるじゃないか原因
でかいサイズの配列を返す関数があるんですが、 これは値を返しているのですよね? オーバーヘッドを生じないために、ポインタのようにして返すことはできないのですか?
875 :
872 :2006/10/24(火) 07:45:48
>>873 すいません。書き方がまずかったです
エラーに対する具体的な対処がわからないんです
Main関数の上には[STAThread]がついてるんですが、これは関係ないんでしょうか?
>>875 > 現在のスレッドが
別スレッド使ってんだろ?
Thread クラスのメンバ調べれ。
ちなみに Thread クラス使ったスレッドしかサポートできない。
そうでなきゃ Control.Invoke 使ってメインスレッドにやらす。
878 :
デフォルトの名無しさん :2006/10/24(火) 09:28:29
プロパティ値セットが、デザイナ画面のプロパティウインドウから行われたのか、 コードから行われたのかを判定する方法はありますか? DesignMode判定だけでは不十分なので。。
>>878 質問には答えられない訳だが・・・
何故それが必要なのか教えてくれるか?
>>879 あるカスタムコントロールに、P1 と P2 の2つのプロパティがあるとして、
デザイン画面のプロパティウインドウ上で P1 に値を入れると、
自動的に P2 にも特定の値が入るようにしています。
ただ、この P2 の値は、P1 の値に応じて必ず入れるべき値というわけじゃなく、
単にデザインの効率を上げるためによく使用される値を自動で入れているだけであって、
あとからいくらでも P2 の値を変えることができます。
で、このコントロールを使ったとき、以下のような場合に不都合が出ます。
あるフォームのデザイナ上で、このコントロールを貼り付け、
プロパティウインドウから P1 の初期値を設定します。
するとそれに応じて P2 の値も変わります。(※ここまでは問題なし)
ここで、今作りたいコントロールは P2 の値は既定値(値なし)のままで良く
自動で変更された P2 をプロパティウインドウから元の空欄に戻したとします。
すると当然、デザイナにより作成された InitializeComponent() 内には、
P1 の値をセットするコードだけが記述され、P2 に関しては何も書かれません(規定値だから)。
この状態で、一旦ビルドを行います。そして改めてデザイナ上から P2 の値を見てみると、
空欄にしたはずの P2 が、P1により自動設定された値に戻っています。
よくよく考えれば、InitializeComponent() 内で P1 の値のみセットし、P2 には何もセットしてない
わけだから、こうなってしまうのは当然なのですが。。
というわけで、この InitializeComponent() 内では(つまりコードでは) 自動セットを無効にし、
プロパティウインドウからセットしたときだけ自動セットさせたいのです。
InitializeComponent() はデザイン画面で行われるので DesignMode判定では駄目だし、
OnHandleCreated を使用して判定しても、フォーム側の InitializeComponent() では
既にコントロールのハンドルが作成された後なので駄目でした。
VC++6では、ToolbarのGUIエディタが付いていましたが、 これは、VS2005にもありますでしょうか? また、VC++6では、ツールバー全体で一つのbmpファイルになっていましたが VS2005ではbmpファイル一つずつ別々に扱うのでしょうか?
>>880 作成された後なので駄目でした。 まで読んだ。
>>881 ・ない
2005にはToolStripというものはあるが
・ImageList.AddStrip()
ていせい ImageList.ImageCollection.AddStrip()
>>883-884 どうもありがとうございます。
調べてて無さそうだと思ってましたが諦めがつきました。
質問。 MenuStripでどうしてもあのVS2005風スタイルじゃなくてWin標準の見た目でやりたくて、 MenuStripのRenderModeをSystemにしたんだけど、あのダサさは何とかならないん? やっぱり自分でRenderer作らなきゃいけない? ちなみにMainMenu使えっていうのはなし。理由はMainMenuだと動かせないから。
Systemでそんなにださいか? でもRenderer作るなんてそんなに大変じゃないでしょう。 ProfessionalRendererあたりから派生させるんだっけ?
あれだ、Professionalのアイテムの高さでSystemやられると妙というかなんというか とりあえずSystemRendererあたりいぢってみる。
あれだ、Professionalのアイテムの高さでSystemやられると妙というかなんというか とりあえずSystemRendererあたりいぢってみる。
891 :
879 :2006/10/24(火) 14:46:46
>>880 時間割いてもらってありがとう。
プロパティの間違った使い方だと思う。
二重スマンorz
>>886 Form1でForm2のインスタンス生成していれば同一スレッド。
一応二つForm作って試したけど両方とも正常に動く。
>>877 の書き込みが正しい。
894 :
887 :2006/10/24(火) 15:56:45
とりあえずFormのLoadイベントハンドラで再帰的にToolStripMenuItemの高さを18に、ToolStripSeparatorの高さを3に(両方ともAutoSizeをfalseにして)することで暫定的に対処。
895 :
886 :2006/10/24(火) 16:17:21
>>893 新規にソース打って確認したけど、
確かに、勝手に脳内変換してたもより。
コントロール毎に別スレッドになる物と思ってた。
以上迷惑かけた方 m(_ _)m
>>895 知ってるだろうけど、別スレッドだろうがApartmentState.STAが定義されてれば動くおw
897 :
872 :2006/10/24(火) 18:38:03
>>877 ,886,893
>>877 さんのおっしゃるとおりでした
buttonHoge_Click(〜〜)
{
//処理
new Thread(new ThreadStart(ShowForm)).Start();
//処理
}
private void ShowForm()
{
Form form=new Form();
form.ShowDialog();
}
上記の書き方でエラーが出ていたのですが、スレッドを立ち上げずに統合したらうまくいきました
ありがとうございましたm(_ _)m
>>897 Threadを使用したのは理由があるんじゃないか?
Thread t = new Thread(new ThreadStart(ShowForm));
t.SetApartmentState(ApartmentState.STA);
t.Start();
メソッドを引数に同じ型を取るようにしてstaticにした場合 何か(パフォーマンスとか)利点とかはありますか class Pattern{ public bool IsMatch(string target){} } class Pattern{ public static bool IsMatch(Pattern pattern, string target){} }
パフォーマンス上のメリットはほとんどないでしょ と思ったら、staticの方が速かったりするんだな *************** loop 100000000 times. Method1: 00:00:01.0937500 Method2: 00:00:00.6718750 Result: -00:00:00.4218750 Method2 is faster ******************* private long Method1( long l ) { return l++; } private static long Method2( long l ) { return l++; } なんで?
class Sample { private long Method1( long l ) { return l++; } private static long Method2(Sample sample, long l) { return l++; } } これだと両者の差は誤差程度になったよ インスタンスメソッドの呼び出しは暗に関数にインスタンス参照を渡してるんじゃないのかな
この手のテストは難しいよ。最適化無しやデバッグビルドでは馬鹿正直にコンパイルされるうえ、 デバッグ用の仕込みのために妙に遅くなることがある。 一方最適化すると、コンパイル時と実行時に最適化がかかって、呼んだはずのメソッドがインライン化されたり、 処理が省略されたりすることがある。
nLiteなどで、プログレスバーのイメージを通常の物と 違うイメージにしている物を見たのですが、あれはどのようにすれば 実現可能ですか?
ユーザー側でWindowsのVisualStyleを変えてるだけじゃないの
906 :
872 :2006/10/24(火) 22:18:01
>>898 ,899
すいません
横着してここにはThreadクラスで書きましたが、実際には引数を渡したかったのでThreadPoolを使用していたので、試すことが出来ません
一応引数を無くし、Threadクラスで呼び出してみましたが、なぜかApartmentStateをSTAした場合はもちろん、
未設定でも
>>872 のようなエラーは出ず、正常に動作しました
マルチスレッドといってもThreadPoolでのみ失敗するようです
>>905 VisualStyleを変えるってなんだ…?
よくわからないので勉強してきます orz
>>906 横着 マルチスレッド ThreadPool ApartmentState
これ全部ググっておく事を勧める
>>908 次の条件に一致する情報は見つかりませんでした。
検索キーワード:横着 マルチスレッド ThreadPool ApartmentState
911 :
872 :2006/10/25(水) 19:24:10
972 に期待 ま、ThreadPool 内のスレッドが MTA ってだけなんだけどな。
で、横着 ってなによ
915 :
872 :2006/10/25(水) 20:49:09
>>912 アンカミスりましたorz
なるほど・・・おかげでスッキリしました
System.Drawing.Brushes や System.Drawing.SystemBrushes のメンバって 使った後に Dispose せずに放置していいの?
おk
.NETの学習は時間の無駄です
.NETの学習は時間の無駄です
.NETの学習は時間の無駄です
.NETの学習は時間の無駄です
.NETの学習は時間の無駄です
.NETぬ学習ぱ時問の無馼です
924 :
デフォルトの名無しさん :2006/10/26(木) 14:55:31
FolderBrowserDialogを拡張して現在選択されているパスを表示させたり、 ユーザのパス文字列入力でツリーを開いたりしたいのですが、FolderBrowserDialogは継承できないためフォームを置くことすらできません。 何か良い方法はありませんか?
API
FolderBrowserDialogを逆コンパイルして改造
しますた
SHBrowseForFolderとかのラッパーでしょ?どうせ。 結構簡単にできそうだけど面倒くさそう カスタマイズできるやつ作って公開してクレクレ
929 :
924 :2006/10/26(木) 19:42:07
関数がインライン展開されてるかどうか確かめる方法を教えてください。
メソッドはコンパイル時にインライン展開されるわけじゃないよ インライン展開されるのはJITコンパイルの時 だから逆汗しても無駄
ではどうしたらいいのでしょうか?
諦めればいいよ
気にしなくていいよ たぶんJITコンパイラのほうが賢いよ
XML に変な文字が含まれていると、XmlDocument.Load 時にその箇所で例外が出てしまって DOM が作れないんですが、
これを回避する良い方法はありませんか?
一応、今現在の↓みたいな xml だと、IE でも途中までしか表示されませんが……これをスキップするにはどうすればいいのかな、と。
ttp://b.hatena.ne.jp/hotentry?mode=rss
それは「XML に似た何か」であって XML ではないので XmlDocument や XmlReader では扱えない。 そのドキュメントに限って言えば一旦 Encoding クラス使って String にしてから StringReader 経由で読めばいいと思うけど。
>>936 どの文字かまで追ってないけどXMLの禁則文字が入ってるだけじゃね?
><&は< > &に置き換え
あぁ、タグ名かも知れんな・・・
"XML 禁則"でぐぐってくだちぃ
> がテキストノードに現れるのは構わないぞ、と。 ちなみにこのドキュメントは一バイト化けてて正しい UTF-8 じゃなくなってる。
>>936 無理だと思う
DOM経由で書き込めば禁則文字は勝手に変換してくれるんじゃなかったっけ?
なぜにそんな事態がおきるの?
>>936 using System.Xml;
using System.Net;
using System.Text;
using (WebClient wc = new WebClient())
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(Encoding.UTF8.GetString(wc.DownloadData("
http://b.hatena.ne.jp/hotentry?mode=rss ")));
}
例外は起きないが望むDOMができているかは知らない。
自作のDLLを使おうとすると .exeファイルと同じフォルダに入れないと駄目みたいですが, 別のフォルダにおいたDLLファイルを利用するにはどうしたらいいのですか? - hoge.exe (ファイル) + dll (フォルダ) - hoge1.dll (ファイル) - hoge2.dll (ファイル) みたいな感じにしたいのですが
945 :
943 :2006/10/27(金) 11:18:38
.NETでは、MFCのDDV_関数のように、ダイアログで入力した値のチェックを 行う方法が有りますでしょうか? 調べた感じでは、文字数は、MaxLengthで制限できるようですが、 数値などをチェックする方法は特別に用意はされておらず、 KeyPressイベントとかでソースコードでチェックする必要が有りそうです。
コントロールによってはそれぞれで制限することは可能 ただし組み合わせで制限するならコードでやる。 数値チェックってMaskedTextBoxでやってるの? またNumericUpDownを使う手もあるが
TextChangedイベントは?
MFCのDDV_関数ってどんな感じなんだ? Validating イベントみたいなものか?
950 :
949 :2006/10/27(金) 17:42:47
951 :
946 :2006/10/27(金) 20:59:24
文法の質問なんですが、例外が複数種類発生する可能性があって、 その対処が同じな場合、もっと簡略的な書き方ってないですか? try { i = int.Parse(s); } catch (FormatException fe) { i = 100; } catch(OverflowException oe) { i = 100; } ↑を例えば↓のような感じで、 try { i = int.Parse(s); } catch (FormatException fe,OverflowException oe) { i = 100; }
無いな
954 :
952 :2006/10/27(金) 23:31:36
try { i = int.Parse(s); } catch ( Exception e ) { if( e is FormatException || e is OverflowException ) i = 100; else throw e; } たぶん単なるサンプルとしてだしたんだと思うけど TryParse ってのあるよ。一応。
956 :
952 :2006/10/28(土) 00:50:15
>>955 おっなるほど。
参考になります。
int.Parseはいつもは
i = intTryParse(s)?int.Parse(s):100;
ってしてます。お気使いありがd。
957 :
952 :2006/10/28(土) 02:11:30
int.TryPaeseの使い方違うじゃん俺(´・ω・`) なに勘違いしてんだか...
おまえそれはおかしいw
>>955 × throw e;
○ throw;
960 :
デフォルトの名無しさん :2006/10/28(土) 11:24:29
961 :
デフォルトの名無しさん :2006/10/28(土) 11:40:55
キーボードから1以上26 以下の整数nを入力し,n 番目のアルファベッ ト(大文字)を画面表示するプログラムを作成したいんですけど・・・ 。例えば,「1」が入力された場合には「A」を,「10」が入力された場 合には「J」を画面に表示するようなプログラムで。あと、0 以下,あ るいは27 以上の数字が入力された場合には再入力できるようにしたい んです。ただし,if やswitch を用いて26 種類の分岐を作ってはいけ ないんですけど、まったくわからなくて・・・誰か教えてくれませんか ???
ここは宿題スレじゃないぜ。 ていうかそんなのも思いつかないのなら辞めちまえ。
963 :
デフォルトの名無しさん :2006/10/28(土) 11:45:51
A~Zを配列に入れると、添え字i=0でAが参照できます。 あとは考えれ
"A~Z"[n - 1]
965 :
デフォルトの名無しさん :2006/10/28(土) 12:02:37
>>964 ASCIIコードならそれでいいけど、C#の文字コードはUNIコードだから
マルチバイトじゃないかい?
967 :
デフォルトの名無しさん :2006/10/28(土) 12:07:01
Graphic, Image, Bitmap間の変換で、 Graphic←Image←Bitmapはメソッドありましたが、 その逆とか、ビットマップのピクセルへのアクセス、 加工をする方法か、解説したページがあれば教えてください。
Image→Bitmapはキャストするだけ Graphics→Image/Bitmapはそもそも両者は全くの別物だから考え方がおかしい ピクセルへのアクセスはLockBitsでぐぐれ
969 :
デフォルトの名無しさん :2006/10/28(土) 12:13:22
972 :
デフォルトの名無しさん :2006/10/28(土) 23:23:50
だから2バイトだと何がまずいんだよw
>>838 C#2.0以降ならArrayListよりList<T>が推奨とさ。
975 :
初心者 :2006/10/28(土) 23:37:48
どちら様教えて、VC++プログラミングするときにひとつのボタン押して 他の.exeファイル実行できるようにどうすればいいですか??
マルチか・・・
980 :
デフォルトの名無しさん :2006/10/29(日) 06:52:06
981 :
デフォルトの名無しさん :2006/10/29(日) 08:22:26
C#はランタイム無しでフォーム起動できないのかYO?
982 :
デフォルトの名無しさん :2006/10/29(日) 10:19:51
ランタイムなしで使える言語ってなんだよ
983 :
デフォルトの名無しさん :2006/10/29(日) 10:59:01
>>973 2バイトになると文字列になるからワンクッション入れないと。
余分なものが入るから学校での学習向けじゃない。
試験が筆記試験で動かなくていいんなら関係ないけど。
987 :
デフォルトの名無しさん :2006/10/29(日) 12:32:59
>>714 のを参考に、2枚の画像を比較しようとしたんですが、
2つを同時にLockしようとしたらすでにロックされていると出たんで、
Lockbitは同時にはひとつしかできないってことですよね?
>>983 がC#の文字列とCの文字列の違いが分かってなくて、C#のcharが1バイトだと思い込んでいることは分かった。
990 :
987 :2006/10/29(日) 15:00:05
http://msdn2.microsoft.com/ja-jp/library/ms229672.aspx こんな感じの使ってMarshal.Copyで2つのbitmapを取り出してるのに
どちらも同じデータが入ってる・・・・
キャプチャした画面は明らかに変化してるのにそれを拾えてない。
画面には反映されるのにImageには反映されないのかな。
pictureBox1.Image = (Image)Start;
これをやった後にStartが変更されても
Imageが変更されてないのは、コピーが作られているからでしょうが、
Graphics.FromImage()で作ったGraphicデータも同じなんでしょうか。
(char)('@' + n) でもOK?
>>990 ソースがないとなんとも
pictureBox1.Image = (Image)Start;
これはコピーは作られないよ。参照を渡してるだけで実体は同一になる。
後でStart = newImage;とかやってるんじゃないの
993 :
987 :2006/10/30(月) 01:08:32
>>992 キャプチャしたのをコピーするつもりでやったのがだめだったようで。
それぞれにGraphics用意してそれぞれキャプチャしたらうまくいきました。
bmStart = bmLatest.Clone();
とかしないといけなかったんですね。
>>740 と同じ間違いしてました。
以下は元のソースです。
gLatest = Graphics.FromImage((Image)bmLatest);
gLatest.CopyFromScreen(WatchRect.Left, WatchRect.Top, 0, 0,
new Size((WatchRect.Width), (WatchRect.Height)));
bmStart = bmLatest;
ここで疑問なんですが、毎回Clone作って更新した場合、
使われなくなったものは自動的に破棄されるんでしょうか?
いずれは破棄されるが、任意の時点で破棄したいなら Dispose
995 :
デフォルトの名無しさん :2006/10/30(月) 11:48:42
APIやDirectXより比較的簡単に解像度を変更する方法を教えてください ぐぐっても見つかりませんでしたが;
ぐぐって探すのは API や DirectX のほうが簡単だよ
列挙体のNoneってどうんな感じで定義すればよいですかぁ Allは他のをorでつなげればいいんだけんども
0
ども
( ´ ・ ω ・ ` )
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。