ibrahim maher Ответов: 1

Как изменить свойство text или caption Для всех объектов в форме во время выполнения


У меня есть такая форма , как счет-фактура от и другие формы в моем приложении , и у меня есть много элементов управления в форме , таких как текстовое поле, метка, таблица, древовидное представление и другие

Я хочу сделать класс для чтения объекта по объекту из этой формы, чтобы изменить свойство text или свойство caption с помощью таблицы данных сохранил заголовок в нем .. его будет полезно взять пользователю изменить заголовок элемента управления самостоятельно

Примечание : некоторые элементы управления включают объект, такой как Navbar control или table control, имеют столбцы или узлы, и я хочу изменить заголовок столбца и узла с помощью кода

спасибо тебе

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

            forms.frmMain_most f = new frmMain_most();
            Type ftype = f.GetType();          
            foreach (var pro in ftype.GetRuntimeFields())
            {
                MessageBox.Show(pro.Name);
                object xx=null;
                string  xxx= pro.GetType().GetProperty("Name").GetValue(xx).ToString();
}

BillWoodruff

Это WinForms, ASP или WPF ?

Хотите ли вы искать/изменять рекурсивно: то есть получать доступ к элементам управления внутри других элементов управления.

"с помощью таблицы данных сохранена подпись в ней" ... пожалуйста, дайте более конкретную информацию о том, что это означает. кто/что создает DataTable, когда он создается, как он используется после его создания ?

ibrahim maher

спасибо тебе

* мое приложение-это приложение Windows

* У меня есть таблица данных, в которой сохраняются все подписи приложений, выделенные приложением, а также формы и элементы управления, такие как :
-Код бухгалтерской заявки=1, а подпись - "счет"
-Код основной формы= 11 , подпись "форма основного счета" и имя элемента управления ="frmMainAccount"
-сохранить кнопку в из код=111 надпись "сохранить Транс asction" и Имяэлементауправления ="кому btnsave" и так далее

Я хочу сделать класс для чтения из объекта на форме и изменить свойство text или caption Для указанного объекта зависимость от имени элемента управления в соответствии с таблицей данных

Узел : контроль в форме у объекта Чили как элемент управления DataGrid столбцы

с уважением

BillWoodruff

"приложение Windows:" UWP, WinForms, ASP или WPF ?

Кто/что создало DataTable ? - А ты ?

Как это происходит, что подписи во время выполнения отличаются от того, что находится в DataTable, и должны быть изменены ?

Как вы сопоставляете кодовый номер с элементом управления ?

Вам нужно быть более конкретным.

ibrahim maher

спасибо тебе

1 - winforms

2 - у меня есть база данных SQLServer с именем Application_Caption уже существует включает в себя таблицу с именем chartofcaption включить данные для всех элементов управления в формах приложений, как это :

MainCode parentcode ControlNameToUser ControlNameInForm
1 NULL финансовое приложение NULL
11 1 Счет-фактура NULL
111 11 классов нуль
1111 111 основная форма frmMain
11111 1111 кодовая форма navAppCode
11112 1111 основные данные navBasicDataContract
11113 1111 настройка приложения navRepareDeduction



и я хочу обработать свойство text для всех элементов управления в форме, чтобы иметь возможность обновить его по предыдущей таблице данных

с уважением

1 Ответов

Рейтинг:
1

BillWoodruff

public static class ControlExtensions
{
    public static IEnumerable<Control> GetAllControls(this FormCollection frms)
    {
        // use of 'Cast required because 'FormCollection is not IEnumerable
        return frms.Cast<Form>()
            .SelectMany(frm => frm.GetAllControls());
    }
    
    public static IEnumerable<Control> GetAllControls(this Control aControl)
    {
        Stack<Control> stack = new Stack<Control>();
    
        stack.Push(aControl);
    
        while (stack.Any())
        {
            var nextControl = stack.Pop();
    
            foreach (Control childControl in nextControl.Controls)
            {
                stack.Push(childControl);
            }
    
            yield return nextControl;
        }
    }
}
Используйте примеры:
// get all Controls on the current Form
var allControlsOnForm = this.GetAllControls().ToList();

// get all Controls on all open Forms
var allControlsOnAllOpenForms = Application.OpenForms.GetAllControls().ToList();
Предполагая,:

1. Все имена уникальны
2. все ненулевые 'ControlNameInForm, такие как 'navBasicDataContract, относятся к элементам управления, а не к экземплярам класса
3. некоторые элементы управления могут находиться "внутри" коллекции ControlCollection других элементов управления (вложенных)
4. каждая запись вашей БД описывает элемент управления/форму, которая в данный момент активна (интанцирована) во время выполнения
5. там может быть больше, чем одна открытая форма.

6. Вы написали код для чтения записей БД и анализа полей записи.

7. и у вас есть код, который создает словарь, например:

Словарь<string,string> ControlNameToCaption, где ключом является ControlNameInForm, а значением-заголовок/текст.

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

9. для достижения #8 мы пишем рекурсивный метод для поиска всех форм и всех элементов управления.

Но прежде чем я покажу вам, как писать и использовать такой метод, позвольте мне услышать от вас, если то, что я описал здесь, кажется "подходящим" для ваших целей: я пропустил что-нибудь важное ?


ibrahim maher

спасибо за ваши усилия
и я жду, чтобы показать мне метод

BillWoodruff

Привет Ибрагим, пожалуйста, помните, что я не экстрасенс :) и, пожалуйста, ответьте на это:

"позвольте мне услышать от вас, если то, что я описал здесь, кажется, "соответствует" вашим целям: я пропустил что-нибудь важное ?"

Если какое-то из моих предположений неверно, то это важно знать.

Я задаю подробные вопросы, чтобы не тратить впустую ваше и мое время.

ibrahim maher

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

примечание : Я являюсь разработчиком Visual basic 6 с базой данных SQLServer с 1998 года

с уважением

BillWoodruff

Добавлены примеры кода.