タイトル一覧   関連タグ: Win C#
タグ:Win C# タイトル:DataGridColumnStyleクラスのプロテクトメソッド
1 2
1:  お名前:鉄 2005/03/31 0:19:09

DataGridコントロールでDataGridColumnStyleクラスのプロテクトメソッドを使いたいのですが保護されていて使用できず、使い方がいまいちです。調べてみました所、派生したりしていくとできそうなのですが・・いまいち仕組みがよくわかりません。参考になる情報はありませんでしょうか?
サンプルソースがあればなお助かります。
2:  お名前:えムナウ 2005/03/31 0:57:00

DataGridColumnStyle を TextBox で使うために継承している
System.Windows.Forms.DataGridTextBoxColumn あたりを調べてみたらどうでしょうか?
どんなプロテクトメソッドを使いたいのですか?

サンプルはここでどうでしょうか?
http://dobon.net/vb/dotnet/datagrid/coloredcell.html

3:  お名前:鉄 2005/03/31 8:58:10

失礼しました。BeginUpdate プロテクトメソッドが使いたいのです。
原理としては派生クラスでpublicとして基本クラスのBeginUpdateをオーバーライドするといった形でよいのでしょうか?
4:  お名前:えムナウ 2005/03/31 13:19:23

>派生クラスでpublicとして基本クラスのBeginUpdateをオーバーライド
2つ疑問があります。
public : ですか? どういう理由でしょうか?
BeginUpdate : EndUpdate はオーバーライドしないのですか?
5:  お名前:鉄 2005/04/01 2:20:51

返答>
EndUpdateもです。
しかし、オーバーライドはBeginUpdateと関わりがないようですね。そこで、BeginUpdateに関して派生クラスで

//////////////////派生クラス内///////////////
public void BeginUpdate ()
{
   //派生クラスで基本クラスのプロテクトメソッドを参照
   base.BeginUpdate ()
}

といった形で作成し、これを参照してみるという感じです。しかしうまくいきませんでした・・おそらく

//////////////////派生クラス内///////////////
public void BeginEndUpdate()
{
  base.BeginUpdate ()

  //DataGridの複数回の描画処理・・・

  base.EndUpdate()
}

といった感じでいかないといけないようです。

この場合、フォーム上のDataGridコントロールに複数回描画する処理をDataGridColumnStyle の派生クラス内の関数(BeginEndUpdate())の定義で処理しなければいけませんし・・

他のクラスの関数からフォームの中のコントロールにアクセスする方法はあるのでしょうか・・
6:  お名前:doronjo 2005/04/01 8:44:14

描画処理の中断再開ですよね。
DataGridのSuspendLayout、ResumeLayoutって駄目なのかな?駄目っぽいけど。。
私は、意識して使ったことがない(自動生成ソースは除く)ので期待した動きになるかはわかりません。
そして、上記ソースはコンパイル通るのでしょうか?
DataGridColumnStyleを継承しているクラスで、上記のようなBeginUpdateメソッドの記述ではコンパイルできないと思うのですが。
override もなければ newもないですよね。
オーバーライドしてスコープって変えられませんよね確か。。
7:  お名前:えムナウ 2005/04/01 18:13:27

>public void BeginUpdate ()
鉄さん、私の記述したリンクを見たのでしょうか?
ちゃんと override するサンプルになっていたはずですが。

>DataGridのSuspendLayout、ResumeLayoutって駄目なのかな?
doronjo さん、ヘルプだと コントロールの Size 、 Location 、 Anchor 、または Dock の各プロパティ だけみたいですが・・・
8:  お名前:doronjo 2005/04/01 19:44:37

やはり駄目ですか。。余計なこと書きましたすみません。
9:  お名前:鉄 2005/04/04 9:00:55

リンクは見させていただきました。その上でoverrideができれば問題ないのですが、doronjoさんの言われてるとおりBeginUpdateはoverrideできないため困っています・・そのためoverrideを行わずに使ってみた所存です。
>ちゃんと override するサンプルになっていたはずですが
BeginUpdateをどうやってoverride するのでしょうか?他の関数をoverrideして定義で呼び出すのですか?
10:  お名前:doronjo 2005/04/04 11:10:51

BeginUpdateがoverrideできないのではなく、public に変更した為にコンパイルできないのではないですか?
protected override void BeginUpdate()
{
}
override するとなると、こう書くしかないでしょうね。
ただ、overrideすると呼び出せないので、
public new void BeginUpdate()
{
    base.BeginUpdate();
}
newしているということは、overrideとは違い独自のメソッドを定義している感じです。
継承もとのBeginUpdateとただ単に同じ名前というだけになります。
まったく別のメソッド作ってもいいのかもしれませんが、こちらの方が綺麗かと。
検証するにはちょっと大変なので。。これでいけたらいいのですが。
もし駄目なら、OnPaintをオーバーライドして、直接描画処理を制御するとか。。
そうなると、DataGridColumnStyle で行うべき処理か考慮された方がいいのかもしれませんね。
もっと簡単にできる方法を知っていたらよかったのですが。
それにしても、DataGridは正直もう見たくないです。私もさんざん苦労しました。。

1 2
お名前
メッセージ
次回のために入力情報を記録