ふらっとC♯, C#(初心者用) Part9

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは

「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。

ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

前スレッドはこちら
http://pc8.2ch.net/test/read.cgi/tech/1148310124 (Part8)
http://pc8.2ch.net/test/read.cgi/tech/1141458468/l50 (Part7)
http://pc8.2ch.net/test/read.cgi/tech/1122001458/l50 (Part6)
http://pc8.2ch.net/test/read.cgi/tech/1065196964/l50 (Part5)
http://pc2.2ch.net/test/read.cgi/tech/1059028988/l50 (Part4)
http://pc2.2ch.net/tech/kako/1047/10472/1047210828.html (Part3)
http://pc2.2ch.net/tech/kako/1035/10358/1035895873.html (Part2)
http://pc2.2ch.net/tech/kako/1023/10237/1023766485.html

C♯, C#相談室 Part34
http://pc8.2ch.net/test/read.cgi/tech/1157549657/
2デフォルトの名無しさん:2006/09/10(日) 11:28:03
Visual C# Express Edition (無料)ダウンロード
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

.NET Framework SDK (2.0)
http://msdn2.microsoft.com/ja-jp/library/ms310244.aspx

MSDN Visual C# Express Edition フォーラム
http://forums.microsoft.com/msdn-ja/ShowForum.aspx?ForumID=187&SiteID=7
Visual Studio ユーザーグループ
http://vsug.jp/

@IT Insider.NET
http://www.atmarkit.co.jp/fdotnet/index.html
Insider.NET 会議室 ディレクトリ
http://www.atmarkit.co.jp/fdotnet/index/bbs/index.html

宇宙仮面の C# プログラミング / C# Programming
http://ukamen.hp.infoseek.co.jp/
WisdomSoft C#入門
http://wisdom.sakura.ne.jp/programming/cs/index.html
WisdomSoft Microsoft .NET入門
http://black.sakura.ne.jp/~third/system/msnet/msnet.html
どっとねっとふぁん
http://dotnetfan.org/
緑のバイク 初めてのC# 〜 覚え書き 〜
http://homepage3.nifty.com/midori_no_bike/CS/
どぼん!の .NET Tips
http://dobon.net/vb/dotnet/
.NET のつぼ
http://park16.wakwak.com/~mimi/dotnet/top.html

3デフォルトの名無しさん:2006/09/10(日) 11:33:01
4デフォルトの名無しさん:2006/09/10(日) 12:09:06
こんにちは、お世話になります。

C#で他のプロセスがロック(使用している)ファイルを読み込もうとすると例外でエラーになってしまう
のですが、これを読み込むにはどうしたら良いのでしょうか?

>>1
スレ立て乙
5デフォルトの名無しさん:2006/09/10(日) 12:13:46
Windows の設計にケチを付ける気か
6デフォルトの名無しさん:2006/09/10(日) 13:53:07
デリゲートのBeginInvokeメソッドの引数に object @object というものがありますが、
この @ はどういう意味なんでしょうか?
7デフォルトの名無しさん:2006/09/10(日) 14:03:04
asyncの意味ではないだろうか。
8デフォルトの名無しさん:2006/09/10(日) 14:03:35
言語仕様見れ 2.4.2 識別子
9デフォルトの名無しさん:2006/09/10(日) 14:03:38
>>6
object はキーワードなんでキーワード以外の使い方をするには @ をつける
10デフォルトの名無しさん:2006/09/10(日) 14:24:40
なるほど、@object という識別子は言語仕様で許されるのですか。
納得しました。

/チラシの裏
試しに delegate void A(object @object); というデリゲートを宣言したところ
IAsyncResult A.BeginInvoke(object @object, AsyncResult callback, object @object)
というシグネチャのメソッドが生成されました。
/チラシの裏
11デフォルトの名無しさん:2006/09/10(日) 14:44:53
>>10
やばくない?
12デフォルトの名無しさん:2006/09/10(日) 14:48:44
CILになればパラメータ名なんて無意味だから大丈夫なんじゃね
13デフォルトの名無しさん:2006/09/10(日) 18:32:15
Button Btn1 = this.Controls["controlname"];
Btn1.PerformClick();

任意の名前のボタンを押した時の動作をシミュレートするために、
上記のようにしたのですが、コンパイルは通るのですが、
実行時に、実体がどうのこうのと怒られます。
何か間違ってますか。環境は2.0です。
14デフォルトの名無しさん:2006/09/10(日) 18:36:58
Button にキャストしてないのにコンパイル通るのか?
15デフォルトの名無しさん:2006/09/10(日) 18:44:14
発生したのはNullReferenceExceptionだと思うのだが
本当にその名前であってるか?

>14
VBのを書き換えてるのかも。
16デフォルトの名無しさん:2006/09/10(日) 18:59:05
Cの構造体の様に静的に初期化をする事はできますか?
struct{
int id;
string name;
}hoge;

hoge h[] = {{0,"hoge0"},{1,"hoge1"} }
みたいな

組み込みの型の配列ならできたんですが、
ユーザ定義型のやり方がわかりません・・・
1713:2006/09/10(日) 19:04:06
ごめん。もっと正確に書きます。

Button ButtonTmp = (Button)this.Controls["OperationButton" + this.OperationNumber.ToString()];
ButtonTmp.PerformClick();

ボタン名が OperationButton1〜OperationButton10 まであって、
OperationNumberが保持してる番号によって押すボタンを変えたく、こう書きました。

デバッグ時のエラーは、15さんがおっしゃるように、
「NullReferenceExceptionはハンドルされませんでした。
オブジェクト参照がオブジェクト インスタンスに設定されていません。」
と出ます。

念のため、ボタン名に変数を使わず直接指定しても同じエラーになりました。
18デフォルトの名無しさん:2006/09/10(日) 19:08:00
>>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"),
};
1916:2006/09/10(日) 19:10:06
>>18
ありがとうございます
試してみます
2013:2006/09/10(日) 19:18:01
解決しました。
パネル内にあるコントロールは Controls["controlaname"] ではなく、
Controls.Findメソッドを使うとのことでした。
21デフォルトの名無しさん:2006/09/10(日) 20:21:02
>>18
引数名にアンダーバーとか付けて区別するのはルール違反だろ
メンバ変数の方に付けるか、
public Hoge(int id, string name)
{
this.id = id; this.name = name;
}
にするべき
22デフォルトの名無しさん:2006/09/10(日) 22:29:16
たしかに
23デフォルトの名無しさん:2006/09/11(月) 11:09:52
>>21
C++ の頃はよくそんなのやったんだけどね。
メンバ変数に id ってのがあったら、コンストラクタの引数で id を使えなくなるから。
それに、メンバ変数の頭に m_ つけたり、末尾に _ 付けるってのもよくやってた。

でもやっぱ、C# 的には this.id = id; ってすべきだと思う。
24デフォルトの名無しさん:2006/09/11(月) 11:14:54
>>21
>public Hoge(int id, string name)
のidを icとかにタイプミスしても大丈夫?
25デフォルトの名無しさん:2006/09/11(月) 11:21:44
同じ変数に割り当てられました。って警告出るな
26 ◆KI/AJQZcC6 :2006/09/11(月) 13:03:19
this.id = id
定番だけどNGのもと。
27デフォルトの名無しさん:2006/09/11(月) 13:37:03
C#でクリップボードを監視して、テキストあるいは画像データだった場合は、
ログとして、外部ファイルに出力するというプログラムを作成しています。

ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=166&forum=7&11
上記などを参考にプログラム自体はどうにか動いたのですが、
3日ぐらい使用していると、外部ファイルに出力してくれない状態になってしまいます。

デバッグをしようにも、バグが起きるまでかなり時間がかかりますので、
ずっとデバッガを走らせておくのも、大変な状態です。
大変不躾なお願いではありますが、ソース一式を下記にアップロードしましたので、
どなたかバグ箇所の指摘にお力をお貸しいただけませんでしょうか。

ttp://www.42ch.net/UploaderSmall/source/1157948930.zip
28 ◆KI/AJQZcC6 :2006/09/11(月) 13:56:07
見てないけど
メモリリークだな。
29デフォルトの名無しさん:2006/09/11(月) 14:06:31
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;
}

じゃね?
30デフォルトの名無しさん:2006/09/11(月) 14:22:18
return
31デフォルトの名無しさん:2006/09/11(月) 18:43:46
的確なご指摘ありがとうございます。
さっそくコードを取り込んでデバッグしてみます。
32デフォルトの名無しさん:2006/09/11(月) 22:20:11
複数枚のbitmap画像を連結させて一枚にしたいのですがどうすればよいでしょうか
33デフォルトの名無しさん:2006/09/11(月) 22:21:52
並べて表示させたいのか
くっつけて1つのファイルにしたいのか
34デフォルトの名無しさん:2006/09/11(月) 22:24:22
でかいBitmap用意して、ぺちぺちコピーしてったらいいんじゃね。
35デフォルトの名無しさん:2006/09/11(月) 22:25:34
一枚として取り扱えるようにしたいです。
分からないのでpictureboxを並べて表示させてましたがそこから先で扱いが分からないので一枚として扱いたいです。
36デフォルトの名無しさん:2006/09/11(月) 22:27:41
連結後の大きさのBitmapオブジェクトを作成
そのGraphicsオブジェクトを取得してDrawImage
37デフォルトの名無しさん:2006/09/11(月) 22:33:08
”Graphicsオブジェクトを取得してDrawImage”の意味すら分からない状況ですがイメージは掴めました。
調べながらなんとかしてみます。ありがとうございます。
38デフォルトの名無しさん:2006/09/11(月) 23:23:24
調べるといったそばからあふぉな質問ばかりでスイマセンが。
連結したGraphicsオブジェクトをPictureBoxに表示させるにはどうすればよいのでしょうか。
GraphicsオブジェクトをBitmapにするのもわからないし。
勉強不足でほんとすいません。
39デフォルトの名無しさん:2006/09/11(月) 23:26:29
Graphics を連結させるのではなく、Bitmap を連結させるのでは?
40デフォルトの名無しさん:2006/09/11(月) 23:27:15
でっかいBitmap作成 new Bitmap(サイズ)ね。
でっかいBitmapから Graphicオブジェクト作成 Graphic.fromImageだっけ?
41デフォルトの名無しさん:2006/09/11(月) 23:29:27
Graphicsオブジェクトは特定のbitmapに書き込める筆記用具のようなものです。
絵じゃないよ。
42デフォルトの名無しさん:2006/09/11(月) 23:33:49
???益々意味が。。
Bitmap でかいやつ = new Bitmap(サイズサイズ);
Bitmap 小さいの = new Bitmap(なんか);
Graphics g = Graphics.FromImage(でかいやつ);→グラフィックスにしてるつもり
g.DrawImage(ちいさいの, 位置);→でかいグラフィックスに小さいのをならべたつもり
そっから先が。というかそもそも間違ってるのかも。
43デフォルトの名無しさん:2006/09/11(月) 23:34:33
でっかいBitmap用のGraphicオブジェクトでDrawImage(bitmap).
必要な回数だけDrawImageを繰り返す。
44デフォルトの名無しさん:2006/09/11(月) 23:36:31
>>42
picturebox.Image=でっかいbmp;
refresh();
45デフォルトの名無しさん:2006/09/11(月) 23:37:25
>>42
Graphics.FromImage は Image を Graphics に変換するんじゃなくて
《Image に描画するための Graphics オブジェクトを作成する》 んだぞ?
4631からずっと:2006/09/11(月) 23:42:43
できたーーーー。
ImageとGraphicsの違いってか意味が分かってなかった。
ほんとありがとうございます。
VC触って4日目なんですがオブジェクト?とかその当りをちゃんと勉強します。ほんとどうもです!
47デフォルトの名無しさん:2006/09/11(月) 23:48:25
VC かよ。VC はスレ違いだぞw
48デフォルトの名無しさん:2006/09/11(月) 23:50:50
VCだとするとCLI?
4931からずっと:2006/09/11(月) 23:51:06
>>47
すいませんC#でした。無料らしいから落とした。C#の方が新しいぽいからC#にした。よしなんか作ろうと思って手探りでやってみた。助けてもらったありがとう\(^o^)/ヤルゼ
50デフォルトの名無しさん:2006/09/11(月) 23:56:08
>>49
初めて間もないのに君は才能あるな。

CS-Boyと名乗りなさいw
51デフォルトの名無しさん:2006/09/12(火) 00:03:01
本当に才能あるやつはこんなところで質問する前に理解するけどな。

と無粋なレスをしてみる
52ぼよん:2006/09/12(火) 00:12:16
アニメーションGIFのファイル出力したいのですが
どうやってらできるんでしょうかね?
標準のライブラリとかなさそうですしネットで検索しても見つかりません。
53デフォルトの名無しさん:2006/09/12(火) 00:14:14
ファイル形式調べる。
そのとおりにファイルに出力。
54デフォルトの名無しさん:2006/09/12(火) 00:18:16
55ぼよん:2006/09/12(火) 00:27:13
えー・・・ごりごり書くしかないのですか・・・
泣きそうです。
地味にやってみます。
56デフォルトの名無しさん:2006/09/12(火) 00:50:27
出来るかどうかわからないけど…

ダミー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に表示するにはどのようにするのが
よろしいでしょうか?
58デフォルトの名無しさん:2006/09/12(火) 02:28:39
txt.Text += "aaa";
59デフォルトの名無しさん:2006/09/12(火) 02:30:28
そのコードだと、そこで止まらないと思うぞ。

つっこむところはたくさんあるな。酔っぱらってる俺でいいならつっこむぞ。


・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プロパティを二度変更してるけど、意味がないぞ。後の値になるだけだぞ。



6059:2006/09/12(火) 02:32:08
最後の指摘は間違ってるぞ。+=を見逃したぞ。すまんだぞ。
61デフォルトの名無しさん:2006/09/12(火) 02:35:54
Method メソッドの戻り値がないな
62デフォルトの名無しさん:2006/09/12(火) 02:35:58
>>57
というより、コンパイルが止まったんだろ?
そうだと言ってくれ。
63デフォルトの名無しさん:2006/09/12(火) 02:41:22
>他クラスで得た値をTextBoxに表示するにはどのようにするのがよろしいでしょうか?
[1] OtherClass に public string[] Text プロパティだかメソッドだかを用意してアクセス
[2] MainClass のインスタンスを OtherClass に渡して MainClass.SetText(string[] texs) を呼ぶ
[3] イベントでも使う
とりあえず3種類。どれでも好きなの使え
64デフォルトの名無しさん:2006/09/12(火) 02:43:33
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
メソッド名を大文字ではじめるのが気に入らない
66デフォルトの名無しさん:2006/09/12(火) 04:03:33
C#では大文字ではじめることが推奨されてますが
67デフォルトの名無しさん:2006/09/12(火) 06:38:47
Javaはどんどんやばい方向に向かってるな
信者はついていってるのか?
68デフォルトの名無しさん:2006/09/12(火) 06:39:42
C#って存在価値あるの?
6957: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";
  }
}
70デフォルトの名無しさん:2006/09/12(火) 19:17:38
Textに2回連結する意味が分からない
71デフォルトの名無しさん:2006/09/12(火) 19:46:11
可読性重視?
72デフォルトの名無しさん:2006/09/12(火) 20:24:03
txt.Text += (ry より、txt.AppendText(ry のほうがよくないかい?
73デフォルトの名無しさん:2006/09/12(火) 20:40:40
その辺はうまくオーバーロードされてんじゃないの?
と適当言ってみる
74デフォルトの名無しさん:2006/09/12(火) 20:43:27
txt.Text += "aaa" + "bbb"の方がたぶん最適化されるから速い
75デフォルトの名無しさん:2006/09/12(火) 20:46:41
txt.Text += (ry と txt.AppendText(ry は動作が違う
76デフォルトの名無しさん:2006/09/12(火) 20:48:54
.AppendText("aaa" + "bbb") がベスト。
77デフォルトの名無しさん:2006/09/12(火) 21:07:51
気にする必要なし
78デフォルトの名無しさん:2006/09/12(火) 21:09:28
まぁそうなんだけど
79デフォルトの名無しさん:2006/09/12(火) 21:23:04
つーか同じタイミングで2回連結するんなら連結した文字列("aaa"+"bbb")を返すメソッドにして
メインの方でAppendTextすればいいだけじゃないの?
80デフォルトの名無しさん:2006/09/13(水) 21:50:56
PictureBoxをクリックしたときにPictureBoxでの座標を得るにはどうすればよろしいのでしょうか
81デフォルトの名無しさん:2006/09/13(水) 21:52:31
PointToC(ry
82デフォルトの名無しさん:2006/09/13(水) 22:06:32
なんで略すの?
Point p = pictureBox1.PointToClient( Control.MousePosition );
83デフォルトの名無しさん:2006/09/13(水) 22:22:12
>>80
>>81
すいませんありがとうございますm(__)m
84デフォルトの名無しさん:2006/09/14(木) 00:45:44
>>82
VC#ならその辺まで入れれば候補確定すんじゃね?w
85デフォルトの名無しさん:2006/09/14(木) 03:07:16
文字列検索ソフトを作ろうと思うのですが
項目内特定の文字列の色を変えるにはどのライブラリを使えばいいんでしょうか?
リストビューだと項目内全部色が変わるので
86デフォルトの名無しさん:2006/09/14(木) 03:10:14
お前は RichTextBox でも使ってろや
8785:2006/09/14(木) 03:19:33
>>86
ファイルのパスもリストアップしたいので
クラムは必須なんです
88デフォルトの名無しさん:2006/09/14(木) 03:19:33
>>85
オーナードロー。
89デフォルトの名無しさん:2006/09/14(木) 05:52:24
ハマグリが必須なプログラムってどんなのだ?
9032:2006/09/14(木) 14:21:00
たびたびスイマセン。
複数の画像をマウスで自由に移動させれるようにしたいのですがどうすればよいでしょうか。
パズルというか福笑いのようなものをイメージしているのですが。
91デフォルトの名無しさん:2006/09/14(木) 14:31:09
もうc#でも何でもいいんだな。

ゲームの本読んでべんきょうしてね。
9232:2006/09/14(木) 14:33:48
あーそうか別にC#の質問ではないですねスイマセン失礼します
93デフォルトの名無しさん:2006/09/14(木) 14:39:15
わかんねえけどこんな感じかな?

マウスのボタン押した場所に動かせる画像があるか調べる。(座標の比較)
あったらその中の一番上の画像を選択したと記録。

マウスのボタンを放したら画像選択を取り消し。

選択中にボタン押したままマウス移動したら選択画像の移動処理。
94デフォルトの名無しさん:2006/09/14(木) 20:34:37
こんばんは

ttp://www.codeproject.com/cs/media/Motion_Detection.asp

このプログラムがおもしろいなーと思ったのですが、

JPEG画像の取り込みの機構からよくわかりません。

それだけ抜き出そうとして、ここ2日くらいやってるんですけど、

うまくいきません。

誰か教えていただけませんか??
95デフォルトの名無しさん:2006/09/14(木) 20:42:03
メニューのショートカットキーについてなんですが、
VS2005で使われているように、(Ctrl+W)+(Ctrl+W)でWebヘルプ起動という
ような感じにショートカットキーを設定したいのですが、どうしたらいいですか?
96デフォルトの名無しさん:2006/09/14(木) 20:45:48
KeyUp とか使って自前で管理汁
97デフォルトの名無しさん:2006/09/14(木) 21:09:23
>>96
やっぱりそれしかありませんか…
ありがとうございました。
98デフォルトの名無しさん:2006/09/15(金) 09:03:29
誘導されてきました。


あるクラス(関数?)から「品名1、品名2」(topic)についての
「名称、数量、値段」(item)の数値が吐き出されてくるんですが

これをlistviewにDetail表示するために
文字列を結合して

"名称:数量:値段:名称:数量:値段"

のような文字列にし
作った文字列をtopicの数ごと分割、さらにitemごと分割して表示するクラスに渡して表示していたのですが
もっと上手な表示方法ありませんでしょうか・・・・


↓こんな表にしたいんです
┏━━━┳━━━┳━━┳━━┓
┃     ┃名称  ┃数量┃値段┃
┣━━━╋━━━╋━━╋━━┫
┃品名1 ┃りんご ┃10 ┃1000┃
┃品名2 ┃みかん┃30 ┃1500┃
┗━━━┻━━━┻━━┻━━┛

わかりにくくて申し訳ありませんが、よろしくおねがいします
99デフォルトの名無しさん:2006/09/15(金) 09:20:20
「あるクラス」からはどういう風にデータを受け取ってんの?
データの件数は可変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の数になります。
101デフォルトの名無しさん:2006/09/15(金) 10:39:06
>>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いっぱい
          ┗━━━━┛

こんな感じになってるみたいです
104デフォルトの名無しさん:2006/09/15(金) 11:16:15
言ってることがよくわからん
メソッドのシグニチャはどうなってんだ

string[] Method( string[] topic, string[]item )

なのか?
とりあえず糞仕様なことは確か
105デフォルトの名無しさん:2006/09/15(金) 11:31:12
>>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のような順番に文字列が出てくるだけです


107デフォルトの名無しさん:2006/09/15(金) 12:34:49
>"名称:数量:値段:名称:数量:値段"

なぜこんなことしてるんですか?

108デフォルトの名無しさん:2006/09/15(金) 12:45:36
>>107
一つづつ出てくる値をlistviewに表示していく方法がわからなかったもので、
一度全ての値を結合させて、また分割して一気にlistviewに表示してました。
でも、もっとよい方法があればなぁと思ってここにきました
109デフォルトの名無しさん:2006/09/15(金) 12:50:07
>>108
結合して分割して・・って、単純にそれを省けばいいんじゃないの?
110デフォルトの名無しさん:2006/09/15(金) 12:54:32
>>109
そうなんですが、
listviewに表示する際には配列で1行分渡さなきゃならないんじゃないかと理解していたもので。
しかも文字列が個別に出てきちゃうもんだからどうしたもんかと
111デフォルトの名無しさん:2006/09/15(金) 13:02:31
>>106

> >・あるクラスとやらの戻り値の型
> string型で返ってきます



> >・あるクラスとやらから戻ってくる値のサンプル
> >>100のような順番に文字列が出てくるだけです

は、一致しませんが

string型であってstring[]じゃないんだよな?
そうなると>>104の推測とも違う
一体どういう処理になるんだ?

とりあえずそのクラスから文字列を引き出してDebugに書き出すだけのコードを書け
I/OのIがハッキリしないのにOに至る処理なんてアドバイスできない
112デフォルトの名無しさん:2006/09/15(金) 13:03:26
>listviewに表示する際には配列で1行分渡さなきゃならないんじゃないかと理解していた
ということは今はその理解は改まったということだよね?
それなら何の問題が?
取得した文字列を結合せずに1つずつ表示していけばいいんじゃないの
113デフォルトの名無しさん:2006/09/15(金) 13:05:36
その関数とやらの戻り値の型と引数の型を書け。
話はそれからだ
114デフォルトの名無しさん:2006/09/15(金) 13:13:39
勝手な推測だけど
CALLBACK MyCallBack(string ReturnValue)
じゃないかな

115デフォルトの名無しさん:2006/09/15(金) 13:14:44
DDEかなんかでやりとしてるんだろうな。
11685:2006/09/15(金) 13:15:13
117デフォルトの名無しさん:2006/09/15(金) 13:16:42
118デフォルトの名無しさん:2006/09/15(金) 13:17:20
HRESULT Method( string[] topic, string[]item )
だろ多分。
11985:2006/09/15(金) 13:18:26
>>117
ちゃんと英語で書いてくれないとわかりません
デフォルトでついてるライブラリですか?
120デフォルトの名無しさん:2006/09/15(金) 13:21:29
>>119
Wha'dya mean 'Library'?
12185:2006/09/15(金) 13:22:46
正しくは
what r u say meaning it is lib
122デフォルトの名無しさん:2006/09/15(金) 13:23:13
>>119
オーナードロって自分で描画コードを実装するって事だよ。
クライアント領域クリアしてデータを分析して、それにあった文字を好きな色で描画するだけ。
お前書けんの?
12385:2006/09/15(金) 13:25:33
>>122
描画コード?
そんな難しいのじゃなくて標準ではないのですか?
リストビューに特定の文字列だけ色変えれるようなやつ
なんでこんなすごく頻繁に使う機能がついてないのかねー
124デフォルトの名無しさん:2006/09/15(金) 13:27:25
(・∀・)カエレ!!!
125デフォルトの名無しさん:2006/09/15(金) 13:28:27
>>123
知らない。
アクセスも昔、特定行だけ色変えることができなかった。


以上で終了。
12685:2006/09/15(金) 13:30:09
なんか荒らししかいないみたいね
来るスレ間違えたみたい
他スレで同じ質問するけどマルチとか言わないでね
127デフォルトの名無しさん:2006/09/15(金) 13:34:30
>>126
嵐ねえw
そっち行ったらここのスレを貼っといてね

ここで嵐にあいましたってw
12898:2006/09/15(金) 13:38:31
>>115
そうなんです
だから値を吐き出す関数の部分よくわからなくって・・・・
129デフォルトの名無しさん:2006/09/15(金) 13:44:16
topic item とくればddeでしょ。

とりあえず格納用のオブジェクト作ってコレクションに収納じゃだめ?
130デフォルトの名無しさん:2006/09/15(金) 15:32:34
>>128
関数の扱いが分からないのか、取得した文字列の操作が分からないのか、ListView処理の定石を知りたいのか、ハッキリしてくれ
いくら初心者向けのスレとはいえ、流れがあまりに幼稚すぎる
131デフォルトの名無しさん:2006/09/15(金) 15:41:32
>>123
特定の文字だけ色を変えるListViewインタフェースなんて見たこと無いな
頻繁に出てくるってくらいなら、分かりやすい例を教えてよ

単に結果をリストっぽく出したいならWebBrowserコントロールでHTML表示したら?
コピペもできるし親切でいいじゃん
Expression使えばListViewに近い動作にもできるし
13298:2006/09/15(金) 15:52:48
>>130
関数の中身はDDE使って値を取ってきてくれるDLLをくっつけたので変えようがないと思うんです

stringでたくさん吐き出されてくる文字列を
どのようにして>>98のようにlistviewに表示すればエレガントですか

と質問変えたほうがいいかもわかりません・・・・
13385:2006/09/15(金) 15:54:53
>>131
リストアップだけだと、検索文字列がどこにあるか、
ちょっと探さないとだめじゃないですか
すぐに見つけやすいように、文字の色もしくはバックグラウンドの色を変えたいんですよね
その方が便利だと思いませんか?
htmlって・・そんなダサいのはやりたくないな
134デフォルトの名無しさん:2006/09/15(金) 16:02:07
>>132
どのようにして listview に表示しているのか、まったく想像できないんですが……
135デフォルトの名無しさん:2006/09/15(金) 16:02:16
>>132
>>112>>129はだめなの?
13698:2006/09/15(金) 16:12:16
>>135
>>129はちょっといじりにくいのですが、>>112の方法試そうと思ったんですが
いまいち資料が見つかってません・・・・
137デフォルトの名無しさん:2006/09/15(金) 16:14:10
>>133
> すぐに見つけやすいように、文字の色もしくはバックグラウンドの色を変えたいんですよね
> その方が便利だと思いませんか?

はい、便利です
ただし、ユーザ側の利便性と、開発者の利便性を同列にしないこと

> htmlって・・そんなダサいのはやりたくないな

ユーザが便利であることが重要であり、開発者のエゴは心の奥にしまって置いてください

どうしてもオーナードローもHTMLもイヤだというならWPFでも検討してください
まだ正式版じゃないですが
138デフォルトの名無しさん:2006/09/15(金) 16:43:12
>>136
結局ListViewの使い方がわからないのね。

ListViewItem item = new ListViewItem("text1");
item.SubItems.Add("text2");
item.SubItems.Add("text3");
lv.Items.Add(item);

139デフォルトの名無しさん:2006/09/15(金) 16:57:53
前スレの最後に感動した
140デフォルトの名無しさん:2006/09/16(土) 01:01:57
質問です。

あるファイルが更新されたらされた分だけテキストボックスに表示するという
linuxのtailコマンドのようなプログラムを作っています。
ファイルサイズが変わったタイミングでファイルをSystem.IO.StreamReaderで
読み込みその内容をテキストボックスに書き出すというやり方で作ろうと思うの
ですが、前回ファイルの最後まで表示したら、次にファイルが更新された時は
前回のファイルの最後だった位置から読み込みを開始したいのですが、
StreamReaderではそれはできないのでしょうか?

開発環境はVS2005 EE です。
わかる方いらっしゃいましたら宜しくお願いいたします。
14185:2006/09/16(土) 01:04:45
>>140
バッファで読み込みたいんだろ?
できるよ
142デフォルトの名無しさん:2006/09/16(土) 01:08:54
ワロス
143デフォルトの名無しさん:2006/09/16(土) 01:11:47
>>141
あ、StreamReaderでできるんですね。
ありがとうございます。
StreamReaderで読み込んでいる位置を取得する方法と、
特定の位置から読み込みを開始する方法がわからないので、
できればそこの部分をご教授頂けるとありがたいです。
144デフォルトの名無しさん:2006/09/16(土) 01:21:49
>>143
Stream での読み込み位置の取得・設定方法は分かるか?
145140:2006/09/16(土) 01:53:14
>>144
Streamはわからないです。
StreamReaderではなくStreamを使えばいいって事でしょうか。
調べてみます。
146デフォルトの名無しさん:2006/09/16(土) 02:00:07
>>145
StreamReader.BaseStream.Seek()
147デフォルトの名無しさん:2006/09/16(土) 02:02:59
>>145
StreamReaderのBaseStream.Positionをファイル読んだ後に保存して、次にファイル読む前にそれを設定してやればいい。
StreamReader.BaseStreamとFileStream.Positionを調べてくれ。
148デフォルトの名無しさん:2006/09/16(土) 02:26:44
>>145
System.IO.FileStream fs = new System.IO.FileStream();
fs.Seek(0, SeekOrigin.Begin);
149140:2006/09/16(土) 02:30:20
>>146,147,148
おー、ご親切にどうもです!
さっそくやってみます!
150デフォルトの名無しさん:2006/09/16(土) 21:48:57
>>98 は
ListViewItemConverter について語りたかったのかな?
151デフォルトの名無しさん:2006/09/17(日) 13:48:31
リッチテキストボックスに関する質問です。

リッチテストボックス内の特定の文字を探し出して色を変えたりする
方法はわかったのですが、テキストボックス内に追加するときに色を
指定する方法ってないのでしょうか?

append時に色を引数に指定できたりしたら便利なのですが。
どなたか宜しくお願いいたします。
152デフォルトの名無しさん:2006/09/17(日) 15:28:45
>>151
AppendTextはTextBoxBaseから継承しているのでRichTextBox独自の機能はサポートしていません
RichTextBoxを継承してAppendTextのRTF版を実装してはいかがでしょうか
153デフォルトの名無しさん:2006/09/17(日) 19:45:48
質問です。
プログラム上からcsc.exeのあるパスを取得したいのですが、どうしたらいいでしょうか?
やはり自分で検索を掛けるしかないのでしょうか?
154デフォルトの名無しさん:2006/09/17(日) 19:59:07
大抵のことは Microsoft.CSharp.Compiler.Compile から何とかなるのではないか
155デフォルトの名無しさん:2006/09/17(日) 20:17:59
System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
156デフォルトの名無しさん:2006/09/17(日) 20:22:25
Microsoft.Build.Utilities.ToolLocationHelper.GetPathToDotNetFrameworkFile() (2.0のみ)

コンパイルしたいんなら>>154かMicrosoft.Build.Tasks.Csc(2.0のみ)を使えば?
157デフォルトの名無しさん:2006/09/17(日) 20:22:31
>>154
それだと、適用できないコンパイラオプションがあるみたいで、
どうもうまくいかないのですが…
158デフォルトの名無しさん:2006/09/17(日) 20:23:38
>>157
何のオプションが指定できないの?
159デフォルトの名無しさん:2006/09/17(日) 20:44:16
>>155,156
取得できました!ありがとうございました。
>>158
Microsoft.CSharpでコンパイルし始めたのがずいぶんと前なので
詳しくは覚えていないのですが、リソースファイルとか
アイコンの設定などが出来なかったような気がします。
160デフォルトの名無しさん:2006/09/17(日) 21:24:12
そりゃ調べ方が足りんかっただけだな
161デフォルトの名無しさん:2006/09/18(月) 10:21:42
先日からC#をはじめた超初心者ですが、教えてください。

よく入門本に書いて有るとおりに、単純にフォームにデータセットのテーブルをドラッグして見たのですが
ナビゲータボタンを操作しても一向にデータの追加も、更新が行われません。

ほかには一行もコードを書いていない状態でこれなんですが、いったいどこが悪くてこうなっているのか
ご存じの型教えてください。
162デフォルトの名無しさん:2006/09/18(月) 10:31:48
>>161
入門書の手順どおりやってますのレベルなら、
VS2003と2005でいろいろ違うから、
その入門書の対象としてるバージョンと自分の環境を合わせとけ。
163デフォルトの名無しさん:2006/09/18(月) 10:37:32
GUIしか作ってないから動くはずがないだろw
164デフォルトの名無しさん:2006/09/18(月) 10:48:42
>>162
一応環境は合わせています

>>163
秀和の入門書ですけど、この記述によるとこれだけで単純に入力や更新削除は出来ると
記載されて居るんですがGUIしか作っていない状況なんですか?
165デフォルトの名無しさん:2006/09/18(月) 11:46:41
どなたか教えて下さい。

以下の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 です。
166165:2006/09/18(月) 11:51:37
↑訂正
× 3行目がコメントアウトしているか していないかで違うファイルができてしまいます。
○ 3行目をコメントアウトしていると同一ファイル、していないと違うファイルができてしまいます。
167デフォルトの名無しさん:2006/09/18(月) 12:00:16
>>164
まず本に書いてある手順通りにやってみてよ
「できます」「やれます」ってキャッチコピーだけ見て質問してない?
168デフォルトの名無しさん:2006/09/18(月) 18:14:39
161の説明不足ですな。
手順を知らずに解決できるのはエスパーです。
169デフォルトの名無しさん:2006/09/18(月) 18:27:06
>>161
コンパイルしましょう。
170デフォルトの名無しさん:2006/09/18(月) 18:30:36
コンパイルなんてないぞ。
デバッグ開始だろ?
171デフォルトの名無しさん:2006/09/18(月) 18:44:11
>>165
>以下のC#コードを実行すると、3行目がコメントアウトしている/いないにかからず、 
>A1.bmpとA2.bmp は同じファイルになります。 

これが正常な動作

>ところが、A.jpgの横幅が奇数ドットの時?は3行目がコメントアウトしているか 
>していないかで違うファイルができてしまいます。 

これが本当ならバグ
172デフォルトの名無しさん:2006/09/18(月) 19:12:09
>>165
C#2005でちょろっとやってみたが、確かにそうなった。GDI+のバグだろう。
ちなみに二回目のSaveの前にBitmapB.Dispose()したら2つのBitmapは同じになった。
173165:2006/09/18(月) 22:09:41
>>171,172
レスありがとうございます。
やっぱりバグですか・・・
今作っているソフトではSaveでファイルに保存するのではなく
MemoryStreamに保存してそこから画像のハッシュ値を生成しているので
1bitでも違ってしまうと致命的なんですよね・・・

使い終わったBitmapはすぐDispose()するようにしてみます。
ありがとうございました。
174デフォルトの名無しさん:2006/09/19(火) 03:28:51
>>173
海外のサイトで似たような事例見たことあるけど、物理処理とのタイミングが合わずに発生するバグだった気がする
そこではSleepなどで時間を置くことで対処していたが、Disposeで対処できるならそっちのが良いと思う
175デフォルトの名無しさん:2006/09/19(火) 03:32:59
これも同じような原因かもね

Bitmap クラスの Save メソッドでファイル サイズが縮小されない
http://support.microsoft.com/kb/312119/ja
176165:2006/09/19(火) 04:49:11
>>174,175
レスありがとうございます。

ソースを見直して使い終わったリソースはすぐDispose()するようにしてもだめで、
ビットマップ生成後Sleepを入れてみてもだめで(念のためSleepとDoEventsをforで何度も繰り返すようにしてみたがだめ)
結局、画像を読み込んだビットマップ Bmp_org に対して Bitmap tmp=new Bitmap(Bmp_org) として
このtmpからハッシュを作成するとなぜだかうまくいきました。
なぜうまくいくのかよくわからないのでちょっと怖いのですが、趣味で作っているソフトなんで
まあこれでよしとします。

ありがとうございました。
177デフォルトの名無しさん:2006/09/19(火) 12:47:18
すみません。緊急でどうしても教えて頂きたいんですが
よろしいですが?
178デフォルトの名無しさん:2006/09/19(火) 12:50:19
>>177
マイクロソフト カスタマーインフォメーションセンター - ホーム
http://www.microsoft.com/japan/customer/
179デフォルトの名無しさん:2006/09/19(火) 13:00:54
まあ書いてみたら?
答が見つかるかどうかは保証できないが
180デフォルトの名無しさん:2006/09/19(火) 13:12:15
>>179
ほんとうですか。ありがとうございます。
普段自分で調べてるのでほとんど2ちゃんねるとか使ったことないので
でも、今回ばかりはほんと急ぎで調べている時間がないので
助けて頂きたんです。よろしくおねがいします
181デフォルトの名無しさん:2006/09/19(火) 14:29:37
急いでるんじゃなかったの(´・ω・`)?
182デフォルトの名無しさん:2006/09/19(火) 16:05:36
釣られんなよ

どうせここまで引っ張った質問も@ITあたりで見つけた結論が面倒なやつだろ
「disposeすれば大丈夫なんですか?」みたいな
もしくは結果がバグ起因でKBにも載ってるやつとか

>>177
では質問をどうぞ
183デフォルトの名無しさん:2006/09/19(火) 17:04:10
はじめまして。
CとC++とWin32でプログラム組んだことはあるんですが
今度、.netでWindowsアプリ作ることになりました。
C++で書く場合、どうすればいいでしょうか?
とりあえず .net Framework2.0 を入れてみました。
あとは.netのリファレンスとSDKがあれば
作れますか?
C++で作るならC#のコンパイラ?は必要ないですよね
184デフォルトの名無しさん:2006/09/19(火) 17:06:57
VCExpressをインスコせよ
185デフォルトの名無しさん:2006/09/19(火) 17:10:49
>>184
レスありがとうございます。
それはいわゆるIDEですよね?
それがないと作ることは不可能ですか?
もしできても、相当苦労するってことでしょうか?
186デフォルトの名無しさん:2006/09/19(火) 17:48:40
>>185
無くてもいけるよ。フリーのIDEもあるし
メモ帳でもいいし

苦労するねー。特にGUI作る場合。
187デフォルトの名無しさん:2006/09/19(火) 17:49:16
IDEでぺたぺたコントロールを張ったりインテリセンスで楽したりすることを
想定して作られたライブラリだからな
188デフォルトの名無しさん:2006/09/19(火) 18:02:03
イベントのことで質問なのですが、
例えばコントロールの描画に、自作の描画を「追加」する場合、
(A)OnPaintメソッドをオーバーライドする(メソッド内でbase.OnPaint呼ぶ)
(B)Paintイベントハンドラに自作描画関数を追加する
という2種類の方法があると思うのですが、この2つの使い分けがよく分かりません。
多分、大抵は結果としては同じだけど、何か特別な場合はこちらを選ぶべきとか、
再利用性を考えるとこちらにすべきとか、ケースによって使い分けがあるように
思うのですが、経験が浅いため想像がつきません。

どういったケースにどちらを使うべきとか、両者の違いを簡単に解説して頂けたらと。。
189デフォルトの名無しさん:2006/09/19(火) 18:23:54
>>188
コントロールを継承してその中に自作の描画処理を追加した場合、そのコントロール全てでその描画が適用される
コントロールのイベントに自作の描画処理を追加した場合、そのイベントでのみ描画が適用される

同じ描画処理を使いまわしたいなら前者、一つだけに描画したいなら後者
190デフォルトの名無しさん:2006/09/19(火) 18:28:44
>>188
(A)はなんらかのコントロールを継承したクラスで定義する。

base.OnPaint(つまり継承元のOnPaint)の前後に好きな処理を追加できる。
またbase.OnPaintを呼ばなければ完全に描画をコントロールできたりする。

実際、Paintイベント自体がbase.OnPaint()を遡って行った先の
Control.OnPaint()でファイアされてる。

特定のコントロールインスタンスだけにイベント付けたいならPaintを追加する。
そのクラスなら全部イベント発生させたいならOnPaintを定義する。

191デフォルトの名無しさん:2006/09/19(火) 18:46:18
>>185
自分はエディタとcsc.exeでやってる。
192デフォルトの名無しさん:2006/09/19(火) 18:55:05
なんでVC#Expressを使わないの?無料なのに
193デフォルトの名無しさん:2006/09/19(火) 19:14:37
>>183はC++でと言ってる。つまりスレ違い。
194183:2006/09/19(火) 19:41:19
ここは .net もOKのことならOKかと思ってました。
すれ違いですいません。
とりあえず、できそうです。
みなさんありがとうございました。
195デフォルトの名無しさん:2006/09/19(火) 20:28:45
>>165
ビットマップの横バイト数が4の倍数でないとき、各ラインのパディン
グでゴミが入るのは、Windows的には「そういうもの」だと思ってたけ
ど。

ファイルごとハッシュ計算するのが間違いでしょ。
196177:2006/09/19(火) 20:59:55
誰も教えてくれそうになので
今から首釣ってきます。
さようなら
197デフォルトの名無しさん:2006/09/19(火) 21:27:12
はいはい
釣り乙
198183: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#のコードをコンパイルしたいのですが、
なかなかうまくいきません。
ウィンドウをひとつ表示させるためのコードと
コンパイル時に必要なオプションを教えてください
199183:2006/09/19(火) 21:36:37
事故解決しました。
200188: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関数を使いたい }
} }
202デフォルトの名無しさん:2006/09/22(金) 02:20:20
static IntPtr method(string str1, string str2) でいいんじゃね
203デフォルトの名無しさん:2006/09/22(金) 02:21:39
>>201
そのDLLが間違いなくCOMならDllImportでなくてCOM Interopを使う。
プロジェクトの参照設定
204201:2006/09/22(金) 02:30:30
202, 203さん
プロジェクトの参照設定でdllを登録してみました。
そうすると、BSTR→string, HRESULT→voidというように
各メソッドの引数が変わったように思います。
なるべく、HRESULTの型など、オリジナルのまま(といえばいいのかな?)
を使いたいと思っていますが無理でしょうか・・・?
205デフォルトの名無しさん:2006/09/22(金) 02:33:23
dll なら static IntPtr method([MarshalAs(Bstr)] String s1, [MarshalAs(Bstr)] String s2); と宣言して、
ふつうに method("a", "b"); てな感じで。

でもそれdllじゃなくてCOMオブジェクトのメソッドでそ?
CoCreateInstance から自前でやれるんじゃなかったら参照の追加で作られるラッパに
頼るのがいいと思うけど。
206デフォルトの名無しさん:2006/09/22(金) 02:34:11
HRESULTはともかく
BSTRをそのまま扱いたいってどういう場面?
207201:2006/09/22(金) 02:45:02
205, 206さん
ありがとうございます。
CoCreateInstanceを自前でやりたいと思っております・・・
ただ、みなさんの話が私にはまだ高度すぎて、よくわかっておりません。
COMを扱うこと自体初めてでとまどっております。
206さん、
そのまま扱いたい理由として、BSTR→stringなど、ラッパによって
引数が変わることにより、動作などが異なるかなっていう安直な
考えをしてしまったためです。HRESUT→voidになったら、HRESULT
を返さないから、HRESULTを返すメソッドが成功かどうかわからない
かと思って。
208デフォルトの名無しさん:2006/09/22(金) 02:49:08
>>204
string は BSTR にマーシャリングされるし、
S_OK 以外が帰ってくるような場合には ComException がスローされる。

たぶん
209デフォルトの名無しさん:2006/09/22(金) 02:49:27
>>207
HRESULTがvoidになるのではなく、HRESULTでエラーが帰ってきた場合はCOMException例外になる。
COMExceptionのErrCodeでHRESULTの値は参照できる。
210デフォルトの名無しさん:2006/09/22(金) 02:51:18
>CoCreateInstanceを自前でやりたいと思っております・・・ 
ここから自前でやりたいならVC++2005をお勧めする。
211デフォルトの名無しさん:2006/09/22(金) 02:53:54
自前でやるならHRESULTはPreserveSig属性でintで受けれるかな?
212デフォルトの名無しさん:2006/09/22(金) 02:54:47
>>207
MarshaクラスとSystem.Runtime.InteropService 以下のクラスを調べればOK。
ネイティブのBSTRとかHRESULTとかは基本的にIntPtrで宣言しておいて、
string -> BSTR は Marshal.StringToBstr とか。使い終わったら Marshal.FreeBstr。
記憶で書いてるので多少違ってるかもしれないけど。

個人的には時間の無駄だと思う(言葉遣い悪くてごめん)。
213201: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 =....みたいなカタチはさけたいです。。
よろしくお願いします。
215デフォルトの名無しさん:2006/09/22(金) 09:35:04
>>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);
216デフォルトの名無しさん:2006/09/22(金) 11:22:38
エラーの内容を書きましょう。


データを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を変更できる方法や
解決策はないでしょうか?
218デフォルトの名無しさん:2006/09/22(金) 12:31:51
keyDownでたぶけんしゅつ 終了?
219デフォルトの名無しさん:2006/09/22(金) 12:35:09
マウスの移動した場合はどうする。
220デフォルトの名無しさん:2006/09/22(金) 13:14:27
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
222217:2006/09/22(金) 14:05:13
>>220
思い通りの動作になりますね…。
うーん、なぜ。
とりあえず実現できると分かり、ほっとしました。ありがとうございました。

LostFocus使えば、CancelFocus使わなくても動くっぽいですね。
LostFocusは使用があまり好まれないみたいですが、動作上はLeaveと何が違うんだろ…。
223デフォルトの名無しさん:2006/09/22(金) 14:22:07
電卓のライブラリを作成し、プロジェクトで参照設定しましたがツールボックスに
電卓のコントロールが表示されません。

ソリューションエクスプローラからドラッグアンドドロップすれば、ツールボックスに
登録されるとのことですが、追加できません。

使用方法を教えて下さい。
224デフォルトの名無しさん:2006/09/22(金) 14:27:45
IConponentかControlから(間接でも可)継承してる?
それと、そのコンポーネントをデザイナで編集用に開いてるときは表示されないよ
225デフォルトの名無しさん:2006/09/22(金) 14:31:33
>>224
レスありがとうございます。
>IConponentかControlから(間接でも可)継承してる?
していません。
>それと、そのコンポーネントをデザイナで編集用に開いてるときは表示されないよ
電卓は別ソリューションでビルド済み(ライブラリの参照のみ)なので開いていません。
226デフォルトの名無しさん:2006/09/22(金) 14:38:51
電卓クラスはpublicになってる?
227デフォルトの名無しさん:2006/09/22(金) 14:40:35
コントロールじゃないって…
そのクラスは何者?

どうやって表示してるの?
228デフォルトの名無しさん:2006/09/22(金) 14:45:08
Componentでは?
229デフォルトの名無しさん:2006/09/22(金) 14:47:13
>>226
PUBLICです。

>>227
呼出もとのプロジェクトでは表示はできていません。
230デフォルトの名無しさん:2006/09/22(金) 14:50:54

        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

231デフォルトの名無しさん:2006/09/22(金) 14:51:22
どうやって作ったの?
232デフォルトの名無しさん:2006/09/22(金) 14:58:28
皆さんすいません。
言い方が正しくありませんでした。

電卓コンポーネントは、電卓プロジェクト(ウインドウズライブラリ)内に作成したフォームでは使用可能です。
233デフォルトの名無しさん:2006/09/22(金) 15:27:35
ツールボックスアイテムの追加 → .net → 参照?
234デフォルトの名無しさん:2006/09/22(金) 15:39:58
>>233
大変ありがとうございます。
ツールボックスへの追加ができました。

皆様、お忙しい中アドバイスありがとうございました。
235222=217:2006/09/22(金) 15:56:38
>>222の自己レス。
>LostFocus使えば、CancelFocus使わなくても動くっぽいですね。

というのは間違いで、CancelFocusの判定は必要でした。
236デフォルトの名無しさん:2006/09/22(金) 19:08:36
.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();

↑このコード、何か問題ありますか?(;´Д`)
237デフォルトの名無しさん:2006/09/22(金) 22:46:15
こんばんわ、お世話になります。

C#でデスクトップにドッキングするものを作る事は可能でしょうか?。またドッキングしている
ように見えるアプリはサイズと配置を調整しているだけなのでしょうか?。
238デフォルトの名無しさん:2006/09/22(金) 23:06:38
>>237
タスクバーみたいなやつ?
ならSHAppBarMessageでググれ
239デフォルトの名無しさん:2006/09/22(金) 23:17:48
>>238
調べてきました。タスクバーに関連する情報を収得できる事はわかりましたがタスクバーもどき?を
作るのとは少し違う感じがしました。使い方を知らないだけかも^^;。

今日は遅いのでまた明日詳しく調べてみたいと思います。
ありがとうございました。
240デフォルトの名無しさん:2006/09/22(金) 23:26:50
>>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
ググってもよくわからなかったんで(^^;
241デフォルトの名無しさん:2006/09/22(金) 23:32:38
>>239
タスクバーにドッキングするバーならBandObject
242236:2006/09/22(金) 23:54:44
自己解決。AllowAutoRedirect = false にして 301 を自前で処理すると取れるようになりました。


なぜだああああ!!!!。・゚・(ノД`)・゚・。
243デフォルトの名無しさん:2006/09/23(土) 00:24:57
>>239
ttp://hp.vector.co.jp/authors/VA016117/appbar.html
俺は一番上に引っかかったんだが…うーん?
244デフォルトの名無しさん:2006/09/23(土) 00:42:25
本の話なんだけどいいかな?
Cを一通り勉強したあと、C#の勉強を始めたんだが、
「C#によるプログラミングWindows」ってどうかな?
Amazonでの評価は良かったんだけど、
オブジェクトも含め、全てのコードを自分で書くっていうスタイルが珍しい。
まず言語を集中して覚えたほうが良いのかな。
この本を読み終えればそれなりの力はつくのかな?
読み終えた人の感想が聞きたい。
245デフォルトの名無しさん:2006/09/23(土) 01:32:00
じゃばらーにかこまれてかたみのせまいC#なおいらにみらいはありまんか?
246デフォルトの名無しさん:2006/09/23(土) 06:09:03
C#って評判悪いんですか?
247デフォルトの名無しさん:2006/09/23(土) 06:16:26
さあ
248デフォルトの名無しさん:2006/09/23(土) 06:23:05
うまく作ったC#のアプリは最初の起動とメモリの消費量こそ問題はあるが、
動いてしまえばネイティブとあんまり変わらん。
249デフォルトの名無しさん:2006/09/23(土) 06:44:06
C言語で stdlib.h に記述されていた system 関数のC#版はありますか。
250デフォルトの名無しさん:2006/09/23(土) 07:09:36
こんなのじゃだめなん?

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();
251デフォルトの名無しさん:2006/09/23(土) 07:19:50
extProcess.WaitFirExit(); を最後に付けると、DOS窓が閉じられるまで
待ってくれる。
252デフォルトの名無しさん:2006/09/23(土) 07:20:12
×WaitFirExit
○WaitForExit
253249:2006/09/23(土) 08:03:40
>>250-252
やはり「1行だけで」とはいかなさそうですね。

それはいいとして、起動が確認できました。dクス。
254デフォルトの名無しさん:2006/09/23(土) 08:25:19
Process.Start 静的メソッドもあるが。
255デフォルトの名無しさん:2006/09/23(土) 11:54:02
>>246
C# スレでその質問して、悪い返事が返ってくるわけねぇじゃん。
256デフォルトの名無しさん:2006/09/23(土) 13:16:01
巣にお帰り
257デフォルトの名無しさん:2006/09/23(土) 13:42:09
DataGridViewで、ヘッダやセルのAutoEllipsisをfalseにしたいのですが、
AutoEllipsisプロパティがないみたいです。
等幅フォントを使用しているので、省略記号(...)が非常にうざいです。
文字列がはみ出す分は単に表示されないだけでよいのですが、どうしたらいいでしょうか。
258デフォルトの名無しさん:2006/09/23(土) 14:11:08
うんちゃらDefaultCellStyleプロパティで
WrapModeかんちゃら
259デフォルトの名無しさん:2006/09/23(土) 14:26:20
フロントラインのプログラム教えてほしいんだが
260デフォルトの名無しさん:2006/09/23(土) 14:30:48
いきなり前線と言われても、その、困る
261257:2006/09/23(土) 14:56:51
>>258 ありがとうございます。
WrapMode=true で、折り返しになり省略記号な消えたので良い具合なのですが、
折り返された2行目の文字が下から微妙に見えてしまいます。
これを見えなくしたいのですが…。
行高さやフォントの大きさは仕様上変更できず、
またPaddingで上を空けて文字を下げるようにすると、ちょっと文字が下がりすぎの
ように見えるし、フォーカス時の点線枠もPadding分下がってしまいます。
262デフォルトの名無しさん:2006/09/23(土) 15:06:31
WrapMode = falseにすればいいんちゃう
263257:2006/09/23(土) 15:39:28
WrapMode = false の状態で、>>257の問題が起きます…。
264デフォルトの名無しさん:2006/09/23(土) 17:39:41
265デフォルトの名無しさん:2006/09/23(土) 22:38:48
やっぱりいきなりWinプログラミングするよりも、
コンソールアプリで勉強したほうが身に付くのかな?
266デフォルトの名無しさん:2006/09/23(土) 22:45:16
作りたいものを作ればよし
267デフォルトの名無しさん:2006/09/23(土) 22:49:53
オブジェクト指向という立場から見た場合、その両者の区分けに意味はないと思う。

ま、私自身は Hello World から始めるべきだという考えだがね。
268デフォルトの名無しさん:2006/09/23(土) 23:28:38
>>265
俺的にはWinプログラミング推奨。
先にイベントドリブン方式に慣れてからコンソールやった方がいいかなと。
269デフォルトの名無しさん:2006/09/24(日) 00:54:19
Application.Run つまりメッセージループは1つで、Form は複数の STA スレッドから作成される……
という設計は間違っていますか?

やりたいのは、非同期スレッドから入力用のダイアログを表示したいってことなんですが、
Invoke で表示すると、NotifyIcon からのメッセージが何故か処理できなくなってしまいまして orz
270デフォルトの名無しさん:2006/09/24(日) 00:58:08
>>265
今現在、どの程度知識があるかによって変わってくると思う。
プログラム初めての場合、GUIプログラム特有のイベントドリブンも一緒に理解しないといけないので、
コンソールアプリの方が、動きを追うのが楽なので C# の習得に注力できるのでよいと思う。
C#をある程度知っている or JavaやC++などのプログラム経験があるなどの場合、GUIプログラムを
やっても、問題ないと思う。

まぁ、実際はモチベーションの違いでなんとでもなるけどね。
モチベーションが高ければ、覚えることがいっぱいあっても何とかなるもんだし。
271デフォルトの名無しさん:2006/09/24(日) 01:13:36
>>269
状況が見えない
272デフォルトの名無しさん:2006/09/24(日) 01:17:39
>>271
GUI アプリで別スレッド作って HttpWebRequest.GetResponse
ただし 401 出たら認証ダイアログ出したい

そんだけ
273デフォルトの名無しさん:2006/09/24(日) 01:24:11
認証ダイアログはどっちのスレッドで作ってるの?
274デフォルトの名無しさん:2006/09/24(日) 01:31:01
別スレッドの方……に作ろうかと考えていまして。
275デフォルトの名無しさん:2006/09/24(日) 02:03:06
「NotifyIcon からのメッセージ」は何を意味してるのか分からん
そのままウインドウメッセージ?
それともメソッド実行?

276デフォルトの名無しさん:2006/09/24(日) 02:12:32
>>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の中身を入れ替えるのかどちらがいいんでしょうか?


どうぞよろしくおねがいします。
278デフォルトの名無しさん:2006/09/24(日) 06:26:40
>>276
スレッドやメッセージループをよく理解してないに10バーツ。
>別スレッドから BeginInvoke 用いて呼び出したメソッド内で MessageBox を表示していたのですが、 
>表示している最中に NotifyIcon をクリックするなどしてイベントを発生させると……その時点でソフトが固まる現象がありまして。 
それは問題なく動く。
回答がほしいなら再現性のあるコードをアップしたほうが早い。長いようならアップローダつかってな。
279デフォルトの名無しさん:2006/09/24(日) 10:47:23
>>277
自分でダウンロードして自分でキャッシュしたらええやん

>imageListに加える
imageList.Add( icon );するだけ

>treeViewにどうやってimageIndex指定するのか
treeView.ImageList = this.imageList;して
treeViewNode.ImageIndex/ImageKeyを設定するだけ


まず使いたいコントロールのドキュメント見ろ。話はそれからだ


>treeViewを二つ作るのか、
>ひとつのtreeViewの中身を入れ替えるのかどちらがいいんでしょうか?

入れ換えるのが非効率なら2つ作れ
まあ基底クラス作って2つ派生しろ
280デフォルトの名無しさん:2006/09/24(日) 10:47:53
×imageList.Add( icon );するだけ
○imageList.Images.Add( icon );するだけ
281デフォルトの名無しさん:2006/09/24(日) 17:06:55
教えてください

表示されているmonthcalender から月の最初の日と最後の日を取得するにはどうしたらいいのでしょうか?
282デフォルトの名無しさん:2006/09/24(日) 17:31:09
要するに月の日数が欲しいってこと?
DaysOfMonth かなんかそんな感じのプロパティかメソッドかが DateTime にある
283デフォルトの名無しさん:2006/09/24(日) 17:36:33
データグリッドビューの縦スクロールバーを表示するようにしても
行数が少ないとき(スクロールの必要がないとき)は勝手に消えます。
これを常に表示するようにしたいのですが、方法はあるでしょうか。
もちろんスクロールの必要がないときに表示しても機能的に意味がないのですが、
デザイン上の都合です。
284201: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;
} } } }
285デフォルトの名無しさん:2006/09/24(日) 18:52:28
上のほうに出てなかったっけ?
それか C#相談室かどこか。
286269:2006/09/24(日) 18:54:25
……ごめん。>>276 のコード、よくよく見てみたら MessageBox.Show が別スレッドで実行されてた。
解決解決。よかったよかった (*ノ∀`)


……本当にごめん orz
287デフォルトの名無しさん:2006/09/24(日) 19:01:30
539 名前:名無しさん@ピンキー[sage] 投稿日:2006/09/18(月) 12:46:26 ID:???
こんにちは。ちょっと質問なのですが
lamermelculo.comというエロ動画、エロ写真のサイトで見かけたのですが
http://www.lamermelculo.com/imagenes/webs/040706/berberecho.jpg
これはいったい人体のどの部分で男なのか?女なのか?わかりますか?

いまふっと思ったが元男性が性転換手術で女性器を持ちピアスをしてるとか?
288(^-^) ◆MONSOON/qo :2006/09/24(日) 19:07:53
>>287
脱腸している図
289デフォルトの名無しさん:2006/09/24(日) 22:19:57
C#ってやっぱり最初にC言語を学ばないとついていけませんか?
290デフォルトの名無しさん:2006/09/24(日) 22:24:15
別に
291デフォルトの名無しさん:2006/09/24(日) 23:00:11
むしろC#からの方が非オブジェクト指向に汚染されなくていいかも
292デフォルトの名無しさん:2006/09/24(日) 23:57:41
質問です。
ListViewでアイテムのクイック時 Ctrlキー を押してクイックした時と
同じように選択したいのですが、どのようにすれば良いのでしょうか?
ちょうどListBoxのSelectionModeのMultiSimpleの機能です。
お願いします。
293デフォルトの名無しさん:2006/09/25(月) 00:19:45
MultiSelect
294292:2006/09/25(月) 00:26:20
>>293
MultiSelectも試したのですが、MultiSelectですと複数選択するときに
Ctrlキーを押しながらクイックしなければ選択することが出来ませんでした。

したい事は、Ctrlキーを押さなくてもクイックで複数選択出来るようにしたいのです。
295デフォルトの名無しさん:2006/09/25(月) 00:36:36
何で誰もクイックに突っ込まないんだ
296デフォルトの名無しさん:2006/09/25(月) 17:33:12
文字列のことで質問なんですが

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;と同じだと思うけど(一般人意見)
298デフォルトの名無しさん:2006/09/25(月) 17:38:53
その場合はどうか知らないが、
strがnullだった場合にnullを返さないために

return "" + str;

とすることはある。

"" + null == ""

だから。


299デフォルトの名無しさん:2006/09/25(月) 17:41:52
>>297
trackBarをあらかじめ配列やリストにぶちこんでおいて
for/foreachで回す
300296:2006/09/25(月) 17:48:31
>>298
null防止のちょっとしたテクニックって感じなんですね。
ありがとうございました
301298:2006/09/25(月) 19:01:54
よく考えてみるとよくわからない部分がでてきたのですが
Cだとnull==""だったと思うんですがC#だと別のものとして扱われるんでしょうか?
もし同じだとしたらstrがnullの時
return ""+str;としても
結局return null+null;となってreturn str;つまりreturn null;
としたのと同じことになってしまうと思うんですが・・・
302296:2006/09/25(月) 19:03:39
名前欄間違えましたorz
298じゃなくて296です
303デフォルトの名無しさん:2006/09/25(月) 19:09:32
C/C++
NULL → 0

C#
null + "" → ""
304デフォルトの名無しさん:2006/09/25(月) 19:16:17
C でも "" != NULL.

""[0] == NULL
305デフォルトの名無しさん:2006/09/25(月) 20:42:23
>>301
まあ、百聞は一見にしかず

string text01 = null;
string text02 = null;
Console.WriteLine(text01 + text02 == "");
306296:2006/09/25(月) 21:05:50
>>303,304,305
つまり
null一つのとき→”文字”であって”文字列”ではない。だからtext01==""は偽になる
null+nullやnull+""のとき→null+nullだとnull文字を連結したことで文字列になり真になる
             null+""だと文字列にnullに文字列を足すので当然文字列になり真になる
という考えでいいんでしょうか・
307デフォルトの名無しさん:2006/09/25(月) 21:11:41
>>306
ちがいます
308デフォルトの名無しさん:2006/09/25(月) 21:16:34
>>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) == "");

分かったなら、続きは自分で調べろ。
309デフォルトの名無しさん:2006/09/25(月) 21:29:23
>>308
えらい偉そうやなw
思わずレスしてもうたでww
310デフォルトの名無しさん:2006/09/25(月) 21:38:09
>>309
……いや、レスした後に口調変だなーと自分でも感じてたり(´・ω・`)
311デフォルトの名無しさん:2006/09/25(月) 22:25:44
null + "" はコンパイラによって System.String.Concat(null, "") と変換される。
http://msdn2.microsoft.com/ja-jp/library/a6d350wd.aspx
このメソッドは null を String.Empty 、すなわち "" として扱う。
よって、 "" と "" を足したことになり、 "" が帰る。

null と null は足せない。
+ 演算子で連結した時に文字列が含まれた場合のみ、String.Concatに変換される。

null は文字列でも文字でもない。インスタンスがないことを表す。
312デフォルトの名無しさん:2006/09/25(月) 22:35:14
>>311
>null と null は足せない。
((string)null) + null みたいなのは可能だけどね。
313デフォルトの名無しさん:2006/09/25(月) 22:42:49
ヌルヌル
314デフォルトの名無しさん:2006/09/25(月) 22:45:59
String.Concatは引数が両方nullならString.Emptyを、
片方がnullならもう片方を返す様に実装されてる。
315デフォルトの名無しさん:2006/09/25(月) 23:34:15
Concat の実装のされ方に依存するのはどうかと思うぞ
仕様で決まっているのならともかく
316デフォルトの名無しさん:2006/09/26(火) 00:22:02
>>315
>Empty 文字列は、任意の null 引数の代わりに使用されます。
ドキュメントには、こんな文面が
317デフォルトの名無しさん:2006/09/26(火) 01:15:34
チラ裏
文字列の連結に+演算子を使うと
string hoge = "うほっ";
int foo = 1919;
0721 + foo + hoge + 69
とかでややこしくなるからString.ConcatかStringBuilderを使うようにしている
318デフォルトの名無しさん:2006/09/26(火) 01:21:49
string? hoge = null;
319デフォルトの名無しさん:2006/09/26(火) 01:54:13
if(true)
{
}

if(true)
{
};
にはどういう違いがあるんでしょうか?
320デフォルトの名無しさん:2006/09/26(火) 02:24:06
ない

;は何もしない無のステートメント

{}だけでひとつのステートメント
321デフォルトの名無しさん:2006/09/26(火) 02:54:49
return str??""
322デフォルトの名無しさん:2006/09/26(火) 02:55:33
;
323デフォルトの名無しさん:2006/09/26(火) 11:54:13
299>>
>trackBarをあらかじめ配列やリストにぶちこんでおいて
>for/foreachで回す
んーだけど
配列やリストにぶちこむ時にべた書きになってしまいませんか?
コントロールとか全てそうなんですが、
trackBar##.Value
##の部分を変数扱いにできる手法がないものかと(^_^;
324デフォルトの名無しさん:2006/09/26(火) 11:57:31
スレッドセーフの勉強をしたいと重いMSヘルプにあった一部をコピーして実行
しようとしているのですが、

Delegate void SetTextCallback(String text);

が「無効なトークン 'void' が クラス、構造体またはインターフェイスのメンバ宣言で使用されています。」
とエラーになってしまいます。これはどうしてなのでしょうか?。
325デフォルトの名無しさん:2006/09/26(火) 12:34:40
>>323
あっなんかコントロールを配列にする手法があることに気付きました。
326デフォルトの名無しさん:2006/09/26(火) 13:11:40
>>324
delegate void SetTextCallback(String text);
327デフォルトの名無しさん:2006/09/26(火) 13:16:42
>>326
先頭が小文字だったのですね
ありがとうございます
328デフォルトの名無しさん:2006/09/26(火) 16:17:37
度々、失礼します

スレッド側でAcceptTcpClient()した場合にフォームを閉じ(×ボタンを押しても)ても
終了しないのですが、これを終了させるにはどうしたら良いのでしょうか?。

Leaveイベントを拾ってソケットを閉じれるのかと考えて試してみたのですがイベントを
拾う事ができませんでした。
329328:2006/09/26(火) 16:25:21
イベント違いでした
すいません
330デフォルトの名無しさん:2006/09/26(火) 16:25:29
タスクマネージャーみたいにプロセスのメモリやハンドルを取得しようとしてるのだけれど、
GDIオブジェクト数の取得方法がわからない・・・
C++ではGetGuiResourcesというので取得出来るらしいけど、C#で似たようなのはないのだろうか
331デフォルトの名無しさん:2006/09/26(火) 16:33:09
332デフォルトの名無しさん:2006/09/26(火) 16:50:48
>>331
thx
おかげで何とかなりそうです
今度は「アクセスが拒否されました。」とExceptionを返されたりもしているけど・・
333デフォルトの名無しさん:2006/09/26(火) 17:11:16
C C++ VB JAVAのすべてを基礎の基礎程度を学んだ学生です。
何かソフトを作ってみようと思うのですがC#の前にCやC++をしっかり覚えた方がいいのでしょうか?
プロンプトでしか動かないのでやる気が落ちてきています。
二つとも半年程勉強しました。

何かオススメの書籍などもありましたらお願いします。
334デフォルトの名無しさん:2006/09/26(火) 17:22:12
HTAでいいんじゃない?
335デフォルトの名無しさん:2006/09/26(火) 20:03:07
>>333
お好きなように。突き放しているわけではなくて、モチベーションを
保つことのほうが大事だから。

書籍に関してはC#に限っていえばMSの環境なので
「書籍」に限らず、ネット上に腐るほどあるしMSDNが最高に心強いし、
そもそもIDE優秀でわけ解らなくても書けてしまう。
336デフォルトの名無しさん:2006/09/26(火) 20:29:38
アイテム数が状況で異なる場合に好きなだけitemを追加しいて行くにはどうしたら良いのでしょうか?
ListViewItem[] items = new ListViewItem[10]; では当然エラーになってしまいます・・・。
337デフォルトの名無しさん:2006/09/26(火) 20:33:39
ArrayList<ListViewItem> items
338デフォルトの名無しさん:2006/09/26(火) 20:35:16
>>337
別バージョン混じっているかスレ違い
339デフォルトの名無しさん:2006/09/26(火) 20:39:16
>>337
List<ListViewItem> items = new List<ListViewItem>();
あるいは
ArrayList items = new ArrayList();
340デフォルトの名無しさん:2006/09/26(火) 20:58:14
>>248
やっぱりそうなんだ
自分のコードがダサいのが原因かと思ってたけど
341336: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");
342デフォルトの名無しさん:2006/09/26(火) 21:04:42
ドキュメント、読め、禿。

List<ListViewItem> items = new List<ListViewItem>();
items.Add( new ListViewItem( DateTime.Now.ToString("M/d H:m:s") ) ); 
343デフォルトの名無しさん:2006/09/26(火) 21:10:30
>>341
MSDNで、
System.Collections.Generic.List<T> クラス
を引いてみな。
344デフォルトの名無しさん:2006/09/26(火) 21:40:11
「エラーになる」ってアンタ。
せめて内容ぐらい書けよ。
// 今回はそれ以前の問題だが。
345デフォルトの名無しさん:2006/09/27(水) 01:34:39
ヒロシです。マルチスレッドまわりのバグが、再現性皆無で困ってるとです。・゚・(ノД`)・゚・。


form01 を作成したスレッドを thread01、バックグラウンドスレッドを thread02 としたとき、
 1: thread01 が thread02.Abort
 2: thread02 が ResetAbort ⇒ form01.Invoke を使ってちょっとした処理を
なことをしているんですが、Invoke 呼び出し時に thread01 と thread02 がともに busy に orz

thread01 が thread02.Join なんてしていれば busy になることは明らかなんですけど、
デバッガで確認しても、Abort 直後に thread01 はメインループに戻っているんで……


何か、Invoke 呼び出し時の注意点はありましたっけ?
あるいは、マルチスレッドをデバッグするときの注意点とか。
346デフォルトの名無しさん:2006/09/27(水) 01:45:06
>注意点
Thread.Abort()/ResetAbort()を使うべからず
347デフォルトの名無しさん:2006/09/27(水) 01:48:51
ならどうしろっていうんだよ
他のメソッドも使うなばっかり
348デフォルトの名無しさん:2006/09/27(水) 01:59:49
>>346
あー。やっぱり使わない方が良いっスか……(´・ω・`)
了解なり。別の方法を考えますー
349デフォルトの名無しさん:2006/09/27(水) 07:33:30
MOUTHCalendar上のどのコントロールがクリックされたかを知りたいのですがどうしたら値を得るこてが出来ますか?
hitarea列挙体があるのはわかったのですが値が取得できず困っていまつ
350デフォルトの名無しさん:2006/09/27(水) 07:47:18
HitTest
351デフォルトの名無しさん:2006/09/27(水) 17:52:19
ハンドルできない例外が出たときに出てくるダイアログって、アプリケーション側から利用することはできますか?
352デフォルトの名無しさん:2006/09/27(水) 19:30:49
答えはNOだ、グリフ!
353デフォルトの名無しさん:2006/09/27(水) 20:23:03
XPだとテストも同時に書くらしいけど、先生の皆様は書かれてますか?
Expressで勉強の身だから、使えるツールがないお…ツールなくても
テストスイート作る方法ってあるますけ?
354デフォルトの名無しさん:2006/09/27(水) 20:30:20
>>353
NUnit-GUIは別にVS拡張使えなくても動くぞ。
テストプロジェクトをクラスライブラリで作って
スタートアップにNUnit-GUIを指定するだけ。

グリーンバー見るためにTestDrivenじゃなくこっち
使ってるやつも多い感じ。俺もな。
355354:2006/09/27(水) 20:31:25
あーあと、「テストも同時に書く」じゃなく「テストを先に書く」な。
356デフォルトの名無しさん:2006/09/27(水) 21:05:40
>354様
ありがとうございました!
357デフォルトの名無しさん:2006/09/28(木) 01:09:45
MbUnitのがかっこいいいお
358デフォルトの名無しさん:2006/09/28(木) 09:32:43
ディレクトリを作成(Directory.CreateDirectory)して、
全てのユーザに対して読み書きの権限を設定したいのだけど、
どうすればいい? Unix系の777の状態にしたい。
よろしくお願いします。
359デフォルトの名無しさん:2006/09/28(木) 10:27:01
>>358
http://msdn2.microsoft.com/ja-jp/library/system.security.accesscontrol.directorysecurity.aspx
とりあえずのテスト用ならFileSystemRights.FullControlを使えばいいんじゃないかと。
360デフォルトの名無しさん:2006/09/28(木) 11:10:03
ASP.NETで呼び出し元のアセンブリ名を取得する方法を教えてください
例えばこういう感じに呼び出すとします

hoge.aspx

hoge.dll の Page_Load() 関数

複数のdllや関数

foo.dll の foo() 関数

この中の foo() 関数内で、大本の hoge.dll の「hoge」の部分を取得したいと思っています
System.Reflection.Assemblyのメソッドあたりがどうかと思いましたが、GetCallingAssemblyやGetExecutingAssemblyでは思った値がとれませんでした
ご存知の方教えてください
361デフォルトの名無しさん:2006/09/28(木) 12:35:26
>>359
サンクス。
一度見たページなんだが、理解できなかった。
もういっぺんガンガル。
362デフォルトの名無しさん:2006/09/28(木) 16:38:20
Dictionaryのインスタンスから変更不可能なビューを返してくれるメソッドってありますか?
JavaのCollections#unmodifiableMapにあたるものです。
363デフォルトの名無しさん:2006/09/28(木) 18:34:12
最近javaから出張の人が多いな。
.netの案件も増えたし…
364デフォルトの名無しさん:2006/09/28(木) 18:59:37
今日はじめてReflection使ったんだけど、すごくね?
privateだろうがprotectedだろうがメソッド呼びまくれる?
365デフォルトの名無しさん:2006/09/29(金) 15:44:53
MATLABの evalに当たるようなものはありませんか?
たとえば、↓のようにアクセスをするときに

string test;
test = label1.Text;
test = label2.Text;
test = label3.Text;

「label?.Text」の数字の部分だけ置き換えて
for文などで繰り返し処理したいのですが可能でしょうか?
366デフォルトの名無しさん:2006/09/29(金) 15:48:08
配列にしてforeach
367365:2006/09/29(金) 15:59:01
回答ありがとうございます
開発環境は Microsoft Visual C# 2005 を使っていますが
デザイナの画面で Form上に配置したLabelを配列化することができるのでしょうか?
それとも、コードの方で配列宣言して一つ一つ Form上の表示位置を指定
すればいいという意味でしょうか?
368デフォルトの名無しさん:2006/09/29(金) 16:11:01
InitializeComponent()の後なら
コードで既存のコントロールにアクセスできるでしょうが。

Label[] labels = new Label[]{ this.label1, this.label2, ... this.label999 };

for( int i=0; i<labels.Length; i++ )
{
 test = labels[i].Text;
}

369デフォルトの名無しさん:2006/09/29(金) 16:14:59
>>367
デザイナで配置したLabelとかのコントロールは
そのFormクラスのフィールドですよ
370365:2006/09/29(金) 16:17:55
>>368>>369
3行目の考えがまったく浮かびませんでした
ようやく解決しました
ありがとうございます!
371デフォルトの名無しさん:2006/09/29(金) 16:39:47
質問失礼します。

ReadToEndで読み込むと改行が\r\nという文字列になります。
ここまでは別に良いのですが、
clStr.Replace("\\r\\n", "\n");
と変換を試みても効果がありません。

なぜでしょうか?
372デフォルトの名無しさん:2006/09/29(金) 16:45:58
>>371
clStr.Replace("\r\n", "\n"); 
373365:2006/09/29(金) 16:46:35
>>368
やっぱり解決してませんでした。
配列を初期化するところでラベルの数だけ並べて書くのが面倒です。
この部分もループに出来ませんか?
374デフォルトの名無しさん:2006/09/29(金) 16:50:13
すいません。

clStr= clStr.Replace("\r\n", "\n");
でした。

失礼しました。
375デフォルトの名無しさん:2006/09/29(金) 16:54:13
>>373
何が解決していないと?
面倒ならやめちまえ、と言いたいが……

List<Label> labels = new List<Label>();

foreach( Control control in this.Controls )
{
 if( control is Label )
  labels.Add( (Label)control );
}

376365:2006/09/29(金) 16:57:40
>>375
365です
>>373とは別人です……
>>373さん、便乗質問は(少なくとも当方は)構いませんが
同一人物ぽくしないでください
377デフォルトの名無しさん:2006/09/29(金) 18:49:32
>>368のヒントから>>373のように手動が面倒と考えて
>>375のようにforeachで回すと考え付くと言う流れを
閃いたときの嬉しさはプログラマーの醍醐味
378デフォルトの名無しさん:2006/09/29(金) 19:40:58
勘定にいれたくないLabelまでつっこんじまうけどな。
379デフォルトの名無しさん:2006/09/29(金) 19:44:51
それ専用のLabelを継承したクラスをつくれば・・・
それだけのためにクラス作るのもあほか・・・。
380デフォルトの名無しさん:2006/09/29(金) 20:14:59
はじめまして。
Visual Studio 2005でC#を使ってプログラムをしているのですが、
Windowsのタイムゾーンのロケールを変更するプログラムを作りたいのです。
String time = TimeZone.CurrentTimeZone.StandardName;
で現在のタイムゾーンを取得することはできるみたいですが、
変更する時はどうすればいいでしょうか?
やはりAPIを使うしかないですか?

初心者ですみませんが、どなたかよろしくお願いします。
381デフォルトの名無しさん:2006/09/29(金) 20:18:53
>>378-379
識別できるようにTag に何か書いておけばいいんじゃないだろうか。
382デフォルトの名無しさん:2006/09/29(金) 20:56:53
>>380
API 使うしかないね。
383デフォルトの名無しさん:2006/09/29(金) 22:20:27
DoubleClick イベントにて Shift キーが押されているかどうか調べたいんですけど、どうすれば良いですか?
384デフォルトの名無しさん:2006/09/29(金) 22:22:18
Control.ModifierKeys
385デフォルトの名無しさん:2006/09/29(金) 22:27:58
thx
386デフォルトの名無しさん:2006/09/30(土) 01:45:27
VS2005でiTuneのように独特のウィンドー形式やスライドバーを作ってみたいのですが可能なんでしょうか?
387デフォルトの名無しさん:2006/09/30(土) 01:49:50
可能だよ
386 が実現できるかは知らない
388デフォルトの名無しさん:2006/09/30(土) 01:50:48
A B C Dのラジオボタンが同じパネル上にあるとき、
AとB、CとDのように2つのグループに分けることは可能?
パネル上に別のコンテナを載せその中にラジオボタンを配置すれば可能だけど、
そうしなくても済む方法があれば教えてほしい。
389デフォルトの名無しさん:2006/09/30(土) 01:59:28
ないんじゃね
390デフォルトの名無しさん:2006/09/30(土) 02:06:58
そういうときのためのグループボックスでは?
391デフォルトの名無しさん:2006/09/30(土) 03:16:12
AとCだけTabstopをtrueにすればできるんじゃないの?
やったことないけど。
392デフォルトの名無しさん:2006/09/30(土) 09:37:29
昨夜から趣味で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");
}
}
393デフォルトの名無しさん:2006/09/30(土) 09:39:39
PATHを通す
394デフォルトの名無しさん:2006/09/30(土) 09:50:57
初回起動時に csc.exe のパスを聞かれる、とマニュアルにあるのだが
395デフォルトの名無しさん:2006/09/30(土) 09:54:51
PATHを通す。 っていうのは、具体的にどういう行為をすればいいんでしょうか?
Windowsの検索でいくら探しても、csc.exeというファイルが存在しないんです。
ド素人なので、もう少し噛み砕いて教えていただけないでしょうか。お願いします。
396デフォルトの名無しさん:2006/09/30(土) 10:00:24
デフォルトでは %windir%\Microsoft.NET\Framework\
以下にあるよ。%windir% は XP なら c:\windows な
SDK は program files の方に入るからちょっとややこしいが。
397デフォルトの名無しさん:2006/09/30(土) 10:08:34
なんとか、csc.exeを見つけることができました。
お騒がせしました。感謝致します。
398388:2006/09/30(土) 11:06:01
>>389-391
レスありがとう。
TabStopを設定してもだめだった。
Checkedを設定するときにTabStopも強制的に変更されるようだ。

「グループの先頭」のようなプロパティがあれば、
いちいちグループごとにコンテナを用意しなくていいのにと思った。
そういったものがVC++6.0にあったような記憶が。勘違いかもしれないが。
399デフォルトの名無しさん:2006/09/30(土) 11:09:06
>>392
Visual C# Expressを使えばいいのに
なんでわざわざ…
400デフォルトの名無しさん:2006/09/30(土) 11:11:05
有料だと思ってるか、プロダクトキーをMSがちゃんと掲載されてることに気づいてないか。
401デフォルトの名無しさん:2006/09/30(土) 11:16:33
VS2005 は重いんよ
// 私は主にテキストエディタ使ってる身で CPad とやらがどうかは知らんが
402デフォルトの名無しさん:2006/09/30(土) 11:18:55
>>401
気持ちは分かるけど、
本腰入れてプログラミングするときには、起動遅くてもVSの補助機能が魅力だし、
逆にさらったソース見るとかだけなら秀丸とかのエディタで十分な気が。
403デフォルトの名無しさん:2006/09/30(土) 11:22:12
CPad for C#ってシェアウェアなのなw(送金義務は無いけど)
しかも2001年で更新止まってるしw
そんなの使うなよw
404デフォルトの名無しさん:2006/09/30(土) 11:59:41
Visual C# Express環境に
PSDKインストールしたらどうなる?
F1のヘルプブラウザからAPIとかCOMとか見れるようになる?
405デフォルトの名無しさん:2006/09/30(土) 12:18:03
無理
406392:2006/09/30(土) 13:14:59
Visual C# Express は一応インストールしたんですが、
ちょっと自分には敷居が高い気がしました。(マシン的には重くないです。)

で、メモ帳で書いて、コマンドプロンプトからコンパイル&実行を試したわけです。
そして、メモ帳で書くより専用エディタの方が色分けしてくれるから・・・という理由で、CPadへ。
使い勝手がよく、エディタ内でコンパイル&実行ができるので、自分には合ってると思いました。

みなさんは、やっぱりVSを使ってるんですか?
407デフォルトの名無しさん:2006/09/30(土) 13:20:05
てかVS.NET以外ありえない
408デフォルトの名無しさん:2006/09/30(土) 13:23:58
いやいまさらVS.NETはありえない。
はいいすぎかもしれんが。
409デフォルトの名無しさん:2006/09/30(土) 13:25:15
マシン的に重い、以外で使わない理由がない。
410デフォルトの名無しさん:2006/09/30(土) 13:31:21
VSを使わないならC#を使う意味がかなり薄くなる
411392:2006/09/30(土) 13:35:44
さっきの、test1.csをVSのスタートページにドラッグアンドドロップすると、
コードは表示されるけど、デバッグ開始ボタンが押せないので、テストできないんです。
それで、VSは自分には無理だ。。。と思ったんです。
ちなみに、「同時に覚えるC++,Java,C言語」という本を見ながら、C#も試しているところです。
412デフォルトの名無しさん:2006/09/30(土) 13:42:10
新しいプロジェクトでコンソールアプリケーションを選んで作成
test1.csをそのプロジェクトに追加すればOK
413デフォルトの名無しさん:2006/09/30(土) 13:42:12
問題や疑問を解決する方法を調べることができない人は
言語やツールに何を使ってもプログラミングなどできんぞ。
414392:2006/09/30(土) 13:47:13
>>413 おっしゃるとおりですが、小学生に対して自分で調べて微積分を解け・・・という状況に近いです orz

>>412 プロジェクトに追加したらデバッグ開始ボタンを押せるようになりました。でも、ビルドエラーが。Mainに波線が入っているので、やり直してみます。
415デフォルトの名無しさん:2006/09/30(土) 14:01:07
つかExperssはVSじゃないし
416デフォルトの名無しさん:2006/09/30(土) 14:26:28
>>414
良書を与えれば小学生でも自力で調べて微積の勉強くらい出来そうなもんだけどな。
全ての小学生ができるとはいわないけど。
日本ではその機会が与えられないだけで。

C# とか VS に関する資料はウェブ上探せば腐るほどある。
417392:2006/09/30(土) 14:54:29
なんというか、正論は正論ですが、
それを言っちゃ、このスレの存在意義が無いのでは?
優れた参考書が本屋に捨てるほどあるから、学校も予備校もいらんよ。というのと同じような・・・ orz

>このスレッドは
>「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
>ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
>勇気をもって書き込んでください。
418デフォルトの名無しさん:2006/09/30(土) 14:56:48
>>417
優れた参考書を買ってから、それを持って塾に池。
手ぶらで学校や予備校に通うなよ(;´Д`)
419392:2006/09/30(土) 15:01:12
う〜ん
ここがいちばん初心者向けなスレだと思ったんですが・・・orz
420デフォルトの名無しさん:2006/09/30(土) 15:11:24
初心者かどうかなんて関係ない (;´Д`)
本を見れば理解できることを、なぜわざわざ聞くのかと小一時間
421デフォルトの名無しさん:2006/09/30(土) 15:14:15
「初心者ですが・・・」が免罪符になると思ってる馬鹿が多い。
422デフォルトの名無しさん:2006/09/30(土) 15:15:11
VisualStudioじゃなくて秀丸で書いてる
使いこなせてないのもあるが、
コード自動生成がどうも気持ち悪くてしょうがないのと
オートフォーマットで{の前に必ずスペースを付けやがるのが困る。
(オプションが見つからない)

つか勉強なら一から自分でゴリゴリ書いていった方が覚えると思ふ。
423デフォルトの名無しさん:2006/09/30(土) 15:23:50
>>420
リアル厨房か工房くらいと見受けられるが、
C# 云々関係なく1つアドバイスするなら、
このスレや、C# に関する質問に限らず、世の中全般の話、
>>421 の言葉を肝に銘じておけ。
言わなくていい発言はしない方がいいんだよ。
424デフォルトの名無しさん:2006/09/30(土) 15:23:58
つーかここ(2ch)は学校や予備校みたいに1から10まで体系的に学ぶには向いてないだろう?
できるのは、どう頑張ってもわからない所や気になったところを休み時間にクラスメイトに質問するような程度。

ttp://www.atmarkit.co.jp/fdotnet/index/all/category.html
よく出てくる参考書
「改訂版 C#入門」から始めれ
425420:2006/09/30(土) 15:27:49
>>423
……なんで俺?
426392:2006/09/30(土) 15:30:46
ちょ・・・

>このスレッドは
>「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
>ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
>勇気をもって書き込んでください。

これは釣り?
427デフォルトの名無しさん:2006/09/30(土) 15:35:39
>>422
・自動生成しない
・オートフォーマットしない
でいいんでは?
428デフォルトの名無しさん:2006/09/30(土) 15:38:56
突っ込まれると思った。
要は秀丸に慣れてるからw
プログラミング経験は殆どスクリプト言語でIDEは殆ど使ったこと無かったし。
429デフォルトの名無しさん:2006/09/30(土) 16:26:01
賑やかな所、お世話になります。

名前入力用の別ダイアログを開いてOKボタンを押したら入力された名前を拾いたいと
考えているのですがどうしたら宜しいのでしょうか?。
名前入力にはテキストボックスを使用しています。

Login login = new Login();
if (login.ShowDialog() == DialogResult.OK)
{
string nick = login.nick; ← こういう感じの事をやりたいのです
}
430デフォルトの名無しさん:2006/09/30(土) 16:30:57
>>426
みたいだねw
スレタイに「初心者用」って入ってるから、自分は初心者だと名乗ったら怒られるというのもねw
431392:2006/09/30(土) 16:42:23
>>430 ほんとそうです。「怒らないから言ってごらん・・・・・・ゴルァァァァ!!」 みたいな ^ ^

ド初心者としては、こんなふうに思います。
・マジレスが欲しい。
・答えられないなら流して。煽らないで。
・上級者は他所で質問して。
・本を読んでもその行間が理解できない、ということを分かって欲しい。
・プロなあなたもド初心者の時期があったはず。
432デフォルトの名無しさん:2006/09/30(土) 16:45:43
すまん、オナニーです。
継承とかを使わずにコンポーネントを拡張する方法を思いついたので嬉しくてつい。
必要な拡張を取捨選択できるのも良いなと思うんですが、どうでしょう。

  /* コントロールのドラッグでフォームを移動させるプラグイン */
  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;
      }
    }
  }
433432:2006/09/30(土) 16:48:23
>>429
Loginにpublic string nick_strを定義。
OKボタンクリック時のイベントにテキストボックスの値をnick_strに代入。
呼び出し元からnick_strを参照
434430:2006/09/30(土) 17:06:01
>>431
味方したけど。一応マジレスしておく。

「初心者」だと名乗ったことそのものが叩かれた原因じゃなくて。
"初心者の癖に噛み付いてきた"ってところだね。

要するに、教えを請う立場の態度じゃなかったということ。
実世界と同じでしょ?
435デフォルトの名無しさん:2006/09/30(土) 17:13:44
>>431
> ・マジレスが欲しい。
できる限りしてる。
本とかドキュメントにそのまま書いてある事は別。

> ・答えられないなら流して。煽らないで。
大抵は質問内容が答えを導くのに不足している。
だから聞き返す。

> ・上級者は他所で質問して。
特にこのスレに上級者が行うような質問ってのは無いように思うが。
専門性の問題はあるにせよ。

> ・本を読んでもその行間が理解できない、ということを分かって欲しい。
その理解できない行間を質問すればいい。
行そのものに書かれてる事まで聞くな。

> ・プロなあなたもド初心者の時期があったはず。
だから何?
436392:2006/09/30(土) 17:15:34
マジレスして頂いて感謝してます。
”初心者の癖に・・・”というのは、よく分かります。
実世界でも、自分が回答する立場のスレでも、よく感じることですからね。
437デフォルトの名無しさん:2006/09/30(土) 17:16:15
>>435
取りあえずお前の考えがこのスレ住人の総意とか思っちゃってませんか?
438デフォルトの名無しさん:2006/09/30(土) 17:17:36
>>402
>>401
>気持ちは分かるけど、
>本腰入れてプログラミングするときには、起動遅くてもVSの補助機能が魅力だし、
>逆にさらったソース見るとかだけなら秀丸とかのエディタで十分な気が。

余計なお世話だな。キレてるのもしかしてこいつ?
439392:2006/09/30(土) 17:18:26
>>435 連投失礼します。
>できる限りしてる。
という言葉に優しさを感じました。なるべくピンポイントに質問できるように努力しようと思います。
440デフォルトの名無しさん:2006/09/30(土) 17:19:55
>>437
いんや、そう言う立ち位置の回答者もいるってだけのこと。
441デフォルトの名無しさん:2006/09/30(土) 17:20:50
>>392へ。
おまえマゾか?普通これだけメタ糞に言われたら腹が立つもんだが。
442デフォルトの名無しさん:2006/09/30(土) 17:22:09
>>440
じゃあ少し黙ってくれ。正直うるさい。
443392:2006/09/30(土) 17:23:43
>>441 楽しんでるつもりはないんですけどね ^^
このスレで質問できなくなったら、ほかで質問できないから、ある意味必死なんです。
444デフォルトの名無しさん:2006/09/30(土) 17:24:55
必死ならそういう学校へ行って勉強しろよ。
こんなネットの匿名掲示板で必死にならないでさ。
445392:2006/09/30(土) 17:29:04
>>444
プログラミングは昨夜始めたばかりなので、まだ専門学校へ行くとか、そこまで具体的に考えてないんです。
あくまで、趣味の一つとして始めましたから。(こういうこと言うと、プロに叱られそうですが。)
いつか時間があるときに、専門学校へ行きたいとは思ってるんですけどねぇ。
446デフォルトの名無しさん:2006/09/30(土) 17:31:44
まず初心者ならそんな特殊な環境使うなって話だ。
初心者にも便利で親切な機能がテンコ盛りな環境が
タダで提供されてるんだからそれを使え。
447デフォルトの名無しさん:2006/09/30(土) 17:31:52
ただの趣味なら必死になるなよ┐(´ー`)┌
448デフォルトの名無しさん:2006/09/30(土) 17:39:59
つーか、あれだ、今思い出したが、
こういう場合、あれこれレスしたりせず、
↓の URL 貼って流すせばいいんだった。

技術系メーリングリストで質問するときのパターン・ランゲージ
http://www.hyuki.com/writing/techask.html

メーリングリストと入ってるけど、掲示板でも同様だと思う。
これ読ませるの、質問者のためにもなると思うし。
449デフォルトの名無しさん:2006/09/30(土) 17:45:10
>>448
偉そうに。
450デフォルトの名無しさん:2006/09/30(土) 17:48:04
>>392がコテ付けたり外したり必死になっています。
451デフォルトの名無しさん:2006/09/30(土) 17:49:30
>>446
今度から素直にVC#2005EEを使うことにします。特殊環境じゃ、回答者側も困りますもんね。

>>447
確かに、ただの趣味ですから、特に切迫しているわけではないです・・・ orz

>>448
ざっと読みました。他スレで回答側を演じているので、質問スレの掟は人並みには理解してるつもりですが、
自分が質問側になると、なぜか冷静さを失ってしまうんですよねぇ。
452デフォルトの名無しさん:2006/09/30(土) 17:51:28
ほうらコテ付け忘れた。お前もうどっか行っていいよ。
453392:2006/09/30(土) 17:52:08
Orz
他スレでコテ無し回答し、ここでコテ付け忘れ。
まるで449が自分のような状況になってる(笑)
ちなみに、451=392です。449は自分じゃないです。
といっても信じてもらえない位置関係。
454392:2006/09/30(土) 17:53:37
ここもID表示があれば orz
455デフォルトの名無しさん:2006/09/30(土) 17:54:21
>>451
エンタープライズって・・・金持ってるなぁ。
456デフォルトの名無しさん:2006/09/30(土) 17:57:37
>>455
うるさい黙れ氏ね
457デフォルトの名無しさん:2006/09/30(土) 17:58:35
それにしてもスレの進行が早いですね

>>433
ありがとうございます
逆の事をやろうとして苦労していました
458392:2006/09/30(土) 18:00:36
ここで 「Express Edition ですって。」 と、
コテ無し回答したら、大当たり。ってオチですね(笑)
そろそろスレ汚しを終わりにします。ほんと、失礼しました。
楽しかったです。
459デフォルトの名無しさん:2006/09/30(土) 18:09:04
質問です。
リッチテキストの足し算ってどうすればいいのですか?
普通のテキストと違って+しても足してくれないし…
460デフォルトの名無しさん:2006/09/30(土) 18:24:38
392はアレな気がするが
>> ・プロなあなたもド初心者の時期があったはず。
>だから何?
435のこの返答は参考にしたいと思った。他山の石としてだが。
461デフォルトの名無しさん:2006/09/30(土) 19:25:17
初心者にありがちなのは、本来解決すべき問題を放っておいて
むちゃくちゃな方向に勝手に行き、そこで詰まってから質問。

初心者が難しい環境でうまくいかないのは当たり前。
誰かが VC# 使えって言ったのがファイナルアンサー。
あとはVC#の本を買ってきて1冊通して読むなり、ネットを十分に
回ってから次の質問をすれば問題ない。

ピアノの初心者が、両手でひこうとしたら難しくて私にはできませんでした。
だから片手でひくことにしましたって言って片手でうまくひく方法を質問してる
ようなもの。そりゃ片手でうまくひく人だっているし、練習になるかもしれない
けど普通しない。
462デフォルトの名無しさん:2006/09/30(土) 19:51:37
質問です。
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; で選択項目に追加されるのは仕様としてどうなんでしょうね・・・
463デフォルトの名無しさん:2006/09/30(土) 19:58:00
>>459
RichTextBox の Text プロパティで良いのか?
それなら AppendText 使えばいいが。
464デフォルトの名無しさん:2006/09/30(土) 20:01:20
>>462
どっちでもすべて選択されるけど。何か余計なことしてないか?
465462:2006/09/30(土) 20:10:44
>>464
すみません、その通りでした。
KeyDownイベントで Ctrl+A が押されたら全選択する というように書いていたのですが、
押されたAがそのまま送られて、Aで始まる項目(それがたまたま最後の項目だった)を選択していたようです。
KeyEventArgs.SupressKeyPress を true に設定したらちゃんと動きました。
MultipleSimpleでうまく動作していたのは、フォーカスが移っても選択状態が変わらない仕様だったためのようです。

どうもありがとうございました。
466459:2006/09/30(土) 21:57:48
>>463
Textではなく、Rtfです。
書き忘れすいません orz
467デフォルトの名無しさん:2006/09/30(土) 22:27:38
>>466
自前で RTF 解析して付け加える必要があるな。
付け加えるだけならそう面倒でもないと思う。
468デフォルトの名無しさん:2006/09/30(土) 22:41:10
>>467
やはり解析しないと駄目ですか orz
rtfの仕様調べてメソッド作ってみます。
ありがとうございました。
469デフォルトの名無しさん:2006/10/01(日) 07:48:54
>>461
口だけで、1行もソースは出せないんですね。

あたまでっかちくん。
470デフォルトの名無しさん:2006/10/01(日) 08:06:52
もうあきた
471デフォルトの名無しさん:2006/10/02(月) 16:14:39
( ^ิิ౪^ิ)
472デフォルトの名無しさん:2006/10/03(火) 17:01:18
デリゲートにキスして
473デフォルトの名無しさん:2006/10/03(火) 17:54:39
Formを最小化した後に元に戻すと
ちっさいままなんですが、どうすれば元の大きさに戻せるのでしょうか?
474デフォルトの名無しさん:2006/10/03(火) 17:58:07
>>473
熱湯をかけて3分待つ
475デフォルトの名無しさん:2006/10/03(火) 18:17:30
>>473
もうちょっと具体的な情報を出してくれないと474みたいにさぶいレスしかつかないよ。
そもそもC#の話なのかい?
476デフォルトの名無しさん:2006/10/03(火) 18:58:56
ヒント:最大化
477デフォルトの名無しさん:2006/10/03(火) 20:44:06
.NETでタブダイアログを実現するのはどのようにするのが一般的でしょうか?
MFCだと、CPropertyPageを継承したりしてやるのが普通なようなんですが、
.NETでは、TabControlを使うのが普通でしょうか?
他に方法はありますでしょうか?
478デフォルトの名無しさん:2006/10/03(火) 21:14:08
TabControlでいいんじゃね
479デフォルトの名無しさん:2006/10/03(火) 21:17:25
早速回答ありがとうございます。
実は、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);
}
481デフォルトの名無しさん:2006/10/03(火) 22:09:37
item dataSize temp が何なのか分からない
482デフォルトの名無しさん:2006/10/03(火) 22:14:40
>>480
本当に Array.Copy() に時間がかかっているのか?
item.Data.ToArray() とか temp.Data.AddRange(array); とかの方じゃないの?
ちゃんと調べた?
483デフォルトの名無しさん:2006/10/03(火) 22:15:22
アイテム数が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;
}
484デフォルトの名無しさん:2006/10/03(火) 22:15:24
全体の処理がよくわからんのだけど
item.Data.ToArray()
はループの外にだせないの?
485デフォルトの名無しさん:2006/10/03(火) 22:27:49
>>483
毎回 SelectedItems を参照するのは拙い気がする
一度 ListView.SelectedListViewItemCollection に受けたらどう?
486デフォルトの名無しさん:2006/10/03(火) 22:30:29
>>483
プロパティに何度もアクセスしてるからじゃね
たとえば500アイテムで

int i = 0;
foreach( ListViewItem item in this.listView1.SelectedItems )
{
 str[i++] = item.Text;
}

なら0.04sec(デバッグモード)で終わった。
>>483だと5sec(デバッグモード)。
487483:2006/10/03(火) 22:32:53
なるほど。
助かりました。
488デフォルトの名無しさん:2006/10/03(火) 22:53:28
C++でのクラスの作成方法とC#でのそのクラスの利用方法を教えてください
もしくは、それについてのサイトとかでもいいです。
検索条件とかでもいいです。
お願いします。
489デフォルトの名無しさん:2006/10/03(火) 22:54:11
>>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 からデクリメントさせてみたが大して変化なかった。
490デフォルトの名無しさん:2006/10/03(火) 23:24:20
>>488
DLL マーシャリング
とかかな?
491デフォルトの名無しさん:2006/10/03(火) 23:25:01
質問です
MFCのマルチウィンドウのように、一つの親Formに複数の子Formを入れるようにするには
どうすればよいのでしょうか?
492デフォルトの名無しさん:2006/10/03(火) 23:27:15
MDI
493デフォルトの名無しさん:2006/10/03(火) 23:37:09
494デフォルトの名無しさん:2006/10/03(火) 23:37:54
>>488
C++/CLIを使うか、ネイティブのDLLの関数をC#からDllImportで呼び出す
495デフォルトの名無しさん:2006/10/03(火) 23:43:40
SelectedItemsプロパティは内部に保持してる参照を返すだけだから、
実行時にはインライン化されるんでローカル変数に保持しても変わらない。

インデックスによる参照は内部的にLVM_GETNEXTITEMをインデックス回分呼んでるみたいだね。
遅くなるのも当然。
496473:2006/10/04(水) 09:01:23
>>475
すみません
C#です

あるFormにClientSizeとLocationを設定しています。
それでそのフォームを最小化(タスクバーに収めた状態)にして
もっかい使おうとそのタスクバーのFormをクリックすると
元の大きさではなくて、Formのバーだけの状態になってしまうのです。

なにか設定が必要なのかと思い質問をしました。
497デフォルトの名無しさん:2006/10/04(水) 10:39:31
最小化中にサイズの取得&設定してないか?
498デフォルトの名無しさん:2006/10/04(水) 11:01:59
>>497
サイズの保存はFormを閉じる時で
取得はFomをロードするときに勝手にやってくれているようなのです

とりあえず最小化中には自分で設定とかはしてないです
499デフォルトの名無しさん:2006/10/04(水) 11:07:14
>>498
多分簡単なミスなんだろうけど
ソースを見てみないと無駄にレスを消費するだけ
どうしても解決したいならどっかに上げて
500デフォルトの名無しさん:2006/10/04(水) 11:38:10
>>499
これでいいのか分かりませんが
http://vipup.sakura.ne.jp/512kb/upload.htmlの512kb_3311.txtにうぷしました

新規にファイルを作ってFormのサイズとロケーションを設定しただけのものですが
同じような現象が出ます
501デフォルトの名無しさん:2006/10/04(水) 13:24:59
C++/CLIだが、FormClosedイベントが起きたとき元のフォームが見えてるなぁ
元のフォームを開いたコードの後で処理すればいいんだけどね・・・
502デフォルトの名無しさん:2006/10/04(水) 13:33:05
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ボタンのダイアログボックスをインスタンスを作って出力したいのです。
505デフォルトの名無しさん:2006/10/04(水) 15:12:03
MessageBoxでは
506デフォルトの名無しさん:2006/10/04(水) 15:34:50
>>503
ドライブのアクセス権で拒否されてるんじゃない?
try catchでくくるしかないのかな?

>>504
MessageBoxはインスタンス作れないから
インスタンスが欲しけりゃ自分でフォームから作るしかなさ
507デフォルトの名無しさん:2006/10/04(水) 16:06:33
実行中はスクリーンセーバーを無効にするのってどうすればいいですか??
お願いしますm(__)m
508503:2006/10/04(水) 19:21:40
>>506
そうなのかd
509デフォルトの名無しさん:2006/10/04(水) 20:41:06
データをファイルから読み込んで、long型としてラベルで表示します。

ファイルから読み込まれるデータ(数値)が
そのときによっていくつになるわからないので、

ラベルの長さをlong型の最大桁数にしようと思うんですけど、
long型の最大桁数がわかりません。ちなみに、long型は符号付きです。
誰か教えてください。お願いします
510デフォルトの名無しさん:2006/10/04(水) 20:50:04
ファイルの保存・開くダイアログも同じようなもんだよ。
MessageBoxクラスを自分で作ったら一緒だ。
511デフォルトの名無しさん:2006/10/04(水) 20:59:17
> long型の最大桁数がわかりません。
>>2

ここは、人工知能検索エンジンではない
512デフォルトの名無しさん:2006/10/04(水) 21:04:41
long.MaxValue
513デフォルトの名無しさん:2006/10/05(木) 01:48:03
VC#2005ExpressEでフォーカスの来ないボタン、ソフトキーボードのようなプログラムをつくりたいのですが、
どうすればいいでしょうか?

http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=646802&SiteID=7
ここを見つけて参考にしたのですが、カスタムコントロールという項目が無くてさっぱりです・・。
514デフォルトの名無しさん:2006/10/05(木) 02:10:02
むしろ非アクティブなフォームに直接ボタン風の絵を描画する方が楽な気がする
515デフォルトの名無しさん:2006/10/05(木) 02:15:51
>>513
そのURL先に書いてある通り。

class MyButton : Button
{
 public MyButton()
  : base()
 {
  this.SetStyle( ControlStyles.Selectable, false );
 }
}

を貼り付けてビルド→ツールボックスにMyButtonが表示される
→ポトペタ→(゚д゚)ウシー
516デフォルトの名無しさん:2006/10/05(木) 02:54:45
MenuItem.Click から FeedView.BeginEdit を呼び出しても、直ぐにラベル編集が終わってしまう……。
回避方法わかる人います?
517デフォルトの名無しさん:2006/10/05(木) 03:02:40
FeedView は変数名。TreeView ですバカか俺は orz
518デフォルトの名無しさん:2006/10/05(木) 03:06:11
って、さっぱり再現できないし。もういやだぁ。・゚・(ノД`)・゚・。
519デフォルトの名無しさん:2006/10/05(木) 03:27:26
>>515
ありがとうございます。ただどこに貼り付ければいいのでしょうか?
Form1に貼り付けてビルドしましたがツールボックスに出てきませぬ・・・
520519:2006/10/05(木) 03:31:26
すいません、書き込んだ後適当にやったらできました(汁
ありがとうございました。
521500:2006/10/05(木) 08:45:57
orz
522デフォルトの名無しさん:2006/10/05(木) 10:16:22
>>515
このメソッド初めて知った。いま初めてゲイツをわずかに尊敬した。
523デフォルトの名無しさん:2006/10/05(木) 10:27:36
ウィンドウズメッセージの 0x7Eって何でしょうか??
524デフォルトの名無しさん:2006/10/05(木) 10:35:32
>>523
WM_DISPLAYCHANGE
525523:2006/10/05(木) 10:42:08
>524
ありがとうございます!!
526デフォルトの名無しさん:2006/10/05(木) 12:22:10
>>521
フォルダ丸ごと上げて再現できるようにしてみれば?
527507:2006/10/05(木) 16:01:32
>>507
自己レスですが、WindowsメッセージのWM_SYSCOMMANDを拾えば
スクリーンセーバーを抑止できると以下のURLに書いてますが、
実際スクリーンセーバーがかかっても検知しません。
何故でしょうか??
ちなみにサスペンドモードに入る時はWM_POWERBROADCASTを検知できています。

ttp://support.microsoft.com/default.aspx?scid=kb%3Bja%3B403844
528デフォルトの名無しさん:2006/10/05(木) 16:05:14
SC_SCREENSAVEは拾えてますか?
529デフォルトの名無しさん:2006/10/05(木) 16:06:31
>>527
画面のプロパティ スクリンーセーバ パスワードによる保護
が有効になってると動作しないことは確認したことがある
対処方法は白根
530507:2006/10/05(木) 17:42:53
ご回答ありがとうございます。

>>528
Windowsメッセージを取得する用にオーバーライドした
protected override void WndProc(ref Message m)
自体が発生しません。

サスペンドの時は上記は発生するのですが・・・。
よって、SC_SCREENSAVEは拾えていませんです。
531507:2006/10/05(木) 18:05:55
ご回答ありがとうございます。

>>529
パスワード保護による保護を有効にしても無効にしても
何もあがってきませんでした(T_T)
532デフォルトの名無しさん:2006/10/05(木) 18:16:04
Visual Studioで、TextBoxとかLabelの縦方向のサイズを変えても、
すぐに元に戻ってしまうのですが、戻らないようにできますでしょうか?
VC++6から移植していて、全体にVC++6より大きくなってしまうので困ります。
533デフォルトの名無しさん:2006/10/05(木) 18:32:34
>>532
AutoSize
534デフォルトの名無しさん:2006/10/05(木) 18:41:19
>>533
どうもありがとうございます。これで、サイズを変えられます。
535デフォルトの名無しさん:2006/10/05(木) 20:34:39
textBoxに書き込まれた文字列を行ごとに配列にぶち込みたいのですが、
文章の最後に改行が入ってる場合の削除方法はどのようにすればエレガントにできますでしょうか?

-----------
1
2
3
4
-----------
↑うまくいく

-----------
1
2
3
4

-----------
↑くまった
536デフォルトの名無しさん:2006/10/05(木) 20:39:11
>>535
List<string>に全部ぶち込んで最終行が改行だったらRemove
537デフォルトの名無しさん:2006/10/05(木) 20:56:18
string[] arr =Array.FindAll<string>( this.textBox1.Lines, delegate( string line )
{
 return line.Length > 0;
} );
538532:2006/10/05(木) 22:40:04
何故か、フォントを合わせても、.NETの方が大抵、
入力文字数とか同じにするには、大きなサイズ必要になりますね。
時間がかかるので、.NETでやり易いように作ります。

それと、画面描画が遅くて、徐々に描いているのが目で見て分かるのですが、
これは何とか一気に表示できるようになりませんでしょうか?
(VS2005が遅いのとたまに落ちるのも困ります。)
539デフォルトの名無しさん:2006/10/05(木) 23:01:27
どういうコードでどう遅いのか訊ねさせるのか?
540デフォルトの名無しさん:2006/10/06(金) 00:06:04
532じゃないけど 
userコントロールでラベル20個*150コントロールぐらい出して、
更新してるときつい。
やってることは株の価格更新。
541デフォルトの名無しさん:2006/10/06(金) 00:15:49
3000個もコントロール使う方があほだろ。
542デフォルトの名無しさん:2006/10/06(金) 00:16:55
すいません、教えてください!!
VS2003 C#でプログラムを作りました。
右クリックしたときにコンテキストメニューの表示をすることはできたのですが、
最小化して、タスクバー上にあるプログラムを右クリックしても
コンテキストメニューが表示されません。
コンテキストメニューを表示するにはどうしたらいいのでしょうか?
543デフォルトの名無しさん:2006/10/06(金) 00:25:34
544デフォルトの名無しさん:2006/10/06(金) 00:26:19
Javaをやってるとすんなり使えるようになるな。
しかも、Javaよりいい感じだし。

545デフォルトの名無しさん:2006/10/06(金) 00:37:15
>>540
ウインドウを3000個同時に表示しているのと同じだから。
遅くて当たり前。
546デフォルトの名無しさん:2006/10/06(金) 00:38:21
>>540
ああシェアウェア厨か。アホ。そんなんで金取ろうっていうのか。
547デフォルトの名無しさん:2006/10/06(金) 00:47:53
>>540
そういうことはWPFとかになってからやってください(>_<)
548532@自宅:2006/10/06(金) 00:58:23
>>539
普通にGUIエディタで作ったソースです。
入力する奴は、40個位でラベルもその位だと思いますけど。
549デフォルトの名無しさん:2006/10/06(金) 01:27:49
デバッグモードという落ちはないよね?
550デフォルトの名無しさん:2006/10/06(金) 04:09:46
標準の 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アプリ
ケーションを作るときにデフォルトで作られるクラスです。

要領を得ない質問ですが、意図を汲み取って理解していただける方どなたか教えて頂けませんでしょうか。
553532:2006/10/06(金) 10:36:33
>>549
Releaseモードも試しましたがあんまり変わらないです。
こういうものだと思って諦めます。
554デフォルトの名無しさん:2006/10/06(金) 12:23:12
C#で構造体のUDP通信をしたいのですが、受け側はバイトをどうやって構造体へ戻すのでしょうか?
C++ならキャストかユニオンでいいのですが・・・C#だとどうやって実現すればいいのか解りません。
教えて下さい(;_;)
555デフォルトの名無しさん:2006/10/06(金) 12:33:36
>>554

unsafe状態でキャストでok
556デフォルトの名無しさん:2006/10/06(金) 12:43:06
>555
マネージ型の変数アドレス、サイズを取得できません、みたいに蹴られるんだ。
初心者でスマン、アドバイス下さい(;_;)
557デフォルトの名無しさん:2006/10/06(金) 12:52:20
>>552
Form の Graphics に書いたものは取得できません。
自前で Bitmap を用意して、そこに描画して Form の Paint イベント
(および必要なら適当なタイミング)で画面に書くようにするのが良いでしょう。
558デフォルトの名無しさん:2006/10/06(金) 12:53:12
>>552
GraphicsクラスのパブリックメソッドのFrom〜
と言うのがいくつかあるからそれを使う。

またはOnPaintメソッドをオーバーライドして引数のGrapficsを使う。


個人的にはPictureBox貼り付けて、
そのイメージからFromImageで作ったほうがいいと思う。
559デフォルトの名無しさん:2006/10/06(金) 12:55:34
GDI+のOnPaintメソッドって、何がきっかけで呼び出されるのでしょうか?
560デフォルトの名無しさん:2006/10/06(金) 12:57:25
>>559
描画が必要なとき。
ウインドウサイズの変更や重なった部分の再表示など。
561デフォルトの名無しさん:2006/10/06(金) 13:00:53
>>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; }
てな感じじゃない?
562デフォルトの名無しさん:2006/10/06(金) 13:01:51
>>559
WM_PAINT
563デフォルトの名無しさん:2006/10/06(金) 13:02:56
>>558
ありがとうございます。
ちなみに使い方としては
Graphics g = Graphics.FromImage(image);
という事でいいんでしょうか?
もう一つお聞きしたいのですが、イメージをどのウィンドウのどこに貼り付けるという
指定はどうすればいいのでしょう。

初歩的な質問ばかりですいませんが教えていただけませんでしょうか。
564デフォルトの名無しさん:2006/10/06(金) 13:06:24
>>563
Visual Studio使ってないの?
565デフォルトの名無しさん:2006/10/06(金) 13:08:21
>>563
そうです。
using (Graphics g = Graphics.FromImage(..)) { 描画. }という感じにすることが多いです。

>イメージをどのウィンドウのどこに貼り付けるという指定はどうすればいいのでしょう。
Form に Panel を置いて、そのPanel のペイントイベントで描画するのが簡単だと思います。

一度描画したらあまり変更しないものならば、Paintイベントは使わないで Panel の
BackgroundImage にそのイメージをセットしてしまってもよいかもしれません。
この場合Panel ではなくPictureBoxでもOKです。
566デフォルトの名無しさん:2006/10/06(金) 14:23:04
VS2005の編集領域のタブにあるような、タブ+下三角(コンテキストメニュー表示)+閉じるボタン ってどうやって実現するのでしょうか

tabControlのプロパティにそれらしいのは見つかりませんでした
普通のボタンを乗せてみようと思ったのですが、タブが多くなると出る左右ボタンがタブの弾の右端に出るため、被ってしまいます
オーナードローや自作コントロールは複雑そうなので手が出せません

こういう設定できる、そういうコントロールがある(できれば無料)、など情報ありましたら教えてください
567デフォルトの名無しさん:2006/10/06(金) 14:23:57
>>563
>イメージをどのウィンドウのどこに貼り付けるという
>指定はどうすればいいのでしょう。

質問の意図がわかりません。
貼り付けるっていうのは描画することでしょうか?それともコントロールを
貼り付けると言う意味でしょうか?
568デフォルトの名無しさん:2006/10/06(金) 16:12:35
>>566
どの部分のことを言ってるのか分からない

まあタブにいろいろ機能付けたいなら自作するしかない
わたしは自作したけど、人様に見せられるようなものじゃないしw

フリーのタブコントロールなんてあんまり見かけないなぁ。
569デフォルトの名無しさん:2006/10/06(金) 16:20:57
>>565
ありがとうございました。
>>567
ある処理を行なって座標の位置を算出し、その処理が終わるたびにウィンドウにその
座標の位置に点を出力したいのです。
もし、お分かりになるのでしたら教えていただけませんでしょうか?
570デフォルトの名無しさん:2006/10/06(金) 16:31:06
>>569
GraphicsのDraw〜系のメソッド使えば?
DrawLine使うとかね。

もしくはBitmapのSetPixelとか。
571デフォルトの名無しさん:2006/10/06(金) 16:32:06
Bitmapもっといてそこに描画(>>570)
→PictureBox.Imageにそのビットマップを設定
572デフォルトの名無しさん:2006/10/06(金) 16:33:22
>>569
図書室にC#の本ないの?
573デフォルトの名無しさん:2006/10/06(金) 17:05:49
>>570-572
UNIX系のC/C++プログラミングしかやったことが無いものでwindowsプログラミング
は全くわからないのです。教科書を読んでみてもOnPaintをオーバーライドしていつ
のまにか呼び出されてどこからともなくPaintEventArgsオブジェクトを取得して
ウィンドウに書き込みを行なっていたり、自分には理解がついて行きません・・・orz
574デフォルトの名無しさん:2006/10/06(金) 17:08:17
表形式の入力コントロールが見当らないけど、
サイドパーティ製のしか無いのかな??
575デフォルトの名無しさん:2006/10/06(金) 17:50:16
>>573
よけいなことは気にしない
パターン学習でおk
576デフォルトの名無しさん:2006/10/06(金) 18:03:31
>>575
とりあえず、OnPaintでやってるようにpaintEventArgsオブジェクトをmainで
扱えれば後はPenオブジェクトを呼んでなんとかできると思うのですが、それ
はできないんでしょうか。

メインプログラムをOnPaintに書き込んだら異様に処理が重くなって断念しました。
もしかして、座標の変数が変更されるたびに逐一描写してるのでしょうか。
いずれにしても、どうすればいいのやら手詰まりです。。。
577デフォルトの名無しさん:2006/10/06(金) 18:15:27
>>576
自分でループを持って好きなときに描画したいなら、Paintは使わずに、
Control#CreateGraphicsでGraphicsオブジェクトを取得して直接描画すればいい
578デフォルトの名無しさん:2006/10/06(金) 18:29:35
C++やってたなら分かるでしょうが
OnPaintで色々作業するってことは
WM_PAINTが来たときにプロシージャのなかで色々作業することと同じですよ?
重くなって当たり前。
でもOnPaintでやらないってことは、Invalidateされたら消えるってことですよ?
579デフォルトの名無しさん:2006/10/06(金) 18:30:55
>>574
DataGridView
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も使った事が無いです。
582デフォルトの名無しさん:2006/10/06(金) 18:46:30
Graphics g = Form1.CreateGraphics()
で出来ない?

だめならパネルはっつけてthis.panel1.CreateGraphics()
583デフォルトの名無しさん:2006/10/06(金) 18:57:46
>>582
静的でないフィールド、メソッド、またはプロパティ
'System.Windows.Forms.Control.CreateGraphics()'
で、オブジェクト参照が必要です。

というエラーが出てしまいました。

パネルはGUIデザイナで貼り付ければいいんでしょうか。

584デフォルトの名無しさん:2006/10/06(金) 19:06:15
>>582 Form1じゃなくてform1だろ

でもMainにだらだら書くのはよくないから、
Form1#Run()とか定義してその中にMainの代わりを書けば
MainはForm1 form1 = new Form1();form1.Run();だけで
585デフォルトの名無しさん:2006/10/06(金) 23:15:58
本当の初心者なんだな。
悪いこと言わないから本かって呼んだほうがいいよ。
あと Visual Studioの基本は勉強しようね。
586デフォルトの名無しさん:2006/10/07(土) 08:52:31
Control.Enabledプロパティをfalseにしたコントロールのバックカラーをグレイアウトさせないようにしたいのですが、
falseにしたあとControl.BackColorを変更してもだめでした。
グレイアウトさせないようにするにはどうすればいいのでしょうか?
587デフォルトの名無しさん:2006/10/07(土) 11:15:42
500って分かる方いませんかね?
588デフォルトの名無しさん:2006/10/07(土) 11:25:54
>>586
UserPaint

>>587
現象は発生しなかった。
環境の問題じゃ?
589デフォルトの名無しさん:2006/10/07(土) 14:47:11
>>587
だからフォルダ丸ごと上げてみって
デバッグできるようにしないと
環境としか言いようがないって
590デフォルトの名無しさん:2006/10/08(日) 00:40:37
>>589
フォルダうpできるうpローダーありますかね?
フォルダを圧縮して解凍すると、C#で読み込むときにエラー出るんですけど・・・。

というより、この前うpしたものも、新規formにアプリケーション設定でLocationとClientSizeを
設定して、Closingイベントに保存のコード書いただけのものなんですが・・・
どなたか同じような状態になる方いませんか?
うちにあるPC3台とも同じになるんですけど・・・

というより、FormにClientSizeの設定をした直後から最小化して
元に戻そうとするとバーだけになるようです・・・
591デフォルトの名無しさん:2006/10/08(日) 01:28:15
>>590
FormのLocationとClientSizeにアプリケーション設定をバインドしたときの話だよな。
なるよ。
592デフォルトの名無しさん:2006/10/08(日) 02:58:23
>>591
なりますか!?

元の大きさに戻すにはどうすればいいんですか?
593デフォルトの名無しさん:2006/10/08(日) 04:23:54
beで2chに書き込むときって、いつものPOST内容に何が付加されているんでしょうか?
594デフォルトの名無しさん:2006/10/08(日) 04:37:44
クッキーにメールアドレスと認証コードが付くだけで
ボディには変化はないんじゃないかな
595デフォルトの名無しさん:2006/10/08(日) 04:38:43
Fiddler おすすめ
596デフォルトの名無しさん:2006/10/08(日) 05:08:19
>>594
ヘッダーってどうすればいいんでしょうか??

Set-cookie: ??
597デフォルトの名無しさん:2006/10/08(日) 05:12:19
beを使わなくても2chに書き込むときにはクッキーは必須なわけだが
598デフォルトの名無しさん:2006/10/08(日) 05:18:32
>>590
わざわざ再現さすのがめんどくさいから
フォルダうpすれば?といっているのでは

>フォルダを圧縮して解凍すると、C#で読み込むときにエラー出るんですけど・・・。
なぜ?なんか不具合の全てが環境のせいのような??
599デフォルトの名無しさん:2006/10/08(日) 05:28:33
>>597
取ってきたcookieにbeのログインIDと認証コード付加するわけですよね?
cookie取ってきたとき、Set-cookie:PON=〜〜〜みたいになってたような気がしたんですが・・・
600デフォルトの名無しさん:2006/10/08(日) 05:46:23
>>592
LocationとClientSize(またはSize)をバインドすると色々おかしくなるのでバインドをやめてコードで取得、設定する。

Form_Load(またはコンストラクタのInitializeComponentの後)でSettingsのプロパティからFormのプロパティに代入。

最小化または最大化してるときの値を保存してしまうとまずいのでWindowStateがNormalのときだけ
Form_ClosingのSave()の前にFormのプロパティからSettingsのプロパティに代入。
601デフォルトの名無しさん:2006/10/08(日) 10:01:46
>>600
ありがとうございます

よく理解できてませんがorz
色々調べて頑張ってみます!
602デフォルトの名無しさん:2006/10/08(日) 12:34:24
>>599
be のクッキーを CookieContainer に入れて HttpWebRequest.Cookie に
それでクッキー処理はOKのはず
603デフォルトの名無しさん:2006/10/08(日) 12:51:25
>>602
サンクスです
感謝します
604C ◆.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個タイマーを割り当てることになってしまい、あまり綺麗ではないので
いい実装の方法のヒントをいただけたらうれしいです。
605デフォルトの名無しさん:2006/10/09(月) 01:08:00
DateTime32個作る。
オンしたときDateTime+5秒を記録。

ループ用Thread1個作る。
ThreadでDateTime見て過ぎていればOutput変更
ループ。

もしくはQue使う。
606デフォルトの名無しさん:2006/10/09(月) 01:34:09
いや過ぎる
607デフォルトの名無しさん:2006/10/09(月) 01:55:53
>605さん
さっそくレスいただきありがとうございます。
DateTime.Now + 5秒を記録ですかー。
なるほど。

ラダープログラム使えば実装超簡単なんですけどね(^^;
C#でやる意味がわかんないー(T_T)
608C ◆.6Hqkk7dyk :2006/10/09(月) 01:56:48
すいません 607は604です(^^;
609デフォルトの名無しさん:2006/10/09(月) 11:56:25
RichTextBoxに書き込まれたテキストのキーワードの色分けをするようにしました。
SelectionStartとSelectionLengthを指定してやっているので
テキストが長くなるとハイライトでちらついてしまいます。
ハイライト無く奇麗に描画する方法ってありますか??

検索しても色分けのコードはあってもちらつきをなくす方法を見つけられませんでした。
610デフォルトの名無しさん:2006/10/09(月) 11:59:37
WM_SETREDRAW
611デフォルトの名無しさん:2006/10/09(月) 12:28:29
612609:2006/10/09(月) 13:21:55
>>610, 611
できました。ありがとうございました。

BeginUpdateして色変えてEndUpdateしただけだと文字が欠けたりするので
Refleshかけているけどこれでいいのかな。
613デフォルトの名無しさん:2006/10/09(月) 19:41:44
スレタイどおりの未熟者ですが質問させてください。
データベースにbyte[]型でeml形式のメールデータが格納されています。
現在はこれをBinaryWriterでファイルに書き出して手動で読み込んでいるのですが、プログラム内でプレビューする機能をつけたいなと考えています。
BinaryWriterの出力をテキストボックスに書き出そうと試みてあえなく挫折してしまいました。
byte[]からstringに変換するには文字コードの判別等から自前でやらないといかんということでしょうか。
なにか指針を頂ければと思います。
614デフォルトの名無しさん:2006/10/09(月) 19:46:31
>>613
System.Text.Encoding.GetString
615デフォルトの名無しさん:2006/10/09(月) 19:55:58
emlならJISじゃね
616デフォルトの名無しさん:2006/10/09(月) 20:16:11
>>614-615
レスありがとうございます。下記のサンプルを見つけて試してみました。
http://dobon.net/vb/dotnet/string/getencoding.html

試してみましたが、JIS,SJIS,EUC全てにおいて日本語が表示されません。
なんででそ...。
617デフォルトの名無しさん:2006/10/09(月) 21:11:11
>>616
そーすうp
618デフォルトの名無しさん:2006/10/09(月) 21:50:52
eml形式って何?MIME?
619デフォルトの名無しさん:2006/10/09(月) 21:56:02
ISO-8859-1らしいね?
620デフォルトの名無しさん:2006/10/09(月) 22:01:17
eml 形式 文字コード
621デフォルトの名無しさん:2006/10/09(月) 22:56:20
Jisで読んだら読めたけど
622616:2006/10/09(月) 22:56:59
>>617
ただ今帰宅しました。
ソースは職場にあるので(つっても数行ですよ)明日うpします。

>>618
「MIME」がわからなかったんで調べてみました。
>「Multipurpose Internet Mail Extensions」の略。「マイム」と読む。
>日本語など非ASCIIで表現される言語、音声、画像、動画等のファイルをメールで扱うための、ASCII文字列へのエンコード方式の規格。
>ヘッダ、ヘッダのパラメータ、本文、添付ファイルごとに、MIMEとしての扱いがRFCで規定されている。
自分はMS Outlookで使われてる拡張子emlの保存形式のことをさしてたのです。
分かりにくくてすみません。
623デフォルトの名無しさん:2006/10/09(月) 22:59:23
C#を使うと幸せになれますか?
624デフォルトの名無しさん:2006/10/09(月) 23:29:34
>>623
Javaを使うより幸せです。
625デフォルトの名無しさん:2006/10/09(月) 23:31:05
どんなところ?
いま、JavaをやめてC#に移ろうかマジで考えているんです。
よろ。
626デフォルトの名無しさん:2006/10/09(月) 23:40:39
C# を使うと、宝くじにも当たりますし、彼女も出来ます。
札束風呂に美女と一緒に入りたいのなら、迷わず C# を選ぶべきです。
627デフォルトの名無しさん:2006/10/09(月) 23:42:31
無駄なコードかかなくて済むからとっても楽。
628デフォルトの名無しさん:2006/10/09(月) 23:47:47
痒いところに手が届くところ。
629デフォルトの名無しさん:2006/10/10(火) 00:17:56
M$と心中できるところ
630デフォルトの名無しさん:2006/10/10(火) 00:33:00
C#終わったら他の言語に乗り移ればいいだけじゃん
631デフォルトの名無しさん:2006/10/10(火) 00:42:13
Vistaが流行れば勝ち言語
632デフォルトの名無しさん:2006/10/10(火) 00:59:48
だれか、mono使ってる?
633デフォルトの名無しさん:2006/10/10(火) 01:03:38
Windows Vista出たときにC#でつくってよかったと思えるはず
634デフォルトの名無しさん:2006/10/10(火) 01:48:49
>>632
一応入れてる。
635デフォルトの名無しさん:2006/10/10(火) 02:01:50
monaはネイティブコンパイラ?
636デフォルトの名無しさん:2006/10/10(火) 02:06:12
>>635

monoはネイティブコンパイラの間違いだろ?
637デフォルトの名無しさん:2006/10/10(火) 02:09:01
非ネイティブ。
てか、.NET Framework のクローンなんだし、
そりゃ .NET Framework の中間コード吐く。

>>636
わざとだろ。
638デフォルトの名無しさん:2006/10/10(火) 02:29:12
monoって、コンパイラだけ?
開発環境はついて来ないの?
639デフォルトの名無しさん:2006/10/10(火) 04:26:20
MonoDevelopってIDEがある
640デフォルトの名無しさん:2006/10/10(火) 08:08:03
SafeHandle とか CriticalHandle って何に使うの
IntPtr じゃ駄目なん
641デフォルトの名無しさん:2006/10/10(火) 08:10:59
using できる IntPtr と考えろ 便利だろ?
642デフォルトの名無しさん:2006/10/10(火) 09:17:11
すみません、教えて下さい。
VisualStudio2005 StandardEditionを持っており、
FrameWorkを同梱したインストーラを作成したいと思うのですが、
どの手順で作成すればいいのでしょうか?
(標準で作成ツールがある??)
643デフォルトの名無しさん:2006/10/10(火) 11:35:30
別スレッドからInvokeを使ってFindItemWithTextを実行したいのですがどういう風に書けば
良いのでしょうか?

delegate void WIWT();
Invoke(new WIWT(ListViewItem fiwt = listView1.FindItemWithText(ml.Groups["title"].Value)));
644デフォルトの名無しさん:2006/10/10(火) 11:45:50
Invoke(delegate(){ListViewItem fiwt = listView1.FindItemWithText(ml.Groups["title"].Value)});
645643:2006/10/10(火) 12:14:34
>>644
お返事、ありがとうございます。
色々と試してみたのですが無効な引数が含まれていますとエラーになってしまいます。

Invoke(delegate() { listView1.Focus(); });
Invoke(delegate() { });

'System.Windows.Forms.Control.Invoke(System.Delegate)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。

646デフォルトの名無しさん:2006/10/10(火) 12:44:24
>>640
あと確実にファイナライザが呼ばれる保証が付く。
継承元のCriticalFinalizerObjectだかを参照
647デフォルトの名無しさん:2006/10/10(火) 15:26:56
>>645
delegate ListViewItem WIWT();
ListViewItem fiwt = (ListViewItem)Invoke(new WIWT(delegate() { return listView1.FindItemWithText(ml.Groups["title"].Value); }));
648デフォルトの名無しさん:2006/10/10(火) 17:42:18
VSエディタのように、特定のパターンに色や書式を自動的に設定できるテキストボックスを作ろうと思っています

RichTextBoxを継承したコントロールを作り、Changeイベントが発生する度に正規表現で語句を抽出して設定することはできました
しかし、ファイルのサイズが大きくなったり、着色するパターンを増やしたりすると処理がどんどん遅くなっていきます

毎回全テキストを対象に処理しているせいだと思うのですが、編集後に適切な処理範囲を特定するアルゴリズムが思いつきません
編集した箇所を特定し、その前後のセンテンスを探してその範囲で再着色とか考えたのですが、書式が入り混じっていると処理の範囲を特定することが難しく、うまいことできません。

高機能なテキストエディタでも実装されていることが多い処理なので、何か有名なアルゴリズムがあるのでしょうか?
もしくは簡単に実装できるライブラリとかあるのでしょうか?
ご存知の方がおりましたら、御教授願います
649デフォルトの名無しさん:2006/10/10(火) 17:44:00
StatusStripをウィンドウのBottomに作りましたが、
標準では、Labelとかが左詰になってしまいます。
右詰にする方法はありませんでしょうか?

よろしくお願いします。
650デフォルトの名無しさん:2006/10/10(火) 18:26:22
>>648
表示している部分だけ描画すればいいんでは?

>>649
左端に空のLabel作ってそいつのSpringをtrue、でどうか。
651649:2006/10/10(火) 18:32:58
>>650
ありがとうございます!あっさり上手く行きました。
652648:2006/10/10(火) 18:35:40
>>650
RichTextBoxでデフォルトでクリッピングしてくれないのでしょうか?

あと、説明不足でしたが、書式の変更ロジックは描画とは別にしており、それ単体が遅いことが判明しています
そこではテキストを正規表現で検索し、書式を変更する関数を発行してRTFを修正しています
直接RTFを書き換えようかとも思いましたが、RTF自体を学習するのが大変そうなので躊躇しております
この部分がボトルネックなのですが、いい改善策が見つかりません

今いくつか案を考えていて
・RTFを直接操作する
・RTF以外で書式情報を持ち、描画時に対応する(オーナードローはC++/SDK時代でやめたかったのですが・・・)
・Code Projectなどで探す

中々思うように行きません
653643:2006/10/10(火) 22:06:51
>>647
遅くなりましたが、ありがとうございます。おかげさまで動作するようになりました。
色々と勘違いしていた事が埋まりました。
654デフォルトの名無しさん:2006/10/11(水) 09:57:36
VisualStudio2005のセットアップウィザードでFrameWork2.0を含めたインストーラを作りました。
で、実行してみると、FrameWork2.0をネットからダウンロードしようとするんですが、
これを既にダウンロードしたファイルからインストールさせるにはどうすればいいのでしょうか?
起動条件の"InstallUrl"を消してもダウンロードしようとします。
655デフォルトの名無しさん:2006/10/11(水) 12:16:14
無理じゃないの?
656デフォルトの名無しさん:2006/10/11(水) 12:22:39
1÷3 = 0.333... で端数があるか調べる方法はあるのでしょうか?
657デフォルトの名無しさん:2006/10/11(水) 12:24:32
>>654
プロジェクトのプロパティ → 必須コンポーネント → アプリケーションと同じ場所から(ry
658656:2006/10/11(水) 12:25:05
自己レス
剰余演算がありました
659デフォルトの名無しさん:2006/10/11(水) 13:24:02
ShowDialog(this)で呼び出したフォームBに条件を入力して、呼び出し元のフォームAを再描画したいです。
再描画のメソッドはフォームAにPublicとして定義してますが、フォームBのOwnerプロパティを探しても見つかりません。
なにか勘違いしているでしょうか。教えてください。
660デフォルトの名無しさん:2006/10/11(水) 13:31:09
BからAを直接触るより、Bに再描画イベントを定義して
そのイベントハンドラとしてAの再描画メソッドを登録した方がいい気がする
661654:2006/10/11(水) 14:26:39
>>657
ありがとうございます!!
662デフォルトの名無しさん:2006/10/11(水) 15:45:36
>>659
フォームB b = Owner as フォームB
b.再描画();
663デフォルトの名無しさん:2006/10/11(水) 17:17:03
画像をグレースケールに変換したいのですが、
グレーでなく青色になってしまいす。
以下のコードのどこが悪いでしょうか?
   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);
664デフォルトの名無しさん:2006/10/11(水) 17:17:42
キャストしてますか?

((フォームA)Owner).再描画();
665デフォルトの名無しさん:2006/10/11(水) 17:20:08
>>663
実際に数値表示してみてわからないようであれば、
駄目だね。

Argbって何かわかってないだろ?
666デフォルトの名無しさん:2006/10/11(水) 17:24:37
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)
667デフォルトの名無しさん:2006/10/11(水) 17:36:35
>>663
それ、できても使い物にならないくらい遅いよ
Bitmap.LockBitsとかを使って危ない感じの処理をしたほうがいいよ
668デフォルトの名無しさん:2006/10/11(水) 17:38:23
グレイスケール化なら、ImageAttributes を使った色変換で簡単にできるよ。
SDKのヘルプにサンプルがあると思うけど・・・
669659:2006/10/11(水) 17:44:22
皆さんレスありがとうございます。

>>660
オライリーのイベントの項をざっと読んでみたのですが、頭が混乱してしまいました。
私にはまだまだ精進が必要のようです。
おっしゃるようにした方がよさそうだという雰囲気は伝わってまいりますが…。

>>664さんのご指摘のように、キャストをすることによってさしあたっての動作をさせることができました。
670デフォルトの名無しさん:2006/10/11(水) 19:12:49
C#で複素数を扱う際、定番のライブラリってありますか?
671デフォルトの名無しさん:2006/10/11(水) 21:45:54
C#でFFT(高速フーリエ変換)を行っているソースまたはライブラリは存在しますか?
C,C++では結構見かけるんですが。
672デフォルトの名無しさん:2006/10/11(水) 21:55:55
C++/CLIでDLL作っちゃえばいいじゃない
673デフォルトの名無しさん:2006/10/11(水) 21:57:08
>>671
簡単に移植できるだろ。
それともMSILに最適化されたソースが欲しいって事か?
674デフォルトの名無しさん:2006/10/11(水) 21:58:57
675デフォルトの名無しさん:2006/10/11(水) 23:03:46
バージョンくらい書いとけと小一時間(ry
676デフォルトの名無しさん:2006/10/12(木) 04:32:21
>>674
卒論がこんなレベルでいいのか
677デフォルトの名無しさん:2006/10/12(木) 10:18:42
UNIX時刻UNIX時刻とは(1970-01-01 00:00:00GMT からの経過秒)を日本の現時刻にスマートに変換する方法はありますか?
逆はTimeSpanつかって書いたのですが、なんか泥臭くて。
678デフォルトの名無しさん:2006/10/12(木) 10:40:24
>>677
DateTime dt = new DateTime(1970, 1, 1).AddSeconds(雲丹刻).ToLocalTime();
679デフォルトの名無しさん:2006/10/12(木) 10:59:54
>>678
ありがとうございました。スッキリしました。
680デフォルトの名無しさん:2006/10/12(木) 17:35:46
>>676
これは卒論本体じゃない。
681デフォルトの名無しさん:2006/10/12(木) 18:01:54
>>680
とはいえ、結論を言ってるだろう?
682デフォルトの名無しさん:2006/10/12(木) 18:09:57
>>681
多分、定例発表会かなんかの発表用の資料。
OHPとかでやらなかった?
683682:2006/10/12(木) 18:14:22
よく見たら卒論の論旨らしいね。
レベル低いのか別に本研究あるのか???
684682:2006/10/12(木) 18:17:17
他のも見てみたが…


神奈川工科大学恐るべし。
685デフォルトの名無しさん:2006/10/12(木) 19:01:30
タブ画面を編集をしてて、GUIエディタでエラーが出る状態から抜けられません。
ビルドはできて正常に動作もするのですが、削除したタブにあった
ボタンなどの変数を削除するとどうしても、GUIエディタでエラーが出ます。

どうしたら直せるでしょうか?
686デフォルトの名無しさん:2006/10/12(木) 19:05:11
ちなみにエラーメッセージは次のような感じです。

デザイナの読み込み時に 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)
687デフォルトの名無しさん:2006/10/12(木) 19:24:07
あ、幾らリビルドしても駄目でしたが、
VS2005を再起動すると、このボタンとかの変数を消しても
GUIエディタでエラーが出なくなりました。
VS2005起動時に、GUIを作るので時間がかかっているのと関係ありそうですね。
688デフォルトの名無しさん:2006/10/12(木) 20:27:28
>>682
や、知ってるよ。ウチはパワポだったけど。
ただ要旨をみれば卒論の内容もおのずと知れてくると。。

まぁ、俺の卒論も修論もひどかったけどね。
理論物理なんて高尚な学問は当時の俺には無理だったよ。
今は本当に後悔してるっつーか、もう一度やらせれ。
689デフォルトの名無しさん:2006/10/12(木) 23:17:22
private void 削除ToolStripMenuItem_Click(object sender, EventArgs e)という感じで
日本語が入って驚いたのですがC#では当たり前なのでしょうか?
690デフォルトの名無しさん:2006/10/12(木) 23:19:31
>>689
あたりまえ 『ではないが』 可能
691デフォルトの名無しさん:2006/10/12(木) 23:49:16
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コントロールで子ノードにのみチェックボックスをつけることは可能でしょうか。
もしそうであるならばご教示願えれば。
693デフォルトの名無しさん:2006/10/13(金) 01:52:25
>>689
C#のソースがUnicodeになったので、
ShiftJIS 2byte目の「\」との衝突を気にしなくて済むようになったから。
694デフォルトの名無しさん:2006/10/13(金) 02:30:06
Javaで日本語が混ぜれるのを知ったときはびっくりした…。
そういう時代なのかね
695デフォルトの名無しさん:2006/10/13(金) 04:13:24
すいません。教えてください。
データグリッドを使ってファイル内容を表示したいのですが、
ループを使ってるためか、他の画面にフォーカスを当てたり、画面をクリックすると
画面が固まってしまいます。ループの間、画面を切り替えても
うまくずっと表示させる方法はありませんか?
以下がだいたいのコードです。

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();

}

よろしくお願いします。
696デフォルトの名無しさん:2006/10/13(金) 04:16:41
>>695
ループをスレッドにしたら?
697デフォルトの名無しさん:2006/10/13(金) 04:23:14
もっと簡単に済ますには、ループの中に次の一行を入れてみてはどうか。
Application.DoEvents();
698デフォルトの名無しさん:2006/10/13(金) 05:46:34
>>696 & >>697

Application.DoEvents();を入れたら、動きました!
どうもありがとう!!
699デフォルトの名無しさん:2006/10/13(金) 13:35:58
Application.DoEvents()はやや重いので、ループの中身が軽い処理の
時は、例えば5回ループ回る毎に一回DoEvents()を処理するように
したりすると速くなる事もある。
700デフォルトの名無しさん:2006/10/13(金) 14:06:15
それもそうだし、2重起動とかも気を付けろ。
701デフォルトの名無しさん:2006/10/13(金) 14:33:14
>>698
時間のかかる処理の進行状況を表示する
http://dobon.net/vb/dotnet/programing/displayprogress.html

時間のかかる処理をユーザーが停止できるようにする
http://dobon.net/vb/dotnet/programing/abortprocess.html

関連してこの辺を読むと賢くなれそう。
自分は今までDoEventsを知らなかったので常にスレッドを使ってたよ...。
.NET Framework 2.0のBackgroundWorkerは割とお手軽だた。
702デフォルトの名無しさん:2006/10/13(金) 15:08:21
>>691
英語の方はよくわかると思うが。直訳はしにくいが和約はこうだ。

戻り値
(パスがディレクトリ情報を含む場合には)パスのディレクトリ情報を格納した文字列(を返します)。
パスが空文字列または null (VB の場合には Nothing)の場合には、 null (VBの場合は Nothing)(を返します)。
パスがディレクトリ情報を含まない場合には空文字列を返します。
703デフォルトの名無しさん:2006/10/13(金) 15:10:41
>>698
重いとか軽いとかもそうだけど、>>700が言うように DoEvents でメニューだされたり
他の何かのボタン押して処理を開始されたりとかそういう心配もした方がいい。
使ってほしくないボタンはEnable=false にしておくとか。

(Multithread の場合も同じだけど)
704デフォルトの名無しさん:2006/10/13(金) 15:18:40
>>702
日本語でおk
705デフォルトの名無しさん:2006/10/13(金) 15:23:55
for (int i = 0; i < listview.items.Count; i++)
{
}

これだと毎回listview.items.Countを実行している事になり遅くなるのでしょうか?
706デフォルトの名無しさん:2006/10/13(金) 15:32:54
>>704
どの辺がわからない?
ってのはともかく、漏れはもう真面目に答えるのはやめることにする。
お前のせいだ。
707デフォルトの名無しさん:2006/10/13(金) 16:54:06
>>706
じゃあ、代わりに俺が真面目に突っ込んでおくか。
・「pathがルートディレクトリを示す場合」(nullを返す)が抜けてる。
・「path」はパラメータ名なのでpathのままの方がいい。
あとはそれでいいと思うよ。

でも、実際は(.NET2.0でしか試してないが)pathが空文字列の時は
ArgumentExceptionになるんだけどね。
708デフォルトの名無しさん:2006/10/13(金) 17:04:52
>>705
たぶんコンパイル時にインライン展開されるから問題ない
ちなみに、配列の場合はLengthプロパティで毎回アクセスした方が最適化が効いて速くなるらしい
709デフォルトの名無しさん:2006/10/13(金) 17:08:08
>>707
ルートディレクトリってすなわち空文字列じゃん。
いや事実関係はともかく、元の英文では。
710デフォルトの名無しさん:2006/10/13(金) 17:11:45
>>708
漏れは「毎回LVM_GETITEMCOUNTが送られる」に1票。
その程度でさほど遅くはならないと思うけどね。
711デフォルトの名無しさん:2006/10/13(金) 17:13:16
>>709
んなわけねーだろw
if path denotes a root directory, (if path) is the empty string , or (if path) is a null reference
だろーが。実際"C:\\"渡せばnull返ってくるし。
712デフォルトの名無しさん:2006/10/13(金) 17:22:11
ためになる突っ込み
713デフォルトの名無しさん:2006/10/13(金) 17:32:22
>>710
送ってないっぽい
714デフォルトの名無しさん:2006/10/13(金) 18:05:23
>>663
遅レスだが、画像処理なら、

http://www.codeproject.com/cs/media/csharpgraphicfilters11.asp

が参考になるな。
715デフォルトの名無しさん:2006/10/13(金) 18:39:37
bmpファイルをBitmapにロードして、Graphicsかなんかで描画する場合、
画像全体、もしくは部分を透過処理(FormのOpacityみたいな)する方法ありますか?
716デフォルトの名無しさん:2006/10/13(金) 18:51:48
>>715
http://dobon.net/vb/dotnet/graphics/hadeinimage.html
反転やグレイスケール化もColorMatrixの値を変えれば簡単に出来る。
717714:2006/10/13(金) 19:54:00
ついでに紹介、
↓のMultimedia=>GDI+
に他の画像処理の例が

http://www.codeproject.com/script/Articles/list_articles.asp?userid=6556
718デフォルトの名無しさん:2006/10/13(金) 22:30:17
>>699 >>700 >>701 >>703

ためになります!
ほんとにありがとう!
勉強します^^
719デフォルトの名無しさん:2006/10/14(土) 00:05:38
Javaを使う理由は無くなった。
C#を使おう。
みんなM$に取り込まれよう。
720デフォルトの名無しさん:2006/10/14(土) 08:12:14
ToolStripMenuを2つのListviewで共有したいと考えております。
クリックされた場合にどちらのListViewでクリックされたのか調べる方法はないのでしょうか?。

private void log_del ToolStripMenuItem_Click(object sender, EventArgs e)
{

}
721デフォルトの名無しさん:2006/10/14(土) 08:49:21
SourceControl プロパティ
722デフォルトの名無しさん:2006/10/14(土) 09:28:37
>>721
ありがとうございます。

SourceControl.Nameでコントロール名を収得する事が出来ました。
ここから更にSourceControl.Name.items.clear();という意味合いの処理を行う事は可能でしょうか?。
723デフォルトの名無しさん:2006/10/14(土) 09:41:10
>>722
SourceControlを適当な型にキャストしてやれば
724デフォルトの名無しさん:2006/10/14(土) 10:01:53
>>723
ありがとうございます。
また1つ勉強になりました。

ListView lv = (ListView)cm1.SourceControl;
lv.Items.Clear();
725デフォルトの名無しさん:2006/10/14(土) 10:28:19
wordに含まれている文字のどれががマッチすればhitとしたいのですがこういう場合は
正規表現を使うべきなのでしょうか?。

string a = "あかおあぁお";
string[] word = {"あ","い","う"};
foreach(string w in word){
if (a.IndexOf(w) > -1)
{
//hit
break;
}
};
726デフォルトの名無しさん:2006/10/14(土) 11:30:51
string.split
727デフォルトの名無しさん:2006/10/14(土) 13:36:41
>>725
wordをchar[]にしてa.IndexOfAny(word)
728デフォルトの名無しさん:2006/10/14(土) 14:17:56
RichTextBoxのUndo/Redoを回数制限無く使えるようにする方法はありますか?

自分で考えたのは見えないRichTextBoxを大量に用意する方法ですが、
さすがにこれはいけてないなと思いまして。
729デフォルトの名無しさん:2006/10/14(土) 14:50:23
>>725
中途半端な書き方をしてすいません。string[] word = {"ああ","いい","うう"};で実際は複数文字のワードなので
char[]だと使えません。
730デフォルトの名無しさん:2006/10/14(土) 15:16:32
じゃあそのコードでも正規表現でもどっちでもいいと思う。
自分の好きなほうで。
731デフォルトの名無しさん:2006/10/14(土) 21:15:25
ListViewを連想配列にできないでしょうか?
addだとindexになるのですがこれを任意のキーにしたいのです。

List<ListView> lv = new List<ListView>();
foreach (ListViewItem item in listView_list.Items)
{
lv.Add(new ListView());
}
732デフォルトの名無しさん:2006/10/14(土) 21:16:36
.Net1.1と.Net2.0の両方のバージョンのプログラムを作りたいと思っています。
初めに、VS2005C#で2.0ヴァージョンを作りました。
次に、VS.NETで1.1バージョンを作りたいのですが、
プロジェクトファイルははそのまま利用できるわけではないようです。
VS.NETでVS2005のプロジェクトをビルドする方法はありますか?
733デフォルトの名無しさん:2006/10/14(土) 21:20:37
むり。
っつか両方で動かしたいなら順番逆のが楽だろ。
734デフォルトの名無しさん:2006/10/14(土) 21:21:13
>>731
コードが意味不明だが Dictionary<TKey, TValue> があるだろ

>>732
手順を逆にしろよ
735デフォルトの名無しさん:2006/10/14(土) 21:26:21
>>731
そのコードの意味がよくわからん
Dictionary<ListViewItem, ListView> lv = new Dictionary<ListViewItem, ListViewItem>();
foreach (ListViewItem item in listView_list.Items)
{
lv.Add(item, new ListView())
}
こういうこと?
736735:2006/10/14(土) 21:29:04
×new Dictionary<ListViewItem, ListViewItem>()
○new Dictionary<ListViewItem, ListView>()
被った…
737731:2006/10/14(土) 21:59:29
>>735-736
ありがとうございます。
Dictionaryの存在をはじめて知りました・・・。

Dictionary<string, ListView> lv = new Dictionary<string, ListView>();
とする事でやりたい事が出来そうです。
738デフォルトの名無しさん:2006/10/14(土) 22:03:18
ListViewをいくつも保持して何がしたいんだろう…
739デフォルトの名無しさん:2006/10/14(土) 22:45:24
DataSet(CommboBoxなど用)で
DataSet.Clear()の後、RejectChanges()で元に戻らない。
両Methodにはそんな記述はない。バグなんだろうか?
740デフォルトの名無しさん:2006/10/14(土) 23:26:11
itemを2つのListViewに入れようとするとエラーになるのですがどうしてなのでしょうか?
入れると消えてしまうものだという認識でいいのかな・・・

ListViewItem item = new ListViewItem("abc");
this.listView1.Items.Insert(0, item);
this.listView2.Items.Insert(0, item);
741デフォルトの名無しさん:2006/10/14(土) 23:31:12
> itemを2つのListViewに
ListViewItem.ListView プロパティは何を返せばいいんだ
742740:2006/10/14(土) 23:31:28
自己レス、(ListViewItem) item.Clone()で解決しましたがどういう理由で
複製しなければならないのかかわからない
743デフォルトの名無しさん:2006/10/14(土) 23:31:33
ListViewは嫉妬深いから二股なんて絶対許せないんだよ
744740:2006/10/14(土) 23:37:31
>>741,743
消えてなくなるわけではなくて同じプロパティを共有しようとしたから怒られた
という事なのでしょうか?。ListViewItemはListViewに関連付けられた唯一無二
のアイテムという事になるという事で合っていますか?。
745デフォルトの名無しさん:2006/10/14(土) 23:46:43
同じプロパティじゃなくて同じオブジェクトな
ListViewやListViewItemがそういう仕様だから勝手に怒ってるだけ
string abc = "abc";
this.listView1.Items.Insert(0, new ListViewItem(abc));
this.listView2.Items.Insert(0, new ListViewItem(abc));
これではダメ?
746740:2006/10/15(日) 00:09:57
>>745
ありがとうございます。
実際にはsubitemもあるのでClone()とキャストで乗り切りました。
747デフォルトの名無しさん:2006/10/15(日) 02:40:22
>>739バグなんだろうか?
むしろできたらびっくりだと思うが…
748デフォルトの名無しさん:2006/10/15(日) 02:48:42
>>747
知ってて書いてる?
前回 DataSet.AcceptChanges を呼び出した以降にこのデータセットに対して行われたすべての変更をロールバックします。
749デフォルトの名無しさん:2006/10/15(日) 03:04:54
そう受け取るのは勝手だが、実際にはそういう意味ではない。
「行」に対する「変更」、が対象であって、それ以外は変更とはみなさない。

分かりにくいってか、記述があいまいだとは俺も思うよ。
でも普通に考えたらできないと思うだろ。Clearだぜ。消去だぜ。
現在の状態も含めてきれいさっぱりだ。
Clearを元に戻せるってことは、全データを保持し続けるってことだぞ。
こっちのが普通に違和感あるだろ。

ついでに言うと、行のRemoveの方も変更ではなく行自体の消去。
750デフォルトの名無しさん:2006/10/15(日) 03:10:06
>>749
いや>>748はMSDNのコピペな訳だが・・・
751デフォルトの名無しさん:2006/10/15(日) 03:11:40
いやそれはわかってる。
その記述を、そのように受け取る、という意味の「そう受け取る」だよ
いや、確かに分かりにくかったな。
752デフォルトの名無しさん:2006/10/15(日) 03:49:05
SQLでTRUNCATE TABLEするとロールバックできないのと一緒だよな
753デフォルトの名無しさん:2006/10/15(日) 09:33:12
おはようございます。
xml["key"]が存在するかどうか調べる方法はありますでしょうか?。

XmlDocument xml = new XmlDocument();
xml.Load(url);

if (xml["key"]){
//xml["key"]があれば実行する
}
754デフォルトの名無しさん:2006/10/15(日) 09:37:35
意味が良く分からんが、null かどうかで良いんじゃね?
755デフォルトの名無しさん:2006/10/15(日) 11:07:09
>>751-752
Clear()がTRUNCATEと同等なら一文記述すべきだよな>MSDN

とりあえずサンクス
RejectChanges()の使いどころが判らない似非PGですた
756デフォルトの名無しさん:2006/10/15(日) 13:32:30
>>754
nullで良かったです・・・俺の頭は悪いです・・・。
true falseみたいにnullの反対はあるのでしょうか?。
757デフォルトの名無しさん:2006/10/15(日) 13:37:53
>>756
XPathとか使わないん?
758デフォルトの名無しさん:2006/10/15(日) 13:39:31
null の反対は「null ではない」ではなかろうか
759756:2006/10/15(日) 13:50:46
if (xml["keys"]){ ← boolだと思っていたんです・・・

}
760756:2006/10/15(日) 13:52:33
ちゃんと考えてみると変数?がないからnullでboolはまた別の話ですよね
頭が悪すぎました-;
761デフォルトの名無しさん:2006/10/15(日) 13:55:20
!=null
762デフォルトの名無しさん:2006/10/15(日) 13:56:34
あともう100回と言わないが、3回くらい入門書を読んだ方がいいんじゃないか?
この調子だと、ありとあらゆることをここで質問することになりそうだ。
763デフォルトの名無しさん:2006/10/15(日) 14:06:05
!演算子はオーバーロードできるので、そういう使い方ができるようにすることは可能。
でもXmlNodeやXmlElementではそういうオーバーロードはされてないってこったね。
※まあ普通はやらないが。
764デフォルトの名無しさん:2006/10/15(日) 14:08:39
じゃなくてtrue演算子とfalse演算子だった…
765デフォルトの名無しさん:2006/10/15(日) 21:33:50

ThreadStartに渡すメソッドに、引数を渡す方法が分かりません。
func(int x)
があったとし、
ThreadStart ts = new ThreadStart(func(x))
で、エラーになります。
766デフォルトの名無しさん:2006/10/15(日) 21:38:25
>>765
new ThreadStart(func);
767デフォルトの名無しさん:2006/10/15(日) 21:40:14
って、ThreadStart の引数じゃなくて、func の引数かゴメン (^-^;;


ぶっちゃけ【ない】
非同期デリゲートあるいは ThreadPool が使用できるのなら、そっちを使うのもあり。
768デフォルトの名無しさん:2006/10/15(日) 21:41:39
ま、Thread からじゃなく、直接呼び出すのなら ts(x) でOKなんだけどな。
769デフォルトの名無しさん:2006/10/15(日) 21:41:58
デリゲートオブジェクトを明示的に作らなくてもメソッド名だけでOKにしたのは失敗だったと思う
余計にわかりにくい
770デフォルトの名無しさん:2006/10/15(日) 21:43:33
某サイトで「stringの"+"演算子による結合は処理が遅いため、回数が多い場合はStringBuilderの使用が通例」
みたいなことが書いていたので、作成中のプログラムを書き直したのですが、ほかにも「負荷軽減での常識」のようなものはありますか?
また、どれぐらい違うのかも調べたいので、精度の高い計測方法を教えていただけると助かります。
771デフォルトの名無しさん:2006/10/15(日) 21:50:14
772デフォルトの名無しさん:2006/10/15(日) 21:52:29
ボトルネック以外にそう言うのを入れるのは却って有害たり得るという前提はOK?

>>765
.NET 2.0 なら ParameterizedThreadStart 使うオーバーロードが追加されたがね。
773デフォルトの名無しさん:2006/10/15(日) 21:53:00
引数ありのThread作成って新しく出来なかったっけ?
勘違い?
774デフォルトの名無しさん:2006/10/15(日) 21:55:06
>>770
Stopwatchとか
775770:2006/10/15(日) 21:59:50
>>771
ありがとうございます
結構ありますね;;
CLRプロファイラは難しそうなので、もう少し調べてみます

>>772
実装する前に計測・比較するよう心がけます

>>774
私の環境は1.1なので使用できません;;
776デフォルトの名無しさん:2006/10/15(日) 22:08:14
>>775
>実装する前に計測・比較するよう心がけます

実装してから計測するように。で、もっとも重い部分からチューンするのが定石。
【最適化の定石は、最適化をしないこと】
777デフォルトの名無しさん:2006/10/15(日) 22:18:43
>>765
MSDNのParameterizedThreadStartで、こういう解説が有る。

>ParameterizedThreadStart デリゲートおよび Thread.Start(Object) メソッドをオーバーロードすると
>データをスレッド プロシージャに簡単に渡せるようになりますが、この方法はすべてのオブジェクトを
> Thread.Start(Object) に渡すことができるため、タイプ セーフではありません。より信頼性の高い
>方法でスレッド プロシージャにデータを渡すには、スレッド プロシージャとデータ フィールドの両方を
>ワーカー オブジェクトに格納します。詳細については、「スレッドを作成し、開始時にデータを渡す」を
>参照してください。

要するに、
class FuncClass
{
public int x;
public void func() {}
}
というクラスで、予めxに値を設定しておけば。
そのままfunc()の中で、this.x として使えるってこと。
778デフォルトの名無しさん:2006/10/15(日) 23:25:05
>>775
代わりにQueryPerformanceCounterでも使っとけ。
779デフォルトの名無しさん:2006/10/16(月) 09:19:50
Visual C# Express Edition をダウンロードするとSP2が必要といわれ、
SP2を落としてもSP2がないといわれるんですがどうしたらいいですか?
780デフォルトの名無しさん:2006/10/16(月) 09:32:16
SP2ってXPのか?だったらインストールすりゃいい
781デフォルトの名無しさん:2006/10/16(月) 16:47:47
フォームデザイナでメニューを編集したいのですが、右端は修正できますが、
作成済みのドロップダウンメニューが開かなくなりました。
どうしたらまた、開くようになりますでしょうか?
一応これでも開発はできますが、効率が良くないので何とかしたいです。
782デフォルトの名無しさん:2006/10/16(月) 16:54:05
開発環境の話?それともあなたが作りたいアプリの話?
そのへん明確にして出直してきなさい。全般的に意味不明。
783デフォルトの名無しさん:2006/10/16(月) 17:15:40
ドロップダウンメニューってなんだろう。
ComboBox の DropDownLost か、ContextMenu の間違いだと思うんだけど……
784デフォルトの名無しさん:2006/10/16(月) 17:41:03
すいません。
これは、開発環境(VS)の話です。

フォームデザイナでMenuStripを貼り付けると、メニューを追加する位置に、
"ここへ入力"と言うのができて、"ファイル(&F)"とか入力していけるのですが、
メニューの一度入力した部分を、フォームデザイナで修正しようとしても
新規に追加する右端にしか入力できなくなりました。

インターネットエクスプローラで言うと、下のようなのが入力してあった場合、
新規作成(N)でのクリックのイベントとかをフォームデザイナから入力したくても、
開けないので、入力できないと言う状態です。
("ファイル(F)|編集(E)|..."しか見れず、メニューの右端(IEではヘルプの右)
 への追加しかできない。)


ファイル(F)|編集(E)
-----------|----------
新規作成(N)|切り取り(T)
開く(O) |コピー(C)
...


以前はできたような気がするのですが、できなくなりました。
785デフォルトの名無しさん:2006/10/16(月) 17:46:36
>>784
入力したものから即座に消えていくのか。
それとも、何かした場合に消えるのか。
786デフォルトの名無しさん:2006/10/16(月) 17:55:30
>>739
試してないんだけどDataTable.Rows.Clear()だとどうなるの?
787デフォルトの名無しさん:2006/10/16(月) 18:09:08
listviewのlabeleditではやはりサブアイテムの埋め込み編集は無理なんですよね?
788781:2006/10/16(月) 18:09:27
>>785
いいえ消えるのではないです。そもそも何も入力できません。

新規にプロジェクトを作って試してみるとフォームエディタで入力できました。
今作っているのは、90画面以上有るのが、関係しているのかもしれません。
解決できそうに無いので、諦めます。
789デフォルトの名無しさん:2006/10/16(月) 18:17:23
俺はデザイナ上でmenustripの編集してると、他のコントロール等が選択できなくなることがあるな。
VS再起動すれば大概なおるけど。

つか、プロパティウインドゥから編集したほうが早くないかね。そんなに困るかな。
790781:2006/10/16(月) 19:44:34
さっきは、プロパティウィンドウからも修正できなくなったりしてました。
再起動で普通に修正できるようになりました。

メニューの場合、プロパティウィンドウのItemsから、別ウィンドウを開き、
下の項目の設定をしますが、そこでは
各項目のイベントの処理を設定できないので少々不便です。
791739:2006/10/16(月) 19:45:09
>>786
>>751-752あたりで解決って事になりました。
ちなみに>>786も戻らない。
792デフォルトの名無しさん:2006/10/16(月) 19:56:42
>>788
90画面って……。いったい何が90もあるのか。
793デフォルトの名無しさん:2006/10/16(月) 20:11:39
企業向けのシステムなら珍しく無いと思うが。
794デフォルトの名無しさん:2006/10/16(月) 20:13:58
普通はそんなもんひとつのソリューションにまとめないと思うけど。
795デフォルトの名無しさん:2006/10/16(月) 20:17:46
まさか・・・90個Formあって全部にメニューつけてるとか?
いや・・・まさかね・・・そんな事がある訳がないよね
796デフォルトの名無しさん:2006/10/16(月) 21:11:04
Webサイトで認証のあるページに自動ログインして、
それをWebbrowserに表示させたいのですがどうすればいいでしょうか?

WebRequestとCredentialでログインはできるのですが、
その後どうWebbrowserに表示させればいいのかが分かりません。
797781:2006/10/16(月) 21:11:23
作業を進めている内に、デザイナからメニューの修正もできるようになりました。
(原因不明ですが、どうもお騒がせしました。)
ちなみに、メニューがあるのは、数画面です。

VSのおかげか普通のWebシステムよりかなり簡単に画面が作れますね。
もしかすると、ASP.NET辺りだとサクサク開発ができるかも知れませんが。
798デフォルトの名無しさん:2006/10/16(月) 23:15:19
>>795
俺の「先輩」は画面の再描画用に、ラベルだけ変えた同一機能のフォームを...
799デフォルトの名無しさん:2006/10/16(月) 23:56:26
>>798
先輩は S藤って名前じゃ…
800デフォルトの名無しさん:2006/10/17(火) 17:16:37
なんでユーザーコントロールを使わないの?
801デフォルトの名無しさん:2006/10/18(水) 00:02:35
意味不明
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;@
803デフォルトの名無しさん:2006/10/18(水) 11:34:16
<supportedRuntime version="v1.1.4322" /> と書けば何とかなるような気はするが……。
1.1 を強制的に 2.0 で動かすのはよくやるが、その逆は経験なくてね。すまぬ。
804デフォルトの名無しさん:2006/10/18(水) 11:46:54
なぜSP2に上げられないか書いてみ
そこを解決してSP2にすることで、無駄な努力をしなくて済むかもよ
805デフォルトの名無しさん:2006/10/18(水) 11:51:52
Virtual PCにXP SP2入れてそこで動かせ
806デフォルトの名無しさん:2006/10/18(水) 11:56:49
>>801
1枚のフォームに90個のユーザーコントロールを貼れという意味かとおもいます。
807802:2006/10/18(水) 14:21:51
>>803-805 ありがとうございます。よく分かりませんが調べてやってみます。

>>804 そのPCでメインに使ってるソフトがSP2では動作しないためです。全てはこのうんこソフトのせいです。
808デフォルトの名無しさん:2006/10/18(水) 16:28:23
>>807
そのうんこソフトの名前は?
対処法とかパッチとか知ってる人がいるかもよ

つか、VirtualPCにXPSP1a環境作ってそのソフトだけ動かしたほうが良くね?
SP1aのサポートも間もなく終わるし、今やSP2じゃないとダメってソフトの方が多いし
809デフォルトの名無しさん:2006/10/18(水) 18:03:25
GraphicsオブジェクトがDisposeされたことを即座に知る方法はありますか?
810デフォルトの名無しさん:2006/10/18(水) 18:09:21
どういう状況だ
811デフォルトの名無しさん:2006/10/18(水) 18:15:12
一時的に作業用のBitmapオブジェクトを作成して、
それから取得したGraphicsオブジェクトを返したいのです。
別に、Bitmapオブジェクトを直接返してそのDisposeは呼び出す側に任せてもいいんですけど
812デフォルトの名無しさん:2006/10/18(水) 18:17:10
Graphicsを継承したものを作って返せばいいじゃない。
813デフォルトの名無しさん:2006/10/18(水) 18:43:03
>>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が使えるようになったのだから、がんがん使ってる。
816デフォルトの名無しさん:2006/10/18(水) 22:20:43
匿名にしないほうが読みやすいと思う。
817デフォルトの名無しさん:2006/10/18(水) 22:29:39
呼び出し側のコードを書き換えてよいなら
>GraphicsオブジェクトがDisposeされたことを即座に知る方法はありますか?
という要件自体出てこないような気がする。
818デフォルトの名無しさん:2006/10/18(水) 23:03:04
Graphicsオブジェクトはあんまり気にしなくても良いように作られてるのに。
819デフォルトの名無しさん:2006/10/19(木) 13:03:00
>>816
呼び出し元がdelegateメソッドに変数を渡すケースを想像して欲しい。
匿名でなければ、メンバ変数などのよりスコープの広い領域に変数を置かなければならなくなる。
コールバックメソッドとクロージャは違う。
820デフォルトの名無しさん:2006/10/19(木) 23:43:27
クラスつかう
821デフォルトの名無しさん:2006/10/20(金) 01:07:25
クラス内のstaticなフィールドを取得する方法はありませんか?
FieldInfoは取得OKなんですが、
Object targetなどInvokeMemberに渡す引数がよくわかりません
822デフォルトの名無しさん:2006/10/20(金) 01:27:55
using System.Reflection;
typeof(クラス名).InvokeMember("フィールド名", BindingFlags.GetField | BindingFlags.Static | BindingFlags.NonPublic, null, null, null)
823デフォルトの名無しさん:2006/10/20(金) 01:40:15
>>822
これでばっちり取れました
ありがとうございました
824デフォルトの名無しさん:2006/10/20(金) 02:19:22
質問です

C# スマクラ開発です。
3層構造でプログラムを組んでいるのですが
DB更新時にUSERIDを画面側からセットしてあげようと思っています。

結局画面側→ウェブサービス→ビジネスロジック
と、userIDを引数で渡すしかしょうがないんでしょうか?

引数でしか処理できないようだったら、今後のことを考えてユーザ情報の構造体みたいなのを1つ
引数として渡したいと思うのですが
その場合、そのclassをどこにおけばいいんだろう、と思ってしまいました。
すごい初心者な質問ですが、いい案はありますでしょうか?

825デフォルトの名無しさん:2006/10/20(金) 02:33:48
SoapHeader とか使うか、
WS-Security 辺り使うか
いっそForm認証流用してCookieで渡すか
826デフォルトの名無しさん:2006/10/20(金) 03:30:12
public class Class
{
public int Field;
}

public class Class
{
private int field;

public int Field
{
get{ return field; }
set{ field = value; }
}
}
とでは何が違いますか?
また、わざわざ後者のほうで書くメリットはありますか?
827デフォルトの名無しさん:2006/10/20(金) 04:02:03
ぶっちゃけ、それだけのコードならメリットはない

一般にプロパティのメリットとしては、
・値get時/set時に条件を設けることができる
・値setする箇所を一元化できて、値の追跡を容易にする
・えー、↓あとよろしく
828デフォルトの名無しさん:2006/10/20(金) 04:10:48
>>827
つまりわざわざ後者で書いてる場合は、後で何か処理を付け足すつもりだとか、
そういう意味でしょうか?
829デフォルトの名無しさん:2006/10/20(金) 04:22:26
んー、そう言う場合もあるだろうし、
フィールドをパブリックにするな、という
MSのデザインガイドラインがあるから、かもね。

以下、引用。

[パブリックまたは保護されたインスタンス フィールドは提供しないでください。]
パブリック フィールドとプロテクト フィールドは適切にバージョン管理されず、
またコード アクセス セキュリティ要求によって保護されません。
パブリックに参照可能なフィールドを使用する代わりにプライベート フィールドを使用し、
それをプロパティを通じて公開してください。

http://msdn2.microsoft.com/ja-jp/library/ms229057.aspx


あとオブジェクト指向がうんちゃら、とかカプセル化がかんたら、とか
あるのかもよー

詳しくは↓が教えてくれるよ
830デフォルトの名無しさん:2006/10/20(金) 04:34:42
│    _、_
│  ヽ( ,_ノ`)ノ 残念 私のおいなりさんだ
│ へノ   /
└→ ω ノ
      >

自分でやってりゃ世話ねーなー

MSのを翻訳すると、
そのクラスを継承とかしたときに、
フィールドだとそのままだけど
プロパティなら違う動作させられる、とか、
アクセス権をきちんと設定できる、とか
そういうことじゃないかなー

ごめんよー酔っぱらっててなー
べつに、そのときしか使わないっていうなら、
パブリックなフィールドでもいい気はするよねー


831デフォルトの名無しさん:2006/10/20(金) 04:42:05
>>829 >>830
では、sealedでもしてない限りプロパティを使ったほうが無難ですね。
即席プログラム以外はちゃんとプロパティ使うようにします。
詳しい解説ありがとうございました。
832デフォルトの名無しさん:2006/10/20(金) 11:46:49
データベースを使用しているのですが、
プログラム起動時、データセットにFillするのにかなり時間がかかります。

この余計な時間を無くすために、プログラムを起動する前に(例えばOSの起動時に)、
別プログラムによりFillしておいてそれを利用するなんてことはできますか。
833デフォルトの名無しさん:2006/10/20(金) 13:17:07
>>832
どう速くするかを考える前に、どうして遅いのか原因を調べないと。
いくつのテーブルからどの程度の数のレコードを読み込んでるの?
834デフォルトの名無しさん:2006/10/20(金) 18:14:01
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();

ができないのは何故でしょうか
835デフォルトの名無しさん:2006/10/20(金) 18:22:16
そういう使い方するなら配列でいいだろ
ArrayListは配列と違って要素数やインデックスを気にせずにどんどんぶち込んでいけるのがウリ
836デフォルトの名無しさん:2006/10/20(金) 19:07:40
何故かというのに答えればCapacityを増やしてもCountは増えないから
837デフォルトの名無しさん:2006/10/20(金) 21:43:48
>>834
仕様だからしようがない。ところで上のforループは、
ArrayList hoge = ArrayLisy.Repeat( null, count);
と書けるみたいだよ。
838デフォルトの名無しさん:2006/10/20(金) 23:58:25
>>835-837
thx
配列つかわないで、かわりにArrayListつかってるんだけど
あまりよろしくないのかな
839デフォルトの名無しさん:2006/10/21(土) 00:04:37
宜しくないと言うか、別モンだからな。
個数が決まってるなら配列、動的に追加するなら ArrayList/List<T>
任意のキーを使うなら Hashtable/Dictionary<TKey, TValue>
840デフォルトの名無しさん:2006/10/21(土) 00:05:29
>>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 が発生します。
何が間違ってますか。
842841:2006/10/21(土) 09:03:35
ごめん、public string f1_Text; の T が大文字なのは単にスペルミス
843デフォルトの名無しさん:2006/10/21(土) 09:07:51
>>841
コンストラクタとはなんでしょうか?
どこで呼ばれてるかわかる?
844デフォルトの名無しさん:2006/10/21(土) 09:29:47
845デフォルトの名無しさん:2006/10/21(土) 11:40:48
>>841
親 Form は、こんな処理しているんだよね……

Form child = new Form2();
child.MidParent = this;
846デフォルトの名無しさん:2006/10/21(土) 12:04:07
横から失礼>>841みたいな事やりたい場合で
どうしてもコンストラクタで処理したい場合、AppDomain経由にする?
847デフォルトの名無しさん:2006/10/21(土) 12:13:33
コンストラクタでなければならない必要性を作らない
848デフォルトの名無しさん:2006/10/21(土) 12:14:32
>>847
それはわかってるお・・・
ちょっと気になったんだお(´・ω・`)
849デフォルトの名無しさん:2006/10/21(土) 12:14:41
派生クラス作って親フォームを引数に取るコンストラクタを作る
850デフォルトの名無しさん:2006/10/21(土) 12:43:54
>>849
dですお
851デフォルトの名無しさん:2006/10/21(土) 13:31:21
つうかインスタンスできてない内にthis渡しちゃダメだろ
852デフォルトの名無しさん:2006/10/21(土) 16:19:44
日本語でクラスメンバつくって何も問題ないすかね?
UTF-8で処理してると思えば なんでもありなんだろうけど

private void アイテムチェック(string アイテムネーム)
{
int カウンタ, ID;
DateTime 今日の日付;
....
}
853デフォルトの名無しさん:2006/10/21(土) 16:21:15
失礼 途中で送信してしまった……

日本語で書いたら可読性が増すかというと微妙な気もするんですが
皆さんは日本語使ってます?
854デフォルトの名無しさん:2006/10/21(土) 16:22:05
読みやすいけどインテリセンスが使いにくくなる
855デフォルトの名無しさん:2006/10/21(土) 16:30:29
思いっきりつかってる
読みやすい
インテリセンスもそれなりに機能している
(変換が確定したところで働く)
私の場合はメリット>>デメリット

小学校から英語学習があったらなぁ・・・
856デフォルトの名無しさん:2006/10/21(土) 19:14:59
使ってるよ
日本語NGの環境で、辞書みたり考え込んじゃうようなものだったら、
この環境では日本語にしてる
857852:2006/10/21(土) 19:30:08
なるほど
しかし慣れてないと一瞬コメントに見えてしまう
色分けはされてても……

英単語を考える労力がないからいいのか
IMEの切り替えが煩雑なのも……
858デフォルトの名無しさん:2006/10/21(土) 22:49:17
>>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は何なのかということ…
859デフォルトの名無しさん:2006/10/21(土) 23:31:11
>>851
まじ?

例えば、NativeWindowなネストクラスつくるとき、
親のコンストラクタ内でNativeWindowなクラスのコンストラクタに
親のthis渡したりしたらまずい?
ハンドル渡せばいいのかな?
860デフォルトの名無しさん:2006/10/21(土) 23:37:07
親のメンバにアクセスしないように気をつければ大丈夫だろ
861デフォルトの名無しさん:2006/10/21(土) 23:38:50
>>851
そんなガイドラインあるの?
862デフォルトの名無しさん:2006/10/21(土) 23:44:22
>>859
その場合は this 渡して HandleCreated / HandleDestroyed でアタッチ/デタッチするのがベターかな。

this 渡しちゃ駄目ってんなら、IContainer.Add が使いづらいじゃないか。
863デフォルトの名無しさん:2006/10/21(土) 23:47:12
つうかコンストラクタ呼ばれた時点でインスタンスはできてるだろ
メンバは初期化されてないかもしれんが
864デフォルトの名無しさん:2006/10/22(日) 00:17:02
まあやや気持ち悪いにしても、
コンストラクタでなくてもそういう状況は当然起こるので
仕方ないってところだろ。
コンポーネント思考は、そういうなんていうか完全主義みたいな感覚とは
やや相容れないところがある。
865デフォルトの名無しさん:2006/10/22(日) 00:18:31
多分オブジェクト指向的には、コンストラクタが完了するまでは
インスタンスはできていない、というのが考え方としては正しいと思うよ。
言いたいことはわかるし、それに文句言う気もないんだけど。
866デフォルトの名無しさん:2006/10/22(日) 01:07:24
フレームワークのコードもコンストラクタで子にthis渡してるのあるよね。
867デフォルトの名無しさん:2006/10/23(月) 21:07:49
ProcessCmdKeyなりをoverrideして
押されたキーに対応する文字を得るにはどうすればいいですか。
アルファベットキーとかなら出来るけども、記号の場合、
片っ端から分岐して判別するのはあまりにもだし、
WndProcをoverrideしてWM_CHAR捕まえるればいいのかなと思ったけど、
それだとListViewの場合インクリメンタルサーチでカーソルが動いてしまう。
かといってProcessCmdKeyでreturn true;するとWM_CHARが起こらない…。
868デフォルトの名無しさん:2006/10/23(月) 21:14:42
文字を取りたいなら WM_CHAR / KeyPress 使うしかないね。
まあ色々諦めれ。
869デフォルトの名無しさん:2006/10/23(月) 21:41:25
>>863-866
その辺りの挙動は C# と C++ では異なっています。
http://msdn.microsoft.com/msdnmag/issues/04/11/CQA/

C++ 側の仕様の方が厳密で論理的だけれども、C# のも単純で悪くない。
870867:2006/10/23(月) 21:44:36
ToAscii、ToUnicodeという関数を見つけた、
使い方が良く分からん…がこれでいけるかな
871867: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;
}
872デフォルトの名無しさん:2006/10/24(火) 06:41:43
Clipboard.SetDataObjectを使って、クリップボードに文字列をコピーする処理なのですが、
Form1からだと上手くいくのに、Form1から呼び出したあるフォーム上では以下のようなエラーが出ます

'System.Threading.ThreadStateException' のハンドルされていない例外が system.windows.forms.dll で発生しました。
追加情報 : OLE が呼び出される前に、現在のスレッドが Single Thread Apartment (STA) モードに設定されていなければなりません。
Main 関数に STAThreadAttribute が設定されていることを確認してください。

Form1から呼び出したフォームでも、上手くいくものと、上記のエラーが出るものがありましたが、原因がまったくわかりません
どうすればいいんでしょうか?
873デフォルトの名無しさん:2006/10/24(火) 07:15:53
原因が全くって、ちゃんと書かれてるじゃないか原因
874デフォルトの名無しさん:2006/10/24(火) 07:32:02
でかいサイズの配列を返す関数があるんですが、
これは値を返しているのですよね?
オーバーヘッドを生じないために、ポインタのようにして返すことはできないのですか?
875872:2006/10/24(火) 07:45:48
>>873
すいません。書き方がまずかったです

エラーに対する具体的な対処がわからないんです

Main関数の上には[STAThread]がついてるんですが、これは関係ないんでしょうか?
876デフォルトの名無しさん:2006/10/24(火) 07:57:33
>>874
配列は参照型ですよ
877デフォルトの名無しさん:2006/10/24(火) 08:02:23
>>875
> 現在のスレッドが

別スレッド使ってんだろ?
Thread クラスのメンバ調べれ。
ちなみに Thread クラス使ったスレッドしかサポートできない。
そうでなきゃ Control.Invoke 使ってメインスレッドにやらす。
878デフォルトの名無しさん:2006/10/24(火) 09:28:29

プロパティ値セットが、デザイナ画面のプロパティウインドウから行われたのか、
コードから行われたのかを判定する方法はありますか?
DesignMode判定だけでは不十分なので。。
879デフォルトの名無しさん:2006/10/24(火) 09:33:02
>>878
質問には答えられない訳だが・・・
何故それが必要なのか教えてくれるか?
880デフォルトの名無しさん:2006/10/24(火) 11:20:57
>>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() では
既にコントロールのハンドルが作成された後なので駄目でした。
881デフォルトの名無しさん:2006/10/24(火) 12:50:43
VC++6では、ToolbarのGUIエディタが付いていましたが、
これは、VS2005にもありますでしょうか?

また、VC++6では、ツールバー全体で一つのbmpファイルになっていましたが
VS2005ではbmpファイル一つずつ別々に扱うのでしょうか?
882デフォルトの名無しさん:2006/10/24(火) 13:34:25
>>880
作成された後なので駄目でした。 まで読んだ。
883デフォルトの名無しさん:2006/10/24(火) 13:39:32
>>881
・ない
2005にはToolStripというものはあるが

・ImageList.AddStrip()
884デフォルトの名無しさん:2006/10/24(火) 13:41:06
ていせい
ImageList.ImageCollection.AddStrip()
885デフォルトの名無しさん:2006/10/24(火) 13:57:35
>>883-884
どうもありがとうございます。
調べてて無さそうだと思ってましたが諦めがつきました。
886デフォルトの名無しさん:2006/10/24(火) 14:06:39
>>875
たぶんで申し訳ないが。
(フォーム1から起動するフォームをフォーム2と記載する)
ヘルプ(Clipboardについて)を見る限り、Main関数と同一のスレッドでしか
使えないんじゃないのかな。つまりここで使えるのはフォーム1のみ
フォーム2は別スレッドになるから、デリゲートで処理をフォーム1に委譲するしかないと思われる。
だいたいこんな流れになるかな。こまかいところは勘弁。

class フォーム1{
public func(int a1,int a2) [
やりたい処理
}
}
// デリゲートの宣言
public delegate void delgfunc(int a1, int a2);
class フォーム2{
public aaa()
{
// デリゲートの作成
delgfunc f2func= new delgfunc(フォーム1.func);
  // 同期呼び出し
  フォーム1.Invoke(f2func, new object[] {int a1,int a2});
}
}
マルチスレッドの解説
http://www.atmarkit.co.jp/fdotnet/mthread/index/index.html
デリゲート部
http://www.atmarkit.co.jp/fdotnet/mthread/mthread02/mthread02_03.html
マルチスレッドの解説
http://codezine.jp/a/article.aspx?aid=144
デリゲート部
http://codezine.jp/a/article.aspx?aid=139#form
887デフォルトの名無しさん:2006/10/24(火) 14:23:50
質問。
MenuStripでどうしてもあのVS2005風スタイルじゃなくてWin標準の見た目でやりたくて、
MenuStripのRenderModeをSystemにしたんだけど、あのダサさは何とかならないん?
やっぱり自分でRenderer作らなきゃいけない?

ちなみにMainMenu使えっていうのはなし。理由はMainMenuだと動かせないから。
888デフォルトの名無しさん:2006/10/24(火) 14:41:50
Systemでそんなにださいか?

でもRenderer作るなんてそんなに大変じゃないでしょう。
ProfessionalRendererあたりから派生させるんだっけ?
889デフォルトの名無しさん:2006/10/24(火) 14:45:10
あれだ、Professionalのアイテムの高さでSystemやられると妙というかなんというか
とりあえずSystemRendererあたりいぢってみる。
890デフォルトの名無しさん:2006/10/24(火) 14:45:49
あれだ、Professionalのアイテムの高さでSystemやられると妙というかなんというか
とりあえずSystemRendererあたりいぢってみる。
891879:2006/10/24(火) 14:46:46
>>880
時間割いてもらってありがとう。
プロパティの間違った使い方だと思う。
892デフォルトの名無しさん:2006/10/24(火) 14:46:59
二重スマンorz
893デフォルトの名無しさん:2006/10/24(火) 15:03:30
>>886
Form1でForm2のインスタンス生成していれば同一スレッド。
一応二つForm作って試したけど両方とも正常に動く。

>>877の書き込みが正しい。
894887:2006/10/24(火) 15:56:45
とりあえずFormのLoadイベントハンドラで再帰的にToolStripMenuItemの高さを18に、ToolStripSeparatorの高さを3に(両方ともAutoSizeをfalseにして)することで暫定的に対処。
895886:2006/10/24(火) 16:17:21
>>893
新規にソース打って確認したけど、
確かに、勝手に脳内変換してたもより。
コントロール毎に別スレッドになる物と思ってた。

以上迷惑かけた方 m(_ _)m
896デフォルトの名無しさん:2006/10/24(火) 17:39:59
>>895
知ってるだろうけど、別スレッドだろうがApartmentState.STAが定義されてれば動くおw
897872: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
898デフォルトの名無しさん:2006/10/24(火) 18:56:07
>>897
Threadを使用したのは理由があるんじゃないか?

Thread t = new Thread(new ThreadStart(ShowForm));
t.SetApartmentState(ApartmentState.STA);
t.Start();
899デフォルトの名無しさん:2006/10/24(火) 19:03:06
>>897
>>896がうまくいくか試して見れ
900デフォルトの名無しさん:2006/10/24(火) 19:54:52
メソッドを引数に同じ型を取るようにしてstaticにした場合
何か(パフォーマンスとか)利点とかはありますか

class Pattern{
public bool IsMatch(string target){}
}

class Pattern{
public static bool IsMatch(Pattern pattern, string target){}
}
901デフォルトの名無しさん:2006/10/24(火) 20:30:57
パフォーマンス上のメリットはほとんどないでしょ
と思ったら、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++;
}

なんで?
902デフォルトの名無しさん:2006/10/24(火) 20:55:19
class Sample
{
private long Method1( long l )
{
 return l++;
}

private static long Method2(Sample sample, long l)
{
 return l++;
}
}

これだと両者の差は誤差程度になったよ
インスタンスメソッドの呼び出しは暗に関数にインスタンス参照を渡してるんじゃないのかな
903デフォルトの名無しさん:2006/10/24(火) 21:26:36
この手のテストは難しいよ。最適化無しやデバッグビルドでは馬鹿正直にコンパイルされるうえ、
デバッグ用の仕込みのために妙に遅くなることがある。
一方最適化すると、コンパイル時と実行時に最適化がかかって、呼んだはずのメソッドがインライン化されたり、
処理が省略されたりすることがある。
904デフォルトの名無しさん:2006/10/24(火) 22:10:38
nLiteなどで、プログレスバーのイメージを通常の物と
違うイメージにしている物を見たのですが、あれはどのようにすれば
実現可能ですか?
905デフォルトの名無しさん:2006/10/24(火) 22:16:49
ユーザー側でWindowsのVisualStyleを変えてるだけじゃないの
906872:2006/10/24(火) 22:18:01
>>898,899
すいません
横着してここにはThreadクラスで書きましたが、実際には引数を渡したかったのでThreadPoolを使用していたので、試すことが出来ません

一応引数を無くし、Threadクラスで呼び出してみましたが、なぜかApartmentStateをSTAした場合はもちろん、
未設定でも>>872のようなエラーは出ず、正常に動作しました

マルチスレッドといってもThreadPoolでのみ失敗するようです
907デフォルトの名無しさん:2006/10/24(火) 23:38:22
>>905
VisualStyleを変えるってなんだ…?
よくわからないので勉強してきます orz
908デフォルトの名無しさん:2006/10/25(水) 06:06:11
>>906
横着 マルチスレッド ThreadPool ApartmentState
これ全部ググっておく事を勧める
909デフォルトの名無しさん:2006/10/25(水) 11:47:37
>>908
次の条件に一致する情報は見つかりませんでした。

検索キーワード:横着 マルチスレッド ThreadPool ApartmentState
910デフォルトの名無しさん:2006/10/25(水) 12:36:53
>>909
まず日本語の勉強から始めようか
911872:2006/10/25(水) 19:24:10
>>910
>>972>>909です

私は高校生なので、昼にPCは触れません
912デフォルトの名無しさん:2006/10/25(水) 19:37:31
972 に期待

ま、ThreadPool 内のスレッドが MTA ってだけなんだけどな。
913デフォルトの名無しさん:2006/10/25(水) 20:08:37
で、横着 ってなによ
914デフォルトの名無しさん:2006/10/25(水) 20:39:14
915872:2006/10/25(水) 20:49:09
>>912
アンカミスりましたorz

なるほど・・・おかげでスッキリしました
916デフォルトの名無しさん:2006/10/25(水) 21:29:17
System.Drawing.Brushes や System.Drawing.SystemBrushes のメンバって
使った後に Dispose せずに放置していいの?
917デフォルトの名無しさん:2006/10/25(水) 21:52:35
おk
918デフォルトの名無しさん:2006/10/25(水) 23:23:01

 .NETの学習は時間の無駄です
919デフォルトの名無しさん:2006/10/25(水) 23:43:15

 .NETの学習は時間の無駄です
920デフォルトの名無しさん:2006/10/26(木) 00:14:41

 .NETの学習は時間の無駄です
921デフォルトの名無しさん:2006/10/26(木) 00:29:57

 .NETの学習は時間の無駄です
922デフォルトの名無しさん:2006/10/26(木) 00:36:43

 .NETの学習は時間の無駄です
923デフォルトの名無しさん:2006/10/26(木) 01:28:30
.NETぬ学習ぱ時問の無馼です
924デフォルトの名無しさん:2006/10/26(木) 14:55:31
FolderBrowserDialogを拡張して現在選択されているパスを表示させたり、
ユーザのパス文字列入力でツリーを開いたりしたいのですが、FolderBrowserDialogは継承できないためフォームを置くことすらできません。
何か良い方法はありませんか?
925デフォルトの名無しさん:2006/10/26(木) 14:57:14
API
926デフォルトの名無しさん:2006/10/26(木) 17:31:31
FolderBrowserDialogを逆コンパイルして改造
927デフォルトの名無しさん:2006/10/26(木) 17:50:46
しますた
928デフォルトの名無しさん:2006/10/26(木) 18:19:39
SHBrowseForFolderとかのラッパーでしょ?どうせ。

結構簡単にできそうだけど面倒くさそう
カスタマイズできるやつ作って公開してクレクレ
929924:2006/10/26(木) 19:42:07
>>925-928
ありがとうございます。
SHBrowseForFolderとかラップとかでググったらこんなのを見つけました。
ttp://support.microsoft.com/default.aspx?scid=kb;ja;JP306285

C#だと検索ワードとして#が無視されるのをどうにかして欲しいですね。。。
930デフォルトの名無しさん:2006/10/26(木) 20:40:48
関数がインライン展開されてるかどうか確かめる方法を教えてください。
931デフォルトの名無しさん:2006/10/26(木) 20:53:03
>>930
逆汗
932デフォルトの名無しさん:2006/10/26(木) 21:17:22
メソッドはコンパイル時にインライン展開されるわけじゃないよ
インライン展開されるのはJITコンパイルの時
だから逆汗しても無駄
933デフォルトの名無しさん:2006/10/26(木) 21:52:45
ではどうしたらいいのでしょうか?
934デフォルトの名無しさん:2006/10/26(木) 21:58:56
諦めればいいよ
935デフォルトの名無しさん:2006/10/26(木) 22:02:43
気にしなくていいよ
たぶんJITコンパイラのほうが賢いよ
936デフォルトの名無しさん:2006/10/27(金) 01:17:32
XML に変な文字が含まれていると、XmlDocument.Load 時にその箇所で例外が出てしまって DOM が作れないんですが、
これを回避する良い方法はありませんか?

一応、今現在の↓みたいな xml だと、IE でも途中までしか表示されませんが……これをスキップするにはどうすればいいのかな、と。
ttp://b.hatena.ne.jp/hotentry?mode=rss
937デフォルトの名無しさん:2006/10/27(金) 07:20:34
それは「XML に似た何か」であって XML ではないので XmlDocument や XmlReader では扱えない。
そのドキュメントに限って言えば一旦 Encoding クラス使って String にしてから StringReader 経由で読めばいいと思うけど。
938デフォルトの名無しさん:2006/10/27(金) 07:35:48
>>936
どの文字かまで追ってないけどXMLの禁則文字が入ってるだけじゃね?
><&は< > &に置き換え

あぁ、タグ名かも知れんな・・・
"XML 禁則"でぐぐってくだちぃ
939デフォルトの名無しさん:2006/10/27(金) 07:52:31
> がテキストノードに現れるのは構わないぞ、と。

ちなみにこのドキュメントは一バイト化けてて正しい UTF-8 じゃなくなってる。
940デフォルトの名無しさん:2006/10/27(金) 08:01:12
>>939
そうだったけかw
嘘情報申し訳ない
941デフォルトの名無しさん:2006/10/27(金) 08:40:15
>>936
無理だと思う

DOM経由で書き込めば禁則文字は勝手に変換してくれるんじゃなかったっけ?
なぜにそんな事態がおきるの?
942デフォルトの名無しさん:2006/10/27(金) 09:56:59
>>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ができているかは知らない。
943デフォルトの名無しさん:2006/10/27(金) 10:06:03
自作のDLLを使おうとすると .exeファイルと同じフォルダに入れないと駄目みたいですが,
別のフォルダにおいたDLLファイルを利用するにはどうしたらいいのですか?

- hoge.exe (ファイル)
+ dll (フォルダ)
 - hoge1.dll (ファイル)
 - hoge2.dll (ファイル)
みたいな感じにしたいのですが
944デフォルトの名無しさん:2006/10/27(金) 10:15:57
945943:2006/10/27(金) 11:18:38
>>944
できました.ありがとうございます.
946デフォルトの名無しさん:2006/10/27(金) 14:24:45
.NETでは、MFCのDDV_関数のように、ダイアログで入力した値のチェックを
行う方法が有りますでしょうか?

調べた感じでは、文字数は、MaxLengthで制限できるようですが、
数値などをチェックする方法は特別に用意はされておらず、
KeyPressイベントとかでソースコードでチェックする必要が有りそうです。
947デフォルトの名無しさん:2006/10/27(金) 17:21:13
コントロールによってはそれぞれで制限することは可能
ただし組み合わせで制限するならコードでやる。

数値チェックってMaskedTextBoxでやってるの?
またNumericUpDownを使う手もあるが
948デフォルトの名無しさん:2006/10/27(金) 17:24:12
TextChangedイベントは?
949デフォルトの名無しさん:2006/10/27(金) 17:33:01
MFCのDDV_関数ってどんな感じなんだ?

Validating イベントみたいなものか?
950949:2006/10/27(金) 17:42:47
失礼。
これだなMFCのDDV_関数は

ttp://msdn2.microsoft.com/ja-jp/library/k48w5b23.aspx

ないので作れが正解でしょうか?
おしえてエロイ人!
951946:2006/10/27(金) 20:59:24
一応調べたら次のサイト辺りが有りました。後、@ITに少し。

TextBoxに数字しか入力できないようにする
http://dobon.net/vb/dotnet/control/numerictextbox.html
TextBoxにペースト(貼り付け)できないようにする
http://dobon.net/vb/dotnet/control/disablepaste.html
TextBoxに入力されたパスワード文字をマスクする
http://dobon.net/vb/dotnet/control/tbpasswordchar.html
ComboBoxのテキストをユーザーが編集できないようにする
http://dobon.net/vb/dotnet/control/comboboxstyle.html

とりあえず普通に、イベントでチェックするみたいです。
共通で使えるツール的なクラスを作ることもできますけど(自分はそうする)。

DDV_関数の一覧はこのへんかな
http://msdn2.microsoft.com/ja-jp/library/hs9c81ss.aspx
952デフォルトの名無しさん:2006/10/27(金) 23:20:27
文法の質問なんですが、例外が複数種類発生する可能性があって、
その対処が同じな場合、もっと簡略的な書き方ってないですか?

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;
}
953デフォルトの名無しさん:2006/10/27(金) 23:22:24
無いな
954952:2006/10/27(金) 23:31:36
>>953
レスありがd。
ないですか...
955デフォルトの名無しさん:2006/10/27(金) 23:33:22
try
{
 i = int.Parse(s);
}
catch ( Exception e )
{
 if( e is FormatException || e is OverflowException )
  i = 100;
 else
  throw e;
}


たぶん単なるサンプルとしてだしたんだと思うけど
TryParse ってのあるよ。一応。
956952:2006/10/28(土) 00:50:15
>>955
おっなるほど。
参考になります。

int.Parseはいつもは
i = intTryParse(s)?int.Parse(s):100;
ってしてます。お気使いありがd。
957952:2006/10/28(土) 02:11:30
int.TryPaeseの使い方違うじゃん俺(´・ω・`)
なに勘違いしてんだか...
958デフォルトの名無しさん:2006/10/28(土) 02:19:05
おまえそれはおかしいw
959デフォルトの名無しさん:2006/10/28(土) 07:06:59
>>955
× throw e;
○ throw;
960デフォルトの名無しさん:2006/10/28(土) 11:24:29
>>929
"C#"
961デフォルトの名無しさん:2006/10/28(土) 11:40:55
キーボードから1以上26 以下の整数nを入力し,n 番目のアルファベッ
ト(大文字)を画面表示するプログラムを作成したいんですけど・・・
。例えば,「1」が入力された場合には「A」を,「10」が入力された場
合には「J」を画面に表示するようなプログラムで。あと、0 以下,あ
るいは27 以上の数字が入力された場合には再入力できるようにしたい
んです。ただし,if やswitch を用いて26 種類の分岐を作ってはいけ
ないんですけど、まったくわからなくて・・・誰か教えてくれませんか
???
962デフォルトの名無しさん:2006/10/28(土) 11:45:10
ここは宿題スレじゃないぜ。
ていうかそんなのも思いつかないのなら辞めちまえ。
963デフォルトの名無しさん:2006/10/28(土) 11:45:51
A~Zを配列に入れると、添え字i=0でAが参照できます。
あとは考えれ
964デフォルトの名無しさん:2006/10/28(土) 11:51:06
"A~Z"[n - 1]
965デフォルトの名無しさん:2006/10/28(土) 12:02:37
>>964
ASCIIコードならそれでいいけど、C#の文字コードはUNIコードだから
マルチバイトじゃないかい?
966デフォルトの名無しさん:2006/10/28(土) 12:05:10
>>955
それ禁じ手
MSDNにも書いてあるよ
967デフォルトの名無しさん:2006/10/28(土) 12:07:01
Graphic, Image, Bitmap間の変換で、
Graphic←Image←Bitmapはメソッドありましたが、
その逆とか、ビットマップのピクセルへのアクセス、
加工をする方法か、解説したページがあれば教えてください。
968デフォルトの名無しさん:2006/10/28(土) 12:10:19
Image→Bitmapはキャストするだけ
Graphics→Image/Bitmapはそもそも両者は全くの別物だから考え方がおかしい
ピクセルへのアクセスはLockBitsでぐぐれ
969デフォルトの名無しさん:2006/10/28(土) 12:13:22
>>968
ありがとうございます
970デフォルトの名無しさん:2006/10/28(土) 14:22:40
>>967
>加工をする方法か、解説したページがあれば教えてください。

>>714,717

971デフォルトの名無しさん:2006/10/28(土) 22:57:00
>>965
ああそうだな
で何がまずいんだ?
972デフォルトの名無しさん:2006/10/28(土) 23:23:50
>>971
だから1文字が2バイト
973デフォルトの名無しさん:2006/10/28(土) 23:25:26
だから2バイトだと何がまずいんだよw
974デフォルトの名無しさん:2006/10/28(土) 23:27:02
>>838
C#2.0以降ならArrayListよりList<T>が推奨とさ。
975初心者:2006/10/28(土) 23:37:48
どちら様教えて、VC++プログラミングするときにひとつのボタン押して
他の.exeファイル実行できるようにどうすればいいですか??
976デフォルトの名無しさん:2006/10/28(土) 23:38:53
>>975
ここはC#スレって事を教えてあげる
977デフォルトの名無しさん:2006/10/28(土) 23:43:56
マルチか・・・
978どちら様:2006/10/29(日) 03:37:25
>>975
やだ
979デフォルトの名無しさん:2006/10/29(日) 04:24:28
>>975
次スレを立ててくれたら考えとく
980デフォルトの名無しさん:2006/10/29(日) 06:52:06
【ネット】XBOX360開発キット無償公開2【やろうぜ】
http://game10.2ch.net/test/read.cgi/ghard/1162063002/
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バイトになると文字列になるからワンクッション入れないと。
余分なものが入るから学校での学習向けじゃない。
試験が筆記試験で動かなくていいんなら関係ないけど。
984デフォルトの名無しさん:2006/10/29(日) 11:02:39
>>983
へー ( ´∀`)
985デフォルトの名無しさん:2006/10/29(日) 12:23:00
>>983
おまえはいったい何を言ってる??
986デフォルトの名無しさん:2006/10/29(日) 12:25:47
>>983
学生は手を動かせ
987デフォルトの名無しさん:2006/10/29(日) 12:32:59
>>714のを参考に、2枚の画像を比較しようとしたんですが、
2つを同時にLockしようとしたらすでにロックされていると出たんで、
Lockbitは同時にはひとつしかできないってことですよね?
988デフォルトの名無しさん:2006/10/29(日) 14:02:29
>>983
C言語でもやっとけ
989デフォルトの名無しさん:2006/10/29(日) 14:55:11
>>983 がC#の文字列とCの文字列の違いが分かってなくて、C#のcharが1バイトだと思い込んでいることは分かった。
990987: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データも同じなんでしょうか。
991デフォルトの名無しさん:2006/10/29(日) 15:18:38
(char)('@' + n) でもOK?
992デフォルトの名無しさん:2006/10/29(日) 18:23:16
>>990
ソースがないとなんとも

pictureBox1.Image = (Image)Start;
これはコピーは作られないよ。参照を渡してるだけで実体は同一になる。
後でStart = newImage;とかやってるんじゃないの
993987: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作って更新した場合、
使われなくなったものは自動的に破棄されるんでしょうか?
994デフォルトの名無しさん:2006/10/30(月) 02:33:14
いずれは破棄されるが、任意の時点で破棄したいなら Dispose
995デフォルトの名無しさん:2006/10/30(月) 11:48:42
APIやDirectXより比較的簡単に解像度を変更する方法を教えてください

ぐぐっても見つかりませんでしたが;
996デフォルトの名無しさん:2006/10/30(月) 14:49:02
ぐぐって探すのは API や DirectX のほうが簡単だよ
997デフォルトの名無しさん:2006/10/30(月) 15:00:38
列挙体のNoneってどうんな感じで定義すればよいですかぁ
Allは他のをorでつなげればいいんだけんども
998デフォルトの名無しさん:2006/10/30(月) 15:10:53
0
999デフォルトの名無しさん:2006/10/30(月) 15:12:40
ども
1000デフォルトの名無しさん:2006/10/30(月) 15:48:25
(   ´    ・    ω    ・    `    )
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。