- PR -

もう少し・・・

1
投稿者投稿内容
KAZU
会議室デビュー日: 2002/11/20
投稿数: 4
投稿日時: 2002-11-22 17:47
お世話になっております。
千葉です。
先ほど"NothingBut.NETFX"さんより頂いた、サンプルを実行しソースを見たのですがC#で私は、恥ずかしながらC#は全くの無知でして、理解できませんでした。"DataGridComboBoxColumnStyle"をヘルプで調べてみたのですが、どうやら、VBには無い様です。何度も申し訳ありませんが、どなたか、VBでDataGridにコンボボックスを設置する方法をご教示ください。
NothingButXMLInfoSet
大ベテラン
会議室デビュー日: 2002/07/16
投稿数: 116
投稿日時: 2002-11-23 09:08
>"DataGridComboBoxColumnStyle"をヘルプで調べてみたのですが、
>どうやら、VBには無い様です。

.NET Frameworkの特徴の1つは、マルチランゲージです。C#で作られたコードをVBでも利用できるわけです。

DataGridComboBoxColumnStyleはお知らせしたサンプルを開発した人が開発したものですから、当然ヘルプには載っていません。KAZUさんが作るClass1がヘルプに載っていないのと同じです。

VB.NETでお使いになるのであれば、サンプルの中のDataGridExtensionsフォルダの中身だけでアセンブリ(DLL)をビルドして、KAZUさんのVB.NETのプロジェクトでそのアセンブリへの参照を追加します。

あとはサンプルの中のTestAppフォルダの中身を、KAZUさんがVB.NETで開発しなおすことになります。
mrmatrix
会議室デビュー日: 2002/08/29
投稿数: 4
投稿日時: 2003-03-06 12:20
私はC#を用いてプログラムを作成した事はないのですが、NothingBut.NETFXさん作成のC#で書かれたDataGridにComboBoxを貼り付けるためのDataGridExtensionsのコードを大変興味深く拝見いたしました。

ところで、これをデザイン時におけるDataGridプロパティのドロップダウンリストにDataGridComboBoxColumnを追加する方法はあるのでしょうか?

具体的には、あるフォーム上にあるDataGridのプロパティからTableStylesのコレクションボタンをクリックするとDataGridTableStylesコレクションエディタが開きます。そのコレクションエディタの左側に表示されるメンバーリストの中から適当に一つDataGridTableStylesを選択して、右側dataGridTableStyleプロパティリストのGridColumnStylesのコレクションボタンをクリックすると今度はDataGridColumnStyleコレクションエディタが開きます。このDataGridColumnStyleコレクションエディタの左下にある追加ボタンと削除ボタンの間の小さなボタンをクリックすると、DataGridTextBoxColumnとDataGridBoolColumnの2行からなるドロップダウンリストが開きます。
このドロップダウンリストにNothingBut.NETFXさん作成のDataGridComboBoxColumnを追加する方法はあるのでしょうか?もしコレができればDataGridにComboBoxへの貼り付け作業時にコードを書く必要がなくなるので言語によらず大変便利になると思います。

ご存知の方いらっしゃいましたら、教えていただければ大変助かります。
NothingButXMLInfoSet
大ベテラン
会議室デビュー日: 2002/07/16
投稿数: 116
投稿日時: 2003-03-06 14:25
まずはっきりさせなければならないことがあります。このスレッドで私が紹介したコードは、MicrosoftのWindows Forms関連のProgram ManagerをしているMark Boulter氏が書いたサンプルで、私が書いたものではありません。私は紹介しただけです。

さて、本題のデザイナへの追加方法ですが、Windows FormsのDataGridでmrmatrixさんがおっしゃっている機能は、System.Windows.Forms.Design.DataGridColumnCollectionEditorというクラスによって実現されているようです。このクラスに対してVisual Studio .NETがCreateNewItemTypesというメソッドを呼び出し、そこから返されたSystem.Type型の配列がそのままリストとして画面に表示されるようです。

「〜ようです。」とばかり書いているのは、DataGridColumnCollectionEditorというクラスがprivateなクラスであるため、実際に継承などをして確認することができないからです。上記の内容は単にILDASM.EXEでCILコードを追いかけた結果の推測です。そういうわけで、mrmatrixさんがおっしゃっている機能を、DataGridを使って簡単に実現することはできないみたいです。

ただし、それほど簡単でなくてもよければ、DataGridから派生した独自の型を定義して、それに対してデザイン時のエディタを設定していけば、同じことは実現できると思います。どれほど困難かは私にもわかりません。
mrmatrix
会議室デビュー日: 2002/08/29
投稿数: 4
投稿日時: 2003-03-06 16:51
それにしてもVS.NETでもVB6.0でもデフォルトのデザイナではDataGridにComboBoxを貼り付け出来ないのは、MSさんのサードパーティに対する配慮ですかね?DataGridComboBoxColumnのデザイナへの追加はできそうにないので、これからもコードをシコシコ書いていくことにします。

NothingBut.NETFXさんの追跡には大変感謝いたします。ありがとうございました。
ケイゴ
会議室デビュー日: 2003/10/01
投稿数: 15
投稿日時: 2004-01-14 14:02
ケイゴです。
DataGridにcombboxを貼り付けるだけなら何とかできますヨ?
まずソースの最初に
  Imports System.Windows.Forms
を追加する。
次にあくまで私の場合ですが、二つ付けたかったもので
”Windowsフォームデザイナで作成されたコード”
後に
Public MyCombo As New ComboBox()
Public MyCombo2 As New ComboBox()
を追加。
また、次に
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'Fill ComboBox list.
MyCombo.Name = "MyCombo"
'MyCombo.Visible = False
MyCombo.Items.Clear()
MyCombo.Items.Add("")
MyCombo.Items.Add("")
MyCombo.Items.Add("")
MyCombo.Items.Add("")
MyCombo.Items.Add("")
'Set the RowHeight of the DataGrid to the height of the ComboBox.
DataGrid1.PreferredRowHeight = MyCombo.Height
'Add ComboBox to the Control collection of the DataGrid.
DataGrid1.Controls.Add(MyCombo)

'Fill ComboBox list.
MyCombo2.Name = "MyCombo2"
'MyCombo.Visible = False
MyCombo2.Items.Clear()
MyCombo2.Items.Add("")
MyCombo2.Items.Add("")
MyCombo2.Items.Add("")
MyCombo2.Items.Add("")
MyCombo2.Items.Add("")
'Set the RowHeight of the DataGrid to the height of the ComboBox.
DataGrid1.PreferredRowHeight = MyCombo2.Height
'Add ComboBox to the Control collection of the DataGrid.
DataGrid1.Controls.Add(MyCombo2)
とし、このsubの後に
Private Sub DataGrid1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles DataGrid1.Paint

MyCombo.Left = 287
MyCombo.Width = 82
MyCombo.Top = 22
MyCombo.Text = ""
MyCombo.Visible = True

MyCombo2.Left = 367
MyCombo2.Width = 130

MyCombo2.Top = 22
MyCombo2.Text = ""
MyCombo2.Visible = True

End Sub
をつなげ、クラスを閉じる。
こんなんで出来ると思いますが…
1

スキルアップ/キャリアアップ(JOB@IT)