MSFlexGridでコンボボックスを使用するには?

解決


帳簿  2003-01-31 20:36:24  No: 105966  IP: [192.*.*.*]

はじめまして
MSFlexGridでコンボボックスを表示させたいのですが良く分かりません。
クリックした時にコンボボックスを表示させて内容を表示させるにはどの用な
やり方があるのでしょうか?又は、MSFlexGrid内にコンボボックスを表示
させるのは可能なのか?
教えて下さい。至らない質問ですいません。宜しくお願いします。

編集 削除
Say  2003-01-31 21:55:41  No: 105967  IP: [192.*.*.*]

Visible=False のComboBoxを用意しておいて、
マウスクリック位置からクリックしたセルを割り出し、
そのセルに重なるようにComboBoxを配置し、
Visible=Trueにすればいいかと・・・。

編集 削除
帳簿  2003-02-01 14:40:28  No: 105968  IP: [192.*.*.*]

Sayさんありがとうございます。
VBを始めたばかりなのでまだ良く分からないのですが、
何か参考になるようなサイトはあるのでしょうか?
お願いします。

編集 削除
Say  2003-02-02 22:50:32  No: 105969  IP: [192.*.*.*]

ヘルプが一番いい資料だと思いますが・・・。

とりあえず、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

編集 削除
とおりすがり  2003-02-04 13:50:35  No: 105970  IP: [192.*.*.*]

MSFlexGridではコンボボックスも含めてその他のコントロールも選択した座標を取得してそのコントロールを移動&表示を行わないといけないので、面倒であれば、
グレープシティ社等が販売しているグリッドを使う手もあります。
しかし、費用がかかるのがイヤ!という方は、グリッドを使うのではなく、
テキストやコンボボックス等を配列化させ、スクロールバーを使用してデータを表示するやり方もあります。この方法は面倒に見えますが、実はグリッド制御よりも簡単かもしれません。
うまくやれば、ActiveXコントロールにして使用するという手も…

編集 削除
帳簿  2003-02-04 14:31:46  No: 105971  IP: [192.*.*.*]

ActiveXコントロールにして使用するという手も…と言っていますが
どの用なやり方で使用するのですか?
できればテキストやコンボボックス等を配列化も
教えていただけませんでしょうか?
宜しくお願いします。

編集 削除
とおりすがり  2003-02-04 14:56:33  No: 105972  IP: [192.*.*.*]

ActiveXコントロールにするには、それなりに設計をしてからでないと後で酷い目に会いますので、クラスやプロパティ、メソッド等の概念を理解してから設計にとりかかりましょう。概念については色々なサイトに載っています。
例えば…http://homepage1.nifty.com/CavalierLab/lab/
です。
さて、配列化についてですが、
例えば、ある商品の明細を表示するプログラムを作成するとしましょう。
各コントロールを作成します。(その時、PictureBoxの中にコントロールを貼り付けるときれいに見えます。)
  txtSCode(textBox)…商品コード
  lblSName(label)  …商品名
  txtTanka(textBox)…単価
  lblZaiko(label)  …在庫
  txtSuryo(textBox)…数量
こんな感じでコントロールを作成し、そのコントロール類をまとめてコピーし(PictureBox内に貼り付けてあれば、PictureBoxをコピーするだけでOK)ペーストしてください。すると、「既に同じ名前の…」のメッセージが表示されますので、「OK」を押すとコントロールが配列化されます。

また、既にコントロールあって、同じ機能であれば、オブジェクト名を同じ名前にしても「既に同じ名前の…」が出てきます。

編集 削除
とおりすがり  2003-02-04 17:01:48  No: 105973  IP: [192.*.*.*]

追記:
当然、明細行には限りがあるので、データは構造体配列などを使用して内部変数で管理してくださいね。
ちなみに、行番号等、明細行の位置を示す情報も配列化しておいてください。
その「行番号−1」の値が構造体配列のインデックス値として利用可能です。

編集 削除
帳簿  2003-02-04 17:45:29  No: 105974  IP: [192.*.*.*]

アドバイスをありがとうございます。
色々、プログラムをいじってなんとなく分かってきましたが、
コンボの配置について聞きたいのですが
例えば3列目だけのセルにコンボを表示したいのですが分かりません。
教えて頂けますか?

編集 削除
とおりすがり  2003-02-04 18:31:24  No: 105975  IP: [192.*.*.*]

MSFlexGridを使っての話ですよね?
でしたら、Select文を使ってみてはどうでしょうか?
例えば、グリッドのクリックイベント時に
Select case MSFlexGrid1.col
    case 3
        'コンボボックス貼り付け処理
end select
としたら3列目だけの表示ができますよ

編集 削除
帳簿  2003-02-05 10:34:38  No: 105976  IP: [192.*.*.*]

とおりすがりさん、ありがとうございました。
一応なんとか形になったのでありがとうございました。

編集 削除