はじめまして
MSFlexGridでコンボボックスを表示させたいのですが良く分かりません。
クリックした時にコンボボックスを表示させて内容を表示させるにはどの用な
やり方があるのでしょうか?又は、MSFlexGrid内にコンボボックスを表示
させるのは可能なのか?
教えて下さい。至らない質問ですいません。宜しくお願いします。
Visible=False のComboBoxを用意しておいて、
マウスクリック位置からクリックしたセルを割り出し、
そのセルに重なるようにComboBoxを配置し、
Visible=Trueにすればいいかと・・・。
Sayさんありがとうございます。
VBを始めたばかりなのでまだ良く分からないのですが、
何か参考になるようなサイトはあるのでしょうか?
お願いします。
ヘルプが一番いい資料だと思いますが・・・。
とりあえず、FormにMSFlexGrid、ComboBoxの順に配置し、
ColsとRowsを適当に設定し、
以下のコードを貼り付けて実行してみてください。
Option Explicit
Private Sub MSFlexGrid1_Click()
Combo1.Width = MSFlexGrid1.CellWidth
Combo1.Top = MSFlexGrid1.Top + MSFlexGrid1.CellTop
Combo1.Left = MSFlexGrid1.Left + MSFlexGrid1.CellLeft
End Sub
MSFlexGridではコンボボックスも含めてその他のコントロールも選択した座標を取得してそのコントロールを移動&表示を行わないといけないので、面倒であれば、
グレープシティ社等が販売しているグリッドを使う手もあります。
しかし、費用がかかるのがイヤ!という方は、グリッドを使うのではなく、
テキストやコンボボックス等を配列化させ、スクロールバーを使用してデータを表示するやり方もあります。この方法は面倒に見えますが、実はグリッド制御よりも簡単かもしれません。
うまくやれば、ActiveXコントロールにして使用するという手も…
ActiveXコントロールにして使用するという手も…と言っていますが
どの用なやり方で使用するのですか?
できればテキストやコンボボックス等を配列化も
教えていただけませんでしょうか?
宜しくお願いします。
ActiveXコントロールにするには、それなりに設計をしてからでないと後で酷い目に会いますので、クラスやプロパティ、メソッド等の概念を理解してから設計にとりかかりましょう。概念については色々なサイトに載っています。
例えば…http://homepage1.nifty.com/CavalierLab/lab/
です。
さて、配列化についてですが、
例えば、ある商品の明細を表示するプログラムを作成するとしましょう。
各コントロールを作成します。(その時、PictureBoxの中にコントロールを貼り付けるときれいに見えます。)
txtSCode(textBox)…商品コード
lblSName(label) …商品名
txtTanka(textBox)…単価
lblZaiko(label) …在庫
txtSuryo(textBox)…数量
こんな感じでコントロールを作成し、そのコントロール類をまとめてコピーし(PictureBox内に貼り付けてあれば、PictureBoxをコピーするだけでOK)ペーストしてください。すると、「既に同じ名前の…」のメッセージが表示されますので、「OK」を押すとコントロールが配列化されます。
また、既にコントロールあって、同じ機能であれば、オブジェクト名を同じ名前にしても「既に同じ名前の…」が出てきます。
追記:
当然、明細行には限りがあるので、データは構造体配列などを使用して内部変数で管理してくださいね。
ちなみに、行番号等、明細行の位置を示す情報も配列化しておいてください。
その「行番号−1」の値が構造体配列のインデックス値として利用可能です。
アドバイスをありがとうございます。
色々、プログラムをいじってなんとなく分かってきましたが、
コンボの配置について聞きたいのですが
例えば3列目だけのセルにコンボを表示したいのですが分かりません。
教えて頂けますか?
MSFlexGridを使っての話ですよね?
でしたら、Select文を使ってみてはどうでしょうか?
例えば、グリッドのクリックイベント時に
Select case MSFlexGrid1.col
case 3
'コンボボックス貼り付け処理
end select
としたら3列目だけの表示ができますよ
とおりすがりさん、ありがとうございました。
一応なんとか形になったのでありがとうございました。
ツイート | ![]() |