Доступ к ярлыку на форме с помощью моего пользовательского элемента управления - PullRequest
0 голосов
/ 25 мая 2010

Я создал часть WindowsFormControlLibrary. Он работает нормально, я могу оставить его на форме, вызвать его методы и т. Д ... но теперь, как свойство этого, я передаю ему название ярлыка. и я хочу, чтобы этот пользовательский элемент управления мог использовать это имя метки и, например, изменить его шрифт на жирный. поэтому вопрос заключается в том, что если у меня есть WinForm и у меня есть метка в этой форме и мой пользовательский элемент управления в этой форме, то как я могу сказать своему пользовательскому элементу управления что-то сделать с этой меткой, которой я передаю ее имя? 1001 *

Ответы [ 3 ]

2 голосов
/ 25 мая 2010

Вместо отправки имени метки, отправьте ссылку на фактическую метку, а затем пользовательский элемент управления может как прочитать имя, если это необходимо, так и изменить шрифт метки и другие свойства.

Будьте осторожны, может быстро запутаться, чтобы отслеживать, что происходит, если различные формы и элементы управления изменяют элементы управления в других формах и т. Д.

Редактировать: Добавлен код, чтобы делать то, что вы просите в комментариях

Код не проверен, поэтому он может быть не совсем правильным, но что-то похожее на это должно работать.

foreach (Control c in Parent.Controls) 
{
    if (c is Label) 
    {
        Label l = (Label)c;
        // do stuff to label l
    }        
}
1 голос
/ 25 мая 2010

Во-первых, если вы хотите получить доступ к Control из вашего UserControl, вам нужно будет использовать метод FindForm().

Во-вторых, вам необходимо будет предоставить свой элемент управления TextBox, например, через свойство вашей формы.

Тогда вам нужно знать тип этого Form, возвращаемого этим FindForm() методом.

Как только вы это знаете, вам нужно привести этот результат к правильному типу.

Итак, вот пример непроверенного псевдокода, чтобы дать вам идею:

public partial class MyMainForm {
    private TextBox textBox1;

    public MyMainForm() {
        textBox1 = new Textbox();
        textBox1.Name = @"textBox1";
        textBox1.Location = new Point(10, 10);
        textBox1.Size = new Size(150, 23);
        this.Controls.Add(textBox1);
    }

    public Font MyTextBoxFont {
        get {
            return textBox1.Font;
        } set {
            if (value == null) return;
            textbox1.Font = value;
        }
    }
}

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

public partial class MyUserControl {
    private Form GetContainerForm {
        get {
            return this.FindForm();
        }
    }

    // And later on, where you need to set your TextBox's font:
    private void SetContainerInputFieldFont(Font f) {
        if (GetContainerForm == null) return; // Or throw, depending on what you need to do.

        ((MyMainForm)GetContainerForm).MyTextBoxFont = f
    }
}
0 голосов
/ 25 мая 2010

круто :) Я только что добавил публичное свойство get set типа Label ... оно автоматически перечисляет все метки в форме.

...