0

他のアプリケーションを自動化するアプリケーションを開発しています。「その他」のアプリケーションのテキストボックス要素が読み取り専用かどうかを判断できるようにしたい。1行のテキストボックスの場合、MS UIオートメーションフレームワークはValuePatternを提供し、そのパターンから読み取り専用属性を取得できますが、複数行のテキストボックスがある場合、使用可能なValuePatternはなく、TextPatternとScrollPatternにしかアクセスできません。MS UIオートメーションを使用して複数行のテキストボックスから読み取り専用属性を取得するにはどうすればよいですか?

PS私はインターネットでこれについて何かを見つけようとしましたが、一般的にMSUIオートメーションについてはそれほど多くの情報がないようです。

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 に答える