トップページ⇒tech
1001コメント310KB

C♯相談室 Part17

レス数が1000を超えています。これ以上書き込みはできません。
0001名無しさん♯NGNG

(#゚ー゚)つ < 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
0002名無しさん♯NGNG
過去スレ
Part16 http://pc5.2ch.net/test/read.cgi/tech/1087297504/
Part15 http://pc5.2ch.net/test/read.cgi/tech/1083066815/ (現在HTML化待ち)
Part14 http://pc5.2ch.net/test/read.cgi/tech/1076933504/ (現在HTML化待ち)
Part13 http://pc2.2ch.net/test/read.cgi/tech/1071663456/ (ログ行方不明)
Part12 http://pc5.2ch.net/tech/kako/1066/10660/1066038651.html
Part11 http://pc5.2ch.net/tech/kako/1061/10612/1061262958.html
Part10 http://pc5.2ch.net/tech/kako/1051/10518/1051842450.html
Part9 http://pc2.2ch.net/tech/kako/1039/10396/1039646808.html
Part8 http://pc3.2ch.net/tech/kako/1032/10324/1032488831.html
Part7 http://pc3.2ch.net/tech/kako/1027/10275/1027531796.html
Part6 http://pc3.2ch.net/tech/kako/1022/10222/1022257078.html
Part5 http://pc3.2ch.net/tech/kako/1019/10195/1019533942.html
Part4 http://pc.2ch.net/tech/kako/1016/10165/1016597767.html
Part3 http://pc.2ch.net/tech/kako/1009/10094/1009473982.html
Part2 http://pc.2ch.net/tech/kako/1002/10024/1002468050.html
Part1 http://pc.2ch.net/tech/kako/977/977112364.html
0003デフォルトの名無しさんNGNG
>>1
乙かれ
0004デフォルトの名無しさんNGNG
新すれオメ
0005デフォルトの名無しさんNGNG
武術の神と言われる亀仙人より強い天津飯でも歯が立たないドラムを瞬殺した悟空が8年修行して、
同じ位の強さのピッコロさんと二人がかりでやっと倒したラディッツと匹敵する戦闘力を持つ栽培マンを
あっさり倒した天津飯・ピッコロ等が束になっても敵わないナッパを悠々倒した悟空の2倍以上強いベジータが
かなりパワーアップしても全く相手にならない強さのリクームを一撃で倒した悟空が更にパワーアップしても、
それを半分の力で殺せるフリーザをあっという間にバラバラにして消した未来のトランクスでさえ仲間と束になっても
敵わない人造人間17・18号に匹敵する強さを持った神コロ様でも敵わない程に
生体エネルギーを吸って強くなったセルと互角の16号を大きく越える17号吸収態セルを子供扱い出来る
精神と時の部屋パワーアップ後のベジータと随分差がある悟空でも勝てない完全体セルを
一方的に痛めつけることが出来るブチ切れ悟飯をも越えたベジータが命を賭けても倒せなかった魔人ブウが
更に凶悪になったブウと互角以上の戦いをしたゴテンクスよりも強くなった悟飯でも全く歯が立たない
ゴテンクス&ピッコロ吸収ブウが更に悟飯を吸収して強化しても全く歯が立たないC#が最強。
0006デフォルトの名無しさんNGNG
うめあげ
0007デフォルトの名無しさんNGNG
>>5
つまりC# = ベジットである、と。
0008デフォルトの名無しさんNGNG
>>7
Cω = 亀仙人の亀
0009デフォルトの名無しさんNGNG
インデクサでアクセスする配列のサイズを得るには
どうすればいいのよ?
0010デフォルトの名無しさんNGNG
だれかC#でVS.netのエディタのコピー作ってくれYO!
0011デフォルトの名無しさんNGNG
>>9
意味が分からないが単に配列のサイズを知りたいと解釈すると Array.Length
0012デフォルトの名無しさんNGNG
>>10
はい。
ttp://www.syncfusion.com/products/edit.asp
0013デフォルトの名無しさんNGNG
>>12
5万は高いだろ。しかも海外製だから設定ウィンドウも英語だろうし・・・
0014デフォルトの名無しさんNGNG
これはどうも質問者本人が気付いていないことも多いようですが、
質問の文章に第三者が問題を理解するのに十分な情報が含まれていないとことがしばしばあります.
このような状況で求められる極限的な推理を,私はしばしば「メタ推理」と読んでいます.

>>9
もうとてもとてもいい感じに足りてません.
0015デフォルトの名無しさんNGNG
C#の2chブラウザって、なにとなにですか?
0016デフォルトの名無しさんNGNG
twintail / twintail2 / Castella
0017デフォルトの名無しさんNGNG
>>15
なにとなにって質問の仕方からして
始めからtwintailとCastellaだって
知ってたんじゃねーか?
00189NGNG
んじゃ、こんな感じで。

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();
0019デフォルトの名無しさんNGNG
>>18
インデクサは結局配列を模することができるただの関数にほぼ
等しいんだからサイズなんて概念が存在しない配列のようにも
作りうるわけで、ということは用意する必要があるのではないかと
思うのだけれども、どうだろうか。
002016NGNG
>>16
漏れがわざわざ比較表(仮仮仮)までいって見てきた
0021デフォルトの名無しさんNGNG
別アセンブリから指定のクラスをロードするのは
Assembly.LoadFrom().GetType().InvokeMember()
でコンストラクタ呼び出しという手順で良いんでしたっけ?
0022デフォルトの名無しさんNGNG
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に描画されないのはどこがいけないからなのですか?
002322NGNG
追加
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;
0024デフォルトの名無しさんNGNG
>>22
BitBlt の戻り値はどうなってますか?
あとこれ描画されても(タイミング次第で)すぐ消えるとおもいますが、
その辺は承知ですよね。
002522NGNG
戻り値を見たら、「9222812402616107009」って出てました。
>あとこれ描画されても(タイミング次第で)すぐ消えるとおもいますが
知らなかったです。
以前、VB6でAPIを使ってたのですがC#になってからはよくわかりません。
C#でうまく描画されるサンプルを見せていただけないでしょうか?
0026デフォルトの名無しさんNGNG
>C#でうまく描画されるサンプルを見せていただけないでしょうか?
必ず API でやる必要があるのですか?

HDC を経由しなくて良いなら、
任意の時点で pictureBox1.BackgroundImage = new Bitmap(@"D:\1.JPG"); するとか、
Paintイベントのハンドラでe.Graphics.DrawImage(bmp, 0, 0, Width, Height); とか、
簡単なんですけど。
002724=26NGNG
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++でありがちなコードにすると上手く動くようです。
002818NGNG
>>19
なるほど、そういったアクセサはやっぱり別途必要になるんだ。
答えてくれた人たち、ありがとう。
002924=26NGNG
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);
}
0030デフォルトの名無しさんNGNG
>>25
VBのPictureBoxは、それ自体がバッファリングしてるから表示できるんじゃなかったっけ?
0031デフォルトの名無しさんNGNG
ペトロ著、C#で作るプログラミングウィンドウズみてみれ
0032デフォルトの名無しさんNGNG
ペドロって、ジャングルの王者ターちゃんでしたっけ?
0033デフォルトの名無しさんNGNG
きもいよ
0034デフォルトの名無しさんNGNG
ASP.NETでIISにログオンするときの質問です。IE5.0だとユーザID、パスワードを入れなければ
ログオンできないのですが、IE6.0にしたら何も入れない状態で3回繰り返すとログオンできてし
まいます。ただIEのバージョンを変えただけなのですが、原因が全く分かりません。同じような
経験ある方いませんでしょうか?ソース内にブレイクポイントを入れているのですが、ログオン
はIISが勝手にやってる処理のようです。
0035デフォルトの名無しさんNGNG
VC#において、Fontオブジェクトが等幅日本語フォントであるか調べ、
異なる場合はシステムデフォルトの等幅日本語フォントに差し替えたいのですが、
どのようにすればいいのでしょう?
MSDNがJavaDocに比べて読みづらいので困ってます・・・。
0036デフォルトの名無しさんNGNG
JavaDocって読みやすいんだ
0037デフォルトの名無しさんNGNG
漏れもJavaDocの方が読みやすいなぁ
0038デフォルトの名無しさんNGNG
派生クラスのドキュメントに、親クラスのメンバが混じってるのが気に入らないんだけど、
差分だけ表示させる方法ってあったっけ?
0039デフォルトの名無しさんNGNG
2.0まで待て
0040デフォルトの名無しさんNGNG
> 派生クラスのドキュメントに、親クラスのメンバが混じってるのが気に入らないんだけど、
たしかに気に入らない
0041デフォルトの名無しさんNGNG
ボタン押したらTextの全テキストを選択するようにしたんだけど、選択できない。
private void button1_Click(object sender, System.EventArgs e)
{
this.textBox2.SelectAll();
}

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

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

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

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

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

Image a;
Image b;

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

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

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

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

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

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

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

まあきわめて単純化した話だがね。
0054デフォルトの名無しさんNGNG
ま、ぶっちゃけて言えば

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

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

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

がきっとFA
0055デフォルトの名無しさんNGNG
>>49のように聞いてくるやつで、>>51をみて当たり前と思うやつは
ちゃんと意味を理解できてる。
>>52のように思うやつは、言葉として参照型はどうのと覚えていても、
意味は理解していない。
0056デフォルトの名無しさんNGNG
Javaの方がわかりやすいし優れているな
0057デフォルトの名無しさんNGNG
>905
言ってみて、冗談だよーとかいってみる余裕がおまえには足りない.
いってみる
↓
一瞬の空気を読む
↓
反応する

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

ならば、君の担当だ。
0063デフォルトの名無しさんNGNG
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の所が境目みたいなのですが何が原因か分かりません。
分かる方教えてください。
0064デフォルトの名無しさんNGNG
>>63
これだけじゃわかんない。
とりあえずpicPathsとpicPaths[1]はどっちがnullなの?
whileのなかでpicPathsかpicPaths[1]がnullになるような操作してない?
whileを使う以上picPaths[1].ToString()が一回しか実行されて無いとも思えないけど。
006563NGNG
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になるような事はしてないです。
006663NGNG
自己解決?しました。
別のGraphicsオブジェクトのところで不具合があって、それが今回の×の所で
エラーが起こってたようでした。
0067デフォルトの名無しさんNGNG
タブコントロールに配置した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 );
}
0068デフォルトの名無しさんNGNG
>>67
で、どういうエラーなのかね。



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

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

訂正『tb.Tag に、ちゃんと RichTextBox インスタンスへの参照が入ってい“た”かどうか』
0078デフォルトの名無しさんNGNG
>>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イベントはどうかなぁ。
0079デフォルトの名無しさんNGNG
PictureBoxにDrag & Dropとかだったらやりたい。
てゆうかイベントつけて欲しい。
0080デフォルトの名無しさんNGNG
>>79
へ? 普通にできるけど?
0081デフォルトの名無しさんNGNG
プロパティの雷マークの頁でコードを挿入したあと、
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
MessageBox.Show("aa");
}
で実行して、フォーム上をキーで押しても反応しません。
何か抜けてるのでしょうか?
0082デフォルトの名無しさんNGNG
>>81
KeyDownは基本的にフォーカスを持ってるコントロールで発生する。
Formが子コントロールを持つ場合基本的にFormにフォーカスはいかない。

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

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

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

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

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

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

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

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

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

それならば NamedColor["blue"] とかしっくりくるし、
自分で名前付けることだって NamedColor["MainFormColor"] とかに代入すれば良いから便利だし
0103デフォルトの名無しさんNGNG
>>94
レスありがとう。
指定した列の順番で、行がソートされる感じ。
自分で作るしかない?
0104デフォルトの名無しさんNGNG
>>103
それは2次元とは言わないw
とりあえず汎用性に欠けるから、そういうメソッドは無いと思う
自分で作った方が早いよ
0105デフォルトの名無しさんNGNG
>>102
もちつけ。
FromName 等があることも、コレクションが良さげなことも既出
0106デフォルトの名無しさんNGNG
>>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
0107デフォルトの名無しさんNGNG
string型の "2004/08/06" を
DateTime型に変換するにはどうすればよいのでしょうか?
0108デフォルトの名無しさんNGNG
DateTime.Parse
0109デフォルトの名無しさんNGNG
DateTime DT = DateTime.Parse( "2004/08/06");
ありがとうございます。できました。
011093NGNG
>>106
構造体の配列のソートってどうやんの?
0111デフォルトの名無しさんNGNG
>>110
Array.Sortの解説を読もうな。
011293NGNG
>>111
わかった。読んでみる。
0113デフォルトの名無しさんNGNG
インスタンスを作る際に、staticコンストラクタを使用する方法ってありますか?
0114デフォルトの名無しさんNGNG
>>113
>  インスタンスを作る際に、staticコンストラクタを使用する方法ってありますか?

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

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

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

教えて頂けますでしょうか。
0121デフォルトの名無しさんNGNG
なにをしたいのかよくわからない。
DOSスレに行った方が良いかもしれない。
0122デフォルトの名無しさんNGNG
ある拡張子に関連付けされてるアプリケーション名を取得するにはどうしたらいいですか?
0123デフォルトの名無しさんNGNG
>>120
ttp://www.cisnet.or.jp/home/tsuneoka/win32sub2/9.html
0124デフォルトの名無しさんNGNG
>>122
ttp://www.hitachi-to.co.jp/prod/prod_2/inter/emk/help/TecInfo/hint/GetMediaTypeFromReg.htm
0125デフォルトの名無しさんNGNG
>>122
ttp://backno.mag2.com/reader/BackBody?id=200407140600000000104516000
ttp://www.microsoft.com/japan/msdn/library/ja/jpshell/html/_win32_findexecutable.asp

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

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

お願いします。
0133デフォルトの名無しさんNGNG
全角英字が来たぞ...
0134132NGNG
すいません。
どうも、ATLで作成したDLLじゃなくて、
interop.xxx.dllと言うのが作られてこっちが呼ばれてるみたいです。

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

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

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

で、何がしたいの?
0143デフォルトの名無しさんNGNG
>>141
Unsafeでも使えば?
0144136NGNG
>>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 には正しいアドレスが入るわけだが、カッコ悪い。

0145デフォルトの名無しさんNGNG
>>141
byte [] 経由で標準のマーシャラーに任せればいいんじゃない?
0146デフォルトの名無しさんNGNG
>>142 話の流れに関係ないじゃん、意味無く荒らすだけなら氏ね低脳
0147141=136NGNG
>>145
具体的にはどうするの?

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

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

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


0151132NGNG
>>138
デバッガのタイプ=ネイティブのみ
でできました。

ありがとうございます。
0152デフォルトの名無しさんNGNG
すごく初歩的な質問で恐縮なんですが

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

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

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

コールバックはどのように受けとればよいんでしょうか?
0163デフォルトの名無しさんNGNG
>>161
Graphics.FillRectangleで代用?

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

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

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

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

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

   if(s != text1.text){
    MessageBox.Show("変更するなつってんだろゴルァ!!!!!!!!");
   }
}
0173デフォルトの名無しさんNGNG
>>172
text1.textを変更しただけなのに文句言うなよ。
0174デフォルトの名無しさんNGNG
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 = "これは表示されないはずなのに";
}

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

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

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

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

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

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

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

SharpDevelopだと同様のことをやってもちゃんとfinallyが実行されるので
やはりVisualStudioのリリースモードが何かをやってれるのだと思うのですが
0187デフォルトの名無しさんNGNG
>186

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

# もしかして optimizer の bug ?
0188デフォルトの名無しさんNGNG
>186
VC++6.0のときだけれど、同じようなのありますよ.
アセンブラで見てもコードがない.
デバッグだとある。最適化全部消して解決しました.
Optimiseなんて信用してません.
0189デフォルトの名無しさんNGNG
ループを抜ける条件が無い時点でそんなコードを書いたり実行する機会は無いし、
どうでもいい。
0190デフォルトの名無しさんNGNG
>>188
やっぱり仕様なんですかね・・・
割り切ることにします。
情報ありがとうございました。
0191デフォルトの名無しさんNGNG
>>186
具体的にどんなコードなの?
ILDASMで見てもやっぱりfinally句はなくなってる?
0192デフォルトの名無しさんNGNG
VisualStudioとSharpDevelopで違うってのが釈然としないなあ。
コンパイルってどっちも結局CSCでやってんでしょ?
0193デフォルトの名無しさんNGNG
.GetHashCode()で得られる値というのは
何に活用するものなのでしょうか?
0194デフォルトの名無しさんNGNG
…
Object.GetHashCodeのヘルプをみれ。
0195デフォルトの名無しさんNGNG
>>192
くっついてるコンパイルオプションの問題じゃね?
0196デフォルトの名無しさんNGNG
うーんでも最適化関連で生成コードが変わるようなオプションて
一つしかないような気がするしね…
例えばSharpDevelopがリリースビルドでも最適化を有効にしてないとかなら
分かるけど、そんなことはないような気がするし…
0197デフォルトの名無しさんNGNG
参照設定したDLLをEXEに埋め込む方法ってあるの?
0198デフォルトの名無しさんNGNG
>>197
基本的にない。
0199デフォルトの名無しさんNGNG
>>197
自己解凍実行形式の圧縮ファイルを作れば
0200デフォルトの名無しさんNGNG
そ、それは…いいのかそれで?
0201デフォルトの名無しさんNGNG
これで、いいのだ!!!
0202デフォルトの名無しさんNGNG
EXEと一緒に配布するDLLを
他のプログラムからは参照させないようにしたいんだけど、できますか??
0203デフォルトの名無しさんNGNG
DLLファイルを分割して配布し実行時に結合してDLLとして使用する.
できるかしらんが駄目?
0204デフォルトの名無しさんNGNG
別に分割せんでも暗号化しておいて実行時に複号とかのほうが。
まあ分割だろうが圧縮だろうが暗号化だろうが技術的には可能だけど、
C#でやることじゃあない気がするな。
0205デフォルトの名無しさんNGNG
頭の中でもぼんやりとしているので曖昧にしか書けないのですが,

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

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

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

それを呼び出すコード は

ClassTest.MethodTest();

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

なにかアドバイスを頂けないでしょうか?
0206デフォルトの名無しさんNGNG
>>205
設計をやり直す。


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

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

if (ClassTest is ClassTestNo1)
{
}

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

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

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();
0213デフォルトの名無しさんNGNG
Cだと、入力された文字がアルファベットかどうか調べる場合

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

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

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

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

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

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

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

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

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

何で表示されないんだろ?
0241デフォルトの名無しさんNGNG
\nだけでよかったっけ?
\r\nにしたらどうなる?
0242240NGNG
>>241
Line にはちゃんと別の行として反映されてる
けど表示がサパーリ
追加しても何も表示されないか、同じ行に書かれる

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

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

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

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

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

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

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

0269デフォルトの名無しさんNGNG
>>268
//コードの最初
using System.Drawing.Imaging;

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

//ふらっとスレの方がいいかもな。
0270268NGNG
>>269
ありがとうございます。利用させて貰います。

ところでふらっとスレとはどこでしょう・・・
0271デフォルトの名無しさんNGNG
ふらっとC♯(Part5)
http://pc5.2ch.net/test/read.cgi/tech/1065196964/l50
0272デフォルトの名無しさんNGNG
透過色について質問があります。

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

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

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

また、そのデータセグメントから、もとのint値やfloat値を取り出し
たいのですが、どうすればよいのでしょうか?
0280デフォルトの名無しさんNGNG
C#ってメモリイメージ見れるんでしょうか?
0281デフォルトの名無しさんNGNG
メモリを直にいじるにはアンセーフコードを書かねばならん。
0282デフォルトの名無しさんNGNG
>>279
LayoutKind.Explicitの構造体を作ってFieldOffsetの指定をする。
0283デフォルトの名無しさんNGNG
>>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;
}
}
0284デフォルトの名無しさんNGNG
MemoryStreamとBinaryWriterで
0285デフォルトの名無しさんNGNG
まああんまりC#でやることではないわなぁ。
0286デフォルトの名無しさんNGNG
MSDNによると使い終わったGraphicsオブジェクトは破棄しましょう、とのことなので

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


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

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

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

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

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

One Pointのfor C++を読め。検索しらた一発で引っかかったぞ。
0304デフォルトの名無しさんNGNG
何でこんな独り言? とは思った
0305デフォルトの名無しさんNGNG
ToolbarやPanelなどのコントロールのソースコードは公開されてないのですか?
0306デフォルトの名無しさんNGNG
>>305
ttp://www.geocities.jp/osoftjp/
0307デフォルトの名無しさんNGNG
>>305
ILDASMとかで開けばどんな処理をしているかは見られる。
0308デフォルトの名無しさんNGNG
>>303
だって実際 >>283 でできてるじゃない。いくら MS のサイトに書かれているからって、
明らかに事実じゃないことをいきなり書くのはやはり混乱の元だと思う。
0309デフォルトの名無しさんNGNG
手持ちの資料にある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);
}
0310デフォルトの名無しさんNGNG
昨日Paintイベントについて伺ったものです。

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

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

どなたかご意見、情報お持ちの方レスお願いします。
0311デフォルトの名無しさんNGNG
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();
0312デフォルトの名無しさんNGNG
>>310
現在の実装ではControl.WmPaint()の中で
PaintEventArgsインスタンスを作成して、
その後、OnPaintメソッドに渡してPaintイベント発生という
流れになっているわけだけれど、
Paintイベントから返ってきた後で
PaintEventArgs.Dispose()が呼び出されてる。
よってDispose()を二回呼び出していることになるわけで
それがおそらくエラーの原因。
0313デフォルトの名無しさんNGNG
>>311
>>312
お二方ともわかりやすい説明ありがとうございました。
今日一日悩みぬいたことが解決しました。
0314デフォルトの名無しさんNGNG
>>308
初心者相手にunsafeを教える方がどうかしてる。
0315295NGNG
とりあえず
http://ja.gotdotnet.com/quickstart/winforms/doc/WinFormsCreatingControls.aspx
を見ながらやろうと思ったんですが・・・
始めに何をすればいいのかさっぱりで・・・
0316デフォルトの名無しさんNGNG
別に初心者スレじゃないだろ
0317デフォルトの名無しさんNGNG
>>316
初心者も見ているからやめろと>>302が言っている。
それに対する反論だから初心者が前提に決まってる。
0318デフォルトの名無しさんNGNG
>315
どこまで分からないかわから内がしたのほんをおすすめ。
全部読め
http://www.microsoft.com/japan/msdn/net/books/ProgWinCsharp/default.asp
0319デフォルトの名無しさんNGNG
>>318
ありがとうございます。
がんばってみます。
0320318NGNG
>319
自分は仕組みが全部分からないと駄目なので読んでました.
でも一度それやるとWindowsに何されてるかわから内というのがなくなるのでお勧めです.
0321デフォルトの名無しさんNGNG
>>320
その本ずっと気になってるんだけど流石に上下巻そろえる金はないし・・・で。
ウィンドウプロシージャとかメッセージループとかは解説されてるんでしょうか?
0322デフォルトの名無しさんNGNG
>>312
IDisposable.Disposeは複数回呼び出しても良いことが保障されている。
0323デフォルトの名無しさんNGNG
>>322
ああ、そういえば。
0324313NGNG
・・・あれ?
ということはまたふりだしですか?_| ̄|○
0325デフォルトの名無しさんNGNG
>>322
それって、自分のクラスにDisposeを実装するときは、
一回しか呼ばれないことを仮定してはいけないってことですか・・・?
0326デフォルトの名無しさんNGNG
>>324
>>311
0327デフォルトの名無しさんNGNG
構造体の全てのメンバを任意の時点で全て初期化したい時は
どのようにやればよいですか?
0328デフォルトの名無しさんNGNG
newする。
あるならEmptyフィールドとか使う。
0329デフォルトの名無しさんNGNG
C#のMDIウインドウのプログラムを作成しています。
タイトルバーとかサイズ変更の箇所をクリックしないと
背面のフォームがアクティブ(最前面)にならないのですが
これはそういう仕様でしょうか?
作り方が間違っているでしょうか?
背面フォームのどこを触ってもアクティブになって欲しいんですが・・・。
0330デフォルトの名無しさんNGNG
>>324
フレームワーク側は単に Dispose するんじゃなくて、なにかしてるんでしょ。>>311を良く見るように。
GetDC / ReleaseHdc じゃなくて、BeginPaint / ReleaseHdc + EndPaint だろうけど。
0331デフォルトの名無しさんNGNG
>>330
ところどころでPaintイベントから返ってきたあとでPaintEventArgsのメソッドを呼び出してたり、
一つのPaintEventArgsを複数回のPaintイベントに渡してる箇所があるな。
0332デフォルトの名無しさんNGNG
C#は全然分からんが人生はDisposeしてみたいな。
0333デフォルトの名無しさんNGNG
>332 をガベコレ
0334デフォルトの名無しさんNGNG
>>332はDisposable Teen
0335デフォルトの名無しさんNGNG
>>332は誰からも参照されてない
0336デフォルトの名無しさんNGNG
332みたいのに嬉々としてレスする奴って、
普段技術的な話にはまったく参加できてない奴なんだろうな。
0337デフォルトの名無しさんNGNG
336とかね
0338デフォルトの名無しさんNGNG
>>335
誰かから参照されているいないとDisposeは無関係。
よって>>335は誰からも参照されていない。
0339デフォルトの名無しさんNGNG
338が参照しますた



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

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

//「とか」って何さ。
0346デフォルトの名無しさんNGNG
>>345
> //「とか」って何さ。

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

Win32APIの例
ttp://support.microsoft.com/default.aspx?scid=kb;ja;823179
0362デフォルトの名無しさんNGNG
ついで。
ttp://www.google.com/search?num=100&hl=ja&lr=lang_ja&oe=utf8&q=C%23+%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E3%83%9D%E3%83%BC%E3%83%88
4つめあたりの.NETで〜
0363デフォルトの名無しさんNGNG
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = pictureBox1.CreateGraphics();
//なんか描画する
g.Dispose();
}

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

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

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

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

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

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

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

なのでこの場合は >>390 の同期は取れる
ただし意味の無いオブジェクトをロックに使うのは無意味だから止めとけ
0393デフォルトの名無しさんNGNG
>>387
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpgenref/html/cpconthreadingdesignguidelines.asp
Interlockedクラスとかはダメ?
0394387NGNG
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
値型で同期を取るにはどうすればいいのでしょうか?
0395387NGNG
>>393
ありがとうございます
教えて頂いた方法でやってみたいと思います。
0396デフォルトの名無しさんNGNG
>>392
んが、ほんとだ。
適当なこと言って悪かった。
391は取り消し。
0397デフォルトの名無しさんNGNG
書き込み出来なくなってる?

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

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

インスタンスメソッドなのであれば、場合によってはthisでロックしてもいいし、
それがダメなら、例えばメンバに、
object forIntMemberLock = new object();
とでもしておいてそれをロックしてもいい。
0399デフォルトの名無しさんNGNG
追加、表現に若干語弊はあるが、lockというのは単純に言えば、
他のスレッドからの、同じオブジェクトに対するlockを待たせるもの。
「対象のオブジェクトへのアクセス」を禁止する物ではない。
0400デフォルトの名無しさんNGNG
mandatory lockingというやつですな
0401デフォルトの名無しさんNGNG
話の流れから言えば
advisory lockingというやつですな
な気がするが…
0402デフォルトの名無しさんNGNG
lock なんつうシンタクスシュガーを使わずに
Monitor つかえや( ゚Д゚)ゴルァ!! ってことか
0403デフォルトの名無しさんNGNG
>>402
なんでそうなるんだよ
0404デフォルトの名無しさんNGNG
>>402は分かってないけど分かってるようなフリをしようとして失敗した馬鹿。
0405デフォルトの名無しさんNGNG
ということにしてしまいたい理由はなんだろう ;-)
0406デフォルトの名無しさんNGNG
ということでないとしたらどん可能性があるかな
0407デフォルトの名無しさんNGNG
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!");
  }
}
0408デフォルトの名無しさんNGNG
ウェブにだって本だってサンプルいくらでも転がってるだろ・・・

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

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.
0412デフォルトの名無しさんNGNG
C#のダイアログで、C++みたいなDDXのような機能ってあるんでしょうか?
0413デフォルトの名無しさんNGNG
ない。

>C++みたいなDDX

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

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

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

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

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

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

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

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

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

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


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

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

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

>>423
メッセージの段階で変換するとか。
ProcessKeyEventArgsとかその辺でいけるはず。
0430デフォルトの名無しさんNGNG
XmlDocumentの配列ってどうやってつくるんでしょうか。

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

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

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

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

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

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

事前バインディングならtlbimp.exeを使ってタイプライブラリをつくる。
VSなら直接COMのDLLを参照設定できる(裏で自動的にtlbimpしてくれる)。
0435デフォルトの名無しさんNGNG
>>432
まあ素直にDataSet/DataTableつかっとけってことだな。
0436デフォルトの名無しさんNGNG
>>432
?? 普通に出来たけど。
なんか別のところで引っかかってない?
0437デフォルトの名無しさんNGNG
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);
0438437NGNG
↑の続き

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;
}
0439デフォルトの名無しさんNGNG
指定した色が透過されて画像を描画させるにはどうしたら良いのですか?
0440デフォルトの名無しさんNGNG
>>439
Graphics.CompositingMode
0441439NGNG
>>440
もうちょっと詳しい説明をお願いします。
0442デフォルトの名無しさんNGNG
調べてから効け
0443デフォルトの名無しさんNGNG
あとBitmap.MakeTransparent
0444デフォルトの名無しさんNGNG
>>440でわかんないならアフォ確定
0445デフォルトの名無しさんNGNG
指定したディレクトリの、ひとつ上のディレクトリを得るにはどうしたらいいですか?
0446デフォルトの名無しさんNGNG
>>445
ちっとはSystem.IO名前空間ぐらい調べろって。
0447デフォルトの名無しさんNGNG
バイトデータをファイルに書き込むときに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);

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

取りあえずエラーが起きた時に何がnullになってるかをチェック。
0451デフォルトの名無しさんNGNG
ポップアップメニュー を出すにはどうしたらいいですか?
ちなみに普通のメニューは出ます。
0452デフォルトの名無しさんNGNG
>>451
まずはSystem.Windows.Forms名前空間内の〜Menuってなクラスを調べてみたらどうだろうか。
0453437NGNG
>>450
Ret = JPGDraw(PicFile, 0, 0,BitMapMemoryHandle,BitMapInf, 0, 0);
↑の変数の中身は
StringBuilder PicFile = "C:\Winter.jpg"
int BitMapMemoryHandle = 0
int BitMapInf = 0
でした。どれもNULLじゃないので、全然わからないです T_T
0454デフォルトの名無しさんNGNG
>>453
じゃあそれ以外の何か。
0455デフォルトの名無しさんNGNG
>>449
P/Invoke でも、確か先方がそれらしい Windows 構造化例外を投げれば
NullReferenceException として上がってきたと思う。JPGDraw のソースが
あるなら、デバッグビルド版にしてネイティブデバッグも ON にすれば
当該箇所が分かると思う。
0456437NGNG
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);
0457437NGNG
変更点-メソッド
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;
}
0458デフォルトの名無しさんNGNG
質問です。

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

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

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

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

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

適切なサイズのビットマップを new Bitmap(...) 等して確保して、Graphics.FromImage で Graphics を作って、
GetHdc() で HDC を得て、StretchDIBits で描いて、ReleaseHdc() で開放して、出来上がった Bitmap を
PictureBox の Image にセットして Invalidate しておしまい、という流れにしてみてください。
0463デフォルトの名無しさんNGNG
フォームやコマンドプロンプトを出さずに、メッセージボックスだけ表示するにはどうしたらいいですか?
0464デフォルトの名無しさんNGNG
>>463
コンパイラに/target:winexeオプションを指定して
Main()のなかでMessageBox.Show()
0465デフォルトの名無しさんNGNG
>>461
ttp://www.google.com/search?num=100&oe=utf8&q=%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB+%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3+%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF
これか。
0466デフォルトの名無しさんNGNG
C++にあったようなROP反転処理はC#にもありませんか?
グーグルで思うようにヒットせずに質問致します。

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

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

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

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

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

というような表示が出ないので、なんとかShortcutで設定したいのです
どうにかならないものでしょうか?
0479デフォルトの名無しさんNGNG
>>478
"メニュー1\tQ"
でOK.

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

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

はApp.icoのことでしょ?

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

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

>>488
GetFiles().Length

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

Perlの$1,$2にあたる部分とかもさっぱり分からん
0493490NGNG
プログレスバーを表示しようとしたんですが、
0%から全部終わった瞬間に一気に100%までいってしまいます。
なぜでしょうか?
0494デフォルトの名無しさんNGNG
>>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);
}
0495デフォルトの名無しさんNGNG
>>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);
}

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

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

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

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

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

JPG では,ImageAttr を設定し,画像を合成する事はできないのでしょうか?
0500デフォルトの名無しさんNGNG
>>499
単に圧縮する時に色が変わってるだけじゃないの?

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

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

なんにせよ、回答ありがとう。
0504デフォルトの名無しさんNGNG
アイコンDLLを作ろうと思ったらどうすればよいですか?
0505490NGNG
1 アイコンを作成。
2 DLLを作成。
0506デフォルトの名無しさんNGNG
>>504
0507デフォルトの名無しさんNGNG
>>504
/win32res を使うんじゃないかな
0508デフォルトの名無しさんNGNG
>>507
/win32res の使い方が分かりません
プロパティーにそれらしい項目が無いんですけど
0509デフォルトの名無しさんNGNG
>>508
ただのアイコン詰め合わせくらいコンパイラでやれって。
0510デフォルトの名無しさんNGNG
csc /t:library /win32res:Icon1.RES class1.cs
でも出来ないんですけど
0511デフォルトの名無しさんNGNG
icon1.resとやらはどうやってつくったのさ。
0512デフォルトの名無しさんNGNG
\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\rc.exeに
アイコンファイルをD&Dしたら出来ました
0513デフォルトの名無しさんNGNG
>>512
ok, あとはrc.exeの意味と使い方を知るだけだ。
ヘルプの/win32resをもう一度熟読して、googleに尋ねるべし。
0514デフォルトの名無しさんNGNG
>>513
できました
リソーススクリプトを入れるんですね
とても勉強になりました、どうもありがとうございました
0515デフォルトの名無しさんNGNG
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はアイコンのコンパイル済みリソーススクリプト)
0516デフォルトの名無しさんNGNG
>>515
Form1はVC#で組んでる?
だとしたらobjディレクトリに*resourcesがあるからそれも突っ込め。
0517デフォルトの名無しさんNGNG
やってみましたが結果が同じでした
csc /t:winexe /res:NameSpace.Form1.r
esources,NameSpace.Form2.resources,NameSpace.Form3.resources
/win32res:icon.res *.cs
ちなみに、Form2,3はアプリ内で使う別窓です
あと、コンパイル用にソースがあるフォルダにresourcesファイルを全部コピーしました
0518デフォルトの名無しさんNGNG
shift-jisでファイルから読み取った文字列に対してTrim()を使っても空白が削除されてくれません。
ユニコードに変換したりとかしないといけないのでしょうか?
0519デフォルトの名無しさんNGNG
>>518
素敵に意味不明。

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

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

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

このようなエラーが出たことのある方、何か情報を頂ければ・・・と思います。
0522デフォルトの名無しさんNGNG
>>521
ここに似たような経験をした人がいますね。
http://www.error-bank.com/microsoft.public.dotnet.languages.vb.1/150478_Thread.aspx
0523517NGNG
色々やってみましたが無理っぽいのでDLLで済ませることにしました
皆さんどうもお騒がせしました
0524デフォルトの名無しさんNGNG
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+ で一般的なエラーが発生しました。
0525デフォルトの名無しさんNGNG
>>524
ttp://www.google.com/search?num=100&oe=utf8&q=image+save+gdi%2B+error
いろいろあるね。

StreamをCloseしろとか、ファイル/フォルダにパーミッションがあるのかとか。
0526524NGNG
ごめんなさい。上の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()での書き込みや、適当にテキストファイルを生成することは出来ているので、
書き込み権は関係ないのではないかと思っています。
0527524NGNG
度々すいません。上のIMG.Saveの行を

FS_TEST2.WriteByte(1);

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

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

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

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

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

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

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

0531デフォルトの名無しさんNGNG
>>530
そのものMD5クラスがある。使い方はヘルプをよく読む。

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

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


//button1.Visible = false;

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

しかし、メインスレッドから一度Visibleをtrueにした後なら、異なるスレッドからでもVisibleをいじることが出来ます。
さっぱり意味がわかりません・・・。
0534528NGNG
>> 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

つっこみどころ満載でしたら,つっこみ願います.
0535528NGNG
ミス.

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

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

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

- MD5CryptoServiceProvider csp = new MD5CryptoServiceProvider();
+ HashAlgorithm csp = HashAlgorithm.Create("MD5");
0539デフォルトの名無しさんNGNG
cspという変数名がやだ。
0540デフォルトの名無しさんNGNG
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が全く無視されてしまいます
何が悪いのかサッパリ分かりません
お願いです助けてください。
0541デフォルトの名無しさんNGNG
>>540
ポインタ関係は一切送れない。少なくともMessage系では絶対に。
0542デフォルトの名無しさんNGNG
常用エディタのxyzzyやcmd.exeでは受け取ってくれた。
notepad、wordpadは無視された。
受け取るアプリの方の問題らしい。

>>541
これにポインタは含まれてないような。
0543デフォルトの名無しさんNGNG
>>540
notepadの場合 Edit に送らないとダメなのでは?

>>541
refつけたりマーシャリングしたりすれば送れたかったけ?
無理なら System.Runtime.InteropServices.Marshal なんてものもあるが。
0544デフォルトの名無しさんNGNG
ていうか、なんでIntPtrで宣言してんだ?intでいいじゃん。
0545デフォルトの名無しさんNGNG
>>524
例外処理くらいしろ
0546540NGNG
できたー!!
皆さんありがとうございました!!
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);
 }
}
あー後はソースを綺麗にしなきゃ。
0547524NGNG
>>545
例外処理はしますが、それだけでは
ImageがStreamに送れない問題は解決しないです…。
0548在日参政権反対NGNG
>524
わからんのだけど、一般的エラーってなんなんだよ...COMでも同じようなのあって切れた覚えが...
0549デフォルトの名無しさんNGNG
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を利用してこの構造体配列変数にデータ挿入や削除させる事は可能ですか?
0550549NGNG
data[].index.sort みたいな事をしたらstrも変わる様にしたいのです。
0551デフォルトの名無しさんNGNG
?
各要素の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}
こういう解釈で良いのかな。
0552549NGNG
>>551
間違ってました。indexの所だけソートしたらstrも追従して
前 index=3,5,2 str=c,b,a
後 index=2,3,5 str=a,c,b
の様にしたいのです。
それで、この二つの変数は構造体でワンセットになってて、さらにそれが配列変数に
なっています。
簡単にいえば住所録みたいに名前とナンバーを付けといて、ナンバーをソートしたら
名前もそれに従うという風にしたいのです。
もう一つ、住所録なので挿入と削除も実装したいので構造体にそういう機能は無いのかな
と思ったのです。
0553デフォルトの名無しさんNGNG
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で並べ替え
0554デフォルトの名無しさんNGNG
>>553
MyDataにIComparableを実装させる方が自然じゃないか?
0555デフォルトの名無しさんNGNG
Paintイベントが非同期的に呼ばれることってあるんでしょうか?
私の勉強した知識では、PaintイベントはWndProcがWM_PAINTを受け取ってから実行されると思いますが、
WndProcがWM_PAINTを連続で受け取っても、非同期でPaintイベントを起こしたりはしないと考えているのですが。

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

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

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

作り直しか・・・
0570デフォルトの名無しさんNGNG
と、思ったらメインメニューが悪さしてるような・・・。
試しにメインメニューをカットしてみたら意図した起動になりました。
なんなんだろう・・・。
0571デフォルトの名無しさんNGNG
>>568
別に違法コピーとかしてなきゃ問題無いでしょ。
0572デフォルトの名無しさんNGNG
>>571
実は自分のプログラムをラウンジってソース置き場あるでしょ?
あそこにうpしたらさ、なんかおれのPCに穴が開いたらしくて
おれのパソコンの中身とか見れたんだって
実際そいつが、うpしたファイルのディレクトリの場所知ってたし
プログラム自体のセキュリティってどうなのかなと思いまして
0573デフォルトの名無しさんNGNG
…
0574デフォルトの名無しさんNGNG
( ゚д゚)ポカーン
0575デフォルトの名無しさんNGNG
この話って本当か!?
0576デフォルトの名無しさんNGNG
>>572
もっと勉強しろ。
0577デフォルトの名無しさんNGNG
RichTextBoxのスクロールバーで質問なのですが
バー自体をつまんで移動した時に、
移動した情報やバーがつかまれた等認識できるのでしょうか?
(hscroll等のように▼▲おしたときにクリックイベントとんで来るとか・・・)
よろしくお願いします。
0578デフォルトの名無しさんNGNG
>>572
デバッグビルド?
0579デフォルトの名無しさんNGNG
動的プロパティにプログラムから値を設定したいんですがどうすればよいのでしょうか。
0580572NGNG
みなさんに知識分けてほしいんです
自分で調べても、ノートンや、ウィルスチェックソフトのサイトしか見つからなくて
本当に怖いんです。
別に問題ないならいいんですが。偶然でもディレクトリの場所なんて
わからないはずなんですが、お願いします
0581デフォルトの名無しさんNGNG
時々市販のプログラムでも、ディレクトリ情報が入っているプログラムがあるな。
0582デフォルトの名無しさんNGNG
>>580
問題ない。
0583デフォルトの名無しさんNGNG
まぁ仮に見えたとしても、別に構わんよ。
0584572NGNG
>>581
ディレクトリ情報っていっても、コンパイルした場所じゃないんです。
コンパイルした情報は埋め込まれてるのはわかります(消す方法ないですか?)

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

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

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

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

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

はっきりいって、いってません。ほんものの572かはしらんが
0599572NGNG
デバッグ版をうpしてしまった場合なにか問題ありますか?
0600デフォルトの名無しさんNGNG
>>599
馬鹿にされて終わる
0601572NGNG
>>600
すみません。詳しくお願いします。個人情報に関わるようなことは
ディレクトリ構造がばれるぐらいでしょうか?
0602デフォルトの名無しさんNGNG
デバッグ版をupしたの?
0603デフォルトの名無しさんNGNG
>>601
それ以上の何を心配してるんだ。w
0604572NGNG
>>602
debugフォルダにあるexeファイルをうpしてしまいました
何か問題ありますでしょうか?
最近始めたので、コンパイルすればそれでいいと思ってたのですが
Releaseに設定しないとダメなんですね。
最近のプログラムって難しいです
0605591NGNG
>>592
ごめん。上のウソだった。

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

>>597
MouseEventArgsのButtonsプロパティで拾えるから
あとはアーダコーダやればOK。
0606572NGNG
話変わりますけど

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

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

>>606
> リストビューの項目を色分けで表示したいのですが
> どうすればいいですか?
そのまんまのプロパティがあるだろ……。
0609572NGNG
>>608
それって2003年版とかですか?
モレのは2002年版なんだけど
なかったんだけどな・・・・
0610デフォルトの名無しさんNGNG
>>609
『System.Windows.Forms.ListViewItem.ForeColor プロパティ』
とりあえず探してみ
0611610NGNG
背景色なら『System.Windows.Forms.ListViewItem.BackColor プロパティ』
0612デフォルトの名無しさんNGNG
>>608
ありがとうございます。試してみます。
0613572NGNG
>>610
そのプロパティならあるんですが・・・
言い方悪かったみたいで

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

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

ListView.ForeColor じゃなくて
ListViewItem.ForeColor だぞ(゚Д゚#)ゴルァ!!
0619デフォルトの名無しさんNGNG
とりあえず>>572は一週間ぐらいMSDN読み続けろ
なんだこのスレの伸び方は・・・
0620572NGNG
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したのを削除する場合どうすればいいですか?
削除しようにも、パスワードいるらしくてできません
0621デフォルトの名無しさんNGNG
D:\BUCKUP\MYDATA\MYSOFT\C#\TEST\pso\obj\Debug\pso.pdb
0622デフォルトの名無しさんNGNG
D:\BUCKUP\MYDATA\MYSOFT\C#\TEST\pso\obj\Debug\pso.pdb
D:\BUCKUP\MYDATA\MYSOFT\C#\test#\PsoBBIdSort\obj\Debug\PsoBBIdSort.pdb

"BackUp" な。綴りはちゃんと覚えないと恥ずかしいぞ?
0623572NGNG
>>621
>>622
イチイチ晒さなくていいんじゃないですか・・・
ところで、穴って何かわかりますか?
0624デフォルトの名無しさんNGNG
>>623
とりあえず恥さらしってだけ。
どちらにしろこれだけでは何もされないから安心しとけ
0625デフォルトの名無しさんNGNG
おかしなヤツがそのパスを持って穴と言ってるだけかと。
0626572NGNG
>>624
そうですか・・・安心しました。
スレ汚したのは申し訳なかったです。
私にとっては一大事だったので
0627デフォルトの名無しさんNGNG
PCに穴が開いているのは確かだな。
結果こうやってパスが漏れたわけだし。
0628デフォルトの名無しさんNGNG
>>594にはこう書いてあるぞ

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

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

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

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

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

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

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

うん、それでOK
0644デフォルトの名無しさんNGNG
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%」にすると正常動作します。
どうすれば解決できるでしょうか。よろしくお願いします。
0645デフォルトの名無しさんNGNG
何で列名を指定してる?
0646デフォルトの名無しさんNGNG
colorに定義されてるシステム色を順番に出力したいのですがどうすればいいでしょうか?

毎回、Color.Redとか名前で指定するのが面倒なので・・
0647デフォルトの名無しさんNGNG
リフレクション

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

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

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

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

Process.GetProcessesByName静的メソッドとかあるよ。
0653デフォルトの名無しさんNGNG
windowsアプリケーションの設定を保存するために.configファイルを使いたいと思います。
.configファイルから値を取得するメソッドは見つかりましたが、値を設定するメソッドが見当たりません。
どうすればプログラムから値を設定することができるのでしょうか。
0654デフォルトの名無しさんNGNG
>>653
ttp://ukamen.hp.infoseek.co.jp/Programming1/DynamicProperty/index.htm
.configの捉え方がちと違う?
0655在日参政権反対NGNG
>650
すまんそ...
以前MFC使ってて、バグった時に中のソースまで追えるのが好きだったんですが、COMで切れそうになりました  ですじゃ...

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

..
0656デフォルトの名無しさんNGNG
>>649
ari-
0657デフォルトの名無しさんNGNG
>>649
ローカル変数sをスコープで宣言することができません。

for文で色を列挙していきたんですが
0658デフォルトの名無しさんNGNG
>>649
string[] col=Enum.GetNames(typeof(KnownColor));
Color.FromName(col[1]);
これでいけましたありがとう
0659653NGNG
>>654氏
これで合ってます。それで、
このサイトではconfigファイルを直接編集して値を書き換えているみたいですが、
値の書き換えをレジストリの設定のようにプログラム内から行いたいんです。
0660デフォルトの名無しさんNGNG
>>659
これかな?
http://ukamen.hp.infoseek.co.jp/Programming1/DynamicProperty/index.htm#SEC6
0661524NGNG
Image IMG = Image.FromStream( FS );
とやった後、 FS.Close(); してしまうと、

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

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

IMGはFSが指すファイルへの参照でしかないということですか?
0662デフォルトの名無しさんNGNG
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ファイルはどうやって共有するのでしょうか?
0663653NGNG
>>660氏
その辺りです。例えば、
System.Configuration.ConfigurationSettings.AppSettings["Form1.Icon"] = "hoge.icon";
のようにしたいんですけど、プロパティはgetだけしかないのでできないんですよね。
他にいい方法があると思うんですけど。
0664デフォルトの名無しさんNGNG
>>663
.NET 2.0ではそんな感じでできるけど1.xではない。
xmlシリアル化とかその辺に転がってるセッティング用のクラス使われたし。
0665590NGNG
>>652
レスありがとうございます。
変にforで回してしまっていて、かなりやり直さないとダメの予感です。
アドバイスを参考に週末にでもじっくりやり直してみます。
0666653NGNG
>>664氏
できないことがわかっただけでよかったです。ありがとうございました。
しばらく適当に自作したクラスを使っときます。
0667461NGNG
>>465
参考に動くめどがつきました。
ありがとうございました。
0668デフォルトの名無しさんNGNG
>>643
ありがとうございます

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

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

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

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

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

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

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


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

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

---- cut here ----
REGEDIT4

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

---- cut here ----
0687デフォルトの名無しさんNGNG
>>685
起動後に再描画させてみる(他のウィンドウをかぶせてみるとか)と
生成なのか描画なのか切り分けができそう。
0688682NGNG
>>686
ありがとう。だいたいできました。


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

まだ他にも色々よくわからない値がありましたが、
このくらいやればとりあえず動くっぽいのを確認しました。
0689デフォルトの名無しさんNGNG
windowsapplicationを作っているのですが、
mainMenuを追加しても、実行時に見えなくなってしまいます。
編集時でも、フォームを選択して、mainMenuのフォーカスをはずすと
見えなくなってしまいます。
これって、どうすれば解決できますか?
宜しくお願い致します。
0690デフォルトの名無しさんNGNG
>>639を読んで自分のパソコンのアカウントを作り直した俺はあほですか
0691デフォルトの名無しさんNGNG
うん
0692デフォルトの名無しさんNGNG
>>690
そんなことせーへんでもマイドキュメントの参照先を変えればいいだけなのにw
0693デフォルトの名無しさんNGNG
ていうか、マイドキュを使わなきゃいいだけでは?
0694デフォルトの名無しさんNGNG
でふぉがマイドキュだしね
0695デフォルトの名無しさんNGNG
Processで起動したアプリケーション(ウィンドウ付き)を、こちらのプログラム側から
最小化したり最大化したり、タスクバーから消したりしたいんですが、どうしたらいいですか?
0696デフォルトの名無しさんNGNG
>>695
ウィンドウにメッセージを送れ
0697デフォルトの名無しさんNGNG
適切な条件でウインドウハンドルを取得して、メッセージを送るだけ。
0698デフォルトの名無しさんNGNG
その関数なりを書いてくださいよ…ぐぐれないじゃないですか。
別にC#でも出来ないわけじゃないんですよね?unmanagedじゃないとできないわけでも無いですよね?
0699デフォルトの名無しさんNGNG
>>698
なんかエラそうに見えるな・・・
0700デフォルトの名無しさんNGNG
SendMessage()
0701デフォルトの名無しさんNGNG
こういう時に自身のWndProc(ref Message)を呼ぶってのはどうなんだろう。
//真っ当じゃないと思うが動作してしまう。
0702デフォルトの名無しさんNGNG
スレッドの作成したコントロールを他スレッドからいじってはいけない理由はわかったのですが
(Windowsフォームが内部でCOMを使ってるからですよね?)
あるスレッドの作ったBitmapなどのオブジェクトも他スレッドからいじってはいけないのでしょうか?
今のところ不具合は出てないのですが、不安です。
0703在日参政権反対NGNG
>702
スレッドを使ってはいけないのはMFCのときも同様で、それはWindowHandleとMFC内部の管理オブジェクトとの関連付けでおかしくなる可能性があったため(うろ覚え)
.NETの場合は知らないけれど、多分同じようなものなのでは?そういう意味ではBitmapなどについてはある処理についてはスレッドセーフかもしれないけれど。
0704デフォルトの名無しさんNGNG
>>703
ありがとうございます
VBからC#に来たので、あまりWindowsの内部についての知識がなかったもので戸惑いました。
ということはMFCでCBitmap(でしたよね?)がスレッドセーフなのかどうか調べればよいのでしょうか?
0705デフォルトの名無しさんNGNG
>>704
スレッドセーフと、「コントロールは他のスレッドからアクセスしてはいけない」は微妙に違ったり
MSDN あたりに書いてあるんじゃないかな?
0706デフォルトの名無しさんNGNG
スミマセン
スレッドセーフの意味を履き違えていました。
MSDNには、MFCはオブジェクトレベルでの安全性を保証していないので
複数のスレッドからオブジェクトを共有する場合は同期を取る云々、とありました。

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

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

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

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

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

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


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

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


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

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

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

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

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

.GetHpalette()とかそんな感じのメソッドがあるといいんですけど。
0722デフォルトの名無しさんNGNG
スレ違いなら誘導お願いします

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

あれば教えてください.おねがいします.
0723デフォルトの名無しさんNGNG
>>722
MSDN
0724デフォルトの名無しさんNGNG
MSDN はチェックしたつもりなんですが,見つけられませんでした.
お手数おかけして申しわけないのですが,よろしければ
URL をはって頂けませんか?

一番欲しいのはバグ一覧が見たいのですが….
0725デフォルトの名無しさんNGNG
>>721
ノータッチデプロイとかでどーーーーしても .NET Framework ないでやる必要があるなら、
MemoryStream に BMP で Save して中のヘッダを見ればパレットが取れると思う。
0726デフォルトの名無しさんNGNG
↑
HPALETTE じゃないけど、パレットの色情報ってことね。
0727デフォルトの名無しさんNGNG
独り言だけど、マルチスレッド関連、マルチプロセッサ等考慮して非常に厳密にやろうとするなら
lock から出る前に Thread.MemoryBarrier() 呼んだり、あるいは Thread.VolatileWrite 等で書いたり
する必要があるみたいですね。サーバ系AP書いてる人は要注意っぽいな・・・
0728デフォルトの名無しさんNGNG
上の方で話題になってましたけど
なんでフォームコントロールは他スレッドからアクセスしちゃいけないんですか?
MSDNにもそう書いてありましたけど理由までは載っていなかったので
0729デフォルトの名無しさんNGNG
>>727
別CPUにスレッドが割り当てられるのってどんな場合があるの?
※普通にやっててそうなる?

もちろんそういう状態で動作するんなら考えないといけないだろうけど、
現実に現在の環境で起こり得るのかなって思って。
0730デフォルトの名無しさんNGNG
>>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%になるよ。
つかならなかったら悲しいじゃないか、デュアル以上のシステムが。
0731デフォルトの名無しさんNGNG
>>730
う・・・MSDNは大体目を通したつもりだったのですが
すみません。
スレッディングモデルを考えるのはフォームコントロールの部分だけってことですよね?
ということは同じアプリの中にSTAとフリースレッドが混在してたりするんでしょうか。
気付かずに使ってましたけど、結構難しいんですね。
0732デフォルトの名無しさんNGNG
>>730
>スレッド2つビジーにすればあっさりCPU二つ100%になるよ。
あら、さいでしたか…
>つかならなかったら悲しいじゃないか、デュアル以上のシステムが。
そりゃそうなんだけど、以前はそういうもんじゃなかったっけ?
0733デフォルトの名無しさんNGNG
C#でDirect3D9のプログラムを作っているんですが、
カーソルキーのKeyPressイベントを認識してくれません。
これって何かおまじないがいるのでしょうか。
0734デフォルトの名無しさんNGNG
昔は悲しかったってことさ…。
0735デフォルトの名無しさんNGNG
>>731
COM 使う人なら↓この辺も。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconinteropmarshalingoverview.asp
0736デフォルトの名無しさんNGNG
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

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

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

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

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

(注) <CR> ってのは '\r' で、<LF> ってのは '\n' のこと。
0740736NGNG
>>737
>>738
>>739

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

と元の質問も知らないけど言ってみる
0745デフォルトの名無しさんNGNG
>>742
サイズを指定して領域を確保した後、そのサイズ分だけ転送。
特に迷うところはないが。
0746736NGNG
分かったような分からないような…。
とりあえず色々と試してみます。
どうもありがとうございました。
0747733NGNG
>>733の自己レスです。
特殊キーはKeyDown、通常キーはKeyPressで処理するようでした。
0748デフォルトの名無しさんNGNG
>>747
DirectXの話はそれ用のスレがあるからそっち行った方がいいよ
・・・最近しんでるけど
0749デフォルトの名無しさんNGNG
まあKeyPressは使いにくいから普段つかわんわ。
0750デフォルトの名無しさんNGNG
>>727
変数をvolatile付けて宣言してもだめなの?
0751750NGNG
C# の場合、フィールドに volatile 修飾子を使用すると、そのフィールドへのすべてのアクセスで VolatileRead または VolatileWrite が使用されることが保証されます。
と書いてあったので大丈夫だ。
0752デフォルトの名無しさんNGNG
Toolbarの背景に画像を使うにはどうしたらいいでしょうか?
Paintイベントが無いので描写するのはムリですかね・・。
0753デフォルトの名無しさんNGNG
>>752
PanelとButtomで似たようなクラス作るか、
もっといろいろやりたければ、Control継承してシコシコやるかだね。

ちなみに .NET2.0でもBackgroundImageみたいのは追加されてないよ。
0754デフォルトの名無しさんNGNG
>>753
ToolBarクラスにはBackgroundImageあるよ。
自分で検証してみたところ反映されてないけど・・・。
0755デフォルトの名無しさんNGNG
>>754
え?あったっけ?
Button用のImageListしかなかったような…。
0756デフォルトの名無しさんNGNG
>>753
>>754
やはり標準のToolBarではキビシイですか・・。
PanelにButtonを置いて簡単なツールバーに見立てることにします。
ご解答どうもありがとうございました。
0757デフォルトの名無しさんNGNG
初歩的な質問ですが
LabelやPictureBox下のコントロールなどを透過するには
どうすればいいでつか(´Д`;)?
0758デフォルトの名無しさんNGNG
>>757
ttp://dobon.net/vb/dotnet/control/labelonpicturebox.html
こういうこと?
0759デフォルトの名無しさんNGNG
>>758
なるほどそうすればいいんですね
どうもありがとうございました(´∀`*)
0760デフォルトの名無しさんNGNG
System.Drawing.Graphics で描写した画像をファイルに保存するほうほうを教えてください
0761デフォルトの名無しさんNGNG
pictureBoxかなにかで一枚の一画面以上の大きい画像または
複数の一画面画像を使って画像がスクロールしているようにするには
どうすればいいですかね?
何かいい方法があればご教授くださいませ(´・ω・`;)
0762デフォルトの名無しさんNGNG
>>760
Bitmap bitmap;
***
using (Graphics g = Graphics.FromImage(bitmap)) { *** }
bitmap.Save(***);
0763760NGNG
>>762
ウホ!サンクス
0764デフォルトの名無しさんNGNG
>>761
画面からはみ出す大きさの画像をスクロールさせて見たいってことかな?

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

とすればPictureBoxがPanelより大きいとき
スクロール機能を勝手につけてくれるけど
0765デフォルトの名無しさんNGNG
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
・・・・
という具合に。
0766デフォルトの名無しさんNGNG
C#でパケット監視できるソフトって作れるの?
0767デフォルトの名無しさんNGNG
>>766
作れないと思ってたの?
0768デフォルトの名無しさんNGNG
>>764
そういうのじゃなくて、キー操作やマウスクリックでスクロールするように
したいのですが、できませんかねえ?
すいません、説明不足でしたorz
0769デフォルトの名無しさんNGNG
>>768
KeyDownやらMouseDownに処理を書きたまへ。
0770デフォルトの名無しさんNGNG
(すみません、適切なスレが見つからなかったのでこちらに書かせてもらいます。)

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

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

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

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

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

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


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

派生クラスでだけでInvalidete()使うだけならnewで隠蔽するとか、Paintイベントを拾うとか別の方法を模索。
0791デフォルトの名無しさんNGNG
>>783
スレッドがらみのことでそれはちっときつい。
0792デフォルトの名無しさんNGNG
>>781
0793デフォルトの名無しさんNGNG
>>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 とかしてインタフェイスを得るという手間が必要になります。
0794デフォルトの名無しさんNGNG
初歩的な質問ですいません。

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

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

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

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

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

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

もっと単純に作るなら、Form_Name からの条件分岐で Form1 を直接作れば良い
0799デフォルトの名無しさんNGNG
Form1を閉じてForm2を表示させたんですが
Form2_Load{}中のコードを実行させるにはどうしたらいでしょう?
なんか初歩的でスマソorz
0800デフォルトの名無しさんNGNG
>>799
他から呼び出す部分をpublicなメソッドに纏めたら?
0801デフォルトの名無しさんNGNG
>>781
0802デフォルトの名無しさんNGNG
>>801
>>792
0803794NGNG
>>798氏
わざわざソースを書いていただき有難うございました。
お蔭様で、考えていた通りの機能を実現する事が出来ました。

本当に感謝です♪
0804デフォルトの名無しさんNGNG
Visible=falseに設定してあるピクチャボックスのImageプロパティが参照されるということはあり得ますか?
見えないピクチャボックスのImageにBitmapを設定しており、
Visible=trueのピクチャボックスのImageに同じBitmapを設定しています。
見えている方のピクチャボックスを再描画させまくると、
「そのオブジェクトは使われています」というエラーが出ます。
Bitmapを使っているのはこの二つのピクチャボックスだけなので、
原因はVisible=falseの方のピクチャボックスからもBitmapが読み込まれてしまっているのだとわかるのですが・・・。
0805デフォルトの名無しさんNGNG
>>800
ん〜よくわかんないのですが
結局どうやれば実行できるのでしょう^^;?
0806デフォルトの名無しさんNGNG
>>801
0807デフォルトの名無しさんNGNG
781     WMPで再生リストを表示するにはどうすればいいでしょうか Playerオブジェクト使いづ...
├792     >>781
│└802     >>801 >>792
└801     >>781
 └806     >>801
0808デフォルトの名無しさんNGNG
>>804
それに答えられる人が MS の開発者以外にいるかな・・・
0809デフォルトの名無しさんNGNG
>>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 を直接呼び出す

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

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

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

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

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

よろしくお願いします。
0817デフォルトの名無しさんNGNG
mscorlib

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

これが分からなくて朝も起きれません。どなたか教えてください。
0818デフォルトの名無しさんNGNG
ムスカリブ
0819デフォルトの名無しさんNGNG
C♯って明示的に.Dispose()して
使わない領域はいちいちデストラクトしないといけないの?
0820デフォルトの名無しさんNGNG
>>819
使わない領域ってなにさ。
Disposeでデストラクトされるとでも?
0821デフォルトの名無しさんNGNG
息子は、リブだろ!
0822デフォルトの名無しさんNGNG
>>817
マイクロソフトコーポレーションのライブラリの様な気がする
気がするだけ

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

だけど使い終わったらちゃんと Dispose はしといたほうが良い気がする
面倒だったら using ブロック使え
0823デフォルトの名無しさんNGNG
MultiLanguage Standard Common なんとかだった気がする
気がするだけ
0824デフォルトの名無しさんNGNG
MultiLanguage Standard Common Object Runtime Library
0825822NGNG
>>823
おまえデザパタスレにも居なかったか?
なんで俺のレスは真似されやすいんだろうか
0826デフォルトの名無しさんNGNG
>>822
~F()
{
this.Dispose();
}

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

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

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

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

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

0828デフォルトの名無しさんNGNG
>>827
スレッドセーフの確保も必要だな。
0829デフォルトの名無しさんNGNG
俺まだ2つのDisposeの使い分け分かってねぇ・・・。
この際勉強するか。
0830デフォルトの名無しさんNGNG
ついでにDispose(bool)の方virtualにしておいて派生クラスから
オーバーライド&呼び出しできるようにしとくのがパターン。
0831デフォルトの名無しさんNGNG
textコントロールにint型変数の数値を代入したいのですが
一時的にint型からstring型に変換する方法はありますか?
0832デフォルトの名無しさんNGNG
一時的?
0833デフォルトの名無しさんNGNG
>>831
一時的?
ToString()メソッドを使えばよかろう。
0834デフォルトの名無しさんNGNG
>>833
なるほど、うまくいきました
どうもでした〜
0835デフォルトの名無しさんNGNG
>>834
おまえバカだろ?
0836デフォルトの名無しさんNGNG
師匠を「おまえ」呼ばわりイクナイ
0837デフォルトの名無しさんNGNG
いわゆるメッセージループの部分ってどこですか?
0838デフォルトの名無しさんNGNG
Application.Run()

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

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

Microsoft.Win32 とかもあるんだから、Microsoft.Windows.・・・とかに全部
まとめてくれるのもきれいだと思うんだけどなあ。
0840デフォルトの名無しさんNGNG
ここは相談室であってお前のぼやきを書きところではない
そーゆーのはチラシの裏にでも書け
0841デフォルトの名無しさんNGNG
>>839
WinFX/Avalonで拡張されるから。
ttp://pc.watch.impress.co.jp/docs/2003/1031/kaigai040.htm
0842デフォルトの名無しさんNGNG
>>806
0843デフォルトの名無しさんNGNG
>>839
http://longhorn.msdn.microsoft.com/lhsdk/ref/avreference_entry.aspx
0844デフォルトの名無しさんNGNG
>>839
何で Windows が System 配下なんだよと思った。
Windows 何だから Microsoft.Windows だろよと。

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

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

とかかれてますがどういうことでしょうか?
0846デフォルトの名無しさんNGNG
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 とかも飛んでこなくなります。

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

さて、修正するか・・・
0850デフォルトの名無しさんNGNG
>>848
0851846NGNG
HTML に JavaScript 埋め込んで自己解決しますた。
C# で解決できなかったのが悔しいなぁ・・・。
0852デフォルトの名無しさんNGNG
Form1とForm2があり、Form2のデータをForm1に渡そうとしたらどの様にしたら
良いのですか?
0853デフォルトの名無しさんNGNG
>>852
どんなデータを渡したいのかによって変わってくる。
0854852NGNG
Form2のTextboxに何か入力させてOKボタンを押したら、Form1のlabelに入力された
データが出る様にしたいのです。
0855デフォルトの名無しさんNGNG
>>854
その場合は、
Form2を生成、ShowDialog()し
Form2のDialogResultに応じてForm2上のテキストボックスの文字列をreturnする
staticな関数を作る。
0856デフォルトの名無しさんNGNG
それの関数をForm1から呼び出すようにすれば、
互いに依存しない形になるので、将来別のクラスでも
利用しやすくなる。
0857852NGNG
staticでForm外から参照できるようになりました。
0858在日外国人参政権反対NGNG
>857
なんかやな解決法だな...
C#ならイベントとか使うようにしたほうがきれいな希ガス
0859デフォルトの名無しさんNGNG
>>858はかなりの厨房だ。間違いない。
0860デフォルトの名無しさんNGNG
form1のインスタンスをform2で受け取れるようにすればいいのでは?
将来別のクラスでも 利用しにくくなるけど。
0861デフォルトの名無しさんNGNG
>>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;
}
}
}

とかにしとけ。
0862デフォルトの名無しさんNGNG
>>861
クラス同士がべったりだな。
0863デフォルトの名無しさんNGNG
>>861
き、汚ねえ・・・
0864デフォルトの名無しさんNGNG
>>861
ど素人かよ
0865デフォルトの名無しさんNGNG
>>861
久々の糞ソースだな
0866デフォルトの名無しさんNGNG
>>861
初心者にしても酷いな
0867デフォルトの名無しさんNGNG
>>861
動けばいいっつうもんじゃないんだぞ
0868デフォルトの名無しさんNGNG
>>861
(/><)/ ヒィ
0869デフォルトの名無しさんNGNG
>>861
初心者ならあんなもんだと思うよ。
0870デフォルトの名無しさんNGNG
>>861
( ´д)ヒソ(´д`)ヒソ(д` )
0871デフォルトの名無しさんNGNG
>>861
もちろんネタだよな?
0872デフォルトの名無しさんNGNG
>>861

http://pc5.2ch.net/test/read.cgi/prog/1092058090/
0873デフォルトの名無しさんNGNG
>>861
お前のためにあえて言う



「お  前  に  は  む  い  て  な  い」
0874861NGNG
文句があるなら手前等もソース書いてみろよばーか
0875デフォルトの名無しさんNGNG
ばーかって言う奴がばーかなんだよ
ばーか
0876デフォルトの名無しさんNGNG
底辺同士の煽り合いって醜いね
0877853 ◆cReQ1pJtI. NGNG
自分の言っていたのはこんな風

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;
    }
  }
}
0878853 ◆cReQ1pJtI. NGNG
つづき

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;
  }
}
0879853 ◆cReQ1pJtI. NGNG
よく見たら>>861もやってることは同じだね。
細々した処理をまとめてちょっと便利にしただけって感じか。
0880861NGNG
当たり前だ
0881853 ◆cReQ1pJtI. NGNG
>>880
ん?なんで当たり前?
0882デフォルトの名無しさんNGNG
デリゲート渡してどうにか出来ないかと思うんだかどうですか?
0883853 ◆cReQ1pJtI. NGNG
>>882
OKボタンを押しても反映するだけで閉じない仕様なら、
そういうこともしたくなるね。
0884デフォルトの名無しさんNGNG
hello world
0885858NGNG
だからイベント...
0886デフォルトの名無しさんNGNG
>> 861 のコードがたたかれてますが,外部に公開したい部分を
プロパティとして出しているので,特にたたかれるような内容では
ないと思うのですが,このコードのどこが糞で,どうするべきなのか
まじめにわからないので,どなたかマジレス願えませんか?
あー,釣りじゃなくてマジなので,本当によろしく.
0887デフォルトの名無しさんNGNG
何故句読点がカンマとピリオドなのかそっちのほうがまじめにわからない
0888デフォルトの名無しさんNGNG
>外部に公開したい部分を プロパティとして出しているので,
>特にたたかれるような内容では ないと思うのですが

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

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

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

C#の将来と自分の人生の将来をフィードバックしてるせいなのか
0894デフォルトの名無しさんNGNG
だって>>893が荒らしてるんだもん
0895デフォルトの名無しさんNGNG
だって>>886が厨房なんだもん
0896886NGNG
>> 895 俺が厨房なのはそうかもしらんが,頼むから教えてください.
0897デフォルトの名無しさんNGNG
>>886
本質がどうあれ、日本語は「、」と「。」で記述する言語だからです。
0898デフォルトの名無しさんNGNG
>>896
ダイアログならあんなもんでいいんじゃないの?
ちゃんとプロパティにしてあるから、仕様と実装の分離もできてるし。

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

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

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

っていう程度の話じゃないかな。
それにあの妙な数の煽りは1人でやってんでしょ?
0906デフォルトの名無しさんNGNG
>>861

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

↑のようなことするぐらいなら、てっとり早いのが、TextBox自体をpublicにすればいいんだよ
0907デフォルトの名無しさんNGNG
ああ、それともう1つあったな

このコードだと
using(Form2 f2 = new Form2){
この部分が実行できない。
Form2ってなんですか?って警告されるぞ
Form2のインスタンス生成する場合はクラスの先頭で宣言しないとな
そんなことも知らないとはなさけない
0908デフォルトの名無しさんNGNG
>906
それはちょっと...
まぁどこまでやっつけするかなんだけれど、自分なら
Form1はForm2がダイアログであること、成功したときにファイルネームがセットされるとするなら
class Form2{
string GetFileName();
string SetFileName();
};
として>861みたいにTextBoxの存在を意識させない。そんなことはForm1はしらないでいい。
>877はダイアログの処理までForm2内に隠蔽されてしまってるので、使う側でコントロールできずつかいずらい時がでると思われるからやらない
とまじれすしてみる
0909デフォルトの名無しさんNGNG
>Form2のインスタンス生成する場合はクラスの先頭で宣言しないとな
C++とC#の仕様を混同しているお馬鹿がいますよ。
0910デフォルトの名無しさんNGNG
>>908
おまえはC#より日本語勉強しろ
0911デフォルトの名無しさんNGNG
>910 無駄なかみつきしか出来ないのか。(゚�听)イラネ
0912デフォルトの名無しさんNGNG
>>911
煽りしかできないプログラム初心者かよ(爆
0913在日外国人参政権反対NGNG
なんつかおまえら民度低いな
0914デフォルトの名無しさんNGNG
おまえもなー
0915デフォルトの名無しさんNGNG
Labelのtextの数値を-1してそのラベルに表示するにはどうしたらいいですか?
0916デフォルトの名無しさんNGNG
>>915
 >>776-777
 >>831-833
0917デフォルトの名無しさんNGNG
>>906-907
あほかおまえ。
0918デフォルトの名無しさんNGNG
>>915
label1.text="-1"
0919デフォルトの名無しさんNGNG
>>918
そうじゃなくて、ラベルtextの数値-1をそのラベルtextに設定しなおしたいのですが^^;
0920デフォルトの名無しさんNGNG
>>916でいいんじゃないのか
0921デフォルトの名無しさんNGNG
(1) Labelのtextの数値をとりだす
(2) (1)でもとめた数値を-1する
(3) (2)でもとめた値をLabelのtextに代入する

0922デフォルトの名無しさんNGNG
>>919
this.label1.text="-1"
0923デフォルトの名無しさんNGNG
>>921
string s=label1.text;
s="-1";
label1.text=s;
0924在日外国人参政権反対NGNG
楽しいのかおまえら?
0925デフォルトの名無しさんNGNG
int a=Convert.Int32(label1.text)-1;
label1.text=a.ToString();
0926デフォルトの名無しさんNGNG
できました
IntelliSenseがきかないからできないと思い込んでたorz
どうもでした
0927デフォルトの名無しさんNGNG
>>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";
0928デフォルトの名無しさんNGNG
924 在日外国人参政権反対 [sage] 04/09/25(土) 12:26:52
楽しいのかおまえら?
0929デフォルトの名無しさんNGNG
>IntelliSenseがきかないからできないと思い込んでたorz
??
0930在日外国人参政権反対NGNG
>928
楽しいのか?
0931デフォルトの名無しさんNGNG
System.Windows.Forms.TextBoxのAppendText()メソッドだと、なぜか32767文字(Unicodeで64KB)までしか文字を追加できないのは仕様でしょうか?
Textプロパティに+=で追加なら何文字でも追加できるんですが…

で、System.Windows.Forms.RichTextBoxを使えば制限はないので、RichTextBoxで行こうと思ったんですが、
RichTextBoxのスクロールマウスでのスクロールが異常に重いのですが、なにか原因・解決策はないでしょうか?
0932デフォルトの名無しさんNGNG
>>931
Stringクラスについて学べ
0933デフォルトの名無しさんNGNG
>>925
行数がもったいない。
label1.text=(Convert.Int32(label1.text)-1).ToString();
0934デフォルトの名無しさんNGNG
>>933
それだとコンパイルできないな(プゲラ
0935デフォルトの名無しさんNGNG
>>934
何故?
0936デフォルトの名無しさんNGNG
>>932
TextBoxクラスのAppendTextメソッドではできなくて、Textプロパティに64KB以上のstringを代入するのでは可能な理由が分からなかったです。
もう少しヒントください、お願いします。
0937デフォルトの名無しさんNGNG
(Convert.ToInt32(text)-1).ToString();
      ~~
0938デフォルトの名無しさんNGNG
>>936
appendは一行だから
なんでそkまでappendにこだわるの?
stringでいいじゃん
0939デフォルトの名無しさんNGNG
>>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";
だとうまくいきます。

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

スクロールなら足した後ScrollToCaret()使うとよろし。
0941デフォルトの名無しさんNGNG
\r\nもどうかと思う
0942デフォルトの名無しさんNGNG
>>939
ストリームからってんならこうすりゃいいじゃん

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

ペース早いっすね。
0944デフォルトの名無しさんNGNG
>>943
もまいのスレ立てが一番ペース早いわw

ま、乙。
0945デフォルトの名無しさんNGNG
近々死滅する言語でなに必死になってんの?w
0946デフォルトの名無しさんNGNG
こっちもか
0947デフォルトの名無しさんNGNG
>>945
死滅するから必死なんだろ
0948デフォルトの名無しさんNGNG
スレの残り埋めるネタとしてはありきたりすぎだな。
0949デフォルトの名無しさんNGNG
ここでソースコード晒してるときに
if()
{
string s;
}
みたいに、ちゃんとIF内の文が空白で右にずらせないんだけど
みんなどうやってやってるの?
なにかソフト使ってるの?
0950デフォルトの名無しさんNGNG
全角 でも叩き込んでください。
0951デフォルトの名無しさんNGNG
>>950
あり
0952デフォルトの名無しさんNGNG
つか半角スペースを&nbsp;に置換すれ。
0953デフォルトの名無しさんNGNG
 テスト
    テスト
0954デフォルトの名無しさんNGNG
>>952
なるほど、タブの場合はどうするの?
0955デフォルトの名無しさんNGNG
>>954
2chのスクリプトではタブ文字は削除される
0chだとタブ文字をそのまま入力できるけど
HTMLのタブ文字は半角スペースと等価
0956デフォルトの名無しさんNGNG
要するにタブはインデント量分の&nbsp;に置換するって事だな?
0957デフォルトの名無しさんNGNG
&nbsp;を並べておけばOK。
面倒くさければ全角スペースに置換すれば良い。

ちなみにかちゅ〜しゃのレスポップアップだと&nbsp;を置換してくれないので全角のほうが好きだったり
0958デフォルトの名無しさんNGNG
かちゅだとポップアップでは &nbsp; って表示されるってこと?
0959デフォルトの名無しさんNGNG
    テスト
0960デフォルトの名無しさんNGNG
  テスト
0961デフォルトの名無しさんNGNG
>>959-960
テスト
0962デフォルトの名無しさんNGNG
ほうほう
0963デフォルトの名無しさんNGNG
Jane最高
0964デフォルトの名無しさんNGNG
ちなみに、C++だと参照で&regreg...みたいな名前を使いたいかもしれんが、
HTMLで&regというのが®に変換されることもあるので、
出来るなら、半角の&を&amp;に置換するとなお良し
0965デフォルトの名無しさんNGNG
てすと
dd
0966デフォルトの名無しさんNGNG
 nbspって何の略なの?
  いや、spはなんとなく分かるんだけどさ。
0967デフォルトの名無しさんNGNG
&  だと改行が起きないから none-break かな?
0968デフォルトの名無しさんNGNG
ミスった(´・ω・`)ショボーン
0969デフォルトの名無しさんNGNG
http://www.w3.org/TR/REC-html40/sgml/entities.html

<!ENTITY nbsp CDATA "&#160;"
-- no-break space = non-breaking space, U+00A0 ISOnum -->
0970デフォルトの名無しさんNGNG
950以降の方がためになるスレはここですか?
0971デフォルトの名無しさんNGNG
>>970
残念ながら、ちがう。
当たり前のことばかり書いてる厨房ばっかで、なんの役にも立たんスレだ。
0972デフォルトの名無しさんNGNG
>>971
それは949以前にも当てはまることでは
0973デフォルトの名無しさんNGNG
>>970-971
その通りなので君たちはさっさと卒業したまえ。
0974デフォルトの名無しさんNGNG
HTML化待ちの過去スレって、やっぱ●買わないと読めないの?
0975デフォルトの名無しさんNGNG
Unvisual Studioだ。
0976デフォルトの名無しさんNGNG
>>974
おれはみみずんからログを探してきてる
0977デフォルトの名無しさんNGNG
ここは上級2ちゃんねらの集うスレでつね
0978デフォルトの名無しさんNGNG
●販売以前ならかちゅで読めたのになあ。
まぁ俺は●もち廃人なので関係ありませんが
0979デフォルトの名無しさんNGNG
VC#2005はいつ発売なん?
0980デフォルトの名無しさんNGNG
20005年じゃないの?もうすぐじゃん
0981デフォルトの名無しさんNGNG
あと18000年くらいか? もうすぐだな。
0982デフォルトの名無しさんNGNG
一昨日出たよ
0983デフォルトの名無しさんNGNG
このスレは950超えると居心地がいい
0984デフォルトの名無しさんNGNG
ム板は全部それだな
0985デフォルトの名無しさんNGNG
まったりまったり
0986デフォルトの名無しさんNGNG
1000! にはまだ早いな。
0987デフォルトの名無しさんNGNG
1000の階乗か
0988デフォルトの名無しさんNGNG
ここって本スレだよね?
2001出た当初は結構レスあったのに
みんなどこいったの?

JAVA?DEL?結局どの言語がいいのさ?
0989デフォルトの名無しさんNGNG
>>988
とりあえず >>943
0990デフォルトの名無しさんNGNG
>>989
このスレ埋めないんだ?
0991デフォルトの名無しさんNGNG
埋め
0992デフォルトの名無しさんNGNG
埋め
0993デフォルトの名無しさんNGNG
埋め
0994デフォルトの名無しさんNGNG
埋め

↓↓後は任せた
0995デフォルトの名無しさんNGNG
じゃあ上げてみる
0996デフォルトの名無しさんNGNG
C# はゴミ
それもがなり
0997デフォルトの名無しさんNGNG
>>996 はゴミ
それもがなり
0998デフォルトの名無しさんNGNG
よし埋め
0999デフォルトの名無しさんNGNG
埋め
10001000NGNG
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。