3


0

プログラムで作成されたテキストボックスにフォーカスを設定する方法は?

ウィンドウが表示されたときに*カーソルが* 2番目のテキストボックス*で点滅するようにするには、次のコードに対して何をする必要がありますか?

  • XAML:*


ビハインドコード:

using System.Windows;
using System.Windows.Controls;

namespace TestFocksdfj
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            StackPanel sp = new StackPanel();

            for (int i = 0; i < 3; i++)
            {
                TextBox tb = new TextBox();
                tb.Width = 200;
                tb.Margin = new Thickness { Bottom = 3 };
                if (i == 1)
                    tb.Focus();
                sp.Children.Add(tb);
            }

            FormArea.Content = sp;
        }
    }
}

3 Answer


4


`FormArea.Content = sp;`を呼び出した後、 `sp.Children [1] .Focus();`を呼び出して、2番目のTextboxにフォーカスを与えることができます。

このような:

public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            StackPanel sp = new StackPanel();

            for (int i = 0; i < 3; i++)
            {

                TextBox tb = new TextBox();
                tb.Width = 200;
                tb.Margin = new Thickness { Bottom = 3 };
                sp.Children.Add(tb);
            }
            FormArea.Content = sp;
            sp.Children[1].Focus();
        }
    }


0


http://apocryph.org/2006/09/10/wtf_is_wrong_with_wpf_focusで解決策を見つけましたが、私の場合はうまくいきますが、そうではありませんこのようなハックなしでWPFでこれを行うより標準的な方法はありますか?*

using System.Windows;
using System.Windows.Controls;
using System.Threading;
using System;
using System.Windows.Input;

namespace TestFocksdfj
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            StackPanel sp = new StackPanel();

            for (int i = 0; i < 3; i++)
            {
                TextBox tb = new TextBox();
                tb.Width = 200;
                tb.Margin = new Thickness { Bottom = 3 };
                if (i == 2)
                {
                    FocusHelper.Focus(tb);
                }
                sp.Children.Add(tb);
            }

            FormArea.Content = sp;
        }
    }

    //thanks to: http://apocryph.org/2006/09/10/wtf_is_wrong_with_wpf_focus/
    static class FocusHelper
    {
        private delegate void MethodInvoker();

        public static void Focus(UIElement element)
        {
            ThreadPool.QueueUserWorkItem(delegate(Object foo)
            {
                UIElement elem = (UIElement)foo;
                elem.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal,
                    (MethodInvoker)delegate()
                    {
                        elem.Focus();
                        Keyboard.Focus(elem);
                    });
            }, element);
        }
    }

}


0


必要なのはtb.focusだけだと思う​​でしょう。 2番目のテキストボックスのtabindexを0に設定してから、tb.focusを試すことができます。 別の代替手段は、このJavaScriptのビットです…​

private void Set_Focus(string controlname)
{
string strScript;

strScript = " document.all('" + controlname + "').focus() ";
RegisterStartupScript("focus", strScript);
}