C♯相談室 Part17

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

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


過去スレは>>2-5あたり。


関連リンク
http://onigiri.s3.xrea.com:8080/csharp/index.php?%5B%5B%A5%EA%A5%F3%A5%AF%5D%5D

ソース置き場.NET
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&rm=10
2名無しさん♯:04/07/31 23:34
>>1
乙かれ
新すれオメ
武術の神と言われる亀仙人より強い天津飯でも歯が立たないドラムを瞬殺した悟空が8年修行して、
同じ位の強さのピッコロさんと二人がかりでやっと倒したラディッツと匹敵する戦闘力を持つ栽培マンを
あっさり倒した天津飯・ピッコロ等が束になっても敵わないナッパを悠々倒した悟空の2倍以上強いベジータが
かなりパワーアップしても全く相手にならない強さのリクームを一撃で倒した悟空が更にパワーアップしても、
それを半分の力で殺せるフリーザをあっという間にバラバラにして消した未来のトランクスでさえ仲間と束になっても
敵わない人造人間17・18号に匹敵する強さを持った神コロ様でも敵わない程に
生体エネルギーを吸って強くなったセルと互角の16号を大きく越える17号吸収態セルを子供扱い出来る
精神と時の部屋パワーアップ後のベジータと随分差がある悟空でも勝てない完全体セルを
一方的に痛めつけることが出来るブチ切れ悟飯をも越えたベジータが命を賭けても倒せなかった魔人ブウが
更に凶悪になったブウと互角以上の戦いをしたゴテンクスよりも強くなった悟飯でも全く歯が立たない
ゴテンクス&ピッコロ吸収ブウが更に悟飯を吸収して強化しても全く歯が立たないC#が最強。
6デフォルトの名無しさん:04/08/01 21:35
うめあげ
>>5
つまりC# = ベジットである、と。
>>7
Cω = 亀仙人の亀
インデクサでアクセスする配列のサイズを得るには
どうすればいいのよ?
だれかC#でVS.netのエディタのコピー作ってくれYO!
>>9
意味が分からないが単に配列のサイズを知りたいと解釈すると Array.Length
>>12
5万は高いだろ。しかも海外製だから設定ウィンドウも英語だろうし・・・
これはどうも質問者本人が気付いていないことも多いようですが、
質問の文章に第三者が問題を理解するのに十分な情報が含まれていないとことがしばしばあります.
このような状況で求められる極限的な推理を,私はしばしば「メタ推理」と読んでいます.

>>9
もうとてもとてもいい感じに足りてません.
C#の2chブラウザって、なにとなにですか?
twintail / twintail2 / Castella
>>15
なにとなにって質問の仕方からして
始めからtwintailとCastellaだって
知ってたんじゃねーか?
189:04/08/02 01:58
んじゃ、こんな感じで。

class indexer{
private int array[];
public int this[int i]{
get{ return array[i]; }
set{ array[i] = value; }
}
}

このとき、外部からarrayのサイズを知るにはどうしたらオケ?
サイズを取得するにはそのためのコードを
インデクサ側でそのつど用意する必要があるとか。

// class indexer内
public int GetArraySize(){
return array.Length;
}

// 外部クラス
indexer idxr;

int arraySize = idxr.GetArraySize();
>>18
インデクサは結局配列を模することができるただの関数にほぼ
等しいんだからサイズなんて概念が存在しない配列のようにも
作りうるわけで、ということは用意する必要があるのではないかと
思うのだけれども、どうだろうか。
2016:04/08/02 11:09
>>16
漏れがわざわざ比較表(仮仮仮)までいって見てきた
別アセンブリから指定のクラスをロードするのは
Assembly.LoadFrom().GetType().InvokeMember()
でコンストラクタ呼び出しという手順で良いんでしたっけ?
22デフォルトの名無しさん:04/08/02 16:02
Graphics gForm = Graphics.FromHwnd(pictureBox1.Handle);
IntPtr formHDC = gForm.GetHdc();
Bitmap bmp = new Bitmap(@"D:\1.JPG");
Graphics gBmp = Graphics.FromImage(bmp);
IntPtr bmpHDC = gBmp.GetHdc();
API.BitBlt(formHDC, 0, 0, Width, Height, bmpHDC, 0, 0, 0x00CC0020);
gBmp.ReleaseHdc(bmpHDC);gForm.ReleaseHdc(formHDC);

Picturebox1に描画されないのはどこがいけないからなのですか?
2322:04/08/02 16:06
追加
public class API
{
/// BitBlt
[DllImport("gdi32.dll", ExactSpelling=true, SetLastError=true)]
public static extern long BitBlt(IntPtr hObject, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hObjSource, int nXSrc, int nYSrc, int dwRop);
}
Width=200 ; Height=200;
>>22
BitBlt の戻り値はどうなってますか?
あとこれ描画されても(タイミング次第で)すぐ消えるとおもいますが、
その辺は承知ですよね。
2522:04/08/02 16:33
戻り値を見たら、「9222812402616107009」って出てました。
>あとこれ描画されても(タイミング次第で)すぐ消えるとおもいますが
知らなかったです。
以前、VB6でAPIを使ってたのですがC#になってからはよくわかりません。
C#でうまく描画されるサンプルを見せていただけないでしょうか?
>C#でうまく描画されるサンプルを見せていただけないでしょうか?
必ず API でやる必要があるのですか?

HDC を経由しなくて良いなら、
任意の時点で pictureBox1.BackgroundImage = new Bitmap(@"D:\1.JPG"); するとか、
Paintイベントのハンドラでe.Graphics.DrawImage(bmp, 0, 0, Width, Height); とか、
簡単なんですけど。
2724=26:04/08/02 17:18
API でやる場合には、ソース側がBitmap から Graphics.FromImage して GetHDC したものだとダメなようで、
(多分 HDC が転送先と互換でないため)

IntPtr hdcForm = e.Graphics.GetHdc();
IntPtr hdcBmp = API.CreateCompatibleDC(hdcForm);
IntPtr hbmpOld = API.SelectObject(hdcBmp, bmp.GetHbitmap());
int result = API.BitBlt(hdcForm, 0, 0, 100, 100, hdcBmp, 0, 0, 0x00CC0020);
API.DeleteObject( API.SelectObject(hdcBmp, hbmpOld) );
e.Graphics.ReleaseHdc(hdcForm);

てな感じにC/C++でありがちなコードにすると上手く動くようです。
2818:04/08/02 17:20
>>19
なるほど、そういったアクセサはやっぱり別途必要になるんだ。
答えてくれた人たち、ありがとう。
2924=26:04/08/02 17:20
APIの定義はこんな感じです。
public class API
{
/// BitBlt
[DllImport("gdi32.dll", ExactSpelling=true, SetLastError=true)]
public static extern Int32 BitBlt(IntPtr hdcDst, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);

/// SelectObject
[DllImport("gdi32.dll", ExactSpelling=true, SetLastError=true)]
public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hObject);

/// CreateCompatibleDC
[DllImport("gdi32.dll", ExactSpelling=true, SetLastError=true)]
public static extern IntPtr CreateCompatibleDC(IntPtr hdc);

/// DeleteDC
[DllImport("gdi32.dll", ExactSpelling=true, SetLastError=true)]
public static extern Int32 DeleteDC(IntPtr hdc);

[DllImport("gdi32.dll")]
public static extern bool DeleteObject(IntPtr hObject);
}
>>25
VBのPictureBoxは、それ自体がバッファリングしてるから表示できるんじゃなかったっけ?
ペトロ著、C#で作るプログラミングウィンドウズみてみれ
32デフォルトの名無しさん:04/08/02 17:53
ペドロって、ジャングルの王者ターちゃんでしたっけ?
きもいよ
ASP.NETでIISにログオンするときの質問です。IE5.0だとユーザID、パスワードを入れなければ
ログオンできないのですが、IE6.0にしたら何も入れない状態で3回繰り返すとログオンできてし
まいます。ただIEのバージョンを変えただけなのですが、原因が全く分かりません。同じような
経験ある方いませんでしょうか?ソース内にブレイクポイントを入れているのですが、ログオン
はIISが勝手にやってる処理のようです。
VC#において、Fontオブジェクトが等幅日本語フォントであるか調べ、
異なる場合はシステムデフォルトの等幅日本語フォントに差し替えたいのですが、
どのようにすればいいのでしょう?
MSDNがJavaDocに比べて読みづらいので困ってます・・・。
JavaDocって読みやすいんだ
漏れもJavaDocの方が読みやすいなぁ
派生クラスのドキュメントに、親クラスのメンバが混じってるのが気に入らないんだけど、
差分だけ表示させる方法ってあったっけ?
2.0まで待て
> 派生クラスのドキュメントに、親クラスのメンバが混じってるのが気に入らないんだけど、
たしかに気に入らない
41デフォルトの名無しさん:04/08/04 02:18
ボタン押したらTextの全テキストを選択するようにしたんだけど、選択できない。
private void button1_Click(object sender, System.EventArgs e)
{
this.textBox2.SelectAll();
}

間違えようの無いソースなんだけど・・・。
ちなみに、正規表現検索やったら、ちゃんとマッチするインデックスと長さは判定できてた。
なのに、選択だけできない。なして?
>>41
ボタンを押し終わった時のフォーカスの位置を確認すると…。

private void button1_Click(object sender, System.EventArgs e)
{
this.textBox2.Focus();
this.textBox2.SelectAll();
}

とか。
4341:04/08/04 02:48
>>42
図星ですた。
ありがとうございました。
Focusちゅうか描画の問題ですよね.蛇足すまんそ
private void button1_Click(object sender, System.EventArgs e)
{
this.textBox2.SelectAll();
this.textBox2.Focus();
}
46デフォルトの名無しさん:04/08/04 13:48
Image オブジェクトから一部を取り出して別の Image オブジェクトを
作成したいのですが,どのようにやればよいのでしょうか?

例えば 100 x 100 のサイズの Image オブジェクトから
x1:30, y1:30, x2:10, x2:10 の範囲を別の Image オブジェクトとして
作成したい,といった事です.

よろしくお願いします.
>>46
サイズだけ指定したBitmapオブジェクトを作る。
そのBitmapオブジェクトからGraphics.FromImageでGraphicsオブジェクトを得る。
Graphics.DrawImageで描画する。
4846:04/08/04 14:34
>>47
ありがとうございます.多謝.
49デフォルトの名無しさん:04/08/04 15:41
参照型の変数についてです。

Image a;
Image b;

a = new Bitmap(...);
b = new Bitmap(...);
a = b;

とやると a と b の内容は同じになりますよね?
(同じオブジェクトを参照する事になるから)

この時 a の内容を書きかえると b も同時に書きかわってしまいますよね?

a に b の内容をコピーしたい時は

a = new Bitmap(b) のようにする必要があると思うのですが
参照型の変数はこのように値をコピーする必要があるときは
代入だけではコピーにならないという事だと思うのですが
私の理解はあっていますか?
DeepCopy と ShallowCopy の違いは基本。

今しがた、2005beta1落としてきて使ってみてる。
2.0の売りはテンプレートなんだな。
「a=null;」してもbはnullにならない
52デフォルトの名無しさん:04/08/04 20:23
どうしてならないのでしょうか?
51に「何を今更」と思ったら>>52みたいな人もいるのな。

参照型ってのは、要はメモリアドレスを指してるわけだ。
実際のオブジェクトが0x00004000からのメモリに入ってるとする。
参照型の変数aはこの0x00004000を保持してるわけだ。
b=aとやると、0x00004000がコピーされてbも0x00004000になる。
a=nullとすると、aが保持してる0x00004000はクリアされる。
でもbの0x00004000という数字は当然そのまま。
実際のオブジェクトにタッチできるってことだ。
nullの代入は実際のオブジェクトを破棄するんではなくて参照(の情報)を破棄するだけ、という結論だな。

まあきわめて単純化した話だがね。
ま、ぶっちゃけて言えば

「参照型の変数」ってのは「どのオブジェクトを指しているか」っていう情報を変数に格納しているんだ

だから「a = b」と書けば「b がどれを指しているか」が a にコピーされるし、
「a = null」と書けば「null = 何も指していない」が a にコピーされる

a が何を指しているかなんて b は知ったこっちゃ無いから、
「a = null」しても b は null にならない

がきっとFA
>>49のように聞いてくるやつで、>>51をみて当たり前と思うやつは
ちゃんと意味を理解できてる。
>>52のように思うやつは、言葉として参照型はどうのと覚えていても、
意味は理解していない。
Javaの方がわかりやすいし優れているな
>905
言ってみて、冗談だよーとかいってみる余裕がおまえには足りない.
いってみる

一瞬の空気を読む

反応する

これがいろんな場面で必要なのよ.
こんなの言ってみても兄弟で別に問題ないぞ
C++のfriendみたいなことC#で何かありませんか?
internal使えって言われそうだけど、もうちょっと相手のクラスをしっかり限定できるのが欲しいのです。
>>58
設計を見直してみて、他のやり方で実現できないか探ってみてはいかがでしょう。
>>58
というかinternalは必然的に相手のクラスを限定できるわけで。
>>59
できたらとっくにやってるところ…。
publicで全てのメソッドを公開してるソースが既にあって
それを呼び出すクラスは自分の担当外じゃないので触れられないし、
でも、少しでもスコープを狭くしたいところ…
> 自分の担当外じゃないので

ならば、君の担当だ。
63デフォルトの名無しさん:04/08/05 11:41
private ArrayList picPaths;
private string tt="";

...
private void button1_Click(object sender, System.EventArgs e)
{
tt=picPaths[1].ToString(); // ○
bool mainflg=true;
while(mainflg)
{
tt=picPaths[1].ToString();   // ×

×の所で、「オブジェクト参照がオブジェクトインスタンスに設定されていません。」
って出てきて終わってしまいます。
ちょうどwhileの所が境目みたいなのですが何が原因か分かりません。
分かる方教えてください。
>>63
これだけじゃわかんない。
とりあえずpicPathsとpicPaths[1]はどっちがnullなの?
whileのなかでpicPathsかpicPaths[1]がnullになるような操作してない?
whileを使う以上picPaths[1].ToString()が一回しか実行されて無いとも思えないけど。
6563:04/08/05 11:54
private void Form3_Load(object sender, System.EventArgs e)
{
picPaths = new ArrayList();
GetAllFiles( Dir, ".jpg", ref picPaths);
}
private static void GetAllFiles(string folder, string searchPattern, ref ArrayList files)
{
string[] fs = System.IO.Directory.GetFiles(folder, searchPattern);
files.AddRange(fs);
}

追加分です。
ちなみに、上の○の所はうまく読込めてました。
NULLになるような事はしてないです。
6663:04/08/05 12:23
自己解決?しました。
別のGraphicsオブジェクトのところで不具合があって、それが今回の×の所で
エラーが起こってたようでした。
タブコントロールに配置したRichTextBoxの中身が
変更されていなければそのままタブを閉じて、
変更されていればAskSaveで処理をさせたいと思っています。
ビルド出来るんですが、処理をしようとすると
if(rtb.Text != "")
の部分でエラーが出てしまいます。
初歩的で申し訳ございませんが、ご指南頂けますでしょうか?


private void mnuFileClose_click (object sender, System.EventArgs e)
{
 TabPage tb = this.tabControl1.SelectedTab;
 RichTextBox rtb = tb.Tag as RichTextBox;
 if(rtb.Text != "")
 {
  if(!AskSave()) return;
 }
 this.tabControl1.TabPages.Remove( tb );
}
>>67
で、どういうエラーなのかね。



NullReferenceのように思えるけど。
rtbがnullになってないか?
>>68
すいません、NullReferenceでした。
どうすれば解決できますでしょうか?
>>69
まず最初に確認しなければいけないのは、
tb.Tag に、ちゃんと RichTextBox インスタンスへの参照が入っているかどうか
かな?
>>70
tb.Tagは未定義になってました。
tb自体はちゃんと参照できてたみたいです。
>>71
……じゃあTagにRichTextBoxの参照を入れてなかったんだろう。
自動的に入るとか思ってないよな?
>>72
ごめんなさい、その辺りのことがまだよく理解できてません。
どういう風に入れるんですか?
>>73
いやまあそのまんまなんだが。
TabPage.ControlsにRichTextBoxをAddした時に、そのTabPageのTagにもそのRichTextBoxを代入する。

むしろTabPage.ControlsのなかでRichTextBoxの位置が決まってるなら
実際にRichTextBoxを使う時(上記のコードのような)に
RichTextBox rtb = tb.Controls[0] as RichTextBox;
みたいに決めうちでやってやるとか。
75デフォルトの名無しさん:04/08/05 14:07
PictureBox にKeyDownイベントを追加させるにはどうしたら良いでしょうか?
>>74
あぁ!そういうことですね!
解りました、有難うございます。
7770:04/08/05 14:27
>>76
>>74 と同じ事を言ったつもりが、全然違う意味で伝わっちゃったようでごめんなさいでし

訂正『tb.Tag に、ちゃんと RichTextBox インスタンスへの参照が入ってい“た”かどうか』
>>75
public class KeyOperatablePictureBox : PictureBox {
   public new event KeyEventHandler KeyDown;
   protected override bool ProcessCmdKey(ref Message m, Keys key) {
      if (this.KeyDown != null) {
         this.KeyDown(this, new KeyEventArgs(key));
         return true;
      }
      return base.ProcessCmdKey(ref m, key);
   }
}

こんなのを使えばKeyDownを使えるけど……。
もともとユーザ側の操作ではフォーカスを設定できないPictureBoxにKeyDownイベントはどうかなぁ。
PictureBoxにDrag & Dropとかだったらやりたい。
てゆうかイベントつけて欲しい。
>>79
へ? 普通にできるけど?
81デフォルトの名無しさん:04/08/05 17:11
プロパティの雷マークの頁でコードを挿入したあと、
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
MessageBox.Show("aa");
}
で実行して、フォーム上をキーで押しても反応しません。
何か抜けてるのでしょうか?
>>81
KeyDownは基本的にフォーカスを持ってるコントロールで発生する。
Formが子コントロールを持つ場合基本的にFormにフォーカスはいかない。

子コントロールを持つFormでForm自身にKeyDown/Up/Pressを受け取らせる場合Form.KeyPreviewをtrueにする。
>>81
フォームにコントロールが貼ってあるんでない?
KeyPreviewをtrueにしたら反応しました。
85デフォルトの名無しさん:04/08/05 18:39
アクセスレベルについてです

1つの exe を作成する中でいろいろなクラスを作成すると思いますが
それらのクラスのうちそのクラスの中でのみ使いたいメンバには private を
ふってそれ以外はすべて internal にしようかと思っているのですが
public を internal に変更するデメリットはありますか?

その exe 内で定義されるメンバはその exe 以外のところから一切アクセス
させたくないので public を internal にすればよいのか? という単純な
発想からなのですがいまいちこのあたりが理解できていせん...
OnPaintとPaintイベントはどう違うのでしょうか?
どちらも再描画の際に呼び出されると本には載っていたのですが。
>>85
1つのexeで完結させるというその設計の上ではデメリットはないんじゃないの。

>>86
Paintイベントは外部からも利用できる
85 じゃないけど、外部から有用な部分を DLL として切り離すのと、
そのまま EXE の中に押し込めておくの、どちらがいいんでしょうか

切り離すとすると、DLL と EXE の比が 9:1 くらいになるんですが
>>86
(Windows から等の)描画要求があると、まず Control.OnPaint が呼び出されます。
OnPaint のデフォルトの処理内容は、
・まず Paint イベントを発生させる
・イベントがハンドルされなかった場合(ハンドラがない、e.cancel = true など) には、規定の描画処理を行う
というようなものです。
そうだったんだ・・・
>88
なにを重視するかによるんでは?
管理しやすさ、他での使いやすさ、実行性能などなど
おりゃDLL派
>>91
現物は、今新し(ry スレでさっき上げたヤツ
自作スクリプトの実行部分が DLL にあって、EXE はファイルを読み込んで渡すだけ
スクリプト本体は文字列で渡せるし、うまくやれば別アプリに組み込めると思う
ただ、ファイルを読み込む部分は別のアプリに組み込む必要が無い

って感じ
二次元配列のソートってありますか?
それ、どういう並べ方?
一次元でソートして、二次元に並べなおすじゃだめなん?
95デフォルトの名無しさん:04/08/06 12:35
「C#のインデクサには、staticキーワードが付けられません。」
だそうですが、何故なのでしょうか?
インデクサの宣言は……
例) public int this[int index] {}

あたりまえだ
staticなインデクサってのはいささか訳がわからなさすぎるな。
「こんなクラスならstaticインデクサがあっても」みたいな例が思いつかん。
なんかあるかな?
>>97
Color 構造体で named color をインデクサで扱えると便利だと思う。
NamedColors とかプロパティでコレクション返すのでも良いけど(コレ追加して欲しいぞ)。
>>98
いや、むしろそういうのは Color.ToColor(string name) とかで処理した方が良いと思う
インデクサはあくまで配列のインデックス、ついでに連想配列もできますってだけで、
便利だからって乱用しちゃ、何れ痛い目を見るんじゃないかな?
100レス直前に悪いんだけどさ
インデクサって臭そうだよな
>>99
>Color.ToColor(string name) とかで・・・
それが既にあることは常識だと思ってマスタ(FromKnownColor / FromName)・・。
サーバ側では Color ってあんまり使わないからマイナーな存在?
漏れが言ってるのは、named color 全体を普通の配列として扱えるようにするようなケース。

「なんかあるかな」を受けてちょっと考えただけなので、あまり強く主張はしません。
>>101
FromName とかってなかったっけ?
ライブラリ手元にあるか分からん

だけど、名前付Color と Color は違うから、
あえてやるとすると NamedColor コレクションを作成する方が良いと思う

それならば NamedColor["blue"] とかしっくりくるし、
自分で名前付けることだって NamedColor["MainFormColor"] とかに代入すれば良いから便利だし
>>94
レスありがとう。
指定した列の順番で、行がソートされる感じ。
自分で作るしかない?
>>103
それは2次元とは言わないw
とりあえず汎用性に欠けるから、そういうメソッドは無いと思う
自分で作った方が早いよ
>>102
もちつけ。
FromName 等があることも、コレクションが良さげなことも既出
>>103
Array.Sort()の恩恵にすがるなら……

struct SORT_TBL{
public int pos; // テーブルの位置
public string atai; // 値
};
みたいなのを作って、
SORT_TBL tbl[] = new SORT_TBL[なんとかー];して、
作ったtbl[]に二次元テーブルの行位置と判定に使う値をぶちこんで、
tbl[]をArray.Sortするのだが、このときSortに引き渡すIComparer継承クラスのCompareは
パラメータのobjectをSORT_TBLにキャストしたときの内部値ataiで判定して、
ソートが終わったらtbl[]を先頭から読んでソート後の位置を調べつつ、新しいテーブルを作成。
仕上げに、新しいテーブルの内容を元のテーブルにCopyTo()して出来上がり。

自己満足気味に書いてみたが、たとえばこういう回りくどい方法もあるw
string型の "2004/08/06" を
DateTime型に変換するにはどうすればよいのでしょうか?
DateTime.Parse
DateTime DT = DateTime.Parse( "2004/08/06");
ありがとうございます。できました。
11093:04/08/06 17:10
>>106
構造体の配列のソートってどうやんの?
>>110
Array.Sortの解説を読もうな。
11293:04/08/06 18:43
>>111
わかった。読んでみる。
113デフォルトの名無しさん:04/08/06 19:21
インスタンスを作る際に、staticコンストラクタを使用する方法ってありますか?
>>113
>  インスタンスを作る際に、staticコンストラクタを使用する方法ってありますか?

で、何がしたいんだ?
115最凶VB厨房:04/08/06 19:31
直接staticコンストラクタは呼び出せないはず。
他のクラスからFormのコントロールにどうやってアクセスすればよいのでしょうか?
その form への参照を何か変数(例えば a )に入れておいて、
a.comboBox とかそんな感じで。
コントロール、というかフィールドに直接アクセスするのは良くないと思います。
C#的オブジェクト指向としての最善はイベントで通知かな。
他のクラスはFormを知る必要が無くなる。
120 ◆Niwa2ChL9M :04/08/08 02:57
すみません。初心者並の質問ですが教えてください。

C#(aspx)でWebファイルを作っているのですが、
DOSのhoge.batにキックしてさせたら、そのまま放置されてしまいます。
終了コード・戻り値等を使って、再度aspxに戻して処理させることは可能でしょうか。

言語にあまり携わっていないため、Web等でC言語の特性などを調べてみましたが、
Main()を使うのでは無いかというのは何となくわかってますが、使い方がよくわかっていません。

教えて頂けますでしょうか。
なにをしたいのかよくわからない。
DOSスレに行った方が良いかもしれない。
122デフォルトの名無しさん:04/08/08 13:50
ある拡張子に関連付けされてるアプリケーション名を取得するにはどうしたらいいですか?
>>124
>>125
サンクス!
C#の初歩的な練習としてテトリスでも作ってみようと思うのですが、
参考になるサイトってないですか?
>>127
聞いちゃったら練習にならんだろう
>>127
"the game of wahoo!"
スレッドからビットマップに描画を行い、
フォームのピクチャボックスのPaintイベントでそのビットマップを表示する、という処理を行っています。
しかし、「そのオブジェクトは使われています」というエラーが起こることがあります。
おそらく、ビットマップの読み込み中に、スレッド側がビットマップに対し書き込みを行っているからではないかと思っています。
そこでビットマップが読み込まれている時には書き込みを止めるようにしたいのですが、よい知恵はないでしょうか?
MutexやMonitorを使ってみようと思うのですが、
スレッドが描画を行う際には
Graphics g = Graphics.FromImage(bitmap);
とグラフィックオブジェクトを取得しているのですが
その後はその取得したグラフィックオブジェクトを使って描画してます。
なので、グラフィックオブジェクトを取得しようとビットマップにアクセスしたときに同期を取ることは出来るのですが、
その後の描画の時に、ピクチャボックスがビットマップを読み込んでいるかどうかわかりません。
>>130
BeginInvoke
132デフォルトの名無しさん:04/08/08 22:36
ATLでCOMを作成し、それをC#から呼んでいます。
ATLをVSで開いて、実行ファイルでC#のEXEを指定し、
デバッグを始めたのですが、ブレイクがかかりません。

なぜなのでしょうか?
当該ATLが実際に動いていることは確認しています。
あと、両方ともDEBUGビルドしています。

お願いします。
全角英字が来たぞ...
134132:04/08/08 23:16
すいません。
どうも、ATLで作成したDLLじゃなくて、
interop.xxx.dllと言うのが作られてこっちが呼ばれてるみたいです。

もう少し調べてみます。
>>134
RCWとCCW
136デフォルトの名無しさん:04/08/09 13:07
string型,StringBuilder型の変数のアドレスを
int型かIntPtr型にするにはどうすればよろしいですか?
>>136
Marshal.StringToCoTaskMemAutoなど。
>>132
VS.Net のプロジェクトの定義のデバッグのとこかどっかで、
「ネイティブデバッグを行う」みたいなのがあるから、チェック入れといて。
>>130
ワーカスレッドの方で invoke 使って、メイン(UI)スレッド側で pixtureBox の
プロパティにセットする関数を実行させるか、bitmap を共有したいなら同期
オブジェクトを使って、

Monitor.Enter(bitmap)
 ワーカスレッド側なら bitmap に対する画処理/
 UIスレッド側なら Paint イベントの処理
Monitor.Leave(bitmap)
等するか。
>130
クリティカルセクションでも使ってやればシンプルでいいんでないの?
141136:04/08/09 13:48
>>137
ありがとう。
コピー先のアドレスではなく
Cでいうところの
char s[256];
char* p = &s[0];
みたいなものはないですか?
>>141
GCについて理解してこい、と。
いやそれ以前の問題か?

GCは独自にメモリを管理する。
不要になったメモリは破棄し、アクセスしやすいように並べ替える。
つまりメモリアドレスを取得してもその直後にその数値が意味をなさなくなる可能性もあるってことだ。
もちろんManagedの範囲内ではそれは全く問題ないようにデザインされてる。

で、何がしたいの?
>>141
Unsafeでも使えば?
144136:04/08/09 14:03
>>142
親切にしてよ。
具体的にはこんなこと

[StructLayout(LayoutKind.Sequential)]
public struct BROWSEINFO
{

[MarshalAs(UnmanagedType.LPTStr)]
public string lParam;
//public int lParam;

}

BROWSEINFO bi = new BROWSEINFO();
bi.lParam = sbFolder.ToString();
本当は
sbFolderのint型のアドレスにしたいのだが。

コールバックの
BffCallbackProc(IntPtr hwnd, uint uMsg, int lParam, int lpData)
int lpData には正しいアドレスが入るわけだが、カッコ悪い。

>>141
byte [] 経由で標準のマーシャラーに任せればいいんじゃない?
>>142 話の流れに関係ないじゃん、意味無く荒らすだけなら氏ね低脳
147141=136:04/08/09 14:53
>>145
具体的にはどうするの?

FolderBrowserDialogではなく、SHBrowseForFolderを使って、
最初に初期フォルダを指定して(lParam)そのフォルダを選択させたい。
IMallocインタフェースとBFFCALLBACKコールバックはなんとかなって、
動作していますが、文字列のアドレスがC#ではすっきりしないので
質問したわけです。
じつはC#のマーシャリングはかなり柔軟なので、LParam型をstringに指定できたりする。
コールバックメソッドのdataもstringとして宣言してやれば文字列のやりとりは解決。
>>147
141見たんで、byte [] のポインタを fixed で取って使えばいいじゃん、
と思ったんだけど、StringBuilder を渡すのが目的ってことですか。

単純に
[MarshalAs(UnmanagedType.LPTStr) ] lParam;
じゃなくて
[MarshalAs(UnmanagedType.AsAny) ] object lParam;
にすればいいんじゃない?

コールバックの方も同様に宣言しとけば、object で取れるから、
StringBuilder 渡したなら as StringBuilder するなりできるし。
150141=136:04/08/09 15:47
>>148,149
Win32APIの定義にこだわるなら 137さんのようにするか、
149さんが言われるようにlParamを動的な型にすれば、
しっくりします。納得しました。
レス下さった方、ありがとう。


151132:04/08/09 18:32
>>138
デバッガのタイプ=ネイティブのみ
でできました。

ありがとうございます。
すごく初歩的な質問で恐縮なんですが

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.Dispose();
}

とやるとエラーが出てしまいます。
これがFormのPaintイベントならDispose()を実行してもエラーは出ません。
PaintEventArgsには一体何が格納されているのでしょうか?
153130:04/08/09 20:18
>>131
>>139-140
ありがとうございました。
教えて頂いたことを参考にもう一度やってみます。
>>152
一般論だけど、自分で作ったものじゃないものを勝手に Dispose しちゃダメ。
キミが作った Graphics を、誰かのコードに「ここに描いてね」ってことで渡したら、
勝手に Dispose されたりしたら嫌でしょ。
Winnanpみたいにスキンを使いたいんですが、どうしたらいいでしょうか?
>154
アメリカならドキュメントに消しちゃ駄目と書いてなかったといってMSを訴えられるかもしれないがここは日本です.
>>155
SetRegion
158デフォルトの名無しさん:04/08/10 17:45
HSPとC#で同じフォントサイズで文字を描画させたら違うのはなぜですか?
ちなみにHSPではフォントの大きさをドット数に比例した論理サイズで指定してあります。
159デフォルトの名無しさん:04/08/10 20:06
突然なんですが……
他人の漢字で関数を書くという奴を見て激しく憤慨していたのですが、
こんどは自分が、最近数学的なライブラリーを作っていて激しくギリシャ文字を使いたい衝動に駆られます
使ってもいいですか(汗

世界中がマルチバイト対応の時代がこないかな……
そんなことを思った人挙手(^^)/
>>159
他人を激しく憤慨させるつもりがあるなら書けば?
点を描画する関数はないのでしょうか?
162デフォルトの名無しさん:04/08/10 20:51
unmanaged コードで作成した DLL を C# から呼びたいとおもっています.
通常の関数であれば問題なく呼べているのですが,コールバックを受け取る方法
がわかりません.

コールバックはどのように受けとればよいんでしょうか?
>>161
Graphics.FillRectangleで代用?

>>162
そのコールバック関数と返値・仮引数を同じにしたデリゲート。
>>163
今はDrawRectangleでwidthとheightを1にして代用していますが、
かなり大量に描画する予定なので出来ればもっと簡単に処理出来るものはないかと思ったのですが・・・
165最凶VB厨房:04/08/10 22:41
BitmapクラスにはSetPixelというのもあるが、だめか?
>>164
Win32APIのSetPixel関数かな。
どのみちあんまり「簡単に」とは行かないような気がするけど。

Bitmapオブジェクトが取得できるならBitmap.SetPixelがベストだけれど。
C++のようなローカル変数のconstはどう書けばよいのでしょうか?

private void timer1_Tick(object sender, System.EventArgs e)
{
   string s = text1.text; // <- constにしたい。
// これ以降sを変更したくない。

おねがいします。
168デフォルトの名無しさん:04/08/11 11:39
C# で
PathAddBackslash()
PathRemoveBackslash()
に相当するものはありますか?
>>168
たぶん無いと思うけど、それくらいすぐ実装できそうだな。
170168:04/08/11 12:28
>>169
そうですか。ありがとう。
>>167
readonlyじゃね?

…と思ったらローカル変数に使えなかったスマン。
>>167
private void timer1_Tick(object sender, System.EventArgs e)
{
   string s = text1.text; // <- constにしたい。
// これ以降sを変更したくない。

   if(s != text1.text){
    MessageBox.Show("変更するなつってんだろゴルァ!!!!!!!!");
   }
}
>>172
text1.textを変更しただけなのに文句言うなよ。
Monitorを使ってて不思議に思ったのですが

private void button1_Click(object sender, System.EventArgs e)
{
Monitor.Enter(bitmap);
//テキトーなビットマップをロック
textBox1.Text = "適当に";
}

のイベントを起こした後、
Monitor.Exitを実行していないのに

private button2_Click(object sender, System.EventArgs e)
{
Monitor.Enter(bitmap);
//同じビットマップでロックを取得
textBox1.Text = "これは表示されないはずなのに";
}

↑これが実行されてしまいます。
スレッドとイベントなら同期が取れるのですが・・・。
>>174
同一スレッドでEnterしてるからじゃない?
>>175
ありがとうございます。
MSDN読んでもピンとこなかったで助かりました。
>>174
Monitor も良いけど、
っていうか過去に Monitor つかえみたいなこと書いた気がするけど、C# なら
Monitor.Enter(obj)
try { ... }
finally { Monitor.Exit(obj); }
の簡易文法であるところの
lock(obj) { ... } も便利ですよ。
まあ、>>174みたいにブロックじゃない形で使いたい場合は仕方ないでしょ。
ブロックにできるのであれば普通lock使うけどね。

しかし一番の問題は、>>174がMonitorの用途を誤解しているようだと言う事…
まあ理解したんならいいんだけどね。
>>168
この流れで質問だけど、単純に『パス』って言った場合、最後に \ は付くの付かないの?
FontDialog にヒラギノ系フォントを表示させたいのですが
何かよい方法はないでしょうか

FontDialog
Show何タラプロパティ
Allow何タラプロパティ

すべて試してみたのですがだめでした。
>>179
質問の意味はよくわからんが、とりあえずPathクラスの各メソッドが返す文字列にバックスラッシュはつかんな。
>>158
GDIとGDI+では表示が異なるので仕様
while(true){
try{}
catch{}
finally{}
}

とリリースモードで実行するとfinally節が実行されません。
しかし
int i= 0;
while(i < 1)
とやると(iの値は変化しないので事実上無限ループ)
リリースモードでも問題なくfinally節が実行されます。
なぜwhile(true)だとfinallyが実行されないんでしょうか?
>183

optimizer が『while の中には実行しなければならないものは無い』と判断して
丸ごと消してしまったのでは?
>>183
finally節が実行されないことをどうやって確かめたの?
>>184
それはVisualStudioの設定なんでしょうか?

>>185
実際にはfinally節にMessageBoxを仕掛けて確かめました。

SharpDevelopだと同様のことをやってもちゃんとfinallyが実行されるので
やはりVisualStudioのリリースモードが何かをやってれるのだと思うのですが
>186

MessageBox 仕掛けてるのに無視ってのは optimize されたにしてもマズいよなぁ。

# もしかして optimizer の bug ?
>186
VC++6.0のときだけれど、同じようなのありますよ.
アセンブラで見てもコードがない.
デバッグだとある。最適化全部消して解決しました.
Optimiseなんて信用してません.
ループを抜ける条件が無い時点でそんなコードを書いたり実行する機会は無いし、
どうでもいい。
>>188
やっぱり仕様なんですかね・・・
割り切ることにします。
情報ありがとうございました。
>>186
具体的にどんなコードなの?
ILDASMで見てもやっぱりfinally句はなくなってる?
VisualStudioとSharpDevelopで違うってのが釈然としないなあ。
コンパイルってどっちも結局CSCでやってんでしょ?
193デフォルトの名無しさん:04/08/13 10:36
.GetHashCode()で得られる値というのは
何に活用するものなのでしょうか?

Object.GetHashCodeのヘルプをみれ。
>>192
くっついてるコンパイルオプションの問題じゃね?
うーんでも最適化関連で生成コードが変わるようなオプションて
一つしかないような気がするしね…
例えばSharpDevelopがリリースビルドでも最適化を有効にしてないとかなら
分かるけど、そんなことはないような気がするし…
参照設定したDLLをEXEに埋め込む方法ってあるの?
>>197
基本的にない。
>>197
自己解凍実行形式の圧縮ファイルを作れば
そ、それは…いいのかそれで?
これで、いいのだ!!!
EXEと一緒に配布するDLLを
他のプログラムからは参照させないようにしたいんだけど、できますか??
DLLファイルを分割して配布し実行時に結合してDLLとして使用する.
できるかしらんが駄目?
別に分割せんでも暗号化しておいて実行時に複号とかのほうが。
まあ分割だろうが圧縮だろうが暗号化だろうが技術的には可能だけど、
C#でやることじゃあない気がするな。
205デフォルトの名無しさん:04/08/13 22:06
頭の中でもぼんやりとしているので曖昧にしか書けないのですが,

全く同じ関数名の関数を持つ,2つのクラスがあります.

これらを利用するコードはある条件をみて,
その2つのクラスのどちらの関数を利用できるかを判断したいと思っています.

例えば ClassTestNo1, ClassTestNo2 とあり,
それらの中でそれぞれ MethodTest という関数が定義されている時に,

それを呼び出すコード は

ClassTest.MethodTest();

のように呼び出したいのです.で,なんらかの条件による判断で,
ClassTest が ClassTestNo1 なのか ClassTestNo2 なのかは
動的に決定したい,という事が行ないたいです.ただし,
ClassTestNo1, ClassTestNo2 は Static で定義されているので,
利用する前に条件を見て,new すればいい,という事はできません.

なにかアドバイスを頂けないでしょうか?
>>205
設計をやり直す。


てのはともかくとして、動的に判断する以上利用者側が判断用のboolをもってるんだろう?
ClassTest.MethodTest(bool)
にすればいいんでないの?
>>205
僕も最近それに近い事をしているので、どぞ
こんな雰囲気のコードでいけると思います。
object hoge = new ... ;
if( hoge.GetType().GetMethod( "MethodTest" ) == null )
{
ClassTestNo1();
}
else
{
ClassTestNo2();
}
とか、こんな感じ
GetMethod の戻り値オブジェクトにイカしたメソッドがいっぱいあります。
>>207の続き

ん、205の用件とちょっとズレてる気がする
これは MethodTsetがあるかどうかで、呼び出す関数を決めてますが、
適当に変えてください、肝はGetMethod()なので、これでも十分と思ので。
>>208
うーん、うーむむGetMethodが肝なのか…?
>>205
これでOK?

if (ClassTest is ClassTestNo1)
{
}

マーカーインターフェースを利用する際によくやる手だけれども。
てか、呼び出す静的メソッドを切換えたいだけだろ?
ClassTestからアクセスできる形で条件に合わせてデリゲートでも作っとくか、
呼び出された時点で条件判断して呼び出すメソッド変えたらいいんじゃないの?

2種類しかないなら、まあ後者のやり方でもいいかな。
デリゲート使う方が柔軟ではあるけど。
デザインパターン的には大体こんな感じかな?

interface IClassTest { void MethodTest(); }
class ClassTestNo1 : IClassTest { 略 }
class ClassTestNo2 : IClassTest { 略 }

class ClassTest{
 public static IClassTest classTest;
 public static void MethodTest(){
  classTest.MethodTest();
 }
}


//呼び出し側
ClassTest.classTest = new ClassTestNo1();
ClassTest.MethodTest();
ClassTest.classTest = new ClassTestNo2();
ClassTest.MethodTest();
213デフォルトの名無しさん:04/08/15 00:35
Cだと、入力された文字がアルファベットかどうか調べる場合

char c;
if ( (c <= 'a' & c >= 'z') == (c <= 'A' && c >= 'Z') )
{
  処理;
}

みたいな感じで切り分けられましたが、C#の場合はどうすればいいんでしょうか?
正規表現を使うしかないんでしょうか。。
>>213
charにキャストしてやるとか。
215213:04/08/15 00:44
>>214
stringの中だけで考えていたんですが、charを見てみると
IsLetter()のような便利な関数を発見しました。
ありがとうございます。
>>213
お前はヘルプというものを読んだことがあるか?
char.IsLetter(c);
うーん回答がずれてる希ガス
てかcharにキャストって出来ないと思うが…

charでは取得できてるんじゃないの?
その場合は、char.IsLetterとかでできんかいな?

あとどうでもいいが、>>213の条件はいったいなんだ?
ちなみにCでも普通は文字コードを直接条件に書くようなことはしない。
>>215
.NETはUnicodeだということを忘れずに。
Char.IsLetterは、例えばギリシャ文字のアルファベットもtrueを返す。
すまん>>217>>214に対してね。
書いてるうちに進んでた…
つーかお前らがこの条件見てなんとも思わないのが不思議だ

> if ( (c <= 'a' & c >= 'z') == (c <= 'A' && c >= 'Z') )

これどういう意味よ?
>>217が突っ込み済み
>>221
ごめん、確かに
俺一生懸命この条件の真の意図を考えてたよ
プログラムが実行されているディレクトリを調べるにはどうしたらいいですか?
実行されているディレクトリとは、
カレントディレクトリ、EXEのあるフォルダ
どっち?
それともアプリケーションベース?
>EXEのあるフォルダ
です。
>>222
おれも、実はすっごいひねくれてる条件で、
正しく動くのかと検証しかけたんだが…
> (c <= 'a' & c >= 'z')
&は誤植としてもこの時点でありえね〜って結論になった…
System.WIndows.Forms.Application.ExecutablePathだったかそんなの。
あ、フォルダだったか、それなら、System.IO.Pathだったか使って加工してくれ。
加工せんでも直接取れるプロパティもあったかも、ちょっと失念。
Application.StartupPathだね。
見つかりました。
有難うございます。
231過去の自分:04/08/15 08:32
過ちを繰り返す未来の自分へ

.NET Frameworkがインストールできなくなったら
MSサポート技術情報英語版824643
http://support.microsoft.com/default.aspx?scid=kb;EN-US;824643
232デフォルトの名無しさん:04/08/15 09:16
.NET2003のC#のフォームエディタでフォームをデザインしたけど
それがどのようなプログラミングで再現されているのか知りたいのですが方法はありますか?

たとえばJavaでいえば
jPanel1.addComponent(jTextField1);
jTextField1.setText("abcdef");
こんな感じの奴です。
おそらくInitializeComponent();あたりが怪しいと思うのですが・・・
>>232
InitializeComponent() のなかにある。
何が分からない?
234デフォルトの名無しさん:04/08/15 09:54
>>233
.NET2003のソースエディタでは非表示になっていたから分かりませんでした。
今、別のテキストエディタで見たらちゃんと記載されてました。
天然モノでつか?
本物のバカ再来だな。
>>236
自己紹介板のリンク張った方が良いですか?
> それがどのようなプログラミングで再現されているのか

天然丸出しの文章だね、プッ
結局Genericsを正式につかえるようになるのはいつ頃になりそうなんでしょう?
Whidbeyは2005年半ばになるらしいけれど、それまでは待ちたくない...
どこかのサイトで.NET1.1でもC#用としてだけならGenerics使えるコンパイラがあるとかいてあったようなきもしましたが.
複数行可能・初期状態まっさらの TextBox に行を追加するのって
TextBox.AppendText( text + "\n") で良いんだよな?

何で表示されないんだろ?
\nだけでよかったっけ?
\r\nにしたらどうなる?
242240:04/08/15 20:31
>>241
Line にはちゃんと別の行として反映されてる
けど表示がサパーリ
追加しても何も表示されないか、同じ行に書かれる

TextBox って、BeginUpdate みたいな機能ないよなぁ
なんでだろ
単にtextBox.ScrollBarsがScrollBars.Noneになってて見えないだけとか言わないよな?
244240:04/08/15 20:49
>>243
Both で作ったし、そもそもデバッグ時に画面いっぱいに広げていたから多分違う
ちゃんと複数行になってる?
>>245
MultiLine は true
false でも変わらなかったが
TextBoxの大きさがないと見た
textBox1.AppendText("\r\n");
でできたんだけど
Environment.NewLine 使え。
まったくだ。
251240:04/08/16 12:17
一旦削除して作り直したら同じコードでも上手くいった
なんだったんだ一体?
>>251
バグの犠牲者
基本はリビルド、それでだめなら消す
>251
それエディットこんティニューのバグでないの?
>253の言われるとおり困ったらリビルド
255240:04/08/16 19:49
ごめんもしかしたら別スレッドから書き込んでいたのが原因かもしんない
素朴な疑問、果たしてEnvironment.NewLineを使うべきなのか?
別スレッドからやったんかい!
>>256
使った方が確実(たぶん)
>>256
ドキュメントには Environment.NewLineは "\r\n" で、Console.WriteLine等の WriteLine
メソッドで自動的に付加されるものであって、プラットフォーム毎のカスタマイズ対象だ、
としかかかれていなくて、Form (コントロール)類との関係が一切不明だものね。
そうそう、UIの部品の仕様とプラットフォーム標準の改行コードは、
同じと考えてよいのか(現状の環境ではそうだが)、独立した物ではないのかと。
261240:04/08/16 22:46
多分別スレッドから AppendText やったからおかしかったんだと思う
という事は今はたまたまできているだけで、いずれまた同じ結果になるということか

この現象はコンポーネントを lock すれば回避できるんだっけか?
よーわからん

しかも別の部分で TreeView.BeginUpdate している箇所も、
同じ原因で弾かれたし OTL
lockの意味を考えればまず無駄という事が分かるだろう。
そういう場合はInvoke経由でコントロールを操作する。
263240:04/08/16 23:01
>>262
あ、了解です
という事は、コンポーネントをラップするクラスを作ると良いかな?
Control.Invoke がコードの随所に分散するのは不味いだろうし
Textプロパティには
複数行テキスト ボックスのテキストの読み取り、または設定には、 Lines プロパティを使用します。
と書いてある…。

Linesプロパティには
テキスト ボックス コントロールの Multiline プロパティが true に設定されているときに、
テキストに改行文字が表示されると、改行文字の後ろに続くテキストが配列内の新しい要素に追加されて、別の行に表示されます。
と書いてある。

改行文字の定義は\n単独が不可ってことは、Environment.NewLineしか思いつかない。
265デフォルトの名無しさん:04/08/17 07:22
>>264
ControlChars.NewLine
どれでもいいけど統一しろよ…。
ControlCharsはMicrosoft.VisualBasic名前空間の中、
つまり過去のVBとの移植性のために存在してるものだから不適当だと思うが。

名前の意味も“エスケープキャラクタ”ってほどのものだろし。
すいません、色変換で下記のように30個以上のカラー リマップ テーブルを定義してい
るのですが、もっと簡単に記述する方法はありますでしょうか。
最近C#を始めたのでまだ書き方よくわかりませんです。

System.Drawing.Imaging.ColorMap[] cms =new System.Drawing.Imaging.ColorMap[]
{
 new System.Drawing.Imaging.ColorMap(),
 new System.Drawing.Imaging.ColorMap(),
 ・・・・・

>>268
//コードの最初
using System.Drawing.Imaging;

//定義部
ColorMap[] cms = new ColorMap[30];
for (int i = 0; i < cms.Length; i++)
   cms[i] = new ColorMap();

//ふらっとスレの方がいいかもな。
270268:04/08/17 16:52
>>269
ありがとうございます。利用させて貰います。

ところでふらっとスレとはどこでしょう・・・
透過色について質問があります。

新しく生成したBitmapはデフォルトで透明色になっています。
GetPixelでColorを取ると、A=0,R=0,G=0,B=0となってました。
しかし、new SolidBrush(Color.FromARGB(0, 0, 0, 0))で塗りつぶしても透明になってくれません。
何か考え違いをしているのでしょうか?
>>272
で、どこで透過色を使うの?

Color.A=0なブラシで塗りつぶしても意味無いのは確かだけどな。
//完全に透明な色を上から塗ってなんになる?
>>273
言われてみればそうですね・・・。

やりたかったことは、Bitmapをまっさらな状態に戻したかったんです。
今は
黒で塗りつぶし→MakeTransParent(Color.Black)とやっているのですが、
もっとスマートに出来ないものかと思いまして・・・
>>274
Graphics.Clear(Color)
276デフォルトの名無しさん:04/08/18 00:12
ウィンドウの透明と描画の透明は別物なのでしょうか?
またある色だけが透明なウィンドウにするのは可能なのでしょうか?
>>276
別物です。
可能です。
>>274
一部だけ透明にしたい、などの場合には
Graphics.CompositingMode = CompositingMode.SourceCopy;
した後、透明色で塗ればOK。
C#でbyte型の配列をごっそり確保してデータセグメントとして使い、
その領域に対してintやfloatのデータを書きこみたいのですが、
どうすればよいのでしょう?

また、そのデータセグメントから、もとのint値やfloat値を取り出し
たいのですが、どうすればよいのでしょうか?
C#ってメモリイメージ見れるんでしょうか?
メモリを直にいじるにはアンセーフコードを書かねばならん。
>>279
LayoutKind.Explicitの構造体を作ってFieldOffsetの指定をする。
>>279
こんな感じか。インデントは適当。

struct abc
{
public floatf;
public inti;
}
public unsafe static void test()
{
byte [] buffer = new byte[ sizeof(abc) ];
for (int i = 0; i < sizeof(abc) ; i++)
buffer[i] = 0;

fixed (byte* pBuffer = buffer)
{
abc* pa = (abc*) pBuffer;
pa->f = 1.0f;
pa->i = -1;
}
}
MemoryStreamとBinaryWriterで
まああんまりC#でやることではないわなぁ。
MSDNによると使い終わったGraphicsオブジェクトは破棄しましょう、とのことなので

private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;
//描画処理
g.Dispose();
}


とやるとエラーが出て落ちてしまいます。
GraphicsオブジェクトはDisposeしてはいけないのですか?
>>286
自分で作成したもの以外は Dispose しちゃ駄目
つまりCreateGraphics()で取得したオブジェクト以外はDisposeせずに放っておけばよいのでしょうか?

MSDNのサンプルでは、FormのPaintイベントでDisposeしてましたが、
FormのPaintイベントだとDisposeしてもいいみたいですね・・・
>>152,154 のパクリ?
既出だったんですね・・・
過去ログ全然読んでませんでした。
スミマセンでした。
  C# では、ポインタのアドレスを加算したり減算したり、メモリの任意のアドレスに
アクセスすることはできません。これにより、アプリケーションの信頼性が向上します。

 また、C# ではメンバの絞り込みに使う C++ の演算子「::」、「.」、「->」などの区別が
ありません。すべてドット( . )で表現します。

 さらに、C++ は C 言語の拡張であったため、C 言語流に記述してオブジェクト指向
らしからぬプログラムを書くことができましたが、C# では必ずクラスを使うことが強制
されます。そして、C# ではオブジェクトに属さないグローバル関数だけのプログラム
やグローバル変数の宣言が、構文上できなくなっています。
MainMenuの高さを知る方法ってある?
>>293C# では必ずクラスを使うことが強制されます…
よくそういうことが大変重要な事のようにかかれるのを見かけるが、
結局のところ、オブジェクト指向らしい?プログラムを書くことを
強制すると言う意味では実質あまり意味はない。
>>292
System.Windows.Forms.SystemInformation.MenuHeight
タブで切り替えのできるメニュー型ランチャーでも
作ろうとおもたんですが微妙に難しいですね。
MDIで何とかできると思うんですが、メニューを
親ウィンドウに統合しないようにするのはできますか?
ぶっちゃけ、Menuとかコントロールとか全部自分で描画するようにすればあとあとらくできるよ。
>>296
全部描画ということはやはりCDI+の知識が必要になってくるわけですよね?
この際GDI+習得しちゃおうと思うんですが、入門的なことを書いてるサイトとかありますか?
コンポーネントとかは1から作ったことがないんで・・・
29870:04/08/19 01:16
自分は本のほうがお勧めですが...
サイトはわからんです.
29970:04/08/19 01:17
70じゃない...orz
描画から全部自分でやるようなカスタムコントロール作る時は、
異形のものにならんよう気をつけなとね。

いわゆる、"Windows標準"に
みんなが慣れてしまっているのは仕方ないことだから。
>>295
ToolBarを使ってメニューっぽく見せるとかは?
>>291
初心者も見てるスレだから、妙な釣りはやめて欲しい・・・
>>302
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnbcsharp/htm/csharp1-1.asp

One Pointのfor C++を読め。検索しらた一発で引っかかったぞ。
何でこんな独り言? とは思った
ToolbarやPanelなどのコントロールのソースコードは公開されてないのですか?
>>305
ILDASMとかで開けばどんな処理をしているかは見られる。
>>303
だって実際 >>283 でできてるじゃない。いくら MS のサイトに書かれているからって、
明らかに事実じゃないことをいきなり書くのはやはり混乱の元だと思う。
手持ちの資料にあるC#でのポインタの使い方。
Managed DirectX 9 - Graphics and Game Programming - Kick Startより抜粋。P145。
やっぱアンセーフコードなんで、オススメはしない。
ポインタを使う前後に、ロック、アンロックしてるね。

private unsafe void FillTextureUnsafe(Texture t, bool random)
{
SurfaceDescription s = t.GetLevelDescription(0);
Random r = new Random();
uint *pData = (uint *)t.LockRectangle(0, LockFlags.None).InternalData.ToPointer();

for (int i = 0; i < s.Width; i++)
{
for (int j = 0; j < s.Height; j++)
{
if (random)
{
*pData = (uint)Color.FromArgb(r.Next(byte.MaxValue), r.Next(byte.MaxValue), r.Next(byte.MaxValue)).ToArgb();
}
else
{
*pData = texColor++;
if (texColor >= 0x00ffffff) texColor = 0;
}
pData++;
}
}
t.UnlockRectangle(0);
}
昨日Paintイベントについて伺ったものです。

過去ログを全て読んだのですが、
自分で作ったGraphicsオブジェクト以外は解放しちゃいけない、というのはわかったのですが、
何故なんでしょうか?
PaintEventArgsにはClipRectangleとGraphicsぐらいしか入ってないのに・・・

Disposeされたときに呼ばれる
System.Drawing.Graphics.EndContainer(GraphicsContainer container)
が怪しいと思うのですが。

どなたかご意見、情報お持ちの方レスお願いします。
PaintEventArgsオブジェクトが他で使われるから。
例えばあなたが書いたイベントは次のように呼ばれているかも知れないだろ?

Graphics g = CreateGraphics();
PaintEventArgs arg = new PaintEventArgs(g, this.Bounds);
IntPtr dc = g.GetHdc();
...
if (this.Paint != null)  //Paintイベントに何か入ってるか
   Paint(this, arg);
g.ReleaseHdc(dc); //イベント先で実行されたメソッドでGraphicsがDispose()されてたらエラー
g.Dispose();
>>310
現在の実装ではControl.WmPaint()の中で
PaintEventArgsインスタンスを作成して、
その後、OnPaintメソッドに渡してPaintイベント発生という
流れになっているわけだけれど、
Paintイベントから返ってきた後で
PaintEventArgs.Dispose()が呼び出されてる。
よってDispose()を二回呼び出していることになるわけで
それがおそらくエラーの原因。
>>311
>>312
お二方ともわかりやすい説明ありがとうございました。
今日一日悩みぬいたことが解決しました。
>>308
初心者相手にunsafeを教える方がどうかしてる。
315295:04/08/19 21:26
とりあえず
http://ja.gotdotnet.com/quickstart/winforms/doc/WinFormsCreatingControls.aspx
を見ながらやろうと思ったんですが・・・
始めに何をすればいいのかさっぱりで・・・
別に初心者スレじゃないだろ
>>316
初心者も見ているからやめろと>>302が言っている。
それに対する反論だから初心者が前提に決まってる。
>315
どこまで分からないかわから内がしたのほんをおすすめ。
全部読め
http://www.microsoft.com/japan/msdn/net/books/ProgWinCsharp/default.asp
>>318
ありがとうございます。
がんばってみます。
320318:04/08/19 22:06
>319
自分は仕組みが全部分からないと駄目なので読んでました.
でも一度それやるとWindowsに何されてるかわから内というのがなくなるのでお勧めです.
>>320
その本ずっと気になってるんだけど流石に上下巻そろえる金はないし・・・で。
ウィンドウプロシージャとかメッセージループとかは解説されてるんでしょうか?
>>312
IDisposable.Disposeは複数回呼び出しても良いことが保障されている。
>>322
ああ、そういえば。
324313:04/08/20 07:34
・・・あれ?
ということはまたふりだしですか?_| ̄|○
>>322
それって、自分のクラスにDisposeを実装するときは、
一回しか呼ばれないことを仮定してはいけないってことですか・・・?
327デフォルトの名無しさん:04/08/20 10:13
構造体の全てのメンバを任意の時点で全て初期化したい時は
どのようにやればよいですか?
newする。
あるならEmptyフィールドとか使う。
329デフォルトの名無しさん:04/08/20 11:07
C#のMDIウインドウのプログラムを作成しています。
タイトルバーとかサイズ変更の箇所をクリックしないと
背面のフォームがアクティブ(最前面)にならないのですが
これはそういう仕様でしょうか?
作り方が間違っているでしょうか?
背面フォームのどこを触ってもアクティブになって欲しいんですが・・・。
>>324
フレームワーク側は単に Dispose するんじゃなくて、なにかしてるんでしょ。>>311を良く見るように。
GetDC / ReleaseHdc じゃなくて、BeginPaint / ReleaseHdc + EndPaint だろうけど。
>>330
ところどころでPaintイベントから返ってきたあとでPaintEventArgsのメソッドを呼び出してたり、
一つのPaintEventArgsを複数回のPaintイベントに渡してる箇所があるな。
C#は全然分からんが人生はDisposeしてみたいな。
>332 をガベコレ
>>332はDisposable Teen
>>332は誰からも参照されてない
332みたいのに嬉々としてレスする奴って、
普段技術的な話にはまったく参加できてない奴なんだろうな。
336とかね
>>335
誰かから参照されているいないとDisposeは無関係。
よって>>335は誰からも参照されていない。
338が参照しますた



随分遅れた夏が来た?
ム板っぽくていい。
PaintEventArgsにGraphicsとかClipRectangleとかをつめつめしてるのはControl.WndProcなんでしょうか?
.NET Frameworkで実際どのような処理が行われているか、
ソースを見たりする方法はないんでしょうか?

ILDASM で逆アセして解析。
ILDASM で逆アセして解析できないアセンブリで、ソフトウェアを公開したいのですが、
どうやればいいしょうか??
多倍長クラスとか標準でついてたっけ?C#
>>344
>  多倍長クラスとか標準でついてたっけ?C#
多倍長関連は.NET Frameworkクラスライブラリの中にはないね。
ttp://www.gdncom.jp/student/bbs/ShowPost.aspx?PostID=1968

//「とか」って何さ。
>>345
> //「とか」って何さ。

彼女とかいるの?の「とか」だろ
347デフォルトの名無しさん:04/08/21 14:23
XMLコメントの中で "<"をあらわすにはどうすればいいんでしょ?
行末の</Summary>に反応してしまうんですが・・・・
&lt;
>>347は「自分で調べる」=「人に聞く」価値観をもった厨房の典型例だな。
stringは値型ですか?参照型ですか?
>>350
MSDN
>>341
>PaintEventArgsにGraphicsとかClipRectangleとかをつめつめしてるのはControl.WndProcなんでしょうか?
Control.WmPaint()
>>342
自分で書いてない処理も出力されたっけ?
>>353
だったらMSが書いたアセンブリをILDASMにかけるといいよ。
>>353
自分が書いた処理と「他の誰か」が書いた処理を
どうやって判断すると思うんだ?
いやILDASMってソースファイル上に書いてない処理まで出力してくれるの?
その前にソースファイル上に書いてない処理をどうやってアセンブリに組み込むのか知りたい
自分で考えろ阿呆
>>358
皮肉言われてることに気付け。
360デフォルトの名無しさん:04/08/22 08:04
いまさらなんですが......
C# && .NET FrameworkでRS232Cの通信をしたいのです。
mscomm32.ocxは、VisualStudioに取り込めるのですか?
ちょっとググったらStreamから継承して自分で作れ、
みたいなのもあったんですけど、具体的なコードがなかったので、想像もつきません。
>>360
>  mscomm32.ocxは、VisualStudioに取り込めるのですか?
自分で試してみれ。

Win32APIの例
ttp://support.microsoft.com/default.aspx?scid=kb;ja;823179
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = pictureBox1.CreateGraphics();
//なんか描画する
g.Dispose();
}

とやるとフォームが読み込まれた最初はピクチャボックス内の描画が表示されません。
しかし、ウィンドウを重ねるなどして再描画させるとちゃんと表示されます。
が、たまに再描画してくれない時もあります。
海外のサイトに同じようなことを取り扱ったところがあり、
そこではピクチャボックスの代わりにパネルを使え、とあったのですが、
何故ピクチャボックスはこのようなことになるのでしょうか?

//素直にPaintEventArgsのGraphicsオブジェクトを使えばいいとはわかっているのですが
364デフォルトの名無しさん:04/08/25 20:46
ボタンのオーナードローをしたいのですが、
ButtonクラスにはDrawItemのイベントはないのでしょうか?
>>364
ButtonにItemなんてあんのかよ?
普通はOnPaintをオーバーライドしていじる。
>>363
漏れの直感では、PictureBox の Paint イベントはライブラリ側でダブルバッファリング
しているような・・・

WndProc をオーバーライドして、
WM_PAINT 時に Win32 API の BeginPaint / EndPaint した後に
そういうコードを書けば良いような気がする。
もっとよいのは、Paint イベントを自前で処理するなら PictureBox なんか使わないこと
だと思う。
368デフォルトの名無しさん:04/08/25 21:14
WINDOWS XP使用しています、コマンドプロンプトで
TEMPディレクトに移動しようとしてcd \TEMPと入力しても
何故か指定されたパスはありませんと表示されて移動できません
何故か本のは、できています。使用している教本は
十日でおぼえるC言語入門教室と言う本です。
ご助言頂けたら幸いです。
>>368
cd \TEMP だとルートディレクトリにある TEMP に移動しようとする
cd TEMP とせい
370デフォルトの名無しさん:04/08/25 21:25
>>369
真にありがとうございます、さっきも
似た様な事が起こりました、本のは
cd WINDOWSとなっていて、そのとおりやってもできず
cd \WINDOWSと\を付けたらできたりとか
何が原因なんでしょうか?連続質問、すみません。
371370:04/08/25 21:28
しかも実際、移動しても
アクセサリーのエクスプローラーで見ても
フォルダが移動されてない気がするんですが
これで宜しいんでしょうか・・・・?
そろそろスレ違いというか板違いに気づけ
373370:04/08/25 21:31
すみませんでした
フォームにラベルを配置して、それを覆い隠すようにピクチャボックスを配置して、
ピクチャボックスのBackColorをColor.TransParentにすると、
親であるフォームの背景色が透過され、
下にあるはずのラベルが見えません。
ピクチャボックスの親をラベルにすれば出来るのですが・・・
ピクチャボックスの親をフォームにしたまま、ラベルが見えるようにする方法はないのでしょうか?
>>374
PictureBox.Visibleをfalseにするとか。
>>374
Win32 API を使うか何かして、ラベルやピクチャボックスのウィンドウスタイルから
WS_CLIPSIBLINGS を外せばいいんじゃない(Form のを外すんだっけ?)
377374:04/08/26 21:13
>>375
ピクチャボックスが見えないと困るんです・・・。
やりたいことは
テキストボックスやボタンを配置した普通のアプリで、
一定時間操作がないとフォーム上をスクリーンセイバーのように
キャラクターが動き回る、というものです。
なので、キャラクターはコントロールの上に描画されて、且つ描画されない部分は下のコントロールを透過させたいんです。

何卒よい知恵をお願いします。
378デフォルトの名無しさん:04/08/26 21:59
CashedBitmapをC#から使うにはどうすればいいのですか?
>>377
FormにWM_PRINTを送ってFormのImageを取得、それを背景画像に使うというのは?
Bitmapってお金になるのか
Bitmapシャツでも作るの?
BitmapソーセージとかBitmapカレーとか
ソーセージ&マメ
文字列内 \x に続く 16 進数の記号を、対応する文字コードに置き換えるコードは
置き換えに Regex を使うとするとどうなりますか?
>>384
上手いやり方があるかも知れないが
考えるのが苦手な私はRegex.Replace(string, MatchEvaluator)を使う。
Disposeしたらお金にはなりません。
387デフォルトの名無しさん:04/08/28 12:22
同期について教えて頂きたいんですが、
例えばあるクラスのint型のメンバへのアクセスで同期を取りたい場合、
意味のない適当な参照型をlockして同期を取ってもいいのでしょうか?

lock(bitmap){}とか
388デフォルトの名無しさん:04/08/28 12:44
C#でエクセルにデータ貼り付けた後に、ソートしたいんだけど、
oSheet.get_Range(oSheet.Cells[1,1],oSheet.Cells[10, 100]).Sort(
の引数に、どう値をセットしたら良いかわからない・・・

カラムが10個あって、そのうちの3つ目、4つ目の値をキーにソート
したいのだけども・・・
誰か教えて
>>388
ttp://www.microsoft.com/japan/msdn/officedev/vsto2003/ExcelObj.asp
何この馬鹿馬鹿しいメソッド。

>>387
無関係のオブジェクトをロックして何の意味が?
ロックってのは
「ロックしてるオブジェクトを他のスレッドから操作されないようにする」
だよ?
390387:04/08/28 13:21
>>389
それはそうなんですが、
例えば、
get{
lock(bitmap{
}
}と
set{
lock(bitmap){
}
}
とやればbitmapへのロック自体は意味なくても、
set側とget側で同期が取れるんじゃないかなぁと思ったんですが
>>390
無理。あり得ない。
ロックは
「そのブロック中は他スレッドからの操作を待機させる」
じゃない。
「そのブロック中はロックしてるオブジェクトの他スレッドからの操作を待機させる」
だ。
>>391
何かおかしくないか?
lock は「この中でこのオブジェクトを使うから他の奴は待ってろ」っていう動作をするんだぞ?
待つのは lock の先頭、Monitor.Enter を行った瞬間だけだ

なのでこの場合は >>390 の同期は取れる
ただし意味の無いオブジェクトをロックに使うのは無意味だから止めとけ
394387:04/08/28 13:55
private void Form1_Load(object sender, System.EventArgs e)
{
Monitor.Enter(bitmap);

}

private void thread()
{
lock(bitmap)
{
label2.Text = "ここがでない";
}

}

private void button1_Click(object sender, System.EventArgs e)
{
Thread td = new Thread(new ThreadStart(thread));
td.Start();

}


こんな形でなんとか同期は取れてるのですが・・・


>>392
値型で同期を取るにはどうすればいいのでしょうか?
395387:04/08/28 13:58
>>393
ありがとうございます
教えて頂いた方法でやってみたいと思います。
>>392
んが、ほんとだ。
適当なこと言って悪かった。
391は取り消し。
書き込み出来なくなってる?

マルチスレッドは難しいなぁ。
>>387
値型でロックをとるという操作自体は無理。
が、べつに適当なロック用オブジェクトを作成しておいて
それで同期を取ることには何ら問題はない(正しく管理していれば)。

どうも勘違いしている書き込みが多いような気がするが、
ロックは必ずしも排他アクセスさせたいオブジェクトそのものに対して
行わなければならないわけではない。

インスタンスメソッドなのであれば、場合によってはthisでロックしてもいいし、
それがダメなら、例えばメンバに、
object forIntMemberLock = new object();
とでもしておいてそれをロックしてもいい。
追加、表現に若干語弊はあるが、lockというのは単純に言えば、
他のスレッドからの、同じオブジェクトに対するlockを待たせるもの。
「対象のオブジェクトへのアクセス」を禁止する物ではない。
mandatory lockingというやつですな
話の流れから言えば
advisory lockingというやつですな
な気がするが…
lock なんつうシンタクスシュガーを使わずに
Monitor つかえや( ゚Д゚)ゴルァ!! ってことか
>>402
なんでそうなるんだよ
>>402は分かってないけど分かってるようなフリをしようとして失敗した馬鹿。
405デフォルトの名無しさん:04/08/28 19:36
ということにしてしまいたい理由はなんだろう ;-)
406デフォルトの名無しさん:04/08/28 22:55
ということでないとしたらどん可能性があるかな
407デフォルトの名無しさん:04/08/29 02:24
Class1.Test() メソッドを呼び出すとイベントが発生するようにしたいんですが、以下のソースだとぬるりが発生します。
どうやったら、上手くイベントを発生させられますか?

public delegate void Handler();

public class Class1
{
  public event Handler Handle;

  public void Test()
  {
    Handle();
  }
}

public class Class2
{
  public static void Main(string[] args)
  {
    Class1 c1 = new Class1();
    c1.Test();
    Console.WriteLine("Hello World!");
  }
}
ウェブにだって本だってサンプルいくらでも転がってるだろ・・・

if (Handle != null) Handle();
ファイルのリストの差分取るのって考え方としてはどうやればいいですか?
よく差分バックアップするソフトにはこういう機能が付いてるんじゃないかと思うのですが。
物凄い初心者なんで考え方が分かりません。
ファイル名を比較しながらループさせたらできますか?でもこれだとめちゃめちゃ重くなりそう!?
C#に関係ないじゃん
メモ

nanocrew.net - Software
www.nanocrew.net/software/

DeDRMS - CLI utility for decrypting AES encrypted MPEG4 AAC files.
FairKeys - CLI utility for retrieving FairPlay keys from Apple's servers.
JustePort - CLI utility for streaming MPEG4 Apple Lossless files to an AirPort Express.
C#のダイアログで、C++みたいなDDXのような機能ってあるんでしょうか?
ない。

>C++みたいなDDX

DDXはC++とは関係ねーだろ。WTLとかMFCの機能だ。

.NETではライブラリが充実してるから、
そんな腐った機能は逆に邪魔なだけ。
C#コンパイラはVisualStudio.Netにしか無いんですか?
.NET Frameworkの再頒布可能パッケージについてる。
つまり.NETアプリが実行可能な環境ならコンパイルも可能。
//Microsoft.CSharp.Compilerクラスで実行時コンパイルなんてな。
ありがとうございます。
>>414
C#は膨大な量のクラスライブラリを扱う事になるので、
インテリセンスのような、エディタのサポートが必須だと思う。
コンパイラだけで何とかなる時代は終わったよ。

いまならMSのサイトからVC#2005のベータ版を落とせる。
それ使ってみるのも良いかも。

ttp://www.microsoft.com/japan/msdn/vstudio/2005/express/
ちょっと前の話題ですが、とあるクラスのインスタンスメソッドで適当に排他したいなら、
lock(this) {} がお勧めです。
>>418
というか、MSDN にもそう書いてある。

非 static メソッドなら lock(this)
static なら lock(typeof(TypeName))
ま、それで十分な場合も多いね。
421デフォルトの名無しさん:04/08/31 02:17
TextBoxで、[Ctrl+←]を押すと[Home]と同じ働きをしてしまうのですが、
これを無効にするにはどうすればいいですか?

例えば、[Ctrl+j]を[←]と同じ動きをするようにしたいのですが、
[Ctrl+j]キーを押したときに、
SendKeys.Send( "{LEFT}" );
としてみても、Ctrlキーが押されているので、
[Ctrl+←]として認識されてしまい、
[←]キー単体で押している時のようにできませんでした。
>>421
ProcessCmdKeyとかそのへんでできない?
[Ctrl+j]ならContextMenuだけでいけるかもしれない。
>>422
どうもありがとう。
でも、うまくいきませんでした。

やったことは、
ProcessCmdKey()の中で、[Ctrl+J]の時に、
SendKeys.Send( "{LEFT}" );
あるいは、
keyData = Keys.Left;
とやってみましたが、[Ctrl+←]になっちゃいます。

ContextMenuも試してみましたが、マウスの右クリックからは望むとおりにできましたが、
キーボードからショートカットを打つと矢張り[Ctrl+←]になりました。

どうすればいいですか?_| ̄|〇
いままで.NET Frameworkにキャレット関係のプロパティ・メソッドが見あたらないことが不満だった。

しかし私は開眼した!
SelectionStartプロパティが選択中か否かにかかわらずキャレット位置を示すのだ!


ってことでProcessCmdKeyメソッドでこんなのでいける。

if (key == (Keys.Control | Keys.J)) {
   int current = SelectionStart + SelectionLength;
   SelectionLength = 0;
   SelectionStart = current - 1;
   return true;
}
else
   return false;
あ、>424にバグが。
SelectionStart = (current > 0) ? current : 0;
だな。
ぐだぐだ。
SelectionStart = (current > 0) ? current - 1 : 0;
> しかし私は開眼した!
> SelectionStartプロパティが選択中か否かにかかわらずキャレット位置を示すのだ!

ここでゲラゲラ笑った
前キャレットの場合はどうなんの?
>>424
ぐだぐたのところわるいが
else
 return base.ProcessCmdKey(...)
にしる。

>>423
メッセージの段階で変換するとか。
ProcessKeyEventArgsとかその辺でいけるはず。
XmlDocumentの配列ってどうやってつくるんでしょうか。

XmlDocument[] XD = new XmlDocument()[10];
とやるとしたのエラーがでてしまいます。

'System.Xml.XmlNode.this[string]' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。
>>430
その質問は正しくは
> 配列ってどうやってつくるんでしょうか。
だな。

MSDN/ヘルプの配列のところを読め。
432デフォルトの名無しさん:04/09/01 20:28
DataGridにArrayListをバインドしたとき、
DataGridからデータの変更をすることは出来ないのでしょうか?
433デフォルトの名無しさん:04/09/01 22:28
現在 vb で作成されたプログラムがあります.この中で,

'インスタンス生成
Set OBJ = CreateObject("TEST.Func")

とかやって外部の DLL を操作している部分があるのですが,
これら外部の DLL をそのまま C# で使う事ができますか?
VBのCreateObjectってCOMオブジェクトの作成だよな。

遅延バインディングなら
ttp://dobon.net/vb/dotnet/vb2cs/createobject.html
ただしリフレクションを介して操作することになって大変面倒くさい。

事前バインディングならtlbimp.exeを使ってタイプライブラリをつくる。
VSなら直接COMのDLLを参照設定できる(裏で自動的にtlbimpしてくれる)。
>>432
まあ素直にDataSet/DataTableつかっとけってことだな。
>>432
?? 普通に出来たけど。
なんか別のところで引っかかってない?
C#でSusieプラグイン対応の画像ビューアーを作っているのですが、下のソースのだめな所を教えてください。

//API
[DllImport("gdi32.dll")]
public static extern int BitBlt(IntPtr hDestDC,int x,int y,int nWidth,int nHeight,IntPtr hSrcDC,int xSrc,int ySrc,int dwRop);

[DllImport("gdi32.dll")]
public static extern short SetDIBitsToDevice(IntPtr hdc,short x,short y,int dx,int dy,short SrcX,short SrcY,int Scan,int NumScans,IntPtr Bits,IntPtr BitsInfo,int wUsage);

[DllImport("gdi32.dll")]
public static extern int SetDIBits(IntPtr hdc,IntPtr hBitmap,int nStartScan,int nNumScans,int lpBits,IntPtr lpBI,int wUsage);

[DllImport("kernel32.dll")]
public static extern void MoveMemory(IntPtr dest,IntPtr Source, int length);

[DllImport("kernel32.dll")]
public static extern int LocalFree(IntPtr MemHandle);

[DllImport("kernel32.dll")]
public static extern int LocalLock(IntPtr MemHandle);

[DllImport("kernel32.dll")]
public static extern int LocalUnlock(IntPtr MemHandle);

[DllImport("D:\\ifjpeg.spi", EntryPoint="GetPictureInfo" ,ExactSpelling=true, SetLastError=true)]
public static extern int JPGInf( String FileSTR, int OffSet, int Mode,IntPtr Info);

[DllImport("D:\\ifjpeg.spi", EntryPoint="GetPicture",ExactSpelling=true , SetLastError=true)]
public static extern int JPGDraw( System.Text.StringBuilder FileSTR, int len, int flag,IntPtr pHBInfo,IntPtr FARPROC,int CallBack, int CallBackLong);
438437:04/09/02 12:25
↑の続き

public int SDrawPic(StringBuilder PicFile,PictureBox ToDraw)
{
IntPtr BitMapMemoryHandle = IntPtr.Zero;
IntPtr BitMapInf = IntPtr.Zero;
int LocalMemoryBMP;
int LocalMemoryInf;
BITMAPINFOHEADER BitMapHeader = new BITMAPINFOHEADER();
int Ret = 0;//エラーコード
int Ret2;//エラーコード2

//画像展開
Ret = JPGDraw(PicFile, 0, 0,BitMapMemoryHandle,BitMapInf, 0, 0);
//メモリーのロック
LocalMemoryBMP = LocalLock(BitMapMemoryHandle);
LocalMemoryInf = LocalLock(BitMapInf);
//メモリの移動
MoveMemory((IntPtr)((object)BitMapHeader),(IntPtr)LocalMemoryBMP,Marshal.SizeOf(BitMapHeader));
//描画準備
Ret2 = SetDIBits(ToDraw.Handle, (IntPtr)((object)ToDraw.Image), 0, ToDraw.Height, LocalMemoryInf, (IntPtr)LocalMemoryBMP, 0);
if(Ret2 == 0) Ret = 11;
//メモリの開放
LocalUnlock(BitMapMemoryHandle);
LocalUnlock(BitMapInf);
LocalFree(BitMapMemoryHandle);
LocalFree(BitMapInf);
//描画
ToDraw.Refresh();
return Ret;
}
439デフォルトの名無しさん:04/09/02 13:44
指定した色が透過されて画像を描画させるにはどうしたら良いのですか?
>>439
Graphics.CompositingMode
441439:04/09/02 19:09
>>440
もうちょっと詳しい説明をお願いします。
調べてから効け
あとBitmap.MakeTransparent
>>440でわかんないならアフォ確定
445デフォルトの名無しさん:04/09/02 22:17
指定したディレクトリの、ひとつ上のディレクトリを得るにはどうしたらいいですか?
>>445
ちっとはSystem.IO名前空間ぐらい調べろって。
バイトデータをファイルに書き込むときにFileStreamを使うのと、BinaryWriterを使うのはどっちがいいのでしょうか?

FileStream fs = new FileStream(path, FileMode, FIleAccess);
BinaryWriter bw = new BinaryWriter(fs);

fs.Write(byte[] array, int x, int y);
bw.Write(byte[] array, int x, int y);

どちらも結果は同じなんですが
まあ好みによるんじゃないか?
BinaryWriterは結局のところStreamのラッパに過ぎないわけだし。
Write(byte[], int, int)を使うだけならBinaryWriterを使う意味は無かろうが。
449437:04/09/03 09:06
↑で書いたソースですが、
Ret = JPGDraw(PicFile, 0, 0,BitMapMemoryHandle,BitMapInf, 0, 0);
の場所で「オブジェクト参照がオブジェクト インスタンスに設定されていません。」とエラーを吐き出します。
その理由がわからず困っています、分かる方教えてください。
>>449
P/InvokeでNullReferenceExceptionが出ることはないはずだから、
なんか他のが原因な気がするけど……。

取りあえずエラーが起きた時に何がnullになってるかをチェック。
451デフォルトの名無しさん:04/09/03 11:01
ポップアップメニュー を出すにはどうしたらいいですか?
ちなみに普通のメニューは出ます。
>>451
まずはSystem.Windows.Forms名前空間内の〜Menuってなクラスを調べてみたらどうだろうか。
453437:04/09/03 11:18
>>450
Ret = JPGDraw(PicFile, 0, 0,BitMapMemoryHandle,BitMapInf, 0, 0);
↑の変数の中身は
StringBuilder PicFile = "C:\Winter.jpg"
int BitMapMemoryHandle = 0
int BitMapInf = 0
でした。どれもNULLじゃないので、全然わからないです T_T
>>453
じゃあそれ以外の何か。
>>449
P/Invoke でも、確か先方がそれらしい Windows 構造化例外を投げれば
NullReferenceException として上がってきたと思う。JPGDraw のソースが
あるなら、デバッグビルド版にしてネイティブデバッグも ON にすれば
当該箇所が分かると思う。
456437:04/09/03 14:30
JPGDrawはSusieプラグインなんでソースはないです。でもJPGDrawの行より先に進めました。
でもまだ表示はされないけどw
表示されない理由分かる方お願いします。

変更点-API

[DllImport("gdi32.dll")]

public static extern int BitBlt(IntPtr hDestDC,int x,int y,int nWidth,int nHeight,IntPtr hSrcDC,int xSrc,int ySrc,int dwRop);
[DllImport("gdi32.dll")]
public static extern short SetDIBitsToDevice(IntPtr hdc,short x,short y,int dx,int dy,short SrcX,short SrcY,int Scan,int NumScans,IntPtr Bits,IntPtr BitsInfo,int wUsage);
[DllImport("gdi32.dll")]
public static extern int SetDIBits(IntPtr hdc,IntPtr hBitmap,int nStartScan,int nNumScans,ref int lpBits,ref IntPtr lpBI,int wUsage);

[DllImport("kernel32.dll")]
public static extern void MoveMemory(IntPtr dest,IntPtr Source, int length);

[DllImport("kernel32.dll")]
public static extern int LocalFree(IntPtr MemHandle);

[DllImport("kernel32.dll")]
public static extern int LocalLock(IntPtr MemHandle);

[DllImport("kernel32.dll")]
public static extern int LocalUnlock(IntPtr MemHandle);

[DllImport("D:\\ifjpeg.spi", EntryPoint="GetPictureInfo" ,ExactSpelling=true, SetLastError=true)]
public static extern int JPGInf( String FileSTR, int OffSet, int Mode,IntPtr Info);

[DllImport("D:\\ifjpeg.spi", EntryPoint="GetPicture",ExactSpelling=true , SetLastError=true)]
public static extern int JPGDraw( System.Text.StringBuilder FileSTR, int len, int flag,ref IntPtr pHBInfo,ref IntPtr FARPROC,int CallBack, int CallBackLong);
457437:04/09/03 14:33
変更点-メソッド
public int SDrawPic(StringBuilder PicFile,PictureBox ToDraw)
{
IntPtr BitMapMemoryHandle = IntPtr.Zero;IntPtr BitMapInf = IntPtr.Zero; IntPtr LocalMemoryBMP;
int LocalMemoryInf; int Ret = 0; int Ret2;
BITMAPINFOHEADER BitMapHeader = new BITMAPINFOHEADER();
//画像展開
Ret = JPGDraw(PicFile, 0, 0,ref BitMapMemoryHandle,ref BitMapInf, 0, 0);
//メモリーのロック
LocalMemoryBMP = (IntPtr)LocalLock(BitMapMemoryHandle);
LocalMemoryInf = LocalLock(BitMapInf);
//ガベージコレクタがオブジェクトを移動できないようにする
GCHandle gch = GCHandle.Alloc(BitMapHeader, GCHandleType.Pinned);
GCHandle gch2 = GCHandle.Alloc(ToDraw.Image, GCHandleType.Pinned);
//メモリの移動
int address = gch.AddrOfPinnedObject().ToInt32();
MoveMemory((IntPtr)address,(IntPtr)LocalMemoryBMP,Marshal.SizeOf(BitMapHeader));
//描画準備
int address2 = gch.AddrOfPinnedObject().ToInt32();
Ret2 = SetDIBits(ToDraw.Handle, (IntPtr)address2, 0, ToDraw.Height,ref LocalMemoryInf,ref LocalMemoryBMP, 0);
if(Ret2 == 0) Ret = 11;
//メモリの開放
LocalUnlock(BitMapMemoryHandle);
LocalUnlock(BitMapInf);
LocalFree(BitMapMemoryHandle);
LocalFree(BitMapInf);
gch.Free();
gch2.Free();
//描画
ToDraw.Refresh();
return Ret;
}
質問です。

JPEGファイルから作ったFileStreamを、
またJPEGファイルに戻して保存したいのですが、
どうすればよいのでしょうか?

また、このStreamからBMPファイルに
変換→保存する方法はあるのでしょうか?
>>458
>  JPEGファイルから作ったFileStreamを、
>  またJPEGファイルに戻して保存したいのですが、
>  どうすればよいのでしょうか?
は?
そのFileStreamは一体何者?
どっからどうみてもファイルそのものじゃないのか?

>  また、このStreamからBMPファイルに
>  変換→保存する方法はあるのでしょうか?
Image.Save(Stream, ImageFormat)
Image.Save(string, ImageFormat)
460458:04/09/03 15:20
Image.Save(Stream, ImageFormat)
これで全て解決しました。ありがとうございます。
TabControl.TabPagesのように関連するコントロールの
コレクションをプロパティとして持つコントロールを作成しました。

しかし、VS.netのプロパティウィンドウからそのコレクションに
関連コントロールを追加してもInitializeComponent()内に
関連コントロールを追加する文(Control.Add()など)が記述されません。

どうすれば自動的に追加する文を記述されることができますか?
>>457
使ってない変数や余計な行は削除してから上げてもらえると良かったんだけど。
まず、SetDIBits の第一引数は HDC なので、ToDraw.Handle じゃだめです。
あと PictureBox に直接描いても、ウィンドウを動かしたりなんかしたりするとすぐ消えてしまうので、
Bitmap を作ってそこに描画し、 Image プロパティにセットしておくのがよいと思います。

適切なサイズのビットマップを new Bitmap(...) 等して確保して、Graphics.FromImage で Graphics を作って、
GetHdc() で HDC を得て、StretchDIBits で描いて、ReleaseHdc() で開放して、出来上がった Bitmap を
PictureBox の Image にセットして Invalidate しておしまい、という流れにしてみてください。
463デフォルトの名無しさん:04/09/03 17:23
フォームやコマンドプロンプトを出さずに、メッセージボックスだけ表示するにはどうしたらいいですか?
>>463
コンパイラに/target:winexeオプションを指定して
Main()のなかでMessageBox.Show()
466デフォルトの名無しさん:04/09/03 19:30
C++にあったようなROP反転処理はC#にもありませんか?
グーグルで思うようにヒットせずに質問致します。

例)ピクチャボクスに表示したビトマプ画像に塗りつぶし円を描くが
  その円はその領域だけ元のビトマプ画像を反転させる役目を有する

以上、ご存知な方、宜しくお願い致します。
>>466
Graphics ではサポートされていません。
円形のクリッピングを設定して、適当な色変換と供にビットマップを再度描画してはどうでしょうか。
Formを表示する際に、Formを任意の位置に表示したいのですが、
どうすれば良いでしょうか?

表示する前にLocationを設定しても無駄でした。
>>468
Form.StartPositionをFormStartPosition.ManualにしてLocationを設定(いや順番は関係ないが
>>466
それ、以前に同じ事やろうとして無駄な時間をすごしてしまった。俺。

素直にDirectX使ったほうがいい。
>>469
解決できました。
StartPositionに気づきませんでした。
ありがとうございました。
色々な参考書を読みましたが未だにカスタム属性が理解できません。
例えば、クラスA、クラスB、クラスC(プロパティc)というクラスがあり、
クラスCのプロパティcは、クラスAからは読み書き両方できるけど、クラスBからは読み取り専用・・・
なんてこともカスタム属性で出来るんでしょうか?
属性はたんなるマークでしかない。
マークをつける側と、マークを読む側で、
書式と意味が一致している必要がある。
フォーカスが移動する前にどのControlにフォーカスがあったか、
わかるんでしょうか?
メニューのショートカットをCtrlやらShiftやらの修飾キーがついていない単独のキーを割り当てたいのですが
どのようにすれば割り当てられるでしょうか?
例えば
this.menuItem1.Shortcut = System.Windows.Forms.Shortcut.CtrlQ;
の場合、Ctrl+Qが割り当てられていますが、これをQのみに対応させたいのです
>>475
KeyDownで'Q'だったらmenuItem1.PerformClick()ってんじゃ駄目かな?
便乗ですいません。
this.button1.PerformClick();
だとbutton1_Clickで記述された処理が実行されますが、
このときに、画面に見えているボタンがぽこっと実際にクリックしたように
へこむアクションをさしたいのですが、どうしたらいいでしょうか?
478475:04/09/04 19:35
>>476
そうするとメニューの項目の横に

----------------------
メニュー1   Ctrl+Q
----------------------

というような表示が出ないので、なんとかShortcutで設定したいのです
どうにかならないものでしょうか?
>>478
"メニュー1\tQ"
でOK.

>>479
Buttonを継承したコントロールに独自のメソッド(SimulateClickとか)を追加して
そこでがしがし描画、かな。
System.Windows.Forms.ControlPaintクラスの各メソッドが使えるかも知れない。
モードレスダイアログを開発しようとしています。
ダイアログ終了時に親画面と同期をとりたいんですが、
どんなやり方がスマートなのでしょうか?
親が子の終了を察知する方法です。
子から親のメソッドをを呼び出したくないので。
イベント。
482475:04/09/04 22:06
>>479
えらい適当な・・・
色々やってますが無理なんでしょうかね?
Shortcut.CtrlQとKeys.Control|Keys.Qの値が同じだったので
Keys.Qの値をShortcutに無理矢理キャストしたら怒られました
>>482
どうしてそんな異様なUIにしたいの?
ショートカットキーの表示は479でできるんだしそれでいいじゃん。
Shortcutプロパティでできないのは動かしがたい事実。
485475:04/09/05 00:59
仕様上ダメのようなので諦めました
476,479で行きます
ありがとうございました

引き続きでなんですが
アプリケーション用のアイコンと関連付けたファイルのアイコンを別々にしたいのですが
一つのアプリケーションに複数のアイコンをつけるにはどうすればよいでしょうか?
 > アプリケーション用のアイコン

はApp.icoのことでしょ?

 > 関連付けたファイルのアイコン

はWindowsへ登録するわけだから、
アプリそのものは関係ないと思うんだけど。
487475:04/09/05 11:12
>>486
別にアプリとは別のアイコンファイルを用意して
それにアイコンを設定するという方法でも良いのですが
市販のアプリとかは一つのアプリ内に複数のアイコンを持っていたりするので
できれば一緒にしたいと思っているわけです
要するにレジストリのDefaultIconで
"アプリのパス,1"とかで指定したいのです
DirectoryInfo.GetFilesで取得したファイルの数ってどうやったら分かりますか?
>>487
何を言ってるのかようわからん。

>>488
GetFiles().Length

GetFilesはFileInfoの配列を返すわけだから、
その配列の要素数( Length )がファイル数に相当する。
>>489
自分かなり初心者でただファイル読み込むときにプログレスバーを
付けてみたかっただけなんですけどこれでできそうです。
どうもありがとうございました!
次の質問予想
プログレスバーを表示しようとしたんですが、
0%から全部終わった瞬間に一気に100%までいってしまいます。
なぜでしょうか?
492デフォルトの名無しさん:04/09/05 15:46
C#での正規表現関係クラスの使い方が分かりません。
strは、数字 文字列 数字 文字列 … 数字 という構造になっていて、
頭から順にnumに数字を、str2に文字列をいれて行きたいのですが…
サンプルコードをいただけませんか?

Perlの$1,$2にあたる部分とかもさっぱり分からん
493490:04/09/05 16:00
プログレスバーを表示しようとしたんですが、
0%から全部終わった瞬間に一気に100%までいってしまいます。
なぜでしょうか?
>>492
書き方はいくらでもあるが、一例。

string data = "123ghoshg255grehi55dghdkg";
Regex reg = new Regex("([0-9]+)([a-zA-Z]+)", RegexOptions.Compiled);
foreach (Match m in reg.Matches(data)) {
   int i = int.Parse(m.Groups[1].Value);
   string n = m.Groups[2].Value;
   Console.WriteLine("{0} : {1}", i, n);
}
>>492
string str = "111aaa222bbb333ccc";
Regex regex = new Regex(@"(?<num>\d+)(?<str2>[a-zA-Z]+)");

for (Match m = regex.Match(str); m.Success; m = m.NextMatch())
{
 string num = m.Groups["num"].Value;
 string str2 = m.Groups["str2"].Value;

 Console.WriteLine("num={0}, str2={1}", num, str2);
}

こんな感じ?
かぶったスマソ
アプリのFont設定の保存のためにSoapFormatterを使って
Font型フィールドをシリアル化したのですが
デシリアライズ時に次のエラーをはきます。

System.ApplicationException
{"呼び出しのターゲットが例外をスローしました。" }
_innerException
{"指定されたキャストは有効ではありません。" }

色々変えてみたりしたんですけど、うまく行かず
ぐぐってみたらプロパティでラップしたら出来たとかかれていたんですけど
それもやり方が悪いのか出来ませんでした。

どうすればデシリアライズできるか教えてください。
498437:04/09/06 14:17
>>462
すみません、俺の力不足のせいで出来ないです。
もしよければソースを書いていただけますか?
499デフォルトの名無しさん:04/09/06 15:03
2つの画像を合成しようと,透過色を設定した ImageAttr を
DrawImage に渡していろいろ試しています.
イメージは背景画像と前景画像とあり,前景画像はある特定の色が
透過色として設定してあります(255,0,255)

この時前景画像が GIF 画像の時は合成されるのですが
JPG の場合は合成されずに,透過色がそのまま描画されてしまいます.

JPG では,ImageAttr を設定し,画像を合成する事はできないのでしょうか?
>>499
単に圧縮する時に色が変わってるだけじゃないの?

>>497
SoapFormatterならFontを問題なくシリアライズ・デシリアライズできるはずだが。
なんか他の要因があるような。
MessageBox は通常だと画面中央に表示されますが、
これを任意の位置に表示するにはどうすればいいの
でしょうか?
>>497
ISerializableを実装させる。
.ctor(SerializationInfo info, StreamingContext context)
GetDataObject(SerializationInfo info, StreamingContext context)
でそれぞれFontConverterを使ってstringと変換しあう。

>>501
マジレス、自分でFormから作る。
503497:04/09/06 17:13
>>502
やはりそれしかないんですか。
試行錯誤の結果、Font名、サイズ、スタイルと
別々に格納するという方法にしてみたんですけどねえ。
Fontクラスは、シリアル化はできるけどISerializableの
実装をしないと逆シリアル化はできないんですかね・・・

なんにせよ、回答ありがとう。
アイコンDLLを作ろうと思ったらどうすればよいですか?
505490:04/09/06 23:41
1 アイコンを作成。
2 DLLを作成。
>>504
/win32res を使うんじゃないかな
>>507
/win32res の使い方が分かりません
プロパティーにそれらしい項目が無いんですけど
>>508
ただのアイコン詰め合わせくらいコンパイラでやれって。
csc /t:library /win32res:Icon1.RES class1.cs
でも出来ないんですけど
icon1.resとやらはどうやってつくったのさ。
\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\rc.exeに
アイコンファイルをD&Dしたら出来ました
>>512
ok, あとはrc.exeの意味と使い方を知るだけだ。
ヘルプの/win32resをもう一度熟読して、googleに尋ねるべし。
>>513
できました
リソーススクリプトを入れるんですね
とても勉強になりました、どうもありがとうございました
DLLにアイコンを突っ込んだ要領でWindowsアプリに複数のアイコンをつけようとしたのですが
コンパイル後にできたexeを実行すると
'System.Resources.MissingManifestResourceException' のハンドルされていない例外が mscorlib.dll で発生しました。

追加情報 : 指定されたカルチャ (またはニュートラル カルチャ) に必要なリソースがアセンブリに見つかりません。"Form1.resources" が、アセンブリ "Form1" に正しく埋め込まれているか、またはリンクされているかを確認してください。
baseName: Form1 locationInfo: CommandTableMaker.Form1 resource file name: Form1.resources assembly: Form1, Version=1.0.1711.30489, Culture=neutral, PublicKeyToken=null

というエラーが出て実行できません
アイコンはきちんと指定した分だけ登録されているようなので
コンパイルさえ完全に出来れば完成なのですが・・・

ちなみにコンパイル時のコマンドは
csc /t:winexe /win32res:icon.res *.cs
です(icon.resはアイコンのコンパイル済みリソーススクリプト)
>>515
Form1はVC#で組んでる?
だとしたらobjディレクトリに*resourcesがあるからそれも突っ込め。
やってみましたが結果が同じでした
csc /t:winexe /res:NameSpace.Form1.r
esources,NameSpace.Form2.resources,NameSpace.Form3.resources
/win32res:icon.res *.cs
ちなみに、Form2,3はアプリ内で使う別窓です
あと、コンパイル用にソースがあるフォルダにresourcesファイルを全部コピーしました
shift-jisでファイルから読み取った文字列に対してTrim()を使っても空白が削除されてくれません。
ユニコードに変換したりとかしないといけないのでしょうか?
>>518
素敵に意味不明。

>  shift-jisでファイルから読み取った文字列に対してTrim()を使っても空白が削除されてくれません。
削除される空白は文字列の先頭からと末尾からのそれぞれ非空白文字が出現するまで、ってOK?
"   p   r    "  -> "p   r"

>  ユニコードに変換したりとかしないといけないのでしょうか?
.NETは内部の文字列処理にUnicodeを使っているので一旦stringになったらエンコードは関係ない。
憶測だけど
string a = " hoge ";
a.Trim();
とかして、「aの中身が変わらない〜」とか言っているような気がする。
error: cannot obtain value

というエラーはどういった時に出るものなのでしょうか?
ウォッチウィンドウでラベルのテキストを見ていると、
あるラベルの値だけが上記のようなエラーになっており、
その後デバッグも続行できない状態になります。
ウォッチウィンドウにそのラベルのテキストを加えなければなんともなりません。

このようなエラーが出たことのある方、何か情報を頂ければ・・・と思います。
>>521
ここに似たような経験をした人がいますね。
http://www.error-bank.com/microsoft.public.dotnet.languages.vb.1/150478_Thread.aspx
523517:04/09/08 22:26
色々やってみましたが無理っぽいのでDLLで済ませることにしました
皆さんどうもお騒がせしました
524デフォルトの名無しさん:04/09/09 10:29
PictureBoxに画像が表示されれている状態で、
以下の部分でとエラーとなり、0byteのJpegファイルが生成されてしまいます。
どこを訂正すればよいのでしょうか。

if( PictureBox.Image != null ){
  FileStream FS = new FileStream( filePath, FileMode.Create);
  PictureBox.Image.Save( FS, ImageFormat.Jpeg );
}

エラー内容
'System.Runtime.InteropServices.ExternalException' のハンドルされていない例外が system.drawing.dll で発生しました。
追加情報 : GDI+ で一般的なエラーが発生しました。
>>524
ttp://www.google.com/search?num=100&oe=utf8&q=image+save+gdi%2B+error
いろいろあるね。

StreamをCloseしろとか、ファイル/フォルダにパーミッションがあるのかとか。
526524:04/09/09 12:25
ごめんなさい。上のStream.Close()は書き忘れです。


FileStream FS_TEST1 = new FileStream( @"C:\TEST1.bmp", FileMode.Open, FileAccess.Read );
FileStream FS_TEST2 = new FileStream( @"C:\TEST2.bmp", FileMode.Create );

Image IMG = Image.FromStream( FS_TEST1 ); // この段階でIMGがnullでないことは確認済み
FS_TEST1.Close();

IMG.Save( FS_TEST2, ImageFormat.Bmp ); //ここで "GDI+の一般的エラー"
FS_TEST2.Close();


これで、やはりTEST2.bmpが0 byteで生成されてしまいました。

例えばFileInfo.Copy()での書き込みや、適当にテキストファイルを生成することは出来ているので、
書き込み権は関係ないのではないかと思っています。
527524:04/09/09 17:55
度々すいません。上のIMG.Saveの行を

FS_TEST2.WriteByte(1);

とかに変えてみると、ちゃんと1byte書き込まれたファイルが
生成できることを確認しました。さっぱりです…。help me...
環境 : Win2003SV + VS2003 + .NET1.1
あるファイルとあるファイルの内容が同じが異なるかを調べたいのですが
何かよい方法はないでしょうか?

大量(数千のオーダー)に存在するファイルの中から重複するファイルを
省く,という処理を行ないたいのです.
529在日参政権反対:04/09/09 19:06
サイズ比べて同じならバイナリ比較.
前もってハッシュ作レるかとかの条件ももっと細かくかかんとアドバイスできんよ。
530528:04/09/09 19:24
>> 529 ありがとうございます.

サイズは似たりよったりのファイルが多数あるので,ファイルのサイズを
比べただけの時点でかなり複数のファイルが一致してしまいます.
その後にバイナリ比較をするとバイナリ比較を行なうコストが高いと思うので
できれば前もって全てのファイルに対するハッシュを生成し,同一ハッシュ値を
持つファイル同一とみなす,といったような事がしたいのですが,
例えば MD5 の場合,同じ内容であれば同一の MD5ハッシュが生成されるの
でしょうか?

また,MD5 ハッシュを生成するには,一旦ファイルの中身を全て
byte 配列などに読み込み,MD5 ハッシュを求める,という処理が
必要になるのでしょうか?

簡単に,ファイルのパスを渡すと,そのファイルのハッシュ値を返して
くれるようなメソッド,もしくは,ファイル名を2つ渡すと内容が同一か
を判断してくれるようなクラスライブラリは .NET Framework には存在
しないでしょうか?

存在しないようであれば,自作するしかないのかな,と思っています.

アドバイスよろしくお願いします.

>>530
そのものMD5クラスがある。使い方はヘルプをよく読む。

>  例えば MD5 の場合,同じ内容であれば同一の MD5ハッシュが生成されるの
>  でしょうか?

そうでなきゃハッシュの意味がないだろう……。
532在日参政権反対:04/09/09 19:50
>530
おまい少しはコードかけ...
他のスレッドが作ったコントロールを非表示にすることはいけないことなのでしょうか?
デザイナで作ったボタンなどのVisibleをfalseにして、
新たに生成したスレッドからVisible=trueとすると、表示がされません。


//button1.Visible = false;

private void Thread1()
{
this.button1.Visible = true;
//表示されない
}

しかし、メインスレッドから一度Visibleをtrueにした後なら、異なるスレッドからでもVisibleをいじることが出来ます。
さっぱり意味がわかりません・・・。
534528:04/09/09 20:10
>> 530
すいません.どうやって実装したらいいのか迷っていたので.
案ずるより…という事でやってみました.

using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
MD5CryptoServiceProvider csp = new MD5CryptoServiceProvider();
string checksum = BitConverter.ToString(csp.ComputeHash(fs)).Replace("-", "").ToLower();
}

以外に簡単でした(w

つっこみどころ満載でしたら,つっこみ願います.
535528:04/09/09 20:11
ミス.

>> 530 じゃなくて >> 532 でした.
スマソ.
>>533
コントロールはスレッドセーフじゃないから、
別スレッドから直接コントロールを操作するのは「お行儀が悪い」。

別スレッドからコントロールを操作するなら、
InvokeまたはBeginInvokeを使って元スレッドに操作を依頼する形が普通。

ttp://ukamen.hp.infoseek.co.jp/Programming/Asyncro/index.htm
>>536
ありがとうございました
>>534
出来たんなら問題ないんでは?
漏れが細かいとこ突っ込むとこんな感じになるが。

- MD5CryptoServiceProvider csp = new MD5CryptoServiceProvider();
+ HashAlgorithm csp = HashAlgorithm.Create("MD5");
cspという変数名がやだ。
540デフォルトの名無しさん:04/09/09 23:35
class Class1
{
 [DllImport("user32.dll",CharSet=CharSet.Unicode)]
  public static extern IntPtr PostMessage(IntPtr hwnd,int wMsg,IntPtr wParam,IntPtr lParam);
 
 [STAThread]
 static void Main(string[] args)
 {
  System.Diagnostics.Process p = System.Diagnostics.Process.Start("notepad.exe");
  p.WaitForInputIdle();

  int WM_CHAR = 0x0102;
  char c = 's';
  PostMessage(p.MainWindowHandle ,WM_CHAR ,new IntPtr(c), IntPtr.Zero);
 }
}

外部アプリを起動して文字列を送信したいのですが上手くいきません。
notepadの起動は出来るんですがPostMessageが全く無視されてしまいます
何が悪いのかサッパリ分かりません
お願いです助けてください。
>>540
ポインタ関係は一切送れない。少なくともMessage系では絶対に。
常用エディタのxyzzyやcmd.exeでは受け取ってくれた。
notepad、wordpadは無視された。
受け取るアプリの方の問題らしい。

>>541
これにポインタは含まれてないような。
>>540
notepadの場合 Edit に送らないとダメなのでは?

>>541
refつけたりマーシャリングしたりすれば送れたかったけ?
無理なら System.Runtime.InteropServices.Marshal なんてものもあるが。
544デフォルトの名無しさん:04/09/10 00:38
ていうか、なんでIntPtrで宣言してんだ?intでいいじゃん。
>>524
例外処理くらいしろ
546540:04/09/10 01:33
できたー!!
皆さんありがとうございました!!
class Class1
{
 [DllImport("user32.dll"]
  public static extern int PostMessage(IntPtr hwnd,int wMsg,IntPtr wParam,IntPtr lParam);
 [DllImport("user32.dll")]
  private static extern int FindWindowEx(IntPtr parentWindow, int childWindow, string _ClassName, string _WindowName);

 [STAThread]
 static void Main(string[] args)
 {
  System.Diagnostics.Process p = System.Diagnostics.Process.Start("notepad.exe");
  p.WaitForInputIdle();

  IntPtr hwindow = (IntPtr)FindWindowEx(p.MainWindowHandle, 0, "edit", null);

  int WM_CHAR = 0x0102;
  char c = 's';
  PostMessage(hwindow ,WM_CHAR ,new IntPtr(c), IntPtr.Zero);
 }
}
あー後はソースを綺麗にしなきゃ。
547524:04/09/10 14:54:29
>>545
例外処理はしますが、それだけでは
ImageがStreamに送れない問題は解決しないです…。
548在日参政権反対:04/09/10 16:13:36
>524
わからんのだけど、一般的エラーってなんなんだよ...COMでも同じようなのあって切れた覚えが...
549デフォルトの名無しさん:04/09/10 18:36:25
struct dat
{
int index;
string str;
}
data = new dat[10];
data[0].index=1;
data[0].str="ddd";
・・・
data[9].index=99;
data[9].str="ddd";

↑のindexの所をソートするとstrもソートするにはどうしたら良いのですか?
それと、Arraylistを利用してこの構造体配列変数にデータ挿入や削除させる事は可能ですか?
550549:04/09/10 18:42:29
data[].index.sort みたいな事をしたらstrも変わる様にしたいのです。
551デフォルトの名無しさん:04/09/10 18:50:29

各要素のindexによってdataをソートするんだよね?
なんか勘違いしてる気がする。
int[] indexとstring[] strをそれぞれ別々に持ってソートするってことかな?
でindexをソートするとstrもソートされる、と?

つまり
int[] index = {3, 5, 2};
string[] str = {"c", "b", "a};

Array.Sort(index)した時にArray.Sort(str)も実行、と。
結果は
index = {2, 3, 5}
str = {"a", "b", "c}
こういう解釈で良いのかな。
552549:04/09/10 19:08:04
>>551
間違ってました。indexの所だけソートしたらstrも追従して
前 index=3,5,2 str=c,b,a
後 index=2,3,5 str=a,c,b
の様にしたいのです。
それで、この二つの変数は構造体でワンセットになってて、さらにそれが配列変数に
なっています。
簡単にいえば住所録みたいに名前とナンバーを付けといて、ナンバーをソートしたら
名前もそれに従うという風にしたいのです。
もう一つ、住所録なので挿入と削除も実装したいので構造体にそういう機能は無いのかな
と思ったのです。
553デフォルトの名無しさん:04/09/10 19:40:44
class MyData{
 public int no;
 public int name;
 public MyData(int no, int name){ this.no=no; this.name=name; }
}

class MyDataNoComparer : IComparer{
//二つのMyDataのnoを比較する
 public int Comparer(object x, object y){
  return ((MyData)x).no - ((MyData)y).no;
 }
}

ArrayList al = new ArrayList();
al.Add(new MyData(6, "six"));
al.Add(new MyData(3, "three"));
al.Add(new MyData(8, "eight"));
al.Add(new MyData(5, "five"));
al.RemoveAt(3); //「five」を削除
al.Insert(1, new MyData(1, "one")); //「three」の前に挿入
al.Sort(new MyDataNoComparer()); //noで並べ替え
554デフォルトの名無しさん:04/09/10 19:57:35
>>553
MyDataにIComparableを実装させる方が自然じゃないか?
555デフォルトの名無しさん:04/09/10 21:19:03
Paintイベントが非同期的に呼ばれることってあるんでしょうか?
私の勉強した知識では、PaintイベントはWndProcがWM_PAINTを受け取ってから実行されると思いますが、
WndProcがWM_PAINTを連続で受け取っても、非同期でPaintイベントを起こしたりはしないと考えているのですが。

FormのPaintイベント内でBitmapをDrawImageでロードしてるのですが、
「そのオブジェクトは使われています」というエラーが出てしまいます。
lock(Bitmap)
{
e.Graphics.DrawImage(bitmap, 0, 0);
}
でエラーは出なくなったのですが、イマイチ釈然としません。
556デフォルトの名無しさん:04/09/10 22:25:01
>>555
漏れも釈然としないので(マルチスレッドAPではないですよね)、
Graphics.FromImage でその Bitmap に対して作成した Graphics を Dispose し忘れている、
に1票。
557555:04/09/10 22:48:26
>>556
Paintイベント内なので

private void Form1_Paint(object sender, PaintEventArgs e){
Graphics g = e.Graphics;
.....
となっておりますので、BitmapのGraphicsは生成しておりません。

言い忘れましたがマルチスレッドアプリケーションです。
マルチスレッドアプリケーションならありうることなのでしょうか?
558デフォルトの名無しさん:04/09/11 00:55:39
そりゃマルチスレッドなら十分ありうるよ。
559デフォルトの名無しさん:04/09/11 23:49:03
物凄い初歩の質問で恐縮なのですが、
ウィンドウのサイズ変更時にテキストボックスとかのサイズ(レイアウト)を変更する時って
Resizeイベントが発生した時にWidthとかの値を取得して自分で設定するんですよね?
もっと簡単な方法(もしくはこの方法に問題が)ってあるんでしょうか?
560デフォルトの名無しさん:04/09/11 23:51:02
>>559
普通はDockまたはAnchorプロパティを使う。
561デフォルトの名無しさん:04/09/12 00:03:09
>>560
縦横に複数並べてテキストボックス等配置してあるんですが、
そのレイアウト(というか比率というか)も設定できます?
できればこのテキストボックスは長めに伸びて・・・みたいなことをしたいんですが。
562デフォルトの名無しさん:04/09/12 00:03:46
「縦横にテキストボックス等を複数並べて配置してあるんですが、」
でした。
563デフォルトの名無しさん:04/09/12 01:21:01
DockやAnchorは便利だけど単純な機能しか持ってない。
複雑なレイアウトを実現しようと思ったら自分でやるしかないんじゃないかな?
564デフォルトの名無しさん:04/09/12 06:40:52
リサイズ関係はここが詳しい。
比率も均等分割だったら可能。
ttp://home.att.ne.jp/banana/akatsuki/doc/atlwtl/atlwtl18-02/index.html
565559:04/09/12 09:41:01
>>563
>>564
ありがとうございます。
参考にしてみます。
566デフォルトの名無しさん:04/09/12 19:54:01
すみません質問なのですが。
C#で作った簡単なプログラムをサイトなどにアップする場合に
セキュリティ面で気をつけることはあるでしょうか?
個人情報流出とか、PCを特定されるとか・・
567デフォルトの名無しさん:04/09/12 20:15:06
>>566
コードは書いたとおりにしか動かない。
自分で作ってあげる分には心配ないはず。
568デフォルトの名無しさん:04/09/12 20:20:33
>>567
ちょっと、まだ最近始めたばかりであまりわからないのですが、
自分のプログラムをアセンブリして見ると
シリアルIDっぽいものや、ディレクトリ情報などがあると思うのですが
それ以外に何か情報が入ってないのかってのが心配です。
569デフォルトの名無しさん:04/09/12 22:04:12
何故かminimumsizeをsizeと同じに設定したら
下に余白が出来て最小の状態でウィンドウが開かなくなってしまったorz

作り直しか・・・
570デフォルトの名無しさん:04/09/12 22:29:28
と、思ったらメインメニューが悪さしてるような・・・。
試しにメインメニューをカットしてみたら意図した起動になりました。
なんなんだろう・・・。
571デフォルトの名無しさん:04/09/12 23:30:43
>>568
別に違法コピーとかしてなきゃ問題無いでしょ。
572デフォルトの名無しさん:04/09/12 23:36:19
>>571
実は自分のプログラムをラウンジってソース置き場あるでしょ?
あそこにうpしたらさ、なんかおれのPCに穴が開いたらしくて
おれのパソコンの中身とか見れたんだって
実際そいつが、うpしたファイルのディレクトリの場所知ってたし
プログラム自体のセキュリティってどうなのかなと思いまして
573デフォルトの名無しさん:04/09/12 23:53:49
574デフォルトの名無しさん:04/09/13 00:18:37
( ゚д゚)ポカーン
575デフォルトの名無しさん:04/09/13 00:32:57
この話って本当か!?
576デフォルトの名無しさん:04/09/13 00:37:25
>>572
もっと勉強しろ。
577デフォルトの名無しさん:04/09/13 00:54:59
RichTextBoxのスクロールバーで質問なのですが
バー自体をつまんで移動した時に、
移動した情報やバーがつかまれた等認識できるのでしょうか?
(hscroll等のように▼▲おしたときにクリックイベントとんで来るとか・・・)
よろしくお願いします。
578デフォルトの名無しさん:04/09/13 05:36:08
>>572
デバッグビルド?
579デフォルトの名無しさん:04/09/13 10:23:21
動的プロパティにプログラムから値を設定したいんですがどうすればよいのでしょうか。
580572:04/09/13 10:41:41
みなさんに知識分けてほしいんです
自分で調べても、ノートンや、ウィルスチェックソフトのサイトしか見つからなくて
本当に怖いんです。
別に問題ないならいいんですが。偶然でもディレクトリの場所なんて
わからないはずなんですが、お願いします
581デフォルトの名無しさん:04/09/13 10:46:24
時々市販のプログラムでも、ディレクトリ情報が入っているプログラムがあるな。
582デフォルトの名無しさん:04/09/13 10:46:44
>>580
問題ない。
583デフォルトの名無しさん:04/09/13 11:05:02
まぁ仮に見えたとしても、別に構わんよ。
584572:04/09/13 12:50:56
>>581
ディレクトリ情報っていっても、コンパイルした場所じゃないんです。
コンパイルした情報は埋め込まれてるのはわかります(消す方法ないですか?)

そうじゃなくて、ファイルをサイトにアップしたのですが
コンパイルした場所からじゃなくて、別のドライブのディレクトリに移動して
そこからうpしたのですが、その別のドライブのディレクトリに
まだファイルがあるってことを指摘されたんです
585デフォルトの名無しさん:04/09/13 13:17:01
>>584
そろそろスレ違いに気付け。
それはもはやC#の話題ではない。
586572:04/09/13 13:36:21
>>585
そうなんですか?プログラムに問題あると思ったのですが・・
どういうスレいけばいいでしょうか?
587デフォルトの名無しさん:04/09/13 14:11:39
>>586
プログラムに問題があると思うならソースを公開汁
588在日参政権反対:04/09/13 14:27:16
実際どうか知らんけど、設定とかデバッグビルドだからってことでディレクトリ情報はいった利することもあるんでは?
だとしたらあながちすれ違いともいえんと思うが.
589デフォルトの名無しさん:04/09/13 14:31:14
デバッグ版のpdbだね。
590デフォルトの名無しさん:04/09/13 15:42:31
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = 実行ファイルのパス;
p.Start();
で起動したアプリをこのプログラムで終了したいのですが
そのような事は可能なのでしょうか?
591デフォルトの名無しさん:04/09/13 15:53:26
p.Close();
592590:04/09/13 16:06:05
CheckBoxで判定するとして
if (checkBox.Checked)
{
p.Start();
}
else
{
p.Close();
}
としても、何も起こらないんですけど・・・
593デフォルトの名無しさん:04/09/13 16:29:54
>>590 >>592
ヘルプを見てみろ、おまえの質問にぴったりのメンバがあるはずだ
594572:04/09/13 16:39:42
ここにいるやつってその程度の知識なの?
自分で作ったソフトをexeのファイルをアセンブリなり
バイナリでみてみろよ。ヘッダの情報にディレクトリ構造でるだろ?

てか、おれの言ってること理解できないのかよ?

そうじゃなくて、ファイルをサイトにアップしたのですが
コンパイルした場所からじゃなくて、別のドライブのディレクトリに移動して
そこからうpしたのですが、その別のドライブのディレクトリに
まだファイルがあるってことを指摘されたんです

っていってるだろ。どこからファイルうpしたかは、サイト運営者しか
わからないだろ?それがなんで運営者でもないのにわかるのかって聞いてんだよ
595デフォルトの名無しさん:04/09/13 16:44:49
>>594
あなたのPCが乗っ取られているかサイトがが乗っ取られているかのどちらか。
596デフォルトの名無しさん:04/09/13 16:46:40
>>594
>  ここにいるやつってその程度の知識なの?
>  自分で作ったソフトをexeのファイルをアセンブリなり
>  バイナリでみてみろよ。ヘッダの情報にディレクトリ構造でるだろ?

だってそんなのないんだもの。
唯一>>589の言うとおり/debug+でビルドした時のみ.pdbのフルパスがバイナリに含まれるけど。
597デフォルトの名無しさん:04/09/13 16:48:58
PictureBoxをダブルクリックしたとき、それが左ダブルクリックなのか右ダブルクリックなのか
判別したいのですが、なにかいい方法は無いでしょうか?
598在日参政権反対:04/09/13 16:54:16
> てか、おれの言ってること理解できないのかよ?
>
> そうじゃなくて、ファイルをサイトにアップしたのですが
> コンパイルした場所からじゃなくて、別のドライブのディレクトリに移動して
> そこからうpしたのですが、その別のドライブのディレクトリに
> まだファイルがあるってことを指摘されたんです
>
> っていってるだろ。どこからファイルうpしたかは、サイト運営者しか

はっきりいって、いってません。ほんものの572かはしらんが
599572:04/09/13 17:01:27
デバッグ版をうpしてしまった場合なにか問題ありますか?
600デフォルトの名無しさん:04/09/13 17:02:35
>>599
馬鹿にされて終わる
601572:04/09/13 17:04:02
>>600
すみません。詳しくお願いします。個人情報に関わるようなことは
ディレクトリ構造がばれるぐらいでしょうか?
602デフォルトの名無しさん:04/09/13 17:08:32
デバッグ版をupしたの?
603デフォルトの名無しさん:04/09/13 17:09:46
>>601
それ以上の何を心配してるんだ。w
604572:04/09/13 17:10:34
>>602
debugフォルダにあるexeファイルをうpしてしまいました
何か問題ありますでしょうか?
最近始めたので、コンパイルすればそれでいいと思ってたのですが
Releaseに設定しないとダメなんですね。
最近のプログラムって難しいです
605591:04/09/13 17:16:08
>>592
ごめん。上のウソだった。

無理やりヤっちゃいたい時は p.Kill()
優しくしたい時は p.WaitForExit()

>>597
MouseEventArgsのButtonsプロパティで拾えるから
あとはアーダコーダやればOK。
606572:04/09/13 17:17:35
話変わりますけど

リストビューの項目を色分けで表示したいのですが
どうすればいいですか?
htmlの形式でやったほうが一番手っ取り早いですか?
607デフォルトの名無しさん:04/09/13 17:18:13
だからディレクトリが分かることだけ。
ユーザー名も分かる可能性あり。
まだファイルがあるかどうかは当然分からない。

デバッグ版はupしない。
念のためプロジェクトフォルダはユーザー名が含まれる可能性のあるデフォから変えておく。
608デフォルトの名無しさん:04/09/13 17:28:05
>>597
>>605の補足。
DoubleClickイベントだとただのEventArgsしか取得できないので、
MouseDown辺りを使ってMouseEventArgs.Clicks == 2のときにダブルクリック時の処理を書く。

>>606
> リストビューの項目を色分けで表示したいのですが
> どうすればいいですか?
そのまんまのプロパティがあるだろ……。
609572:04/09/13 17:37:42
>>608
それって2003年版とかですか?
モレのは2002年版なんだけど
なかったんだけどな・・・・
610デフォルトの名無しさん:04/09/13 17:53:33
>>609
『System.Windows.Forms.ListViewItem.ForeColor プロパティ』
とりあえず探してみ
611610:04/09/13 17:54:19
背景色なら『System.Windows.Forms.ListViewItem.BackColor プロパティ』
612デフォルトの名無しさん:04/09/13 18:00:45
>>608
ありがとうございます。試してみます。
613572:04/09/13 18:00:54
>>610
そのプロパティならあるんですが・・・
言い方悪かったみたいで

エクスプローラーでいうと
BMPファイルは赤で色反転
テクストは青で反転みたいな感じで
種類によって色分けしたいんですが
614610:04/09/13 18:04:45
>>613
反転色を変えるの?
だったら無理ぽ

文字色・背景色を変えるならこれらを使う
615572:04/09/13 18:06:47
>>614
文字色背景色もリストビュー項目のすべての色が変わる仕様じゃないですか?
項目ひとつひとつ色を変えることはできなかったような
616デフォルトの名無しさん:04/09/13 18:06:49
SelectedColorを動的に帰るとなると、まぁ、
ListViewItemを自作するしかないわなぁ。
617572:04/09/13 18:10:40
>>616
いや、選択状態にしてなくてもいいので
無選択の状態で項目ごとに色分けできたらいいのですが
それもできないですか?
618610:04/09/13 18:14:59
御前ら!

ListView.ForeColor じゃなくて
ListViewItem.ForeColor だぞ(゚Д゚#)ゴルァ!!
619デフォルトの名無しさん:04/09/13 18:48:54
とりあえず>>572は一週間ぐらいMSDN読み続けろ
なんだこのスレの伸び方は・・・
620572:04/09/13 18:55:57
http://game8.2ch.net/test/read.cgi/netgame/1094909724/594
>594 :名も無き冒険者 :04/09/12 18:19:32 ID:Nw8mXJ5h
>ところで質問。
>PsoBBIdSort.zipとPSO Tranner 1.zipで相変わらず藻前のPCに穴が開いてるのは釣りですか?天然ですか?

肝心のソフトうpしたところ
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1004653717_6/PSO%20Tranner%201.zip
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1004653717_4/PsoBBIdSort.zip

これで穴が空くのがなぜかわかりません。ネットワークに詳しい人いませんか?
また、このラウンジでうpしたのを削除する場合どうすればいいですか?
削除しようにも、パスワードいるらしくてできません
621デフォルトの名無しさん:04/09/13 18:59:03
D:\BUCKUP\MYDATA\MYSOFT\C#\TEST\pso\obj\Debug\pso.pdb
622デフォルトの名無しさん:04/09/13 19:01:16
D:\BUCKUP\MYDATA\MYSOFT\C#\TEST\pso\obj\Debug\pso.pdb
D:\BUCKUP\MYDATA\MYSOFT\C#\test#\PsoBBIdSort\obj\Debug\PsoBBIdSort.pdb

"BackUp" な。綴りはちゃんと覚えないと恥ずかしいぞ?
623572:04/09/13 19:02:25
>>621
>>622
イチイチ晒さなくていいんじゃないですか・・・
ところで、穴って何かわかりますか?
624デフォルトの名無しさん:04/09/13 19:03:47
>>623
とりあえず恥さらしってだけ。
どちらにしろこれだけでは何もされないから安心しとけ
625デフォルトの名無しさん:04/09/13 19:06:09
おかしなヤツがそのパスを持って穴と言ってるだけかと。
626572:04/09/13 19:06:50
>>624
そうですか・・・安心しました。
スレ汚したのは申し訳なかったです。
私にとっては一大事だったので
627デフォルトの名無しさん:04/09/13 19:07:36
PCに穴が開いているのは確かだな。
結果こうやってパスが漏れたわけだし。
628デフォルトの名無しさん:04/09/13 19:09:37
>>594にはこう書いてあるぞ

> そうじゃなくて、ファイルをサイトにアップしたのですが
> コンパイルした場所からじゃなくて、別のドライブのディレクトリに移動して
> そこからうpしたのですが、その別のドライブのディレクトリに
> まだファイルがあるってことを指摘されたんです
629572:04/09/13 19:10:26
>>627
なるほど、セキュリティの穴って訳じゃなかったんですね。
あ、でも、PC内部の構造だから一応セキュリティってことか
つーか、デバッグとリリースってのがあるとは・・
630デフォルトの名無しさん:04/09/13 19:13:55
>>628
移動先のディレクトリでコンパイルし直したのをあげた予感
BackUp フォルダでコンパイルすることって……よくあることなのか?
631デフォルトの名無しさん:04/09/13 19:14:32
> まだファイルがあるってことを指摘されたんです

これはどこのレスで指摘されたの?
632デフォルトの名無しさん:04/09/13 19:14:44
>>628
最初はコンパイルした場所から、次に別のドライブで
>>520 の「相変わらず」に繋がるわけだろう。
気にするほどのことでもない。
633572:04/09/13 19:16:10
>>628
>>620の分を読んでセキュリティに穴が開いてるのかと思い
そうすると、WEBサイトから何かしら情報抜き出して
おれのパソコンに繋げてきてるのかと思って
うpしたディレクトリみたら、
そのファイルがまだ残っていたので(それ以外は削除したのに)
てっきり、残っているファイルが何かわかっているのだと思ったのです
ネットワーク関連の知識はまったくないので・・
でも、一応、すべてのファイルはアドミニスターしかアクセスできないように
してるので、運営者などに仮にIP特定されてアクセスされても
アップしたファイルにはアクセスできても他のファイルにはアクセスできないはずなのに
早とちりだったのかな。とりあえず、これで安心して眠れます
634デフォルトの名無しさん:04/09/13 19:18:53
残暑が厳しいなぁ
635572:04/09/13 19:19:23
>>630
BACKUPフォルダにあるファイルは1週間ごとにDVDRAMにバックアップ取ってるので
そういう意味で付けました。消えては困るファイルだけをそこに・・・

このソフトはどうでもよかったのですが、面倒だったので、そのままそのディレクトリで
コンパイルしてしまってました。

みなさん、やさしいですね><ほんと、助かりました。ありがとうございます
636デフォルトの名無しさん:04/09/13 19:19:23
ID:AacwGZwB 痛すぎ
637デフォルトの名無しさん:04/09/13 19:20:07
>>633
揚げ足を取るようで申し訳ないが“アドミニストレータ” (^^
638デフォルトの名無しさん:04/09/13 20:32:52
そしてAdmin権限で隠し共有からファイル抜きたい放題。
639デフォルトの名無しさん:04/09/13 23:50:28
たまにアカウントを本名で登録している奴いるよな。
そういうのがマイドキュメントでビルドしたら、いい恥晒しになるかもしれんね。
640デフォルトの名無しさん:04/09/13 23:55:04
>>639
人の名前を笑っちゃあかんだろw
本名晒したことは笑えるが

……どちらにしろリリースビルドすれば大丈夫だよね?
641デフォルトの名無しさん:04/09/13 23:57:56
>>605
>無理やりヤっちゃいたい時は p.Kill()
>優しくしたい時は p.WaitForExit()
うんむ〜。
WaitForExitはやさしくやるとかそういう問題ではないが…
通常のウィンドウのあるアプリならCloseMainWindow。ただし終われるとは限らない。
ウィンドウのないプロセスは通常強制終了(Kill)するしかない。
642デフォルトの名無しさん:04/09/14 00:14:47
MSDN見たらInvalidateがスレッドセーフではなかったんですが、
ってことはやっぱり他スレッドからInvalidateを呼んではいけないんでしょうか?
私はてっきりWndProcにWM_PAINT投げるだけかと思っていたんですが。

>>536のサイトも見たのですが、BeginInvokeで問題ないんでしょうか?
643デフォルトの名無しさん:04/09/14 00:31:30
>>642
疑問に思ったらILDASM。
結構いろいろやってるもんだな。

>  >>536のサイトも見たのですが、BeginInvokeで問題ないんでしょうか?

うん、それでOK
644デフォルトの名無しさん:04/09/14 01:46:00
ADO.NET関連はこちらでいいんでしょうか。
Web製作板探してみたんですが、見当たらないのでこちらで失礼します。
ADO.NET C#でSQL ServerにViewを作成しようとしています。

System.Data.OleDb.OleDbCommand command = new OleDbCommand();
command.CommandText = @"CREATE VIEW [search_view] AS SELECT * FROM [ddb].[msg_tb]" + @" WHERE [comment] LIKE ?";
command.Parameters.Add( "@comment" , System.Data.OleDb.OleDbType.VarChar , 1000 , "comment" ).Value="%test%";
command.Connection = this.connection;
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter( command );
adapter.Fill( myDataSet.msg_tb );

SQL文についてはクエリアナライザで問題なく動作することを確認しております。

しかしコード中で実行すると「キーワード 'VIEW' 付近に正しくない構文があります。 」と例外で出てしまいます。
色々と試して見ましたが、WHERE 以下の文字列を削除すればViewは作成されます。
そしてcommand.Parameterを使用して文字列(LIKE ?部分)を追加するのではなく、?部分を直接文字列%test%」にすると正常動作します。
どうすれば解決できるでしょうか。よろしくお願いします。
645デフォルトの名無しさん:04/09/14 02:34:03
何で列名を指定してる?
646デフォルトの名無しさん:04/09/14 02:42:01
colorに定義されてるシステム色を順番に出力したいのですがどうすればいいでしょうか?

毎回、Color.Redとか名前で指定するのが面倒なので・・
647デフォルトの名無しさん:04/09/14 02:51:11
リフレクション

順番ってなんじゃろ?
648デフォルトの名無しさん:04/09/14 03:12:52
いぜんMFC使ってて、バグった時になかのソースまで終えるのが好きだったんですが、COMで切れそうになりました.
.NETやると同じ責め苦を味わう羽目になるんでしょうか?
649デフォルトの名無しさん:04/09/14 08:00:43
>>646
Colorクラスでリフレクションしても出来るが、この方が楽。
つーかヘルプにしっかり書いてるだろ・・・
お前が言うところの「順番」を満たしているかは知らん。
foreach (string s in Enum.GetNames(typeof(KnownColor))) orz(Color.FromName(s));
650デフォルトの名無しさん:04/09/14 08:20:53
>>648
>いぜん、なかの、終える
落ち着いて書け。

>同じ責め苦
どういう責め苦なんざんしょ。
651590:04/09/14 11:21:00
遅レスですが>>590です。
>>605 >>641 レスありがとう。
p.CloseMainWindowは前に試したときは動かなかったのですが、
書き込みを見て再度見直したところ、とりあえず終了する事は出来ました。
でもこれって直前のプロセスを終了するだけみたいですね。
ラウンチャみたいなのを作っていて、
まとめて起動したのを、まとめて終了したいなと思いました。
パスを指定して終了とか出来れば良いんですけど、それは無理みたいですね。
むー。
652デフォルトの名無しさん:04/09/14 11:38:01
>>651
>  でもこれって直前のプロセスを終了するだけみたいですね。
>  ラウンチャみたいなのを作っていて、
>  まとめて起動したのを、まとめて終了したいなと思いました。

ProcessインスタンスをArrayListなりで保持しておいて必要な時にforeachで纏めて殺せば良いだけでは?

>  パスを指定して終了とか出来れば良いんですけど、それは無理みたいですね。

Process.GetProcessesByName静的メソッドとかあるよ。
653デフォルトの名無しさん:04/09/14 11:42:04
windowsアプリケーションの設定を保存するために.configファイルを使いたいと思います。
.configファイルから値を取得するメソッドは見つかりましたが、値を設定するメソッドが見当たりません。
どうすればプログラムから値を設定することができるのでしょうか。
654デフォルトの名無しさん:04/09/14 11:49:43
655在日参政権反対:04/09/14 12:17:26
>650
すまんそ...
以前MFC使ってて、バグった時に中のソースまで追えるのが好きだったんですが、COMで切れそうになりました  ですじゃ...

ADOをMTSで使ってたときですが、呼び出しの中ですっ飛んで、”一般的なエラー”とか原因不明なエラーをだしやがって、中まで追えず、原因わからずきれそうになった経験が.

..
656デフォルトの名無しさん:04/09/14 12:17:47
>>649
ari-
657デフォルトの名無しさん:04/09/14 12:27:27
>>649
ローカル変数sをスコープで宣言することができません。

for文で色を列挙していきたんですが
658デフォルトの名無しさん:04/09/14 12:47:47
>>649
string[] col=Enum.GetNames(typeof(KnownColor));
Color.FromName(col[1]);
これでいけましたありがとう
659653:04/09/14 12:48:02
>>654
これで合ってます。それで、
このサイトではconfigファイルを直接編集して値を書き換えているみたいですが、
値の書き換えをレジストリの設定のようにプログラム内から行いたいんです。
660デフォルトの名無しさん:04/09/14 12:59:07
661524:04/09/14 14:11:21
Image IMG = Image.FromStream( FS );
とやった後、 FS.Close(); してしまうと、

その後の IMG.Save() でエラーがでるということがわかりました。
これはどういうことなんでしょうか?

Image.FromStreamでIMGを作った時点で、
もうFSは関係ないのではないかと思っていたのですが…。

IMGはFSが指すファイルへの参照でしかないということですか?
662デフォルトの名無しさん:04/09/14 15:30:45
ASP.NETで質問です。

ascxファイルを作るとき、テスト用のaspxファイルに
「<%@ Register TagPrefix="uc1" TagName="header" Src="header.ascx" %>」
と記述して、aspxファイルと同じフォルダに入れてテストしてました。

うまくいったので、他のaspxファイルでもheader.ascxを共有して使おうと思い、commonフォルダを上に作って
「<%@ Register TagPrefix="uc1" TagName="header" Src="..\common\header.ascx" %>」
としました。

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

ascxファイルはどうやって共有するのでしょうか?
663653:04/09/14 15:36:38
>>660
その辺りです。例えば、
System.Configuration.ConfigurationSettings.AppSettings["Form1.Icon"] = "hoge.icon";
のようにしたいんですけど、プロパティはgetだけしかないのでできないんですよね。
他にいい方法があると思うんですけど。
664デフォルトの名無しさん:04/09/14 15:45:04
>>663
.NET 2.0ではそんな感じでできるけど1.xではない。
xmlシリアル化とかその辺に転がってるセッティング用のクラス使われたし。
665590:04/09/14 16:19:53
>>652
レスありがとうございます。
変にforで回してしまっていて、かなりやり直さないとダメの予感です。
アドバイスを参考に週末にでもじっくりやり直してみます。
666653:04/09/14 17:55:58
>>664
できないことがわかっただけでよかったです。ありがとうございました。
しばらく適当に自作したクラスを使っときます。
667461:04/09/14 18:24:18
>>465
参考に動くめどがつきました。
ありがとうございました。
668デフォルトの名無しさん:04/09/14 18:54:14
>>643
ありがとうございます

ところでBeginInvokeはただコントロールを所有するスレッドに処理を渡すだけですよね?
ということは、メインスレッドでフォーム、ラベル、ボタンを作った場合、
Form.BeginInvoke(delegate)
label.BeginInvoke(delegate)
button.BeginInvoke(delegate)
のどれでもいいってことでしょうか?
669デフォルトの名無しさん:04/09/14 21:39:32
.configファイルって実行ファイル一つにつき、一つしか作れませんよね?
あれを使えばスキンが作れそうだったけど、上の制約で困ってます。
なにか良い方法はありませんか?
670デフォルトの名無しさん:04/09/14 21:44:10
>>669
.configにこだわらなければ良いんでない?
読込部分を作る必要はあるが、それはたいした手間でもなし。
一番手っ取り早いのは適当なクラスを作ってXmlSerializerで読み書きすることかな?

>>668
そういうことになるね。
671デフォルトの名無しさん:04/09/14 22:38:25
>>655
まあ、デバッガ使うのに慣れておいたほうがいいかも。
672デフォルトの名無しさん:04/09/14 23:11:15
ツールバーの背景色を変更するにはどうしたらよいですか?
flatスタイルにしたら背景色が変わってしまって困っています。
673デフォルトの名無しさん:04/09/15 04:48:08
listView1.Sorting=SortOrder.Ascending
これってリストにアイテムが追加された時点で動作するんですね
Items.Addで項目追加した後に、SubItems.Addしようとすると
エラーはでないのですが、ちゃんと思ったように項目追加できません

一応。一旦SortOrder.Noneにしてからアイテム追加して
その後ソートするって方法を取っていますが
ほかによい方法ありますでしょうか?
674デフォルトの名無しさん:04/09/15 07:22:54
>>661
俺も引っかかったことがある。
俺の場合、Saveじゃなくて、ImageAttributesを使っての描画で落ちた。

ストリームから作成した画像の場合、使い終わるまでそのストリームは閉じてはダメみたいなことを
どっかで読んだ記憶があるがソースは忘れた。
675デフォルトの名無しさん:04/09/15 09:03:11
>>673
> エラーはでないのですが、ちゃんと思ったように項目追加できません

思ったようにって、どういう動作を期待して、
実際には具体的にどういう動作になるのさ。
676デフォルトの名無しさん:04/09/15 09:23:34
>>675
これができない人が本当に多いよね。
(で、順を追って説明させてみると自己解決してしまったり)
677デフォルトの名無しさん:04/09/15 09:27:36
念じたように動かないのなら、
念に反応する入力デバイスの不良が考えられる。
早く修理に出すべきだ。
678 ◆EUpNSU7gLk :04/09/15 09:29:12
>>675-676
本人も書いてるけど、一応解決してるんじゃない?
679デフォルトの名無しさん:04/09/15 09:34:04
フォームを表示するときに
すべてのコントロールを読み込んでから
表示する方法ってどうしたらいいのでしょうか?
コントロールを貼り付けていくと、フォームを表示した時に
読み込んでる感がたっぷりでちゃうんですが・・・
680デフォルトの名無しさん:04/09/15 09:42:04
読み込んでる感は描画の問題じゃないの?
FormにControl.Addしてから表示してるわけだし。
681デフォルトの名無しさん:04/09/15 09:42:26
>>679
そういう場面に出会ったことないけど、イベントハンドラでコントロールを
生成してるの?
それか、やたらコントロールが多いとか?
682デフォルトの名無しさん:04/09/15 09:46:37
インストーラを使わずに
Windowsサービスへの登録、解除を行うにはどうすればよいでしょうか?

ユーザーモードとサービスモードを
オブションから切り替えるような形にしたいのです。
683679:04/09/15 09:48:29
>>681
遊びで100個ぐらいテキストボックスとラベルくっつけてみたら
もっさり感がいっぱいなので、
どうにかならないものかなぁって・・・

こんな事はやらないが正解かなぁ・・・


684デフォルトの名無しさん:04/09/15 09:50:58
Controlの配列つくって、Controls.AddRange()でやると
ちょっとだけ早いかもしれないね。
685679:04/09/15 09:56:42
>>684
なるほど・・・
ちょっとやってみます。
ありがとうございました。

>>680、681
ありがとうございました。
686 ◆FIcNi4f8js :04/09/15 10:05:46
>>682
レジストリを自分で書き換える。
hogehoge.reg というファイルを作ってダブルクリックとか。

---- cut here ----
REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\サービス名]
"パラメータ名"=dword:値
"パラメータ名"=dword:値
"パラメータ名"=dword:値

---- cut here ----
687デフォルトの名無しさん:04/09/15 10:08:06
>>685
起動後に再描画させてみる(他のウィンドウをかぶせてみるとか)と
生成なのか描画なのか切り分けができそう。
688682:04/09/15 13:28:10
>>686
ありがとう。だいたいできました。


DisplayName = サービス名
ImagePath = 実行パス /必要なら引数
Start = スタートアップの種類 ( 2 = 自動、3 = 手動、4 = 無効 )
Type = よくわからないけど他のを真似てみる
ErrorContro"= よくわからないけど他のを真似てみる
ObjectName = ログオンアカウントっぽい?( LocalSystem = ローカルシステムアカウント )
Description = サービスの説明

まだ他にも色々よくわからない値がありましたが、
このくらいやればとりあえず動くっぽいのを確認しました。
689デフォルトの名無しさん:04/09/15 16:15:58
windowsapplicationを作っているのですが、
mainMenuを追加しても、実行時に見えなくなってしまいます。
編集時でも、フォームを選択して、mainMenuのフォーカスをはずすと
見えなくなってしまいます。
これって、どうすれば解決できますか?
宜しくお願い致します。
690デフォルトの名無しさん:04/09/15 16:16:34
>>639を読んで自分のパソコンのアカウントを作り直した俺はあほですか
691デフォルトの名無しさん:04/09/15 16:19:59
うん
692デフォルトの名無しさん:04/09/15 16:55:08
>>690
そんなことせーへんでもマイドキュメントの参照先を変えればいいだけなのにw
693デフォルトの名無しさん:04/09/15 17:00:44
ていうか、マイドキュを使わなきゃいいだけでは?
694デフォルトの名無しさん:04/09/15 17:07:11
でふぉがマイドキュだしね
695デフォルトの名無しさん:04/09/15 17:22:59
Processで起動したアプリケーション(ウィンドウ付き)を、こちらのプログラム側から
最小化したり最大化したり、タスクバーから消したりしたいんですが、どうしたらいいですか?
696デフォルトの名無しさん:04/09/15 17:33:58
>>695
ウィンドウにメッセージを送れ
697デフォルトの名無しさん:04/09/15 17:34:18
適切な条件でウインドウハンドルを取得して、メッセージを送るだけ。
698デフォルトの名無しさん:04/09/15 19:09:59
その関数なりを書いてくださいよ…ぐぐれないじゃないですか。
別にC#でも出来ないわけじゃないんですよね?unmanagedじゃないとできないわけでも無いですよね?
699デフォルトの名無しさん:04/09/15 19:28:16
>>698
なんかエラそうに見えるな・・・
700デフォルトの名無しさん:04/09/15 19:28:45
SendMessage()
701デフォルトの名無しさん:04/09/15 19:38:26
こういう時に自身のWndProc(ref Message)を呼ぶってのはどうなんだろう。
//真っ当じゃないと思うが動作してしまう。
702デフォルトの名無しさん:04/09/15 19:54:37
スレッドの作成したコントロールを他スレッドからいじってはいけない理由はわかったのですが
(Windowsフォームが内部でCOMを使ってるからですよね?)
あるスレッドの作ったBitmapなどのオブジェクトも他スレッドからいじってはいけないのでしょうか?
今のところ不具合は出てないのですが、不安です。
703在日参政権反対:04/09/15 21:52:30
>702
スレッドを使ってはいけないのはMFCのときも同様で、それはWindowHandleとMFC内部の管理オブジェクトとの関連付けでおかしくなる可能性があったため(うろ覚え)
.NETの場合は知らないけれど、多分同じようなものなのでは?そういう意味ではBitmapなどについてはある処理についてはスレッドセーフかもしれないけれど。
704デフォルトの名無しさん:04/09/15 22:56:47
>>703
ありがとうございます
VBからC#に来たので、あまりWindowsの内部についての知識がなかったもので戸惑いました。
ということはMFCでCBitmap(でしたよね?)がスレッドセーフなのかどうか調べればよいのでしょうか?
705デフォルトの名無しさん:04/09/15 22:59:35
>>704
スレッドセーフと、「コントロールは他のスレッドからアクセスしてはいけない」は微妙に違ったり
MSDN あたりに書いてあるんじゃないかな?
706デフォルトの名無しさん:04/09/15 23:17:50
スミマセン
スレッドセーフの意味を履き違えていました。
MSDNには、MFCはオブジェクトレベルでの安全性を保証していないので
複数のスレッドからオブジェクトを共有する場合は同期を取る云々、とありました。

コントロール等の記述は見当たらなかったのですが、
複数スレッドからオブジェクトは共有出来るのではないかと思いました。

COMが絡むのはWindowsフォームだけなのでしょうか?
質問ばかりでスミマセン。
707デフォルトの名無しさん:04/09/15 23:53:18
>>706
それなら、C# では lock を使ってオブジェクトを排他制御すればよし

COMが絡んでも、.NET だとラップされてるから関係ないんじゃないか?
マニュアルのどこかに、特殊な操作を必要とするなら書いてあると思う

冷たいようだが、マニュアルを読めって事なのかな?
708デフォルトの名無しさん:04/09/15 23:57:47
>>706
MFCの資料だけど原理は一緒。「ウィンドウ ハンドルのマップ」のとこ読んどけ。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_core_Multithreading.3a_.Programming_Tips.asp
709デフォルトの名無しさん:04/09/15 23:59:20
windowsプログラミングで
Application.EnableVisualStyles();
としてXPスタイルを有効にするとツールバーのアイコンが見えなくなってしまいます。
どうすればよいのでしょうか。
710デフォルトの名無しさん:04/09/16 00:03:34
バグなので素直にmanifest使う
711デフォルトの名無しさん:04/09/16 00:03:54
>>709
ttp://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=2916

EnableVisualStylesはバグ多めなのでマニフェスト使えってこった。
712デフォルトの名無しさん:04/09/16 00:05:57
スレッド間での同期の取り方はわかるのですが、
オブジェクトを共有することに、Windowフォームコントロールのような特殊な制限があるのかな?と思いまして。
MSDNには、マルチスレッドで他スレッドからコントロールを直接触ると危ないのでBeginInvokeを使う・・・程度しか書いておらず、
ネットで調べたところ、WindowsフォームはCOMを使っているので、
コントロールのオブジェクトがスレッドに関連付けられている、ということまでわかりました。
そこは理解できたのですが、他のオブジェクトはどうなっているのか疑問に思った次第です。

COMの理解が進んでいないのですが、
WordにExcelやBitmapを貼り付けられるのもCOMの技術、という記述を見つけたので、
もしかしたらBitmapもCOMでスレッドに関連付けられたりしてるのかと。
713712:04/09/16 00:15:24
スミマセン更新してませんでした。
>>712の書き込みは見なかった事にして下さい。


>>708
この記述からするにBitmapもスレッドを超えて共有することは推奨されてないようなんですが、
ワーカースレッドがBitmapを作成し、描画を行って、
あるタイミングでメインスレッドがそのBitmapを読み込む、という動作も危ないんでしょうか?
そんなわけないと思うのですが・・。
714709:04/09/16 00:22:25
>>711
ありがとうございます。助かりました。
715在日参政権反対:04/09/16 01:31:01
>713
危ないですよ.
逝っておくけれど、メインスレッドとワーカースレッドにはなにも違いはありません.
だからメインスレッドが作ったBitmapにワーカーがアクセスすることが危ないのならワーカーが作った物にメインがアクセスする事もまた危ないのです.

>702
のCOM使ってるうんぬんはたぶん関係ないともいます.というよりCOMは使ってないと思うんですけど...
716712:04/09/16 07:41:21
>>715
危ないですか・・・
それでもBitmapを共有しなくてはいけないので、
HBITMAPで共有したいと思います。
色々とありがとうございました。


詳しくはわからないのですが、
コントロールのドラッグアンドドロップ機能はCOMを使っているそうです。
Mainの属性に[MTAThread]にするとdllエラーが起こるとかなんとか・・・
違ってたらスミマセン。
717デフォルトの名無しさん:04/09/16 12:32:47
>>712
GDI+ のオブジェクトはスレッドセーフではない(←複数のスレッドから同時に操作すると危険)のだけれども、
lock や Monitor を使って一度に1つのスレッドから操作する分には安全なので、C# のラッパークラス
(Graphics やら Bitmap)も大丈夫だと思う。

COM オブジェクトに関しては、複数のスレッドから自由に操作してもよいもの (Free Thread) と、
そうでないもの (Single Thread) とがあります。これは COM の作成者がどっちか決めて作る。

>>716
GDI+ のクラスのラッパークラス (Graphics とか Bitmap とか) は、排他制御さえしていれば
別スレッドからメソッドを呼び出しても問題ないと思うけど・・・
718712:04/09/16 18:40:42
>>717
やはり大丈夫なんでしょうか
MSDNによると「他のコンポーネントと違い、コントロールは作成したスレッドから〜」という記述があるので、
そのまま素直に読めば、他のコンポーネントは作成したスレッド以外からでもいじれるようにも思えました。

今日一日COMについて勉強してみましたが、
STAスレッドのGUIアプリなのに、スレッド間でもオブジェクトの共有が出来てたりするので、
.NETFrameWorkが何かやってるような気がしないでもないです。

.NETとCOMのinteropはおいおい学んでいくとして、
今はこれで納得しようと思います。
皆さんありがとうございました。
719デフォルトの名無しさん:04/09/16 22:57:43
ビットマップのカラーパレットを示すhpaletteを取得したいんですが、
アンセーフじゃないと出来ないんですか?
720デフォルトの名無しさん:04/09/16 23:02:06
お前が試してみてunsafeつけないと失敗するんなら、
アンセーフじゃないと出来ない。
721デフォルトの名無しさん:04/09/16 23:18:46
>>720
聞き方が悪かったです。
アンセーフでhpaletteを取得する方法はわかったのですが、
.NETフレームワークのライブラリの中に取得するメソッドはあるのでしょうか?ということです。
私が調べた限りでは見つかりませんでした。

.GetHpalette()とかそんな感じのメソッドがあるといいんですけど。
722デフォルトの名無しさん:04/09/17 10:23:30
スレ違いなら誘導お願いします

.NET Framework や .NET Compact Framework の サービスパックや
新しいバージョンのリリース予定,現在のバグ一覧などが見られるサイトは
ありませんでしょうか?

あれば教えてください.おねがいします.
723デフォルトの名無しさん:04/09/17 11:51:20
>>722
MSDN
724デフォルトの名無しさん:04/09/17 11:59:41
MSDN はチェックしたつもりなんですが,見つけられませんでした.
お手数おかけして申しわけないのですが,よろしければ
URL をはって頂けませんか?

一番欲しいのはバグ一覧が見たいのですが….
725デフォルトの名無しさん:04/09/17 12:39:12
>>721
ノータッチデプロイとかでどーーーーしても .NET Framework ないでやる必要があるなら、
MemoryStream に BMP で Save して中のヘッダを見ればパレットが取れると思う。
726デフォルトの名無しさん:04/09/17 12:39:40

HPALETTE じゃないけど、パレットの色情報ってことね。
727デフォルトの名無しさん:04/09/17 13:10:55
独り言だけど、マルチスレッド関連、マルチプロセッサ等考慮して非常に厳密にやろうとするなら
lock から出る前に Thread.MemoryBarrier() 呼んだり、あるいは Thread.VolatileWrite 等で書いたり
する必要があるみたいですね。サーバ系AP書いてる人は要注意っぽいな・・・
728デフォルトの名無しさん:04/09/17 18:58:40
上の方で話題になってましたけど
なんでフォームコントロールは他スレッドからアクセスしちゃいけないんですか?
MSDNにもそう書いてありましたけど理由までは載っていなかったので
729デフォルトの名無しさん:04/09/17 19:05:42
>>727
別CPUにスレッドが割り当てられるのってどんな場合があるの?
※普通にやっててそうなる?

もちろんそういう状態で動作するんなら考えないといけないだろうけど、
現実に現在の環境で起こり得るのかなって思って。
730デフォルトの名無しさん:04/09/17 19:25:05
>>728
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpcondevelopingmultithreadedwindowsformscontrol.asp
言っちゃえばWindowsのフォーム管理の都合、だな。

>>727
む、いつの間にそんなメソッドが。1.1からか。
そういうのこそフレームワーク側で制御してほしいもんだが……。

>>729
スレッド2つビジーにすればあっさりCPU二つ100%になるよ。
つかならなかったら悲しいじゃないか、デュアル以上のシステムが。
731デフォルトの名無しさん:04/09/17 19:33:02
>>730
う・・・MSDNは大体目を通したつもりだったのですが
すみません。
スレッディングモデルを考えるのはフォームコントロールの部分だけってことですよね?
ということは同じアプリの中にSTAとフリースレッドが混在してたりするんでしょうか。
気付かずに使ってましたけど、結構難しいんですね。
732デフォルトの名無しさん:04/09/17 19:56:03
>>730
>スレッド2つビジーにすればあっさりCPU二つ100%になるよ。
あら、さいでしたか…
>つかならなかったら悲しいじゃないか、デュアル以上のシステムが。
そりゃそうなんだけど、以前はそういうもんじゃなかったっけ?
733デフォルトの名無しさん:04/09/17 20:24:56
C#でDirect3D9のプログラムを作っているんですが、
カーソルキーのKeyPressイベントを認識してくれません。
これって何かおまじないがいるのでしょうか。
734デフォルトの名無しさん:04/09/17 20:25:00
昔は悲しかったってことさ…。
735デフォルトの名無しさん:04/09/17 20:33:32
736デフォルトの名無しさん:04/09/17 21:19:47
C#と直接関係があるわけじゃないんですけど、
今Socketクラスを使って簡単なHTTPクライアントを作っているんですが、
リクエストをサーバに送ってレスポンスを受け取りますよね?
そのレスポンスがGIFなどの画像ファイルの場合、
どうやって最初にくっついているヘッダー情報を消せばいいんでしょうか?

こんな感じの↓
HTTP/1.1 200 OK
Content-Type: image/gif
Last-Modified: Mon, 22 Mar 2004 23:04:43 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Server: GWS/2.1
Content-Length: 8754
Date: Fri, 17 Sep 2004 12:18:13 GMT

↑このヘッダーを消さないと画像ファイルとして開けないんです。
737デフォルトの名無しさん:04/09/17 21:30:16
>>736
HTTP のレスポンスは、
ヘッダ1 <CR><LF>
ヘッダ2 <CR><LF>
ヘッダ3 <CR><LF>
ヘッダ4 <CR><LF>
ヘッダ5 <CR><LF>
<CR><LF>
このあとデータ本体

って感じになってます。
バグったCGIだと、<CR><LF>のどっちか一個(大抵は <LF>) だけしか送ってこないこともあります。

漏れ的には HttpWebRequest 使ったほうがいいと思うけどね。タイムアウトの制御も簡単だし。
738デフォルトの名無しさん:04/09/17 21:30:52
空行があったら、そこまでを切り離せば良い。
739デフォルトの名無しさん:04/09/17 21:32:54
あ、「どうやって消す」っていう質問だったか・・・

バッファリングが適切に効くように Socket をNetworkStream で包んで、ReadByte で
<CR><LF><CR><LF> または <LF><LF> が来るまで読み飛ばせばいいんじゃない?

(注) <CR> ってのは '\r' で、<LF> ってのは '\n' のこと。
740736:04/09/17 21:45:11
>>737
>>738
>>739

レスポンスの全てをバイト配列に読み込んだ後に、
ヘッダーを削除する処理を行いたいのですが、
何かよい方法ありませんでしょうか?
741デフォルトの名無しさん:04/09/17 21:48:59
空行の後を別の配列にコピーすればいいだけでは?
742デフォルトの名無しさん:04/09/17 21:51:14
>>740
バイト配列は変更不可なんだから、MemoryStreamに流し込むあたりか。
適当な手段で位置を特定してあとはArray.Copyとか。
743736:04/09/17 21:53:27
>>741
文字列なら簡単なんですけど
バイト配列の場合どうやってやればいいんでしょうか?
744デフォルトの名無しさん:04/09/17 21:54:38
空文字にリプレイス

と元の質問も知らないけど言ってみる
745デフォルトの名無しさん:04/09/17 21:57:30
>>742
サイズを指定して領域を確保した後、そのサイズ分だけ転送。
特に迷うところはないが。
746736:04/09/17 22:11:00
分かったような分からないような…。
とりあえず色々と試してみます。
どうもありがとうございました。
747733:04/09/17 22:40:54
>>733の自己レスです。
特殊キーはKeyDown、通常キーはKeyPressで処理するようでした。
748デフォルトの名無しさん:04/09/17 23:01:11
>>747
DirectXの話はそれ用のスレがあるからそっち行った方がいいよ
・・・最近しんでるけど
749デフォルトの名無しさん:04/09/17 23:04:26
まあKeyPressは使いにくいから普段つかわんわ。
750デフォルトの名無しさん:04/09/18 00:28:44
>>727
変数をvolatile付けて宣言してもだめなの?
751750:04/09/18 00:37:50
C# の場合、フィールドに volatile 修飾子を使用すると、そのフィールドへのすべてのアクセスで VolatileRead または VolatileWrite が使用されることが保証されます。
と書いてあったので大丈夫だ。
752デフォルトの名無しさん:04/09/18 01:38:04
Toolbarの背景に画像を使うにはどうしたらいいでしょうか?
Paintイベントが無いので描写するのはムリですかね・・。
753デフォルトの名無しさん:04/09/18 13:27:21
>>752
PanelとButtomで似たようなクラス作るか、
もっといろいろやりたければ、Control継承してシコシコやるかだね。

ちなみに .NET2.0でもBackgroundImageみたいのは追加されてないよ。
754デフォルトの名無しさん:04/09/18 13:32:10
>>753
ToolBarクラスにはBackgroundImageあるよ。
自分で検証してみたところ反映されてないけど・・・。
755デフォルトの名無しさん:04/09/18 15:08:32
>>754
え?あったっけ?
Button用のImageListしかなかったような…。
756デフォルトの名無しさん:04/09/18 15:14:58
>>753
>>754
やはり標準のToolBarではキビシイですか・・。
PanelにButtonを置いて簡単なツールバーに見立てることにします。
ご解答どうもありがとうございました。
757デフォルトの名無しさん:04/09/18 15:39:17
初歩的な質問ですが
LabelやPictureBox下のコントロールなどを透過するには
どうすればいいでつか(´Д`;)?
758デフォルトの名無しさん:04/09/18 15:49:05
759デフォルトの名無しさん:04/09/18 16:54:40
>>758
なるほどそうすればいいんですね
どうもありがとうございました(´∀`*)
760デフォルトの名無しさん:04/09/18 17:04:13
System.Drawing.Graphics で描写した画像をファイルに保存するほうほうを教えてください
761デフォルトの名無しさん:04/09/18 17:27:40
pictureBoxかなにかで一枚の一画面以上の大きい画像または
複数の一画面画像を使って画像がスクロールしているようにするには
どうすればいいですかね?
何かいい方法があればご教授くださいませ(´・ω・`;)
762デフォルトの名無しさん:04/09/18 17:49:52
>>760
Bitmap bitmap;
***
using (Graphics g = Graphics.FromImage(bitmap)) { *** }
bitmap.Save(***);
763760:04/09/18 20:12:29
>>762
ウホ!サンクス
764デフォルトの名無しさん:04/09/19 04:05:46
>>761
画面からはみ出す大きさの画像をスクロールさせて見たいってことかな?

フォームにPanelを配置
PanelにPictureBoxを配置
PanelのAutoScrollをtrue

とすればPictureBoxがPanelより大きいとき
スクロール機能を勝手につけてくれるけど
765デフォルトの名無しさん:04/09/19 06:45:44
ttp://www.thecodeproject.com/csharp/networkmonitor.asp

上記URLのThe Code ProjectのRawSocketクラスを利用して色々いじっているのですが、
当然といえば当然ですが、パケットが分割されて受信されます。
TCP/IP限定でいいのですが、分割されたパケットを結合するためにはどうしたらよいのでしょうか?

一応色々調べてみたのですが『3ウェイハンドシェイク』とかが関係あるのでしょうか?
またTCPなのでパケットの送信順序は保証されると思うのですが、
分割されたパケットを受信してる間に、他のパケットを受信する事はあるのでしょうか?

例えば、
パケットA-1
パケットA-2
パケットB-1
パケットA-3
バケットB-2
・・・・
という具合に。
766デフォルトの名無しさん:04/09/19 06:51:58
C#でパケット監視できるソフトって作れるの?
767デフォルトの名無しさん:04/09/19 08:00:43
>>766
作れないと思ってたの?
768デフォルトの名無しさん:04/09/19 11:41:51
>>764
そういうのじゃなくて、キー操作やマウスクリックでスクロールするように
したいのですが、できませんかねえ?
すいません、説明不足でしたorz
769デフォルトの名無しさん:04/09/19 11:45:06
>>768
KeyDownやらMouseDownに処理を書きたまへ。
770デフォルトの名無しさん:04/09/19 15:09:30
(すみません、適切なスレが見つからなかったのでこちらに書かせてもらいます。)

Javaの初期って、ガーベジコレクション時の挙動がかなり問題であったかと思いますが、
.NETでもやはりGCが走ると比較的長時間固まってしまうような現象は
発生するのでしょうか?
771デフォルトの名無しさん:04/09/19 15:12:03
比較的長時間がどのくらいの時間なのかしらないけど、とりあえず気になったことはないな。
772デフォルトの名無しさん:04/09/19 15:44:51
場合によってはありえる話ではあるのだが、俺も体感した事はない。
773デフォルトの名無しさん:04/09/19 18:27:12
>>768
KeyDownやMouseDownでPictureBoxのTopやLeftプロパティを変えれば
とりあえずいけます。他にももっとうまい方法があるかも
てきとーに書いてみました。>>1のソース置き場の80に置いておきます
とりあえずキー操作だけだけど、どうでしょ?
774デフォルトの名無しさん:04/09/19 19:17:34
>>770
そんなのマシンスペックに依存するし、稼働状況にもよるから何とも言えん。
ただし、ガベージコレクタが動いたら、まじで固まったように思うよ。
意図的に、呼んでみればわかると思うが。
775デフォルトの名無しさん:04/09/19 23:19:01
>>773
なるほど、参考にさせていただきます
どうもでしたm(_ _)m
776デフォルトの名無しさん:04/09/20 17:07:29
string型の文字列をint型にするにはどうしたらよいでしぃうか?
ファイルから読み込んだ数値を計算したいのですが(´ω`;)
777デフォルトの名無しさん:04/09/20 17:15:17
>>776
Int32.Parse()とかConvertクラスとか。
778デフォルトの名無しさん:04/09/20 17:46:12
>>777
解決しました
ありがとうございました〜(人´∀`)
779デフォルトの名無しさん:04/09/20 18:12:50
>>776
ba-ka
780デフォルトの名無しさん:04/09/20 18:15:40
>>779
shine
781デフォルトの名無しさん:04/09/20 18:23:26
WMPで再生リストを表示するにはどうすればいいでしょうか
Playerオブジェクト使いづらい。・・
782デフォルトの名無しさん:04/09/21 19:41:08
他スレッドからコントロールを扱う方法は

private delegate void hoge();
//スレッド内部の処理
//Form form1 = new Form();
form1.BeginInvoke(new hoge(form1.Refresh), new object[]{});

こんな感じで良いのでしょうか?
処理したいメソッド自体はコントロールのインスタンスを直接しても大丈夫ですか?
783デフォルトの名無しさん:04/09/21 22:06:50
>こんな感じで良いのでしょうか?

聞く前にやってみればいいじゃねえか。

>処理したいメソッド自体はコントロールのインスタンスを直接しても大丈夫ですか?

やってみてエラーや不具合がなければ大丈夫なんじゃねえか。
784デフォルトの名無しさん:04/09/21 22:31:51
>>782
BeginInvoke って非同期だけど (EndInvoke も要るし)、そこんとこ OK?
デッドロックしないことがわかってるなら、ただの Invoke でいいのでは。
785デフォルトの名無しさん:04/09/21 22:49:55
>>783
自分で試した限りでは問題なく動くのですがフォームコントロールの他スレッドからの干渉は
必ずしも毎回起こるわけではなさそうなので自信がもてませんでした。


>>784
例えが悪かったです。
呼び出しそのものはInvokeでもBeginInvokeでもどちらでも良かったのですが、
デリゲートに渡すメソッドはコントロールのインスタンスを直接参照してもよいものかわからなくて質問しました。
COMはほとんどわからないのですが、
STAスレッドの考え方からすると、他スレッドから直接コントロール(この場合フォームクラス)のメソッドを参照するのは良くないのかなと。
786デフォルトの名無しさん:04/09/21 23:40:46
実行中にボタンのイメージを変更したいのですが
button1.Image=Image.FromFile("File.bmp");
でやっても表示されないのですがなにが駄目なんでしょう?
787デフォルトの名無しさん:04/09/21 23:55:49
>>786
それだけじゃなんとも。
まず変更前後の画像が本当に違うものなのかってところから。
788デフォルトの名無しさん:04/09/22 00:01:54
>>787
変更前はなにも画像はいれてないです
789デフォルトの名無しさん:04/09/22 00:07:55
System.Windows.Forms.ControlのInvalidate()をオーバーライドするには
どうしたらいいですか?
790デフォルトの名無しさん:04/09/22 00:18:32
>>789
不可能

派生クラスでだけでInvalidete()使うだけならnewで隠蔽するとか、Paintイベントを拾うとか別の方法を模索。
791デフォルトの名無しさん:04/09/22 00:59:30
>>783
スレッドがらみのことでそれはちっときつい。
792デフォルトの名無しさん:04/09/22 02:07:15
793デフォルトの名無しさん:04/09/22 11:18:27
>>785
気にしてるのは「delegate を作る操作自体は安全か?」ってことだと思うんですが、
明示的な記述は無いものの、msdn ドキュメント「スレッドからのコントロールの操作」で
他スレッドのコントロールのメソッドを呼ぶ際に delegate を new しているサンプルが
あるのでOKだと思います(↓の URL)。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbtskmanipulatingcontrolsfromthreads.asp

ちなみに素の Win32 API でスレッド(アパートメント)をまたいだインタフェイスのメソッド呼び出しを行う場合には、
785 さんの心配の通りに、まずオブジェクトを所有するスレッドで CoMarshalInterThreadInterfaceInStream しておいてから、
呼び出したいほうのスレッドで CoGetInterfaceAndReleaseStream とかしてインタフェイスを得るという手間が必要になります。
794デフォルトの名無しさん:04/09/22 17:13:28
初歩的な質問ですいません。

フォームの名前を文字列で持っている状態で
それを用いて、フォームを開く方法はあるでしょうか?

string Form_Name = "Form1";
の状態でForm1を開きたいのです

もし分かる方が居たらご教授願います
795在日外国人参政権反対:04/09/22 17:22:47
リフレクション
796794:04/09/22 17:36:19
>>795
すいません、リフレクションを使えば可能ということですか?
ヘルプを見たのですが、どのようにしたら良いのか
分からなかったのですが…

教えて君で申し訳ないのですが
すいませんが、方法なども教えていただけますか?
797デフォルトの名無しさん:04/09/22 17:39:20
素直にFormへの参照を持たせたら? どんなプログラムの構造かしらんけど。
798デフォルトの名無しさん:04/09/22 17:44:20
リフレクション使うのなら

System.Reflection.Assembly.GetAssembly()
.GetType(Form_Name)
.InvokeMember("", System.Reflection.BindingFlags.CreateInstance, null, null, null);

だったかな?
これで Form_Name のコンストラクタを呼び出してオブジェクトが返る
Form_Name にはネームスペースまで含めないと駄目だったかも

もっと単純に作るなら、Form_Name からの条件分岐で Form1 を直接作れば良い
799デフォルトの名無しさん:04/09/22 17:59:08
Form1を閉じてForm2を表示させたんですが
Form2_Load{}中のコードを実行させるにはどうしたらいでしょう?
なんか初歩的でスマソorz
800デフォルトの名無しさん:04/09/22 18:08:41
>>799
他から呼び出す部分をpublicなメソッドに纏めたら?
801デフォルトの名無しさん:04/09/22 19:01:20
802デフォルトの名無しさん:04/09/22 19:06:55
803794:04/09/22 19:15:59
>>798
わざわざソースを書いていただき有難うございました。
お蔭様で、考えていた通りの機能を実現する事が出来ました。

本当に感謝です♪
804デフォルトの名無しさん:04/09/22 19:18:18
Visible=falseに設定してあるピクチャボックスのImageプロパティが参照されるということはあり得ますか?
見えないピクチャボックスのImageにBitmapを設定しており、
Visible=trueのピクチャボックスのImageに同じBitmapを設定しています。
見えている方のピクチャボックスを再描画させまくると、
「そのオブジェクトは使われています」というエラーが出ます。
Bitmapを使っているのはこの二つのピクチャボックスだけなので、
原因はVisible=falseの方のピクチャボックスからもBitmapが読み込まれてしまっているのだとわかるのですが・・・。
805デフォルトの名無しさん:04/09/22 19:35:14
>>800
ん〜よくわかんないのですが
結局どうやれば実行できるのでしょう^^;?
806デフォルトの名無しさん:04/09/22 19:46:58
807デフォルトの名無しさん:04/09/22 19:49:48
781     WMPで再生リストを表示するにはどうすればいいでしょうか Playerオブジェクト使いづ...
├792     >>781
│└802     >>801 >>792
└801     >>781
 └806     >>801
808デフォルトの名無しさん:04/09/22 20:22:25
>>804
それに答えられる人が MS の開発者以外にいるかな・・・
809デフォルトの名無しさん:04/09/22 20:26:21
>>805
800 氏じゃないけど、多分こうするんだと思う

private void Form2_Load(object sender, EventArgs e) {
    Form2_Load_Main();
}
public void Form2_Load_Main() {
    // ここに処理を書く
}

Form2 が普通にロードされたときには Form2_Load 経由で Form2_Load_Main が呼び出される
自力で実行させたい場合には Form2_Load_Main を直接呼び出す

メソッドの名前は自由に変えておくんなまし
810デフォルトの名無しさん:04/09/22 20:48:46
>>809
おかげさまで直接呼び出せるようにはなったのですが、ロード時がよくわかんないのですが
Formがロードされたとはどうゆう状況なのですか?
Show()で表示させただけではだめなのでしょうか?
811デフォルトの名無しさん:04/09/22 21:01:55
Show()ではLoadイベントが起きん。
812809:04/09/22 21:05:11
>>810
Load はフォームが初めて表示される直前らしい
表示/非表示が切り替わった際に呼び出される VisibleChanged が使えそう
813デフォルトの名無しさん:04/09/22 21:20:00
LoadイベントはWM_CREATEの時に呼ばれるんじゃなかったっけ?
814809:04/09/22 21:36:17
>>813
MSDN に「フォームが初めて表示される直前」と書いてあったんだから
俺は M$ を信じるが……どうなんだろうか

初めて表示される直前に WM_CREATE されるんじゃないの?
Win のメッセージと .NET の関連はよくわからん
815デフォルトの名無しさん:04/09/22 21:58:54
Loadイベント直前のメッセージはWM_SHOWWINDOW
が、一度フォームが表示されたあとでWM_SHOWWINDOWを投げても
Loadイベントは呼ばれないのでやっぱり「フォームが初めて・・・」が正しいんじゃないかと
原理はよくわからん
816デフォルトの名無しさん:04/09/22 22:20:05
VB6では問題なく動くOCXなんですが、C#ではプロパティを参照するだけで

'System.Runtime.InteropServices.COMException' のハンドルされていない例外が mscorlib.dll で発生しました。
追加情報 : 致命的なエラーです。

となってしまいます。
たしかに、このOCXは.NET対応となってはいないのですが、なんとかして
対応することはできるものなのでしょうか。

ちなみにEleganTalkという音声合成OCXです。
最悪VB6でラップすることになりますが、できれば統合したいんで
探し方の手がかりをいただけないでしょうか。

よろしくお願いします。
817デフォルトの名無しさん:04/09/23 00:01:20
mscorlib

って、一体どんな意味なんですか??
一体なんて読むんですか??

これが分からなくて朝も起きれません。どなたか教えてください。
818デフォルトの名無しさん:04/09/23 00:02:43
ムスカリブ
819デフォルトの名無しさん:04/09/23 00:05:08
C♯って明示的に.Dispose()して
使わない領域はいちいちデストラクトしないといけないの?
820デフォルトの名無しさん:04/09/23 00:08:36
>>819
使わない領域ってなにさ。
Disposeでデストラクトされるとでも?
821デフォルトの名無しさん:04/09/23 00:08:37
息子は、リブだろ!
822デフォルトの名無しさん:04/09/23 00:09:24
>>817
マイクロソフトコーポレーションのライブラリの様な気がする
気がするだけ

>>819
ファイナライザから Dispose は呼ばれるかもしれない気がする
気がするだけ

だけど使い終わったらちゃんと Dispose はしといたほうが良い気がする
面倒だったら using ブロック使え
823デフォルトの名無しさん:04/09/23 00:16:27
MultiLanguage Standard Common なんとかだった気がする
気がするだけ
824デフォルトの名無しさん:04/09/23 00:18:39
MultiLanguage Standard Common Object Runtime Library
825822:04/09/23 00:23:38
>>823
おまえデザパタスレにも居なかったか?
なんで俺のレスは真似されやすいんだろうか
826デフォルトの名無しさん:04/09/23 00:29:14
>>822
~F()
{
this.Dispose();
}

public void Dispose()
{
// なにか適切なDisposeらしい処理

GC.SuppressFinalize(this);
}
827デフォルトの名無しさん:04/09/23 00:43:08
>>826では不十分。
確定的破棄は下のコードを覚えてしまうのが吉。

public void Dispose()
{
 Dispose(true);
 GC.SuppressFinalize(this);
}

void Dispose(bool disposing)
{
 if (!this.disposed)
 {
  if (disposing) { マネージドの資源を破棄。 }
  アンマネージドの資源を破棄。
 }
 disposed = true;
}

~クラス()
{
 Dispose(false);
}

828デフォルトの名無しさん:04/09/23 00:45:32
>>827
スレッドセーフの確保も必要だな。
829デフォルトの名無しさん:04/09/23 01:11:25
俺まだ2つのDisposeの使い分け分かってねぇ・・・。
この際勉強するか。
830デフォルトの名無しさん:04/09/23 01:34:31
ついでにDispose(bool)の方virtualにしておいて派生クラスから
オーバーライド&呼び出しできるようにしとくのがパターン。
831デフォルトの名無しさん:04/09/23 14:07:07
textコントロールにint型変数の数値を代入したいのですが
一時的にint型からstring型に変換する方法はありますか?
832デフォルトの名無しさん:04/09/23 14:09:15
一時的?
833デフォルトの名無しさん:04/09/23 14:09:24
>>831
一時的?
ToString()メソッドを使えばよかろう。
834デフォルトの名無しさん:04/09/23 14:18:22
>>833
なるほど、うまくいきました
どうもでした〜
835デフォルトの名無しさん:04/09/23 14:36:33
>>834
おまえバカだろ?
836デフォルトの名無しさん:04/09/23 14:44:33
師匠を「おまえ」呼ばわりイクナイ
837デフォルトの名無しさん:04/09/23 15:44:41
いわゆるメッセージループの部分ってどこですか?
838デフォルトの名無しさん:04/09/23 15:51:03
Application.Run()

実際のループはラップされて見えない。
839デフォルトの名無しさん:04/09/23 18:29:27
名前空間なんですが、なんで System.Windows.Forms.・・・、ってこんなに長いんでしょう。
System.Windows.・・・ や System.Forms.・・・、でいいような気がするんですが。

それに、System.Windows 直下に位置する型は存在しないんですし。

Microsoft.Win32 とかもあるんだから、Microsoft.Windows.・・・とかに全部
まとめてくれるのもきれいだと思うんだけどなあ。
840デフォルトの名無しさん:04/09/23 18:31:20
ここは相談室であってお前のぼやきを書きところではない
そーゆーのはチラシの裏にでも書け
841デフォルトの名無しさん:04/09/23 18:32:29
>>839
WinFX/Avalonで拡張されるから。
ttp://pc.watch.impress.co.jp/docs/2003/1031/kaigai040.htm
842デフォルトの名無しさん:04/09/23 18:39:23
843デフォルトの名無しさん:04/09/23 19:08:49
844デフォルトの名無しさん:04/09/23 20:12:51
>>839
何で Windows が System 配下なんだよと思った。
Windows 何だから Microsoft.Windows だろよと。

長いのは別に1回 using するだけだからいいんじゃないの?
845デフォルトの名無しさん:04/09/23 20:15:38
http://blogs.users.gr.jp/hidori/archive/2004/09/22/4900.aspx

ここで
> const は protected や public にすると、バージョン互換性が薄れる

とかかれてますがどういうことでしょうか?
846デフォルトの名無しさん:04/09/23 21:08:35
ttp://members.at.infoseek.co.jp/molees/disp/Castella_popup_img.html
のように、AxWebBrowser で

<DIV class="file" path="c:\ほげ.jpg">ほげ.jpg</DIV>

の上をマウスが通過するとき(onmousemove)に画像の Panel が出現して
離れたら消えるようなコードを書いているのですが、
ひとつ問題が起こって困っています。

ポップアップのPanelを何回も出現させたり消したりしてると
そのうち AxWebBrowser コントロールからイベントが飛んでこなくなるのです。
べつに onmousemove だけじゃなくて oncontextmenu とかも飛んでこなくなります。

これはどうしてこうなるのか、どうすれば直るのか、教えてください。
847デフォルトの名無しさん:04/09/23 21:25:49
>>845
constはコンパイル時にその値が直接埋め込まれてて
public constな値が変わってもその値を使ってるほうも全てリビルドしないといけないような予感。
Javaはそれでどうしようもなかったが、C#はreadonlyがあるのが嬉しい。
848デフォルトの名無しさん:04/09/23 21:47:34
849デフォルトの名無しさん:04/09/23 23:02:47
>>847
おおthxなるほどです。

さて、修正するか・・・
850デフォルトの名無しさん:04/09/23 23:18:30
851846:04/09/24 05:53:33
HTML に JavaScript 埋め込んで自己解決しますた。
C# で解決できなかったのが悔しいなぁ・・・。
852デフォルトの名無しさん:04/09/24 16:57:18
Form1とForm2があり、Form2のデータをForm1に渡そうとしたらどの様にしたら
良いのですか?
853デフォルトの名無しさん:04/09/24 17:12:39
>>852
どんなデータを渡したいのかによって変わってくる。
854852:04/09/24 17:15:32
Form2のTextboxに何か入力させてOKボタンを押したら、Form1のlabelに入力された
データが出る様にしたいのです。
855デフォルトの名無しさん:04/09/24 17:40:04
>>854
その場合は、
Form2を生成、ShowDialog()し
Form2のDialogResultに応じてForm2上のテキストボックスの文字列をreturnする
staticな関数を作る。
856デフォルトの名無しさん:04/09/24 17:42:50
それの関数をForm1から呼び出すようにすれば、
互いに依存しない形になるので、将来別のクラスでも
利用しやすくなる。
857852:04/09/24 17:45:37
staticでForm外から参照できるようになりました。
858在日外国人参政権反対:04/09/24 20:05:57
>857
なんかやな解決法だな...
C#ならイベントとか使うようにしたほうがきれいな希ガス
859デフォルトの名無しさん:04/09/24 20:11:21
>>858はかなりの厨房だ。間違いない。
860デフォルトの名無しさん:04/09/24 20:15:59
form1のインスタンスをform2で受け取れるようにすればいいのでは?
将来別のクラスでも 利用しにくくなるけど。
861デフォルトの名無しさん:04/09/24 20:56:24
>>852
/* Form2 */
public string TextBoxValue{
get {
return this.textBox1.Text;
}
set {
this.textBox1.Text = value;
}
}

/* Form1 */
protected void button1_Click(object sender; EventArgs e){
using(Form2 f2 = new Form2){
f2.TextBoxValue = this.label1.Text;
if(f2.ShowDialog(this) == DialogResults.OK){
this.label1.Text = f2.TextBoxValue;
}
}
}

とかにしとけ。
862デフォルトの名無しさん:04/09/24 21:05:56
>>861
クラス同士がべったりだな。
863デフォルトの名無しさん:04/09/24 21:07:32
>>861
き、汚ねえ・・・
864デフォルトの名無しさん:04/09/24 21:12:01
>>861
ど素人かよ
865デフォルトの名無しさん:04/09/24 21:12:29
>>861
久々の糞ソースだな
866デフォルトの名無しさん:04/09/24 21:13:33
>>861
初心者にしても酷いな
867デフォルトの名無しさん:04/09/24 21:14:25
>>861
動けばいいっつうもんじゃないんだぞ
868デフォルトの名無しさん:04/09/24 21:15:39
>>861
(/><)/ ヒィ
869デフォルトの名無しさん:04/09/24 21:16:14
>>861
初心者ならあんなもんだと思うよ。
870デフォルトの名無しさん:04/09/24 21:17:05
>>861
( ´д)ヒソ(´д`)ヒソ(д` )
871デフォルトの名無しさん:04/09/24 21:17:07
>>861
もちろんネタだよな?
872デフォルトの名無しさん:04/09/24 21:17:57
873デフォルトの名無しさん:04/09/24 21:19:57
>>861
お前のためにあえて言う



「お  前  に  は  む  い  て  な  い」
874861:04/09/24 21:20:31
文句があるなら手前等もソース書いてみろよばーか
875デフォルトの名無しさん:04/09/24 21:22:29
ばーかって言う奴がばーかなんだよ
ばーか
876デフォルトの名無しさん:04/09/24 21:35:26
底辺同士の煽り合いって醜いね
877853 ◆cReQ1pJtI. :04/09/24 21:36:42
自分の言っていたのはこんな風

public class Form1 : System.Windows.Forms.Form
{
  private System.Windows.Forms.Label label1;
  private System.Windows.Forms.Button button1;

  private void button1_Click(object sender, System.EventArgs e)
  {
    string l_sText = label1.Text;
    if (Form2.GetForm2Text(ref l_sText, this))
    {
      label1.Text = l_sText;
    }
  }
}
878853 ◆cReQ1pJtI. :04/09/24 21:37:05
つづき

public class Form2 : System.Windows.Forms.Form
{
  private System.Windows.Forms.TextBox textBox1;
  private System.Windows.Forms.Button button1;

  static public bool GetForm2Text(ref string a_sText, IWin32Window a_IWin32Window_Owner)
  {
    Form2 l_Form2 = new Form2();
    l_Form2.textBox1.Text = a_sText;
    if (l_Form2.ShowDialog(a_IWin32Window_Owner) == DialogResult.OK)
    {
      a_sText = l_Form2.textBox1.Text;
      return true;
    }
    else
    {
      return false;
    }
  }

  public Form2()
  {
    InitializeComponent();
    button1.DialogResult = DialogResult.OK;
  }
}
879853 ◆cReQ1pJtI. :04/09/24 21:56:43
よく見たら>>861もやってることは同じだね。
細々した処理をまとめてちょっと便利にしただけって感じか。
880861:04/09/24 22:00:03
当たり前だ
881853 ◆cReQ1pJtI. :04/09/24 22:03:06
>>880
ん?なんで当たり前?
882デフォルトの名無しさん:04/09/24 22:03:46
デリゲート渡してどうにか出来ないかと思うんだかどうですか?
883853 ◆cReQ1pJtI. :04/09/24 22:06:31
>>882
OKボタンを押しても反映するだけで閉じない仕様なら、
そういうこともしたくなるね。
884デフォルトの名無しさん:04/09/24 22:24:24
hello world
885858:04/09/24 23:02:09
だからイベント...
886デフォルトの名無しさん:04/09/24 23:31:35
>> 861 のコードがたたかれてますが,外部に公開したい部分を
プロパティとして出しているので,特にたたかれるような内容では
ないと思うのですが,このコードのどこが糞で,どうするべきなのか
まじめにわからないので,どなたかマジレス願えませんか?
あー,釣りじゃなくてマジなので,本当によろしく.
887デフォルトの名無しさん:04/09/24 23:40:47
何故句読点がカンマとピリオドなのかそっちのほうがまじめにわからない
888デフォルトの名無しさん:04/09/24 23:42:31
>外部に公開したい部分を プロパティとして出しているので,
>特にたたかれるような内容では ないと思うのですが

おまえは、コードと言えばその一点しか見ないのか・・・
もうね、アボガドだな。
889在日外国人参政権反対:04/09/24 23:43:01
>886
きたないだけで、>877と本質は何も変わりません.
890デフォルトの名無しさん:04/09/24 23:46:14
>>887
横書き文の句読点について
ttp://www.remus.dti.ne.jp/~ddt-miz/think/comma.html
891デフォルトの名無しさん:04/09/24 23:58:42
>>886
一人が言ってるだけなのでいちいち相手にすることは無い。
892886:04/09/25 00:01:34
>> 887 他所で勉強してきてください.

>> 888
すまん.本当にわからんのだが,「何が」そんなに「汚い」?

みんなが叩いている「汚い」の基準がわからんのです.
893デフォルトの名無しさん:04/09/25 00:03:12
ひさしぶりにきたら、いつからこんな煽りばっかりのスレになったんだ
昔はもっと上品だったはずだけどな

C#の将来と自分の人生の将来をフィードバックしてるせいなのか
894デフォルトの名無しさん:04/09/25 00:06:45
だって>>893が荒らしてるんだもん
895デフォルトの名無しさん:04/09/25 00:17:18
だって>>886が厨房なんだもん
896886:04/09/25 00:24:51
>> 895 俺が厨房なのはそうかもしらんが,頼むから教えてください.
897デフォルトの名無しさん:04/09/25 00:34:30
>>886
本質がどうあれ、日本語は「、」と「。」で記述する言語だからです。
898デフォルトの名無しさん:04/09/25 00:35:17
>>896
ダイアログならあんなもんでいいんじゃないの?
ちゃんとプロパティにしてあるから、仕様と実装の分離もできてるし。

>>878にあるようにユーティリティ関数化するのも手だけど、その場合漏れなら
Form2.GetForm2Text()って感じじゃなくて、UI.Dialogs.AskText() とかそんな感じに
form とは別のユーティリティクラスに入れるけど。
899デフォルトの名無しさん:04/09/25 00:39:57
900デフォルトの名無しさん:04/09/25 00:48:08
つまり>>886は戦時中の人間、と
901デフォルトの名無しさん:04/09/25 01:30:46
お前らどうしたらいいのか書けよ。
あの機能のフォームなんてあんなもんだろ?
まずいところを具体的に上げろ。
念のため、Form2って名前とか言うなよ…

ってかそこまでたたかれてる理由がマジで分からん。
902デフォルトの名無しさん:04/09/25 01:35:04
いや、釣られたのかも…
903853 ◆cReQ1pJtI. :04/09/25 08:39:09
>>898
> >>878にあるようにユーティリティ関数化するのも手だけど、その場合漏れなら
> Form2.GetForm2Text()って感じじゃなくて、UI.Dialogs.AskText() とかそんな感じに
> form とは別のユーティリティクラスに入れるけど。
ダイアログを別のプロジェクトに持って行くときに1ファイルだけで済むとラクなので。
共通ソース群をまとめて持って行っちゃうならこれもメリットあるね。
904デフォルトの名無しさん:04/09/25 10:21:49
結局どう汚いのかを誰も書けないという・・・悲惨なレベルですね、ここ ;-)
905853 ◆cReQ1pJtI. :04/09/25 10:41:51
自分は汚いとは思わないけど、想像するに

Form2を提供する側としては、利用者になるべく少ない
思考(コード量)で済むように設計するのが望ましい

っていう程度の話じゃないかな。
それにあの妙な数の煽りは1人でやってんでしょ?
906デフォルトの名無しさん:04/09/25 11:01:15
>>861

おれが簡単に説明してやろう

↑のようなことするぐらいなら、てっとり早いのが、TextBox自体をpublicにすればいいんだよ
907デフォルトの名無しさん:04/09/25 11:07:50
ああ、それともう1つあったな

このコードだと
using(Form2 f2 = new Form2){
この部分が実行できない。
Form2ってなんですか?って警告されるぞ
Form2のインスタンス生成する場合はクラスの先頭で宣言しないとな
そんなことも知らないとはなさけない
908デフォルトの名無しさん:04/09/25 11:20:59
>906
それはちょっと...
まぁどこまでやっつけするかなんだけれど、自分なら
Form1はForm2がダイアログであること、成功したときにファイルネームがセットされるとするなら
class Form2{
string GetFileName();
string SetFileName();
};
として>861みたいにTextBoxの存在を意識させない。そんなことはForm1はしらないでいい。
>877はダイアログの処理までForm2内に隠蔽されてしまってるので、使う側でコントロールできずつかいずらい時がでると思われるからやらない
とまじれすしてみる
909デフォルトの名無しさん:04/09/25 11:23:15
>Form2のインスタンス生成する場合はクラスの先頭で宣言しないとな
C++とC#の仕様を混同しているお馬鹿がいますよ。
910デフォルトの名無しさん:04/09/25 11:31:24
>>908
おまえはC#より日本語勉強しろ
911デフォルトの名無しさん:04/09/25 11:38:02
>910 無駄なかみつきしか出来ないのか。(゚听)イラネ
912デフォルトの名無しさん:04/09/25 11:39:47
>>911
煽りしかできないプログラム初心者かよ(爆
913在日外国人参政権反対:04/09/25 11:46:28
なんつかおまえら民度低いな
914デフォルトの名無しさん:04/09/25 11:50:23
おまえもなー
915デフォルトの名無しさん:04/09/25 11:58:46
Labelのtextの数値を-1してそのラベルに表示するにはどうしたらいいですか?
916デフォルトの名無しさん:04/09/25 12:02:36
917デフォルトの名無しさん:04/09/25 12:03:14
>>906-907
あほかおまえ。
918デフォルトの名無しさん:04/09/25 12:03:52
>>915
label1.text="-1"
919デフォルトの名無しさん:04/09/25 12:15:39
>>918
そうじゃなくて、ラベルtextの数値-1をそのラベルtextに設定しなおしたいのですが^^;
920デフォルトの名無しさん:04/09/25 12:20:08
>>916でいいんじゃないのか
921デフォルトの名無しさん:04/09/25 12:21:26
(1) Labelのtextの数値をとりだす
(2) (1)でもとめた数値を-1する
(3) (2)でもとめた値をLabelのtextに代入する

922デフォルトの名無しさん:04/09/25 12:21:39
>>919
this.label1.text="-1"
923デフォルトの名無しさん:04/09/25 12:23:39
>>921
string s=label1.text;
s="-1";
label1.text=s;
924在日外国人参政権反対:04/09/25 12:26:52
楽しいのかおまえら?
925デフォルトの名無しさん:04/09/25 12:27:31
int a=Convert.Int32(label1.text)-1;
label1.text=a.ToString();
926デフォルトの名無しさん:04/09/25 12:30:18
できました
IntelliSenseがきかないからできないと思い込んでたorz
どうもでした
927デフォルトの名無しさん:04/09/25 12:31:48
>>921
if(label1.Text == "1")
label1.Text="0";
if(label1.Text == "2")
label1.Text="1";
if(label1.Text == "3")
label1.Text="2";
.
.
.
.
.
if(label1.Text == "69821")
label1.Text="69820";
928デフォルトの名無しさん:04/09/25 12:35:36
924 在日外国人参政権反対 [sage] 04/09/25(土) 12:26:52
楽しいのかおまえら?
929デフォルトの名無しさん:04/09/25 12:39:52
>IntelliSenseがきかないからできないと思い込んでたorz
??
930在日外国人参政権反対:04/09/25 12:47:27
>928
楽しいのか?
931デフォルトの名無しさん:04/09/25 13:22:57
System.Windows.Forms.TextBoxのAppendText()メソッドだと、なぜか32767文字(Unicodeで64KB)までしか文字を追加できないのは仕様でしょうか?
Textプロパティに+=で追加なら何文字でも追加できるんですが…

で、System.Windows.Forms.RichTextBoxを使えば制限はないので、RichTextBoxで行こうと思ったんですが、
RichTextBoxのスクロールマウスでのスクロールが異常に重いのですが、なにか原因・解決策はないでしょうか?
932デフォルトの名無しさん:04/09/25 13:35:11
>>931
Stringクラスについて学べ
933デフォルトの名無しさん:04/09/25 14:20:48
>>925
行数がもったいない。
label1.text=(Convert.Int32(label1.text)-1).ToString();
934デフォルトの名無しさん:04/09/25 14:25:24
>>933
それだとコンパイルできないな(プゲラ
935デフォルトの名無しさん:04/09/25 14:30:43
>>934
何故?
936デフォルトの名無しさん:04/09/25 14:40:02
>>932
TextBoxクラスのAppendTextメソッドではできなくて、Textプロパティに64KB以上のstringを代入するのでは可能な理由が分からなかったです。
もう少しヒントください、お願いします。
937デフォルトの名無しさん:04/09/25 16:28:05
(Convert.ToInt32(text)-1).ToString();
      ~~
938デフォルトの名無しさん:04/09/25 16:59:43
>>936
appendは一行だから
なんでそkまでappendにこだわるの?
stringでいいじゃん
939デフォルトの名無しさん:04/09/25 17:06:35
>>938
ストリームから受け取り次第、テキストボックスに表示したいです。
なので、textBox1.Text +=    で行うと、スクロールしてくれないので、Appendにこだわっています。

一回でAppendで追加するのではなく、何文字かずつAppendで追加しようとしています。

for(int i=0; i<15000; i++) textBox1.AppendText("a\r\n");
これをやっても、64KB以上は追加されません。

for(int i=0; i<15000; i++) textBox1.Text += "a\r\n";
だとうまくいきます。

940デフォルトの名無しさん:04/09/25 17:15:03
>>939
TextBoxのベースであるWindowsのエディットコントロールの制限。
AppendTextはセレクション関係もいじってて、
そのときに0x7FFFより大きい文字数を取得できないメッセージを使ってる。

スクロールなら足した後ScrollToCaret()使うとよろし。
941デフォルトの名無しさん:04/09/25 17:20:05
\r\nもどうかと思う
942デフォルトの名無しさん:04/09/25 17:20:16
>>939
ストリームからってんならこうすりゃいいじゃん

StreamReader sr=new StreamReader("test.txt");
textBox1.Text=sr.ReadLine();
943名無しさん♯:04/09/25 20:45:30
次スレです。( ゚д゚)ノ http://pc5.2ch.net/test/read.cgi/tech/1096112588/l50

ペース早いっすね。
944デフォルトの名無しさん:04/09/25 21:38:05
>>943
もまいのスレ立てが一番ペース早いわw

ま、乙。
945デフォルトの名無しさん:04/09/26 04:10:41
近々死滅する言語でなに必死になってんの?w
946デフォルトの名無しさん:04/09/26 04:15:49
こっちもか
947デフォルトの名無しさん:04/09/26 04:52:44
>>945
死滅するから必死なんだろ
948デフォルトの名無しさん:04/09/26 05:02:53
スレの残り埋めるネタとしてはありきたりすぎだな。
949デフォルトの名無しさん:04/09/26 18:15:53
ここでソースコード晒してるときに
if()
{
string s;
}
みたいに、ちゃんとIF内の文が空白で右にずらせないんだけど
みんなどうやってやってるの?
なにかソフト使ってるの?
950デフォルトの名無しさん:04/09/26 18:17:33
全角 でも叩き込んでください。
951デフォルトの名無しさん:04/09/26 18:21:21
>>950
あり
952デフォルトの名無しさん:04/09/26 18:23:45
つか半角スペースを&nbsp;に置換すれ。
953デフォルトの名無しさん:04/09/26 18:24:51
 テスト
    テスト
954デフォルトの名無しさん:04/09/26 18:25:39
>>952
なるほど、タブの場合はどうするの?
955デフォルトの名無しさん:04/09/26 18:35:05
>>954
2chのスクリプトではタブ文字は削除される
0chだとタブ文字をそのまま入力できるけど
HTMLのタブ文字は半角スペースと等価
956デフォルトの名無しさん:04/09/26 19:14:10
要するにタブはインデント量分の&nbsp;に置換するって事だな?
957デフォルトの名無しさん:04/09/26 20:19:57
&nbsp;を並べておけばOK。
面倒くさければ全角スペースに置換すれば良い。

ちなみにかちゅ〜しゃのレスポップアップだと&nbsp;を置換してくれないので全角のほうが好きだったり
958デフォルトの名無しさん:04/09/26 20:47:29
かちゅだとポップアップでは &nbsp; って表示されるってこと?
959デフォルトの名無しさん:04/09/26 21:07:37
    テスト
960デフォルトの名無しさん:04/09/26 21:08:58
  テスト
961デフォルトの名無しさん:04/09/26 21:09:25
>>959-960
テスト
962デフォルトの名無しさん:04/09/26 21:10:44
ほうほう
963デフォルトの名無しさん:04/09/26 21:13:34
Jane最高
964デフォルトの名無しさん:04/09/26 21:32:33
ちなみに、C++だと参照で&regreg...みたいな名前を使いたいかもしれんが、
HTMLで&regというのが®に変換されることもあるので、
出来るなら、半角の&を&amp;に置換するとなお良し
965デフォルトの名無しさん:04/09/26 23:51:50
てすと
dd
966デフォルトの名無しさん:04/09/27 01:38:24
 nbspって何の略なの?
  いや、spはなんとなく分かるんだけどさ。
967デフォルトの名無しさん:04/09/27 01:40:52
&  だと改行が起きないから none-break かな?
968デフォルトの名無しさん:04/09/27 01:41:14
ミスった(´・ω・`)ショボーン
969デフォルトの名無しさん:04/09/27 01:43:49
http://www.w3.org/TR/REC-html40/sgml/entities.html

<!ENTITY nbsp CDATA "&#160;"
-- no-break space = non-breaking space, U+00A0 ISOnum -->
970デフォルトの名無しさん:04/09/27 01:49:21
950以降の方がためになるスレはここですか?
971デフォルトの名無しさん:04/09/27 02:27:24
>>970
残念ながら、ちがう。
当たり前のことばかり書いてる厨房ばっかで、なんの役にも立たんスレだ。
972デフォルトの名無しさん:04/09/27 02:33:53
>>971
それは949以前にも当てはまることでは
973デフォルトの名無しさん:04/09/27 02:37:22
>>970-971
その通りなので君たちはさっさと卒業したまえ。
974デフォルトの名無しさん:04/09/27 02:46:25
HTML化待ちの過去スレって、やっぱ●買わないと読めないの?
975デフォルトの名無しさん:04/09/27 02:58:14
Unvisual Studioだ。
976デフォルトの名無しさん:04/09/27 07:46:34
>>974
おれはみみずんからログを探してきてる
977デフォルトの名無しさん:04/09/27 09:42:15
ここは上級2ちゃんねらの集うスレでつね
978デフォルトの名無しさん:04/09/27 16:15:00
●販売以前ならかちゅで読めたのになあ。
まぁ俺は●もち廃人なので関係ありませんが
979デフォルトの名無しさん:04/09/27 19:30:51
VC#2005はいつ発売なん?
980デフォルトの名無しさん:04/09/27 20:13:54
20005年じゃないの?もうすぐじゃん
981デフォルトの名無しさん:04/09/27 20:14:33
あと18000年くらいか? もうすぐだな。
982デフォルトの名無しさん:04/09/27 20:19:30
一昨日出たよ
983デフォルトの名無しさん:04/09/27 20:59:35
このスレは950超えると居心地がいい
984デフォルトの名無しさん:04/09/27 23:44:51
ム板は全部それだな
985デフォルトの名無しさん:04/09/28 00:02:37
まったりまったり
986デフォルトの名無しさん:04/09/28 16:56:33
1000! にはまだ早いな。
987デフォルトの名無しさん:04/09/29 05:47:42
1000の階乗か
988デフォルトの名無しさん:04/09/29 06:14:44
ここって本スレだよね?
2001出た当初は結構レスあったのに
みんなどこいったの?

JAVA?DEL?結局どの言語がいいのさ?
989デフォルトの名無しさん:04/09/29 07:14:26
>>988
とりあえず >>943
990デフォルトの名無しさん:04/09/29 07:21:41
>>989
このスレ埋めないんだ?
991デフォルトの名無しさん:04/09/29 07:23:15
埋め
992デフォルトの名無しさん:04/09/29 07:23:48
埋め
993デフォルトの名無しさん:04/09/29 07:24:27
埋め
994デフォルトの名無しさん:04/09/29 07:25:07
埋め

↓↓後は任せた
995デフォルトの名無しさん:04/09/29 07:27:47
じゃあ上げてみる
996デフォルトの名無しさん:04/09/29 07:32:59
C# はゴミ
それもがなり
997デフォルトの名無しさん:04/09/29 07:37:58
>>996 はゴミ
それもがなり
998デフォルトの名無しさん:04/09/29 07:38:30
よし埋め
999デフォルトの名無しさん:04/09/29 07:38:56
埋め
10001000:04/09/29 07:39:22
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。