C# - 确定Active MDI Child的Split容器中的焦点RichTextBox

时间:2018-02-01 03:58:18

标签: c# richtextbox mdichild mdiparent

我有一个Form(Form2),其中包含一个Split Container,RichTextBox位于左侧面板上,WebBroswer位于右侧面板上。

我将表单显示为MDIParent表单的子项1.我想要做的是复制活动MDI子项的选定文本。但是由于RichTextBox位于Split容器中,我无法定位RichTextBox并且它不返回任何内容。

Form activeChild = this.ActiveMdiChild;  

if (activeChild != null)  
{    
    try  
    {  
        RichTextBox theBox = (RichTextBox)activeChild.ActiveControl;  
        if (theBox != null)  
        {  
            // Put the selected text on the Clipboard.  
            Clipboard.SetDataObject(theBox.SelectedText);      
        }
    }  
    catch  
    {  
        MessageBox.Show("Unable to Copy to Clipboard");  
    } 
}  

结果是,消息框显示,这意味着我无法正确定位RTB。如何获取当前活动的RTB?

1 个答案:

答案 0 :(得分:0)

由于从子表单返回的ActiveControlSplitContainer控件,因此我们需要更深入一级并从该容器中获取ActiveControl以便最终获得RichTextBox控件。var childSplitContainer = this.ActiveMdiChild?.ActiveControl is SplitContainer ? (SplitContainer)activeChildForm.ActiveControl : null; var splitContainerRTB = childSplitContainer?.ActiveControl is RichTextBox ? (RichTextBox)childSplitContainer.ActiveControl : null; Clipboard.SetDataObject(splitContainerRTB?.Text ?? string.Empty); 请注意,我们必须检查对象类型,并在此过程中使用null,以防可能选择不同的控件。

以下是获取富文本框文本的一种方法(如果未选中,则为空字符串):

grid-template-rows: max-content;