заблокировать ввод пользователя в элемент управления - PullRequest
1 голос
/ 05 апреля 2011

хорошо, это ответ на вопрос, который я задал вчера, но я чувствовал, что заслужил свой пост. я сделал этот контроль:

public partial class LinkLabelTextBoxPlayerName : UserControl
{
    public LinkLabelTextBoxPlayerName()
    {
        InitializeComponent();
        this.textBox.Hide();
    }

    private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
        this.linkLabel.Hide();

        this.textBox.Show();
        this.textBox.Focus();
        this.textBox.KeyPress += new KeyPressEventHandler(textBoxPlayerName_KeyPress);
        this.textBox.LostFocus += new EventHandler(textBoxPlayerName_LostFocus);
    }

    private void textBoxPlayerName_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.Enter && !(String.IsNullOrEmpty(this.textBox.Text)))
        {
            this.linkLabel.Text = this.textBox.Text;
            this.textBox.Hide();
            this.linkLabel.Show();
        }
    }

    private void textBoxPlayerName_LostFocus(object sender, EventArgs e)
    {
        if (!(String.IsNullOrEmpty(this.textBox.Text)))
        {
            this.linkLabel.Text = this.textBox.Text;
            this.textBox.Hide();
            this.linkLabel.Show();
        }
        else
        {
            this.textBox.Focus();
        }
    }
}

это LinkLabel ==> элемент управления Textbox, и он работает около 95%, вот проблема, когда пользовательский ввод щелкает ссылку и превращает ее в текстовое поле, я хочу, чтобы он "блокировал" ввод пользователя только текстовое поле, в противном случае вы можете продолжать нажимать на ярлыки ссылок, активируя другие текстовые поля. Мне просто интересно, если есть способ отключить пользовательский ввод, когда текстовое поле активно. Спасибо за любую помощь.

я изменил часть метода с

{    
    this.textbox.Focus();
}

до

{     
     this.textBox.Hide();
     this.linkLabel.Text = "<click to add player>"; //my orginal link label text;
     this.linkLabel.Show();
}

так что, похоже, это работает.

Ответы [ 3 ]

1 голос
/ 05 апреля 2011

Я бы установил для свойства CausesValidation значение true для поля, в которое вы хотите заблокировать пользователя.

Затем в обработчике событий Validating я бы использовал:

private void control_Validating(object sender, CancelEventArgs e)
{
    if( ! allowUserToLeaveControl )
      e.Cancel = true;
}

Надеюсь, это работает для вас!

/ A

1 голос
/ 05 апреля 2011

Вы можете попробовать добавить статическую переменную «Кто имеет фокус», а когда вы дадите фокус одной, вы возьмете старую статическую переменную и заставите ее показать метку.

, например

private static LinkLabelTextBoxPlayerName _curSelected;
...
if(_curSelected != null)
{
    _curSelected.Blur();
}

_curSelected = this;

Это предполагает, что вы хотите, чтобы только одно текстовое поле открывалось за раз, и это не то, что работает.

0 голосов
/ 05 апреля 2011

прошу прощения, я спросил это, я должен был просто потратить немного больше времени, вот код, который отлично работает,

public partial class LinkLabelTextBoxPlayerName : UserControl
{
    public LinkLabelTextBoxPlayerName()
    {
        InitializeComponent();
        this.textBox.Hide();
    }

    private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
        this.linkLabel.Hide();

        this.textBox.Show();
        this.textBox.Focus();
        this.textBox.KeyPress += new KeyPressEventHandler(textBoxPlayerName_KeyPress);
        this.textBox.LostFocus += new EventHandler(textBoxPlayerName_LostFocus);
    }

    private void textBoxPlayerName_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.Enter && String.IsNullOrEmpty(this.textBox.Text.Trim()))
        {
            this.textBox.Hide();
            this.linkLabel.Text = "<click to add player>"; //orignal text;
            this.linkLabel.Show();
        }
        else if (e.KeyChar == (char)Keys.Enter)
        {
            this.textBox.Hide();
            this.linkLabel.Text = this.textBox.Text;
            this.linkLabel.Show();
        }
    }

    private void textBoxPlayerName_LostFocus(object sender, EventArgs e)
    {
        if (!(String.IsNullOrEmpty(this.textBox.Text.Trim())))
        {
            this.textBox.Hide();
            this.linkLabel.Text = this.textBox.Text;
            this.linkLabel.Show();
        }
        else
        {
            this.textBox.Hide();
            this.linkLabel.Text = "<click to add player>"; //orginal text;
            this.linkLabel.Show();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...