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

ふらっとC♯(Part5)

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
このスレッドは

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

ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。

少しずつC#プログラマを名乗るものが現れました。みなさん一緒に勉強しましょう。

前スレッドはこちら
http://pc2.2ch.net/test/read.cgi/tech/1059028988/l50 (Part4)
http://pc2.2ch.net/test/read.cgi/tech/1047210828/l50 (Part3)
http://pc2.2ch.net/test/read.cgi/tech/1035895873/l50 (Part2)
http://pc2.2ch.net/test/read.cgi/tech/1023766485/l50
0175デフォルトの名無しさんNGNG
>>174
有難うございます、助かりました。
0176デフォルトの名無しさんNGNG
>>175
でも、実装の仕方としては、class A, B を ICloneable にして Clone() メソッド書くのが普通な気が。
0177デフォルトの名無しさんNGNG
>>175
それでほんとに問題ないのかちゃんと確認した方がいいぞ。
0178デフォルトの名無しさんNGNG
>>176
リフレクションの使い方の取っ掛かりが欲しかったので、構わないんです。
コンストラクタ以外にもメソッドを呼び出すときに、もっと複雑なことになるし、この辺りは覚悟していましたし
いずれにしても template が実装されるまでの繋ぎなので。
0179デフォルトの名無しさんNGNG
>178
どうtemplateにからむんでしょう?個人的に興味
0180デフォルトの名無しさんNGNG
ダウンキャストを知らないだけだったりして…
0181デフォルトの名無しさんNGNG
C#の宿題スレはまだ無いみたいなのでここにて。

C#で簡易telnetを作れという問題です。通信の方法がそもそも分かりません
0182デフォルトの名無しさんNGNG
>>181
ソケット作れ
0183デフォルトの名無しさんNGNG
言語依存じゃない部分が分かってないんだろ?
0184デフォルトの名無しさんNGNG
>>181
TCPで接続してTELNETプロトコル話せばいいだけ

http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=telnet+%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB
0185デフォルトの名無しさんNGNG
IList をインターフェイスに持つオブジェクトでシリアル化する時、上手く行かなくて地団駄踏んでいます。

System.Runtime.Serialization.Formatters.Soap.SoapFormatter
で、オブジェクトをXmlにシリアライズする時は ISerializable でカスタマイズできるみたいですが、

System.Xml.Serialization.XmlSerializer
で、オブジェクトをXmlにシリアライズする時でカスタマイズできる方法は無いんでしょうか?
知っている人いますか?

IList を入れていると、XmlSerializerが頑張っちゃって自動的にシリアライズしてしまうみたいで・・・
IListが入っていても普通のクラスのように振舞わせる事はできないのでしょうか?
0186デフォルトの名無しさんNGNG
>>185
取りあえず簡単なIListを実装したコレクションを作ったけど普通にシリアライズ・デシリアライズできたぞ。

XmlSerializerは手軽に使えてカスタムしにくいのが特徴なので、まあいろいろ勘案して。
シリアライズ用の別クラスを作るとか。
0187デフォルトの名無しさんNGNG
あ〜、>186の一行目はちょっと勘違いというか見当違い。無視して。
0188デフォルトの名無しさんNGNG
>>186
あぅ、書き損じたんですが、添え字にマイナス値を使えるようにするとアウトなんですよ。
ヘルプを見ると、this[int]インデクサプロパティーを見ているようで、Countとセットで
動作しているみたいなんです。
当然動作するわけも無いのですが、ここでIListを見て勝手に動作されるとちょっと具合が悪いので、
この機能に寝ていてもらいたいのですが、手段が見つからない・・・・
0189デフォルトの名無しさんNGNG
単純に足し算するだけのメソッドなんですが、
public int Add()
{
return 10+10;
}
下のように使うと、Add()の戻り値は変数aに入りますよね。
public void Test()
{
int a = Add();
}
以下の場合だと、Addの戻り値はどこへ格納されるんでしょうか?
publi void Test()
{
Add();
}
0190デフォルトの名無しさんNGNG
そのまま破棄されるだけだが。
0191デフォルトの名無しさんNGNG
C系言語の特徴で
int main()
{
10 ;
}
とやっても、文としては正しいと認識されます
と、書こうとして、C#でやったら、意味が無いって怒られました。
さすがにチェックすることにしたみたいですね。
0192デフォルトの名無しさんNGNG
public int hoge; //hogeは1から100をとる
上の場合、publicだから外からどんな値が来るかわかりません。
hogeに値が代入された時に、hogeが正しい値かどうかを調べるにはどうしたらいいんですか
0193デフォルトの名無しさんNGNG
>>192
プロパティにしてsetアクセサの中でチェックする。
つかまさにそのためにプロパティがあるんだが。
0194デフォルトの名無しさんNGNG
プロパティにする
0195デフォルトの名無しさんNGNG
set{ if(value >= 1 && value<=100) hoge = value; else throw new FormatException(); }
みたいにすればいいんですね。なるほど
0196デフォルトの名無しさんNGNG
どうでもいいがその例だとArgumentOutOfRangeExceptionの方が妥当だな。
0197デフォルトの名無しさんNGNG
>>195
public int hoge {
  set {
    if (1 <= value && value <= 100)
      hoge = value;
    else
      throw new ArgumentOutOfRangeException();
  }
}

ちょっと無理っぽいが、通るのか?
0198デフォルトの名無しさんNGNG
GDI+はGDIより遅いって本当ですか?
0199デフォルトの名無しさんNGNG
>>198
自分で作って確かめろ、タコ
0200デフォルトの名無しさんNGNG
>ちょっと無理っぽいが、通るのか?
なんで?
0201198NGNG
>199
GDIはBitbltで
GDI+はGraphics.DrawImageで
確かめて良いですか?
0202デフォルトの名無しさんNGNG
GDI+は長角まで待つべし
0203デフォルトの名無しさんNGNG
リフレクションを使ってラムダ式を動的に作りたいのですが、
参考になるHPや良い方法があったら教えてください。
例えば、正規分布関数のクラスが、以下のように存在していて
public class DistributionFunctions
{
 public static dobule Normal( double x , double a , double v )
 {
  return 1.0 / Math.Sqrt( 2 * Math.PI * v ) * Math.Exp( -(x-a)*(x-a)/( 2 * v ) ) ;
 }
 ...
}

やりたい事は、
delegate double DoubleToDoubleDelegate( double x ) ;
public class DistributionDelegates
{
 static DoubleToDoubleDelegate MakeNormal( double a , double v )
 {
  ここに手際よく大量生産できるコード
 }
}

使い方は
void hogehogeMethod()
{
 DoubleToDoubleDelegate df = MakeNormal( 0.0 , 1.0 ) ;
 y = df( 0.0 ) ;// ここで y = Normal( x , 0.0 , 1.0 ) が呼び出される
}
0204デフォルトの名無しさんNGNG
>>203
よくわからんけど、こんなこと↓がしたいの?

using System;
public class DistributionFunctions {
double a;
double v;
public DistributionFunctions(double x, double y){
a = x;
v = y;
}
public double Normal( double x )
{
return 1.0 / Math.Sqrt( 2 * Math.PI * v ) * Math.Exp( -(x-a)*(x-a)/( 2 * v ) ) ;
}
}
delegate double DoubleToDoubleDelegate( double x );
class Hoge {
static DoubleToDoubleDelegate MakeNormal( double a , double v ) {
//ここに手際よく大量生産できるコード
DistributionFunctions f = new DistributionFunctions(a, v);
return new DoubleToDoubleDelegate(f.Normal);
}
static void Main() {
DoubleToDoubleDelegate df = MakeNormal( 0.0 , 1.0 ) ;
double y = df( 0.0 ) ;// ここで y = Normal( x , 0.0 , 1.0 ) が呼び出される
Console.WriteLine("y = {0}", y);
}
}
0205204NGNG
public class DistributionFunctions {

の{の前に全角スペースが入ってた。。。鬱
0206デフォルトの名無しさんNGNG
C#でGDIをつかうすべはあるのか?APIの直たたきならGDIをつかえる?
0207デフォルトの名無しさんNGNG
>>204
方法は問わないんですが、そうです、そんな感じです。
そこで、関数の引数を確保するクラスを作る必要がありますよね。
関数の数が多くて、これを全部自動生成してしまいたいんです。
0208204NGNG
>>207
> そこで、関数の引数を確保するクラスを作る必要がありますよね。
> 関数の数が多くて、これを全部自動生成してしまいたいんです。
204の例を使っても、好きなだけ関数は作れるけど。。。↓こういうことではない?

static void Main()
{
double d1 = 1.0; // 数字は適当
double d2 = 1.0; // 数字は適当
DoubleToDoubleDelegate[,] df = new DoubleToDoubleDelegate[10,10];
for(int i=0; i < 10; i++, d1 += 0.2){
for(int j=0; j < 10; j++, d2 += 0.2){
df[i,j] = MakeNormal( d1, d2);
}
}
for(int i=0; i < 10; i++){
for(int j=0; j < 10; j++){
double y = df[i,j]( 0.0 ) ;
Console.WriteLine("y = {0}", y);
}
}
}
0209デフォルトの名無しさんNGNG
>>208
ども、お手数掛けてすみません。
対象となる関数は、正規分布関数のようにパラメータ二つだけとは限りませんし、
今後、多変数に対応するにあたって、このまま場当なやり方で行きますとプログラムの保守が危機的になると考え
第一段階として、現在はC#のソースコードを自動生成するプログラムを作って対応しています。
しかし、これも必ずしも良い方法とも言えず、もっと効率的にプログラムできる方法として、
色々探している内にリフレクションという物を使ってみようかと考えていました。
さっそく始めてみたのですが、これがチュートリアルの良いページがなかなか見つからなくて・・・・

ちなみに僕自身、ここに書き込む前に色々考えたのですが、
一般的なC#の構文を使った範囲内ではおそらく良い解決方法はないだろうというのが結論でした。
0210デフォルトの名無しさんNGNG
はじめまして、
C#でデータベースに関することを勉強しています。
ボタンを押すとアクセスに「123」というデータを追加するプログラムを書いています。
壁にぶつかりましたので、ご指導していただけませんか。

odbcDataAdapter1などの設定し、以下のボタンの内容を書きました。

odbcConnection1.Open();
odbcDataAdapter1.InsertCommand.Parameters["@ab"].Value="123";
odbcDataAdapter1.InsertCommand.ExecuteNonQuery();
odbcDataAdapter1.Fill(dataSet11);
odbcConnection1.Close();

すると
'System.IndexOutOfRangeException' のハンドルされていない例外が
system.data.dll で発生しました。
0211デフォルトの名無しさんNGNG
> 対象となる関数は、正規分布関数のようにパラメータ二つだけとは限りませんし、
> 今後、多変数に対応するにあたって、このまま場当なやり方で行きますとプログラムの保守が危機的になると考え
> 第一段階として、現在はC#のソースコードを自動生成するプログラムを作って対応しています。
これが結構まっとうな方法な気もしますが。。。

もしかして、パラメータが変わるだけではなく、どんな関数を作るかは
あらかじめ決まってない、ってことですか?
C++でいえば、boost::lambdaみたいなことをしたいのかなぁ?

> しかし、これも必ずしも良い方法とも言えず、もっと効率的にプログラムできる方法として、
> 色々探している内にリフレクションという物を使ってみようかと考えていました。
リフレクションで出来るかどうかはわかりませんが、一応参考に。

http://members.jcom.home.ne.jp/1213687801/cs/reflection/reflection4.html
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemreflectionemittypebuilderclasstopic.asp
0212デフォルトの名無しさんNGNG
>>210
ここにある例が参考になりませんかね。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdatasqlclientsqldataadapterclassinsertcommandtopic.asp
0213デフォルトの名無しさんNGNG
普通に IDbCommand.ExecuteNonquery() はダメなの?
0214デフォルトの名無しさんNGNG
プログラムの構造をどうしたらいいのかが分かりません。
例えば、オセロプログラムを考えるとします。
オセロのマスの部分にButtonから継承したクラスMasuを使います。
Masuを8*8個集めた配列をBoardとします。
オセロゲーム ━━ Board (集約する)━━ Masu という風になっていますが、
Masuがクリックされた時に 隣のマスをひっくり返すかどうか走査するとしても、
Masuからは隣のMasuなんて分かりませんよね?
だからBoardに頼んで調べてもらいたいわけですが
どうやったらそうできるのかがわからないです。どうしたらいいのですか?
0215デフォルトの名無しさんNGNG
X 配列Board
O クラスBoard

でした
0216デフォルトの名無しさんNGNG
>>214
Masu に必要な機能は、
・そのマスの内容を保持
・画面に描画する
・クリックされたことを、Board に通知する
の3つでいいんじゃない?

ひっくり返すのは、Board でやればいい。
0217デフォルトの名無しさんNGNG
>>216
その三番目のboardに通知する方法が分からんですよ。
0218デフォルトの名無しさんNGNG
>>217
Clickイベント。
0219デフォルトの名無しさんNGNG
>>217
boardのメソッドの引数に自分を渡せばいい。
0220デフォルトの名無しさんNGNG
>214
もっと
PlayerとかTurnMasterとかJudgeとかつくれや。Masuはいらん
0221デフォルトの名無しさんNGNG
>>220
高度すぎ。質問者をみて答えてやれよ。
0222デフォルトの名無しさんNGNG
>221
書き込んだ後そう思った.すいません。

Masu作るときにボードを引数で渡してそれ使う.それかイベント
0223デフォルトの名無しさんNGNG
こういうのってできるかな?
void Hoge( params object [] arg )

の ref バージョンで
void Hoge( ref object arg0 , ref object arg1 , ref object arg2 ... ) ;

の様な物。
必要個数分オーバーロードするしかないかな?
0224デフォルトの名無しさんNGNG
コントロールのクライアント領域について質問です。
以下のような Panel を継承したクラスをつくりました。

public class PanelEx : System.Windows.Forms.Panel
{
 public PanelEx() { }

 protected override void OnPaint(PaintEventArgs e)
 {
  base.OnPaint (e);

  Pen p = new Pen(Color.Black, 1);
  e.Graphics.DrawRectangle(p, this.ClientRectangle);
  p.Dispose();
 }
}

この PanelEX クラスのインスタンスを、普通に Form1 の
コンストラクタ内で生成したところ、画面には PanelEx の
左側と上側にしか線がひかれません。

なぜでしょうか?また、どうすればちゃんと矩形が描かれますか?
0225デフォルトの名無しさんNGNG
>>224
はみ出て見えないので矩形を小さく、例えば幅と高さを-1にしたりする。
0226224NGNG
>>225
ええええー。なぜそんな仕様になってるんでしょうか?
0227デフォルトの名無しさんNGNG
>>226
厨避けの為。
0228デフォルトの名無しさんNGNG
>>226
別におかしくないよ。

http://www.microsoft.com/japan/msdn/library/ja/jpdnprogwincsharp/htm/chapter15.asp?frame=true
0229デフォルトの名無しさんNGNG
>>220
ウヒャー
220さんの高度な設計だと、どんな風になるんですか?
コードをつけながら説明してほしい・・・
0230デフォルトの名無しさんNGNG
>>229
高度
コード




!?
0231デフォルトの名無しさんNGNG
超基本で悪いんだけど、
int i = Console.Read();
Console.WriteLine(i);

これでたとえば「2」を入力すると出力が「50」なんてなるんですが、なぜなのでしょうか?
0232デフォルトの名無しさんNGNG
>>231
コンピュータの中では、「文字」ってのは一定のルールで数字の列に変換されて扱われてます。
このルールのことをエンコーディング、数字(の列)のことを文字コードと呼んだりします。
んで、文字の "2" に対応するコードが 50 (16進数で 0x32) なわけです。

ファイルやネットワーク等での読み書きは、byte の列を使って行われるのが基本で、
.Net Framework で文字列からこのバイト列に(またはその逆に)変換するには、
Encoding クラス(のインスタンス)を用います。
0233デフォルトの名無しさんNGNG
P.S.
"2"という文字列から、数字の 2 に変換するには、Int32.Parse() などを使います。
0234231NGNG
>>232
文字コードを実数値にしないといけないんですね。
丁寧な即レスありがとうございます。
0235デフォルトの名無しさんNGNG
久しぶりにきたが、なんだかいいスレになってるじゃねーか!
0236デフォルトの名無しさんNGNG
コンソールはほとんど勉強してなかったから試してみたんだけど

char c = (char)Console.Read();

とすれば、そのまま表示できまっせ。MSDNだとintを返すことになってるから
まぎわらしいんだけどね。
0237デフォルトの名無しさんNGNG
こんにちは

今画像のサムネイル保存用に複数画像をまとめてひとつの
ファイルにしようとしています。
Aファイルサイズ・Aファイル・Bファイルサイズ・Bファイル・・・
みたいな感じ合成し、インデックスで呼び出そうかと思っています。
で、ふと思ったのですが、そういう複数のファイルをまとめてしまう
クラスって既にあったりするのでしょうか。
よろしければお教えください。よろしくお願いいたします。
0238デフォルトの名無しさんNGNG
Bitmap imageA = new Bitmap("A.bmp");
Bitmap imageB = new Bitmap("B.bmp");
Bitmap imageC = new Bitmap("C.bmp");

Bitmap bmp = new Bitmap(300, 100);
Graphics g = Graphics.FromImage(bmp);
g.DrawImage(imageA, 0, 0);
g.DrawImage(imageB, 100, 0);
g.DrawImage(imageC, 200, 0);
g.Dispose();
bmp.Save("ABC.bmp");
bmp.Dispose();

imageA.Dispose();
imageB.Dispose();
imageC.Dispose();
0239デフォルトの名無しさんNGNG
そうきましたか・・・

Hash的に名前で簡単にストリームを取り出せるような
仕組みが既存クラスにないかなーとか思っていたのでした。

やはり頑張って自分で実装してみます。

ありがとうございました。
0240デフォルトの名無しさんNGNG
参照設定でvjslib.dll(Microsoft Visual J# .NET Class Library)を追加して、java.util.zipで
0241デフォルトの名無しさんNGNG
!!!
なるほど!
早速やってみます。

ありがとうございました!
0242デフォルトの名無しさんNGNG
DirectX 9.0 SDK (Summer 2004)の日本語ドキュメントをインストールしたんだが、
VS.NET2003に反映されないのです。
なんでなんでしょう・・・そういう方他にいますか?
0243最凶VB厨房NGNG
まずは再起動
0244242NGNG
>>243
再起動もしたんですがダメでした。
0245最凶VB厨房NGNG
SDK本体は入れてるのよな?
まっわからんけど
0246デフォルトの名無しさんNGNG
>>242
フィルタか?
0247242NGNG
英語版ヘルプははいってるんですが・・・
フィルタもなしになってます。
本来ならVS.NET起動時に「ヘルプを反映中・・」とかでますよね?
0248242NGNG
連結ヘルプ コレクション マネージャで更新できました。
お騒がせしました。(・∀・)
0249デフォルトの名無しさんNGNG
>>242
DirectX9 SDK Summer2004の日本語ドキュメントってもう出てたの?
0250デフォルトの名無しさんNGNG
>>249
変な書き方しちゃいましたね。
2004入れてから日本語ドキュメント入れたら〜でした。スマソ
0251デフォルトの名無しさんNGNG
外部プロセスに確保した領域をPtrToStructureすると例外が発生するのは何故でしょうか。どうかご教授お願いします。
using HANDLE=System.IntPtr;using LPVOID=System.IntPtr;using SIZE_T=System.UInt32;using DWORD=System.UInt32;
class CMyApp:System.Windows.Forms.Form
{
  [System.Runtime.InteropServices.DllImportAttribute("kernel32")]
  static extern LPVOID VirtualAllocEx(HANDLE hProcess,LPVOID lpAddress,SIZE_T dwSize,DWORD flAllocationType,DWORD flProtect);
  DWORD PAGE_READWRITE=0x04;
  DWORD MEM_COMMIT=  0x1000;
  static void Main()
  {
    System.Windows.Forms.Application.Run(new CMyApp());
  }
  CMyApp()
  {
    this.Click+=new System.EventHandler(OnClick);
  }
  void OnClick(object sender,System.EventArgs e)
  {
    LPVOID 自分側の領域=VirtualAllocEx(System.Diagnostics.Process.GetCurrentProcess().Handle,(LPVOID)0,(DWORD)System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.TimeSpan)),MEM_COMMIT,PAGE_READWRITE);
    LPVOID 他人側の領域=new LPVOID();
    foreach(System.Diagnostics.Process inc in System.Diagnostics.Process.GetProcesses())
      if("Explorer"==inc.ProcessName)
        他人側の領域=VirtualAllocEx(inc.Handle,(LPVOID)0,(DWORD)System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.TimeSpan)),MEM_COMMIT,PAGE_READWRITE);

    System.Runtime.InteropServices.Marshal.PtrToStructure(自分側の領域,typeof(System.TimeSpan));//自分側の領域では例外は発生しない

    System.Windows.Forms.MessageBox.Show("次で例外発生");
    System.Runtime.InteropServices.Marshal.PtrToStructure(他人側の領域,typeof(System.TimeSpan));
  }
}
0252デフォルトの名無しさんNGNG
>>251
非Managedなプロセス空間にManagedな構造体を確保する意味がさっぱりわからないんだが。

ttp://dotnetjunkies.com/WebLog/chris.taylor/archive/2004/05/31/14828.aspx
とりあえず外部プロセスへのちょっかいの参照。
0253251NGNG
252さんアドバイスありがとうございます。
これをやりたい理由は、興味本位で出来るかどうか試したかっただけです。
とりあえず上のURLをよく読んで見ます。
0254デフォルトの名無しさんNGNG
おまいら、コールバックにデリゲートとインターフェースの
どっち使ってる?
JavaのGUIのリスナーみたいなケースなら、デリゲートの
方が何もしないメソッドまで記述しなくて済むし効率いいかな。
0255デフォルトの名無しさんNGNG
>>254
俺は Java 出身だから、ある程度一まとまりの処理をくっつけるならインターフェイス使っている
デリゲートは纏まり間が無くて、単体なら遣いやすいけど微妙
0256デフォルトの名無しさんNGNG
俺はデリゲート派
0257デフォルトの名無しさんNGNG
anonymous class は使えないが、anonymous delegate は使えるようになるので、
デリゲートにしておくのが無難なのでは。
0258デフォルトの名無しさんNGNG
非常に唐突な質問で申し訳ないが、C#で、というか.NET Frameworkで
各ドライブのボリュームラベルを取得するのってどうやるんだべさ?

なんかAPI叩くしかなかったら非常に鬱なので教えてエロイ人!
0259デフォルトの名無しさんNGNG
>>258
DriveInfo.VolumeLabel かな。
…… .NET Framework 2.0 だけど。
0260デフォルトの名無しさんNGNG
2.0で変更になったクラスの一覧ってないかな?
0261デフォルトの名無しさんNGNG
>>259
やっぱ2.0になっちまうのか・・・。
何故こんな基本的なもんが実装されてないんだと小一(ry
0262デフォルトの名無しさんNGNG
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
extern static bool GetVolumeInformation(
string RootPathName,
StringBuilder VolumeNameBuffer,
int VolumeNameSize,
out uint VolumeSerialNumber,
out uint MaximumComponentLength,
out uint FileSystemFlags,
StringBuilder FileSystemNameBuffer,
int nFileSystemNameSize);
0263デフォルトの名無しさんNGNG
>>262
トンクスエロイ人!
やっぱこうやるか・・・。なんだかなぁ・・・
0264デフォルトの名無しさんNGNG
Socket.Selectで64を超えるソケットリストを渡すと範囲外エラーになるのですが、

この64という制限は何によってかかっているでしょうか。
100に変更したりとかできないでしょうか。
0265デフォルトの名無しさんNGNG
ボタンの配列(二次元)をクリックされた時に、何番のボタンがクリックされたかを調べるにはどうしたら良いですか?
MyButtons[,] = new Button[3,5];
のように宣言されていて、forの二重ループの中で初期化して
MyButtons[i,j].Click += new EventHandler(MyButtons_Click);
みたいにしてみましたが、MyButtons_Clickの引数には別に「MyButtonsの何番目か」は渡されません。
どうしたらいいんですか
0266デフォルトの名無しさんNGNG
>>265
ボタンの番号が固定のものなら、Button.Tag あたりに番号を押し込めておけば良いのでは?
0267デフォルトの名無しさんNGNG
自分が [2,1]だとしたら、[2,0]と[2,2]のボタンも操作したいんですよ。
なんとかなりませんかねえ
0268デフォルトの名無しさんNGNG
>>267
???
だからTagにint[]{2, 1}とかいれとけばいいんじゃないの?

それがまずいというのならもっとわかりやすく説明してくれないと何がなにやら。
0269デフォルトの名無しさんNGNG
>>268
あ、いま意味が分かりましたサンクス
0270デフォルトの名無しさんNGNG
>>264
普通に1000とかできるじゃん……と思ったら.NET Framework2.0だった。

1.1の制限のようだ。
0271デフォルトの名無しさんNGNG
>>264
OS の制限。WaitForMultipleObjects() できる最大数が64だから。
2.0 で表面的な制限は外れても、64を超えると効率は落ちる気がする。
0272デフォルトの名無しさんNGNG
簡単なベンチの結果、数が25以上になった辺りから緩やかに効率が落ちていった。
でも64周辺の境界は見あたらなかった。

ついでに1.0/1.1/2.0bも比較してみた。(スコアは低い方が優秀)
10でスコア 410 / 370 / 250
25でスコア 320 / 300 / 230
40でスコア 325 / 320 / 250
64でスコア 370 / 370 / 300

有意の差があるね。
1.1までとは違う機構を利用してたりするんじゃないかってくらい2.0は早い。
数が少ない時と多い時のスコアの分布とか。
0273デフォルトの名無しさんNGNG
DataGridで

ABC | DEF | GHI
JKL | MNO | PQR
STU | VWX | YZA
BCD | EFG | HIJ

こういう表の MNOとVWXだけ範囲指定させるみたいなことはできますか?
0274264NGNG
>>270-272
環境も書き忘れたのに本当にありがとうございます。
しかもWaitForMultipleObjectsとの関連、
ベンチまでしていただいてとても参考になりました。
■ このスレッドは過去ログ倉庫に格納されています