如何查找TextBox是否为readonly

时间:2012-07-10 17:21:51

标签: c# .net microsoft-ui-automation

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

P.S。我曾尝试在互联网上找到一些相关内容,但似乎没有太多关于MS UI Automation的信息。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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");
                }
            }
        }