0

我正在开发一个应用程序来自动化其他应用程序。我希望能够确定“其他”应用程序上的文本框元素是否是只读的。如果是单行文本框,MS UI 自动化框架提供了 ValuePattern,我可以从该模式中获取只读属性,但是当我们有多行文本框时,没有可用的 ValuePattern,我只能访问 TextPattern 和 ScrollPattern。如何使用 MS UI 自动化从多行文本框中获取只读属性?

PS 我试图在互联网上找到一些关于这个的东西,但似乎没有太多关于 MS UI 自动化的信息。

4

2 回答 2

4

TextPattern模式提供了一种检查只读状态范围的方法。检查完整DocumentRange会告诉您整个文本框是否为只读:

TextPattern textPattern = textProvider.GetCurrentPattern(TextPattern.Pattern) as TextPattern;

object roAttribute = textPattern.DocumentRange.GetAttributeValue(TextPattern.IsReadOnlyAttribute);
if (roAttribute != TextPattern.MixedAttributeValue)
{
    bool isReadOnly = (bool)roAttribute;
}
else
{
    // Different subranges have different read only statuses
}
于 2012-07-10T17:35:11.583 回答
0

例如检查是否textBox2是只读的。

检查是否textBox2 为只读的方法:

private bool checkReadOnly(Control Ctrl)
        {
            bool isReadOnly = false;
            if(((TextBox)Ctrl).ReadOnly == true)
            {
                isReadOnly = true;
            }
            else
            {
                isReadOnly = false;
            }
            return isReadOnly;
        }

使用按钮单击事件的方法:

private void button1_Click(object sender, EventArgs e)
        {
            if (checkReadOnly(textBox2) == true)
            {
                MessageBox.Show("textbox is readonly");
            }
            else
            {
                MessageBox.Show("not read only textbox");
            }
        }

textboxes如果只读或不使用相同的方法检查表单上的所有内容:

private void button2_Click(object sender, EventArgs e)
        {
            foreach(Control ct in Controls.OfType<TextBox>())
            {
                if (checkReadOnly(ct) == true)
                {
                    MessageBox.Show(ct.Name + " textbox is readonly");
                }
                else
                {
                    MessageBox.Show(ct.Name + " not read only textbox");
                }
            }
        }
于 2016-05-21T10:54:21.623 回答