ふらっとC#,C♯,C#( ..
[2ch|▼Menu]
751:デフォルトの名無しさん
09/02/05 09:31:27
>>740
インスタンスを作ることでコンテキストの別な関数オブジェクトができる(イベント処理の時にstaticだとマズいだろう)
値を変えるのと振る舞いを変えるのとでは大違いだし…

デリゲート(委譲)はその名の通り、実行するタイミングを相手に委ねてる
渡すことを意図しているのは値(狭義の)ではなく動作

752:デフォルトの名無しさん
09/02/05 14:00:29
Form1からForm2をShowDialogした場合、
Formが描画される際に画面の上から順に
貼り付けてあるコントロールが表示される感じで、
Closeする場合も同様にもっさり感があるのだが、回避する方法はある?
ちなみにForm2がLoadされるとDataGridViewにMDBから
データを読込んで表示させているのだけど。

753:デフォルトの名無しさん
09/02/05 14:15:24
それはビルドした実行ファイル?デバッグ?

754:デフォルトの名無しさん
09/02/05 14:17:26
>>753
デバックでも実行ファイルでも描画速度にあまり変化がない感じ・・・

755:デフォルトの名無しさん
09/02/05 14:20:02
実行環境は?

756:デフォルトの名無しさん
09/02/05 14:20:35
>>752
描画を手動でやる

↓ソース開始↓

[コントロール名].SuspendLayout()   //コントロールの描画停止

//(この間に処理を書く)

[コントロール名].ResumeLayout()  //コントロールの描画再開

↑ソース終了↑

コントロール名をthisにすればForm全体の描画を停止できる

757:デフォルトの名無しさん
09/02/05 14:20:44
それはGUIの設計に問題があるね
フローレイアウトパネルにコントロール配置してFillしたりAnchorしたり
推奨されてないことやってないだろうね?

758:デフォルトの名無しさん
09/02/05 14:21:41
素人発言だけどSuspendLayoutとResumeLayoutとか?

759:752
09/02/05 14:36:21
実行環境はXPでCelelon2G・メモ1G
VS2008でつ。

GUIの設計はVB(.Netじゃないヤツ)みたいに
Formにコントロールを貼り付けるだけではダメなのかしら?
Formにあるのは、DataGridViewとButtonとTextBoxとLabelだけ。

DataGridViewコントロールを外して純粋にFormだけでShowすると
幾分早く描画されるって事はDataGridViewの処理が適切でないのかな?

今から756氏と758氏を参考に試してみます。
みんな優しいな。ありがたい!

760:デフォルトの名無しさん
09/02/05 14:47:04
DataGridViewに対してデータセットをバインドさせると早くなるよ〜
それでも遅いのならSQL文を見直すしかない

761:752
09/02/05 15:01:31
SuspendLayoutはあまり変化がなかった・・・ _| ̄|○

今は、OleDbConnection使ってMDBへ接続しているんだけど、
もっと早い方法はあるんですか?
SQL文に関しては単なるSELECT文なのでどうにもならないと思われ。。

762:デフォルトの名無しさん
09/02/05 15:02:32
データのバインドを直接じゃなくBindingSourceに任せてみたらどうだろう
こういう症状はあまり経験も聞いたこともないけど

763:デフォルトの名無しさん
09/02/05 15:08:40
あれ?もしかしてDataSetなし?

764:752
09/02/05 15:09:40
>>762
早速試してみる!
VB6から移行してきた口なんだが、勝手が違い過ぎて戸惑いすぐる。

765:デフォルトの名無しさん
09/02/05 15:14:45
DataSetはあります。
コードはこんな感じ(抜粋)
strSelectSQL(変数)へSELECT文を入れてます。

dba = new OleDbDataAdapter(strSelectSQL, dbc);
OleDbCommandBuilder builder = new OleDbCommandBuilder(dba);
dba.Fill(dtset);
dataGridView1.DataSource = dtset.Tables[0];

766:752
09/02/05 15:15:47
>>765 
名前入れ忘れたが、752です。

767:デフォルトの名無しさん
09/02/05 15:18:28
CommandBuilderからdatasetまで全部動的か

768:752
09/02/05 15:36:30
bindingSourceを追加してみたけど、速度は劇的に早くならなかった。
実行速度はこの位って事で満足したことにまつ。
なんか引っかかるけど・・・

ところでbindingSource下記で使い方間違ってない??
dba = new OleDbDataAdapter(strSelectSQL, dbc);
OleDbCommandBuilder builder = new OleDbCommandBuilder(dba);
dba.Fill(dtset, "TEST");
bindingSource1.DataSource = dtset;
bindingSource1.DataMember = "TEST";
dataGridView1.DataSource = bindingSource1;

教えて君で非常に申し訳なかったです。

769:760
09/02/05 15:36:38
動かしてないんでご両所くださいw
すべて妄想ですw

↓ソース開始↓

OleDbConnection odc = new System.Data.OleDb.OleDbConnection();
OleDbDataAdapter odda;

DataSet ds = new DataSet("GetData"); //データセットの名称を指定

//接続情報を指定
odc.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + @"\DUMMYDATA.mdb";

//実行SQL文と接続先情報を設定してアダプタを作成
odda = new OleDbDataAdapter("SELECT * FROM DUMMYDATA", odc);
//データを取得しテーブルを作成
//テーブル名称を設定(任意)
odda.Fill(ds, "tm_DUMMYDATA");

//データソースに設定
dataGridView1.DataSource = ds.Tables["m_DUMMYDATA"];  //インデックス値でもいい

↑ソース終了↑

いろいろ勘違いしてたらごめんね
反省はしないけど


770:752
09/02/05 15:44:25
>>769
ソースまで書いてもらって、しかもコメント付で!!
ほんとに親切にありがとう。
素直にうれしす。

771:636の者です。
09/02/05 16:40:08
コンストラクタについての質問です。
クラスが3つあります。クラスBは3つコンストラクタがあります。
ClassA
{
ClassB b = new ClassB(〜);
}
ClassB
{
public ClassB(N n){}
public ClassB(N n, M n){}
public ClassB(N n, M m, O o){}
}
ClassC
{
ClassB b = new ClassB(  );
b.〜
}
クラスAからクラスBを呼び出すときは、if文で分けてコンストラクタを1つだけ呼び出すことが
できたのですが、クラスCからクラスBを呼び出すときはどのように呼び出したら良いでしょうか?

772:デフォルトの名無しさん
09/02/05 16:42:45
こっちが聞きたい
ClassAとClassCは何が違うんだ

773:636の者です。
09/02/05 16:47:41
>>772
クラスAのwindowフォームからクラスBのwindowフォームを呼び出すんですが、
そのクラスBのフォームの選択欄を別のクラスCで使いたいのです。

774:デフォルトの名無しさん
09/02/05 16:49:37
それがどうした
>>772の答えになってないだろ

775:デフォルトの名無しさん
09/02/05 16:51:35
だったら
class A()
{
public B b;
C c;
public A(){b=〜;c=C(this)}
}

public class C()
{ public C(A a){} }
とかじゃだめ?

776:デフォルトの名無しさん
09/02/05 16:52:32
>>771
逆に聞く。
ClaaAからClassBを呼んだときと同じように、ClassCからClassBを呼ぶとどうなったんだ?


777:636の者です。
09/02/05 16:59:15
>>776
コンパイルエラーはでないのですが、
クラスCでは、クラスBの変数を呼び出しても未定義となってしまいます。

778:デフォルトの名無しさん
09/02/05 17:02:16
いいから失敗したコードを晒せ

779:デフォルトの名無しさん
09/02/05 17:03:42
>>777
確認だが、同一form(B)の情報をAとCで共有したいってことでいいの?
だったら両方でnewしてるから
今のコードだったら、AとCがそれぞれ別のform(B1,B2みたいな)を持ってることになる。

違うなら、そもそもやりたいことが分からん。

780:636の者です。
09/02/05 17:13:57
>>779
クラスAで入力したテキストの個数によってクラスBのコンストラクタをShow()を使って
1つ呼び出すだけですが、クラスBではリストボックスなどをSelectedItemで選んで、
その選んだ項をクラスCで使いたいのですが、クラスCでクラスBの変数を使いたいときに、
クラスBのインスタンス化を行うときに、どのコンストラクタを選択すればよいのかが分かりません。

781:デフォルトの名無しさん
09/02/05 17:25:00
禅問答みたいw

782:デフォルトの名無しさん
09/02/05 17:33:58
たぶんVB脳、それも極上のやつなんだと思う

783:デフォルトの名無しさん
09/02/05 17:47:52
小文字は大文字クラスのインスタンスだとする。

(1)
a → b1
c → b2

(2)
a → b ← c

どっちなんだ
ちなみに(1)はフォームが2つできる。そしてb1とb2は別物だからリストボックスなんかの情報は共有できない。
俺には(2)を実現したいのに(1)のコードを書いちゃってるように見えるんだが・・・

784:デフォルトの名無しさん
09/02/05 18:16:59
なんか、他のクラスを呼び出すときはNewしなきゃいかんという間違った固定概念をお持ちなのでしょう

785:デフォルトの名無しさん
09/02/05 18:32:58
×固定概念
○固定観念

786:デフォルトの名無しさん
09/02/05 18:46:17
もう少し勉強しましょう、としか言いようがない。

>クラスBのインスタンス化を行うときに、どのコンストラクタを選択すればよいのかが分かりません

クラスBは自分で書いたんでしょう? だったら自分で知ってるはず。
そうじゃなくてたぶんあなたの質問は、
「データをどうやってクラス間で渡したらいいですか?」というやつではないのかい?

なんか書いても書いても返答がないので手応えのない質問者だ

787:デフォルトの名無しさん
09/02/05 18:54:38
馬鹿がバレるのを恐れてるんじゃないの。

788:デフォルトの名無しさん
09/02/05 18:54:43
きょうもしつもんです。

「時間計るときに、System.Environment.TickCountを良く使うけど、
24.9日たったら一周しちゃうから、なんとかならないかなー」
なんて書き込みがよくありますが、
なんでSystem.Diagnotics.Stopwatchを使わないんでしょうか?

数十日間もパフォーマンスカウンタ取得し続けたら、CPUとかハード的に
負担(たとえばやりすぎたら故障しやすいとか)があるんでしょうか?

もしそうだとしたら、なんとかSystem.Environment.TickCountを64bit化する
コーディング方法はあるんでしょうか?

789:デフォルトの名無しさん
09/02/05 18:59:27
>>788
一周したかどうか、チェックすればいいんじゃないでしょうか。

790:デフォルトの名無しさん
09/02/05 19:01:24
フレームワークのバージョンのせいじゃねーの

791:デフォルトの名無しさん
09/02/05 19:05:27
じゃあやっぱりSystem.Diagnotics.Stopwatchでもいいんですかね。
なんかCPUのクロックからどうのこうのって言われるとCPUに悪そうなきがして。

792:デフォルトの名無しさん
09/02/05 19:05:45
はあ?

793:デフォルトの名無しさん
09/02/05 19:09:02
>>788
Vista/Server2008なら、API関数のGetTickCount64()が使える。
まあ、System.Environment.TickCountで間に合う程度の精度での時間計測なら、
DateTime.Now.Ticks / TimeSpan.TicksPerMillisecondでも問題ないだろうけど。

794:デフォルトの名無しさん
09/02/05 19:10:39
ローカル時間使うとプロセス起動中にBIOS時計触ったら狂ってしまいますよね。


795:デフォルトの名無しさん
09/02/05 19:23:05
まあ、NowだとNTPで同期入ったらずれるだろう。
Stopwatchの中身QueryPerformanceCounterだよ。

796:デフォルトの名無しさん
09/02/05 19:58:46
>>788
はいこれ使ってくれ つSystem.Diagnotics.Stopwatch

.NET Framework1.0「おkおk」
.NET Framework2.0「そんな古臭いコード保障できねーからいらねーよ」

797:デフォルトの名無しさん
09/02/05 20:05:51
ストップウォッチ使ってfor文の処理の時間とかをPCごとに幾らになるか計ったらダメなん?

798:デフォルトの名無しさん
09/02/05 20:35:48
>>796
System.Diagnotics.Stopwatchって2.0からじゃなかったっけ


799:デフォルトの名無しさん
09/02/05 20:42:39
>>742
遅くなりましたが、ありがとうございました。

800:デフォルトの名無しさん
09/02/05 20:47:57
>>798
ごめん 間違えた

訂正

はいこれ使ってくれ つSystem.Diagnotics.Stopwatch

.NET Framework2.0「おkおk」
.NET Compact2.0「サポートしてませ〜ん」

申し訳」ない

801:デフォルトの名無しさん
09/02/05 21:31:23
private void catalogDataGridView_CellContextMenuStripNeeded(sender,e)
{

}

DataGridViewCellEventArgs(e.RowIndex,e.ColumnIndex)で
どこがクリックされたかは取得できるのはわかるのですが
クリックした場所が選択中(SelectedRows)かどうかを調べる方法はないでしょうか?
選択中の行の上でクリックしたときだけカスタムストリップを表示したいのですが

と書いてるうちに自己解決しました。ありがとうございます。


802:デフォルトの名無しさん
09/02/05 21:33:57
どういたしまして。

803:デフォルトの名無しさん
09/02/05 21:36:48
System.Diagnotics.Stopwatchは1年くらいプロセス起動したまま使い続けても大丈夫なの?

804:デフォルトの名無しさん
09/02/05 21:38:17
パフォーマンスカウンタなんて常に参照されてるんだから気にするなよ

タスクマネージャの情報ほぼ全部そっから取ってんだぞ

805:デフォルトの名無しさん
09/02/05 21:55:05
byte[100]の中から、任意のデータの並び(0x112233とか)を検索するにはどうすればよいですか?

806:デフォルトの名無しさん
09/02/05 21:57:20
>>803
システムの起動(CPUの電源ON)からのカウント数だから、プロセスの起動時間は関係ない

807:デフォルトの名無しさん
09/02/05 21:59:57
>>805
BM法

808:デフォルトの名無しさん
09/02/05 22:01:24
>>805
byte境界を越えてるのも探したいの?
ビットパターンを頭から見てくしかないんじゃね?

809:デフォルトの名無しさん
09/02/05 22:02:42
ちょっと、スレ違い気味な事で申し訳無いのですが・・・
適切なスレがありましたら指摘して下さい。

VisualStudio2005 C# で Webアプリケーション 及び Webサービス を作ろうとしていたのですが、
パケットをキャプチャする為にはIIS上で動かさなければいけないのでしょうか?

「とりあえず動かすのが先だ」と考えて、VSを複数立ち上げて.NET開発サーバー間でやりとりしていたのですが、
いざパケットを見ようと思ったら見方が解らなく、ネットも自分の解る範囲で検索してみたのですがそれらしい情報を
見つける事が出来ませんでした・・・

localhost内でやりとりする(?)パケットを見る事は出来ないのでしょうか・・・?

810:デフォルトの名無しさん
09/02/05 22:04:03
>>805
byte[100]ならBM法でもたいしたコストかからないよ

811:デフォルトの名無しさん
09/02/05 22:05:53
>>809
WinPCap

812:805
09/02/05 22:11:43
やっぱり自力でやるしかないんですね。
便利なクラスが用意されていればと思ったのですが…

813:デフォルトの名無しさん
09/02/05 22:13:34
>>809
ローカルじゃ無理じゃね? 無料の VirtualPC でも使いなよ。

814:デフォルトの名無しさん
09/02/05 22:18:46
>>812
Array.Find()

815:デフォルトの名無しさん
09/02/05 22:19:02
    public int BytesBytes(byte[] src, byte[] target)
    {
      StringBuilder sbSrc = new StringBuilder(src.Length);
      for (int i = 0; i < src.Length; i++)
      {
        sbSrc.Append(src[i].ToString(@"X2"));
      }

      StringBuilder sbTarget = new StringBuilder(target.Length);
      for (int i = 0; i < target.Length; i++)
      {
        sbTarget.Append(target[i].ToString(@"X2"));
      }

      return sbSrc.ToString().IndexOf(sbTarget.ToString());
    }
(∪^ω^)わんわんお!


816:デフォルトの名無しさん
09/02/05 22:24:33
>>814
勘違い

817:デフォルトの名無しさん
09/02/05 22:26:12
>>809
URLリンク(elend.sakura.ne.jp)

818:デフォルトの名無しさん
09/02/05 22:26:55
>>814
Array.Find()だと任意の並びは検索できないんじゃね

原文01122334

検索対象112233

だとヒットしない

819:デフォルトの名無しさん
09/02/05 22:31:58
public static int Find(byte[] src, byte[] target)
{
return System.Text.Encoding.ASCII.GetString(src).IndexOf(System.Text.Encoding.ASCII.GetString(target));
}

820:815
09/02/05 22:33:29
>>819に負けた・・・

ASCIIにするの思いつかなかった

821:デフォルトの名無しさん
09/02/05 22:36:00
>>820
いや、君の見て思いついた。

822:デフォルトの名無しさん
09/02/05 22:36:07
あ、でも>>819だと4ビットずれてたら検索できないね

823:デフォルトの名無しさん
09/02/05 22:37:47
ん、ビット単位でずらして検索するのか?

824:デフォルトの名無しさん
09/02/05 22:45:45
ASCIIだと0x80以降が0x3Fになっちまうっていう

825:デフォルトの名無しさん
09/02/05 22:47:21
文字列にして検索してるのは馬鹿?

826:デフォルトの名無しさん
09/02/05 22:49:51
ネタをネタと(

827:デフォルトの名無しさん
09/02/05 22:50:39
コストを考慮しなくて良い場合は手抜き実装としてアリだと思う

828:デフォルトの名無しさん
09/02/05 22:51:47
>>524
そうか
UTF7でどうだ?


829:デフォルトの名無しさん
09/02/05 22:52:30
>>828はアンカミス
>>824へのレス


830:デフォルトの名無しさん
09/02/05 22:52:43
>>524
まったくだ・・・

831:809
09/02/05 22:55:46
>>810
試してみたいと思います。

>>813
どうも自分も調べていてそうなのかもと思い始めた所でした・・・
OSが内部で処理しているみたいですね。
今日中に解決できなければその方法で行こうと思います。

>>817
ありがとうございます。
そのサイトは自分も行ったのですが、
ARPの追加が出来なくて諦めました(汗
(エントリを追加できませんでした:5って奴です)
もう少し知識があれば色々突っ込んでやりたい所なんですが、
勝手にARPをイジっても大丈夫なのかよくわかってないので、
その方法はやめておきます・・・。



みなさんありがとうございます。
とりあえず今日中は頑張ってみようと思います。

832:デフォルトの名無しさん
09/02/05 22:58:06
>>805>>809

833:809
09/02/05 23:03:45
>>805 != >>809 です。

834:デフォルトの名無しさん
09/02/05 23:11:10
class Helper<T>
{
 IEnuemrator<T> e;

 public Helper(IEnumerable<T> e)
 {
  this.e = e.GetEnumerator();
  e.MoveNext();
 }

 Result{ Accept, Reject, 保留 }

 public Result Add(T item)
 {
  if(e.Current.Equals(item))
  {
   if(e.MoveNext() == false)
    return Result.Accept;

   return Result.保留;
  }
  return Result.Reject;
 }
}
こんなんを自作して、一つめが合っていたらこれを作って入れるみたいな感じじゃない?

835:デフォルトの名無しさん
09/02/05 23:15:34
何それ

836:デフォルトの名無しさん
09/02/05 23:37:16
誤爆?

837:817
09/02/05 23:40:31
>>831
該当の記事には要点しかなので、そのまま説明内容を打ち込んでも
ダメなのは理解してるのかな?
事前に
URLリンク(blogs.yahoo.co.jp)
とかで説明してるようなMicrosoft Loopback Adapterを追加してやらなければ
ならない
これはローカル通信専用の仮想のネットワークカードのようなもの
するとネットワークが1つ追加されるので、これにIPなどを設定することで、
初めて817の記事内容にあるarpコマンドを受け付けるようになる

デフォルトのローカル通信はキャプチャできないけど、追加した仮想ネットワークは
ローカル通信には違いないけど仕組みが若干違うのでキャプチャできるってことだと思う
なお、arpテーブルはアドレス解決のキャッシュみたいなものなので自分で
設定する分には特に心配はない


838:デフォルトの名無しさん
09/02/06 00:02:27
>>835-836
>>805へのレスだよ

839:デフォルトの名無しさん
09/02/06 00:03:35
誤爆の方がよかったね

840:デフォルトの名無しさん
09/02/06 00:07:11
ええええ、まさかとは思ったが・・・

841:デフォルトの名無しさん
09/02/06 00:08:23
こんなに素直なコーディングを見てそんな感想かよ

842:デフォルトの名無しさん
09/02/06 00:17:39
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /

843:デフォルトの名無しさん
09/02/06 00:19:15
じゃあ>>805の解をもっと素直に書いてくれや

844:デフォルトの名無しさん
09/02/06 00:20:41
揚げ足取りの時間です

845:デフォルトの名無しさん
09/02/06 00:21:58
どうでもいいけど、バグってんだよなそれ >>834
IEnumerator<T> が何を実装しているかもう少し見たほうがいい
foreach 使わないと無駄に長くなる理由でもあるんだけど

846:デフォルトの名無しさん
09/02/06 00:29:48
IDisposableにしろって話?
嫌だよめんどくさい

847:デフォルトの名無しさん
09/02/06 00:32:39
                             |
                             |
      ∩___∩             |
      | ノ  _,  ,_ ヽ        ((  | プラプラ
     /  ●   ● |         (=)
     |    ( _●_)  ミ _ (⌒)   J  ))
    彡、   |∪|  ノ
⊂⌒ヽ /    ヽノ  ヽ /⌒つ
  \ ヽ  /         ヽ /
   \_,,ノ      |、_ノ

848:デフォルトの名無しさん
09/02/06 00:34:56
お取り込み中すいません。
Windows Forms1.1(VS.NET2003)のLabelのTextに
"‐"(シフトJISの815D)を設定すると表示されなくて困ってます。
仕様なんでしょうか?
WinForms2.0やVB6.0(Label.Caption)では表示されます。
Buttonとか、"&"のアクセスキー処理ができるコントロールでは
みんなこの現象が出るようです。.NET1.1はSP1入れています。
"‐"や"815D"で検索しても情報がなくて。。。

849:809
09/02/06 00:36:08
>>837
ipconfigにloopbackというのが無い事に気づき、インストールしてarpまではたどり着けました。
ただ、routeするとすでに登録されているとの事で、route PRINTで確認したのですが登録されてました。
これでキャプチャできるのかな?と思ったのですが、やはり見れませんでした・・・
これは見ながらやった設定が間違っていたのか、もしくは自分がNetworkMonitorの使い方を正しく把握していからかのどちらかではないかと思います。
ためしにブラウザにloopbackと入れるとIISのページが表示されたので、loopback == localhost???とか、正常にloopbackされているという事?と、色々頭に?が浮かんでます笑

後一息の様な気がするのですが、明日朝もう一度試してみてダメならダメでまた時間のある時に試してみようと思います。
私の様な初心者に細かに解説していただき、本当にありがとうございました。

850:デフォルトの名無しさん
09/02/06 00:46:46
>>848
これだな。Shift_JISの0x815D == U+2010

Windows Server 2008、Windows Vista、Windows Server 2003、および Windows XP で
GDI+ API 関数を使用するアプリケーションを使用すると、Unicode ハイフン文字 (U+2010) が描画されない
URLリンク(support.microsoft.com)

.NET 1.1はコントロールの描画にGDI+を使う。
.NET 2.0で標準だとそこにはGDI+を使わなくなったので、.NET 2.0だと問題が起こらなかったというわけ。

851:デフォルトの名無しさん
09/02/06 00:48:28
>>848
URLリンク(www.atmarkit.co.jp)
URLリンク(support.microsoft.com)



最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5005日前に更新/209 KB
担当:undef