【解決方法】TopLevel = false の場合、テキスト コントロールではマウスでテキストを選択できません

プログラミングQA

[ad_1]

こんにちは、みんな!

フォーム内の TextBox に問題があります。

画像としてのスクリーンショット http://rghost.ru/5011999/image.png

簡単な例で状況を示してみましょう。

1) Form1 を使用して新しい winforms プロジェクトを作成します。
2) 新しい Form2 を作成し、その上に TextBox コントロールを配置します。
3) 非モーダルフォームを作成する簡単なコードを書いてみましょう。

ミドル
Form frm = new Form();
frm.StartPosition = FormStartPosition.CenterParent;
frm.TopLevel = false; // here is the problem
frm.Parent = this;
frm.Show();
frm.BringToFront();

このコードを実行すると、テキストボックス付きのフォームが表示されます。
テキストボックスに「これはテストです」などと入力します。 ここで、マウスでテキストの一部または全体を選択してみます。機能しないため、選択できません。

はい、ダブルクリックでテキスト全体を選択できますが、その後選択を解除することはできません。 さらに、テキストの一部だけを選択して消去する必要がある場合はどうすればよいでしょうか?

フォームがモーダルの場合、すべてが正常に機能します。

メモでも同じ状況ですが、他のテキスト コントロールでも同様です。

私たちは本格的な MDI プロジェクトを使用しており、各 MDI フォーム内でユーザーはさまざまなフォーム (検索フォームなど) を開くことができるため、これらすべてが必要です。 もちろん、モーダルにすることもできますが、その時点からは本当の MDI ではなくなります。

何か提案はありますか?

解決策 3

交換する ParentMdiParent:

Form2 frm = new Form2();
frm.StartPosition = FormStartPosition.CenterParent;
frm.TopLevel = false;
frm.MdiParent = this;
frm.Show();
frm.BringToFront();

そして、メインフォームに次の機能があることを確認してください。 IsMdiContainer true に設定します。

—————

あなたが問題を適切に説明しなかったからといって私たちを責めないでください。
あなたのコメントからよく理解できたので、3つの形式があります:
1- MainFormIsMdiContainer trueに設定
2- ChildFormMdiParent に設定 MainForm

3- AnotherChildForm。 そして、あなたはこれを次の子供にしたいと考えています ChildForm

これが正しい場合、バグを取り除くことはできません。 バグを取り除くには ChildForm あるべきです 両方 MdiContainer そして MdiChild それは不可能です。 3 番目の形式を次の子にする必要があります。 MainForm、またはフォームを使用しない(おそらく UserControl か何か)。

解決策 1

まず、設定によって何を達成しようとしていますか TopLevelfalse? そして、なぜ電話するのですか BringToFront()? モードレス フォームを作成すると、自動的に表示されます (前面に表示されます)。

次に、MDI アプリケーションの性質や、子ウィンドウと他のフォームとの相互関係をよく理解していないようです。

3 番目に、モードレス ウィンドウを作成している場合は、次のようにする必要があります。

C#
public partial class MyForm
{
    MyModelessForm m_modelessForm = null;

    private void ShowModelessForm()
    {
        if (m_modelessForm == null)
        {
            m_modelessForm = new ModelessForm();
            // configure the form here if necessary
        }
        m_modelessForm.Show();
        m_modelessForm.BringToFront();
    }
}

解決策 2

プロパティを設定したと仮定すると、 IsMdiContaineForm1 true の場合、コードは次のようになります。

Form2 frm2 = new Form2();
frm2.MdiParent = this;
frm2.Show();

解決策 4

子フォームの FormBorderStyle プロパティを「none」に設定してみてください。

[ad_2]

コメント

タイトルとURLをコピーしました