2

子フォーム内のコンボボックスで発生している問題の解決策を見つけるのに長い時間を費やしました。これはマイクロソフトのエラーであり、私が間違っていることではないと確信しています...助けていただければ幸いです。よろしくお願いします...

問題を説明する最良の方法は、私がこれまでに行ったことを説明することです。

VB で新しいプロジェクトを開き、2 つの Windows フォームを追加するとします。Form1 が親になります。Form2 が子になります。

Form1 に 1 x パネル (Form2 はパネル内で開くので、パネルが Form2 に適合する十分な大きさであることを確認してください) と 1 x ボタンを追加します。このフォームに必要な唯一のコードは次のとおりです。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Form2.Show()

End Sub

Form2 に 1 つの Textbox と 1 つのコンボボックスを追加します。次のコードを Form2 にコピーします。

Private Sub Form2_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus

    ActivateMdiChild(Me)

End Sub

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    TopLevel = False
    Form1.Panel1.Controls.Add(Me)
    Me.BringToFront()

End Sub

プログラムを実行し、button1 をクリックして form2 を開きます (form2 は panel1 内で開くはずです)。

コンボボックスとテキストボックスは、いくつかの機能を失います: 1. ドロップダウンを押さないとコンボボックスにフォーカスを設定できません 2. コンボボックスまたはテキストボックスのテキストを適切に強調表示できません。3. コンボ ボックスまたはテキスト ボックスでマウスを使用してカーソル インデックス位置を設定できません。

誰もこれを回避する方法を知っていますか?? テキストボックスで機能するいくつかの機能があるため、主にコンボボックス用です。

よろしく、ベン

4

2 に答える 2

0

取得しようとしている機能を取得する別の方法は、on のプロパティを介して MDI コンテナーとしてForm2設定することです。次に、次のような方法でボタンのクリックを呼び出すことができます。Form1IsMdiContainerForm1Form2Form1

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim f As New Form2()
    f.MdiParent = Me
    f.Show()
End Sub

これにより、明らかにForm2Button1 をクリックするたびに の新しいインスタンスが作成されるため、クリック アクションを に変更しForm2.Show()Form2コンストラクターで を に設定MdiParentできますForm1。のインスタンスを 1 つだけ作成する必要がありますForm2

パネルを介して MDI 機能を模倣している理由が知りたいです。

于 2012-06-20T16:46:55.077 に答える
0

クリック イベントは、おそらく次のようになります。

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
  Dim f As New Form2
  f.TopLevel = False
  f.Dock = DockStyle.Fill
  f.Visible = True
  Panel1.Controls.Add(f)
  f.BringToFront()
End Sub

Form2 に投稿したコードはほとんど破棄できます。親の MDI 子であるフォームをパネルの子コントロールに移動するのは少し厄介です。それはあなたが本当にやろうとしていることではないと思います。

また、この現在のコードは、既にパネルにある既存のコントロールまたはフォームの上に新しい Form2 を置き続けるだけです。不要なコントロールは必ず破棄してください。

于 2012-06-20T15:48:17.687 に答える