[RTC] ControlAddIn TextBox Focus

14. Februar 2020 00:33

Hi,

auf einer Page binde ich ein Control AddIn ein, eine einfache TextBox. Nach Eingabe und drücken von Enter soll der Text übernommen werden.

Wenn ich die Page aus dem Designer heraus öffne. Bekommt die TextBox Focus, ich kann direkt los schreiben.

Wenn ich diese Page aber aus einer anderen Page heraus öffne, kriegt die TextBox keinen Focus und ich muss erst hineinklicken.

Hier mein Control:
Code:
namespace My.CtrlAddIn.TextBox
{
   
    public delegate void TransactionEventHandler(string refNo);

    [ControlAddInExport("My.CtrlAddIn.TextBox")]
    public class MyFieldPopupAddin : StringControlAddInBase,IEventControlAddInDefinition
    {
        private System.Windows.Forms.TextBox _textBox;

        //Exposes an event 
        [ApplicationVisible]
        public event EventHandler ControlAddInReady;

        [ApplicationVisible]
        public event EventHandler TextValueChanged;

        public delegate void MyEventHandler(string refNo);

        [ApplicationVisible]
        public event MyEventHandler TextGeaendert;


        [ApplicationVisible]
        public Color BackgroundColor
        {
            get { return _textBox.BackColor; }
            set { _textBox.BackColor = value; }
        }

        [ApplicationVisible]
        public void SetFocus()
        {
            _textBox.Text = "Bitte Text eingeben ";
            _textBox.Focus();
        }

        [ApplicationVisible]
        public void ChangeText(string textin)
        {
            _textBox.Text = textin;
            _textBox.Focus();
        }

        [ApplicationVisible]
        public string MyText
        {
            get { return _textBox.Text; }
            set { _textBox.Text = value; _textBox.Focus(); _textBox.Select(); }
        }


        /// Defines the text box control. 
        protected override Control CreateControl()
        {
            _textBox = new System.Windows.Forms.TextBox();
            _textBox.BackColor = Color.LightBlue;
            _textBox.Font = new Font("Arial", 9, FontStyle.Bold);
            //_textBox.Text = "Hallo addIn";
            //_textBox.DoubleClick += control_DoubleClick;
            _textBox.BackColor = Color.LightSteelBlue;
            _textBox.Select();
            _textBox.Focus();
            _textBox.AcceptsReturn = true;
            _textBox.PreviewKeyDown += _textBox_PreviewKeyDown;
            _textBox.ParentChanged += OnTextBoxOnParentChanged;
            return _textBox;
        }

        private void OnTextBoxOnParentChanged(object sender, EventArgs e)
        {
           if(ControlAddInReady != null)
            {
                ControlAddInReady(_textBox, null);
                _textBox.Select();
                _textBox.Focus();

            }
            _textBox.Select();
            _textBox.Focus();
        }

        private void _textBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
            {
                TextGeaendert(_textBox.Text);
            }
           
           
        }
        private void OnTextChanged(object sender, EventArgs e)
        {
            TextGeaendert(_textBox.Text);
        }
       
        /// Raises an event when the user double-clicks the text box. 
        private void control_DoubleClick(object sender, EventArgs e)
        {
            int index = 0;
            string data = this.Control.Text;
            this.RaiseControlAddInEvent(index, data);
            TextGeaendert(_textBox.Text);
        }
    }
}


Die Page rufe ich wie folgt auf:
Code:
CASE InputPage.RUNMODAL OF
    ACTION::OK: BEGIN...


Auf der InputPage:
2020-02-13 23_29_56.png


Wo liegt mein Denkfehler? :cry:

Vielen Dank
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.