akosisugar Ответов: 3

C# найдите элемент управления button по имени


Привет!

я пытаюсь создать общедоступный метод, который будет управлять свойствами кнопки внутри формы. Например, когда я вызываю метод;

1. найдите кнопку все внутри формы.
2. найдите кнопку с именем = "btnSave".. (пример)
3. наконец, измените свойства этой конкретной кнопки.

у меня действительно есть несколько форм, некоторые из этих форм содержат кнопку со следующими именами;
btnSave, btnSearch, btnUpdate, btnDelete.

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

Что я уже пробовал:

public static void getButtonImage(Form f)
        {
            try
            {
                foreach (Control item in f.Controls)
                {

                    if (item.Name == "btnsave")
                    {
                        item.BackgroundImage = Image.FromFile(@".\images\saveLogo.png");
                        item.BackgroundImageLayout = ImageLayout.Zoom;
                        item.Text = "";

                    }
                    else if (item.Name == "btnupdate")
                    {
                        item.BackgroundImage = Image.FromFile(@".\images\updateLogo.png");
                        item.BackgroundImageLayout = ImageLayout.Zoom;
                        item.Text = "";

                    }
                    else if (item.Name == "btnsearch")
                    {
                        item.BackgroundImage = Image.FromFile(@".\images\searchLogo.png");
                        item.BackgroundImageLayout = ImageLayout.Zoom;
                        item.Text = "";

                    }
                    else if (item.Name == "btndelete")
                    {
                        item.BackgroundImage = Image.FromFile(@".\images\deleteLogo.png");
                        item.BackgroundImageLayout = ImageLayout.Zoom;
                        item.Text = "";

                    }
                }

                

            }
            catch (Exception)
            {

            }
        }

3 Ответов

Рейтинг:
23

OriginalGriff

Начните вот так:

foreach (Control c in f.Controls)
   {
   Button b = c as Button;
   if (b != null)
      {
      ...
      }
   }
Это устраняет все элементы управления, которые не являются кнопками, и позволяет использовать все свойства кнопок на тех, которые есть.

Сделайте себе одолжение: не "глотайте" исключения.
По крайней мере, запишите их где - нибудь, прежде чем игнорировать, чтобы, если вам нужна информация, вы могли получить к ней доступ-хотя бы в отладке.
...
catch (Exception ex)
   {
   Debug.WriteLine(ex.Message);
   }
Проглатывание исключений означает, что вы даже не знаете, что есть проблема, пока не станет слишком поздно, и это очень, очень трудно исправить их, поскольку вы отбросили информацию, которая могла бы рассказать вам, что произошло!


Maciej Los

5ed!

akosisugar

Привет, сэр! спасибо Вам за идею.. проблема решена!

OriginalGriff

Всегда пожалуйста!

Рейтинг:
2

Maciej Los

Прежде всего...
Обратите внимание, что некоторые элементы управления Windows могут быть стеклотара[^] для других элементов управления. Что это значит для вас? Вы должны создать рекурсивную функцию/метод .

Во-вторых...
Вы можете проверить, что это за контроль...

if(item is Button)
{
    //this is a button!
}


Видеть: это (Справочник по c#) | Майкрософт документы[^]

Удачи вам!


Рейтинг:
1

F-ES Sitecore

Есть два способа сделать это. Если вы действительно хотите просмотреть все элементы управления, вы можете использовать "as", чтобы перевести элемент управления из базового типа "Control" в его более конкретный тип "Button"

if (item.Name == "btnsave")
{
    Button b = item as Button;

    if (b != null)
    {
        b.BackgroundImage = Image.FromFile(@".\images\saveLogo.png");
        b.BackgroundImageLayout = ImageLayout.Zoom;
        b.Text = "";

        // you can now access Button specific functions and properties
        b.PerformClick();
    }

}


"как" будет возвращать null, если приведение не удается, т. е. если пункт не кнопку. Вы также можете использовать "есть", если просто хотите проверить, что это кнопка.

Если вы хотите перебирать только кнопки, а не все элементы управления, то используйте это

foreach (Button item in f.Controls.OfType<Button>())


Теперь "элемент" уже имеет тип кнопки, так что нет необходимости использовать "как"


Maciej Los

5ed!