powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Добавить параметр Tab в List.
17 сообщений из 17, страница 1 из 1
Добавить параметр Tab в List.
    #39841445
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я програмно создаю и удаляю табы в таб контрол.
Одновременно с созданием таба я заношу параметры таба в список табов, чтоб при новом запуске создать форму с табами которые я запомнил и занес в файл.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
 private void addTabToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (tabControlMain.SelectedTab.Tag == null)
                return;

            string tab = tabControlMain.SelectedTab.Tag.ToString();
            int idx = tabControlMain.SelectedIndex;
            string str = "";

            TabParams tab_param = new TabParams();

            if (tab == "11")
            { 
                param_tabs_count++;
                str = "PARAMETERS" + param_tabs_count.ToString();

                tab_param.Type = TAB_TYPE_PARAMS;
                tab_param.Index = param_tabs_count;
                tab_param.Tag = idx + param_tabs_count;

                AddParamTab(tabControlMain, str, idx + param_tabs_count);
            }
            else if (tab == "12")
            {
                script_tabs_count++;
                str = "SCRIPT" + script_tabs_count.ToString();

                tab_param.Type = TAB_TYPE_SCRIPT;
                tab_param.Index = script_tabs_count;
                tab_param.Tag = idx + script_tabs_count;

                AddScriptTab(tabControlMain, str, idx + script_tabs_count);
            }

            tab_param.Name = str;

            tabs.Add(tab_param);
        }


Каждый таб это UserControl с набором контролов и методов. И там есть кнопка загрузки файла и при загрузке файла я хочу запомнить этот файл в листе tabs.
Для этого я передаю в UserControl ссылку на tabs
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public partial class UserControlParams : UserControl
{
        public UserControlParams(SerialPort ser_port, ref List<TabParams> tab_list)
        {
            InitializeComponent();
            serial_port = ser_port;
            tablist = tab_list;
        }

      ///////////////////////////////////////////
}


И при открытии файла хочу занести имя файла в tabs
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
private void buttonParamsLoad_Click(object sender, EventArgs e)
        {
            string file_path;

            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "XML Files (.xml)|*.xml";
            DialogResult result = ofd.ShowDialog();

            if (result == DialogResult.OK)
            {
                file_path = ofd.FileName;
                //textBoxFileName.Text = ofd.FileName;

                parameters = LoadParametersFromFile(file_path);
                LoadParametersToGrid(parameters);

                foreach (TabParams tab in tablist)
                {
                    if (tab.Tag.ToString() == this.Tag.ToString())
                        tab.File = file_path;
                }
            }
        }



Но this.Tag почему то null и я вываливаюсь в исключение.
Как можно апдейтировать лист из UserControl?
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39841451
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему this.Tag не должно быть пустым?
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39841464
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Супер_Пава почему this.Tag не должно быть пустым?
потому что таб создан, это ведь истанс UserControl. как я понимаю buttonParamsLoad_Click это не статический метод, он в каждом инстансе свой.
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39841468
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
this - это внутри UserControlParams? В какой момент у Вас Tag проставляется?
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39841474
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Супер_Павthis - это внутри UserControlParams? В какой момент у Вас Tag проставляется?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
private void AddParamTab(TabControl tab_contr, string tab_name, int idx)
        {
            TabPage tab_page = new TabPage();
            UserControlParams user_contr = new UserControlParams(serial_port, ref tabs);
            tab_contr.TabPages.Insert(idx, tab_page);
            tab_page.Text = tab_name;
            tab_page.Tag = "param";
            user_contr.Dock = DockStyle.Fill;
            tab_page.Controls.Add(user_contr);
        }


таб создан. Tag его инициализирован. теперь я в этом табе вызываю buttonParamsLoad_Click.
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39841540
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
заметил ошибку - я инициализирую Tag таба, а надо инициализировать Tag юзер контрола.
добавил в AddParamTab
Код: c#
1.
 user_contr.Tag = idx.ToString();



но он все равно null.
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39841822
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Я програмно создаю и удаляю табы в таб контрол.
Одновременно с созданием таба я заношу параметры таба в список табов, чтоб при новом запуске создать форму с табами которые я запомнил и занес в файл.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
 private void addTabToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (tabControlMain.SelectedTab.Tag == null)
                return;

            string tab = tabControlMain.SelectedTab.Tag.ToString();
            int idx = tabControlMain.SelectedIndex;
            string str = "";

            TabParams tab_param = new TabParams();

            if (tab == "11")
            { 
                param_tabs_count++;
                str = "PARAMETERS" + param_tabs_count.ToString();

                tab_param.Type = TAB_TYPE_PARAMS;
                tab_param.Index = param_tabs_count;
                tab_param.Tag = idx + param_tabs_count;

                AddParamTab(tabControlMain, str, idx + param_tabs_count);
            }
            else if (tab == "12")
            {
                script_tabs_count++;
                str = "SCRIPT" + script_tabs_count.ToString();

                tab_param.Type = TAB_TYPE_SCRIPT;
                tab_param.Index = script_tabs_count;
                tab_param.Tag = idx + script_tabs_count;

                AddScriptTab(tabControlMain, str, idx + script_tabs_count);
            }

            tab_param.Name = str;

            tabs.Add(tab_param);
        }



Каждый таб это UserControl с набором контролов и методов. И там есть кнопка загрузки файла и при загрузке файла я хочу запомнить этот файл в листе tabs.
Для этого я передаю в UserControl ссылку на tabs
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public partial class UserControlParams : UserControl
{
        public UserControlParams(SerialPort ser_port, ref List<TabParams> tab_list)
        {
            InitializeComponent();
            serial_port = ser_port;
            tablist = tab_list;
        }

      ///////////////////////////////////////////
}



И при открытии файла хочу занести имя файла в tabs
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
private void buttonParamsLoad_Click(object sender, EventArgs e)
        {
            string file_path;

            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "XML Files (.xml)|*.xml";
            DialogResult result = ofd.ShowDialog();

            if (result == DialogResult.OK)
            {
                file_path = ofd.FileName;
                //textBoxFileName.Text = ofd.FileName;

                parameters = LoadParametersFromFile(file_path);
                LoadParametersToGrid(parameters);

                foreach (TabParams tab in tablist)
                {
                    if (tab.Tag.ToString() == this.Tag.ToString())
                        tab.File = file_path;
                }
            }
        }




Но this.Tag почему то null и я вываливаюсь в исключение.
Как можно апдейтировать лист из UserControl?

Код очень сложный для чтения, почему не используете соглашения об наименованиях Microsoft C#, религия не позволяет?
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39842328
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pationКод очень сложный для чтения, почему не используете соглашения об наименованиях Microsoft C#, религия не позволяет?
я думал я ко всему готов, ничем меня не шокируешь. как я ошибался.
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39842906
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что конкретно делаешь?
В свое время я чего только с этими табами ни делал. Привязывал набор вкладок к DataTable, к коллекции объектов, сохранял это и в базе данных и в настройках приложения. Т.е. содержимое набора вкладок редактировалось в XML. Напиши что конкретно пытаешься сделать, может быть помогу.
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39842954
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WorobjoffЧто конкретно делаешь?
В свое время я чего только с этими табами ни делал. Привязывал набор вкладок к DataTable, к коллекции объектов, сохранял это и в базе данных и в настройках приложения. Т.е. содержимое набора вкладок редактировалось в XML. Напиши что конкретно пытаешься сделать, может быть помогу.
хочу открыть несколько табов, в табах открыть файл, который заполнит датагрид или ричтекстбокс в зависимости какой тип таба открыт. и потом хочу запомнить настройки в файле чтоб при поднятии програмы табы добавились и заполнили контролы автоматически.
единственно что не могу осилить - запомнить путь к файлу в уже созданном инстансе параметров таба.
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39842958
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7WorobjoffЧто конкретно делаешь?
В свое время я чего только с этими табами ни делал. Привязывал набор вкладок к DataTable, к коллекции объектов, сохранял это и в базе данных и в настройках приложения. Т.е. содержимое набора вкладок редактировалось в XML. Напиши что конкретно пытаешься сделать, может быть помогу.
хочу открыть несколько табов, в табах открыть файл, который заполнит датагрид или ричтекстбокс в зависимости какой тип таба открыт. и потом хочу запомнить настройки в файле чтоб при поднятии програмы табы добавились и заполнили контролы автоматически.
единственно что не могу осилить - запомнить путь к файлу в уже созданном инстансе параметров таба.
Тут несколько способов есть.
Два основных:
1. Структура данных-описание табов находится "снаружи" табов.
2. Эта структура находится "внутри", т.е. описатель каждого таба хранится в свойстве Tag.

Ты пытаешься сделать частный случай 2. Т.е. строку хочешь сохранить в свойстве Tag. Практика с самого начала ограниченная. Создай класс, добавь в него все нужные тебе свойства и храни его экземпляр в Таге.

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

Умеешь сериализовать классы в XML?
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39842971
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Worobjoffjenya7пропущено...

хочу открыть несколько табов, в табах открыть файл, который заполнит датагрид или ричтекстбокс в зависимости какой тип таба открыт. и потом хочу запомнить настройки в файле чтоб при поднятии програмы табы добавились и заполнили контролы автоматически.
единственно что не могу осилить - запомнить путь к файлу в уже созданном инстансе параметров таба.
Тут несколько способов есть.
Два основных:
1. Структура данных-описание табов находится "снаружи" табов.
2. Эта структура находится "внутри", т.е. описатель каждого таба хранится в свойстве Tag.

Ты пытаешься сделать частный случай 2. Т.е. строку хочешь сохранить в свойстве Tag. Практика с самого начала ограниченная. Создай класс, добавь в него все нужные тебе свойства и храни его экземпляр в Таге.

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

Умеешь сериализовать классы в XML?
я создал класс содержащий информацию о табе
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class TabParams
    {
        public string Name { get; set; }
        public int Tag { get; set; }
        public int Index { get; set; }
        public int Type { get; set; }
        public string File { get; set; }
    }

//где то снаружи
public List<TabParams> tabs = new List<TabParams>();


при добавлении таба добавляю новый айтем в лист
Код: c#
1.
2.
3.
4.
5.
TabParams tab_param = new TabParams();

//бла бла бла

tabs.Add(tab_param);


айтем создан но свойство File его пустое - я еще не зашел в таб и не открыл файл.
теперь я захожу в новый созданный таб - открываю файл - и в этот момент я хочу сохранить путь к файлу в свойстве File - того айтема который я создал при создании таба. то есть как то надо привязать тот инстанс TabParams tab_param к вновь созданному табу.
А лист tabs - я сохраняю в XML файле. И при поднятии програмы - открываю XML файл парсирую его и на основе данных популяризирую табы.
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39842987
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Куда складываешь экземпляры TabParams?
В каком поле это все хранишь?
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39842997
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должно быть примерно так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
[XmlRoot("Settings")]
public class MySettings
{
    [XmlArrayItem("Tab")]
    public List<TabInfo> Tabs { get; } = new List<TabInfo>();
}

public class TabInfo
{
    public string Name { get; set; }
    public int Index { get; set; }
    public string File { get; set; }
}

public partial class frmMain : Form
    {
        private MySettings _Settings;
        private void LoadSettings() { }
        private void SaveSettings() { }
        //По нажатию кнопки на форме, добавляешь вкладку в контрол здесь
        private void AddTab(TabInfo tabInfo) { }
// ...
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39843017
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WorobjoffДолжно быть примерно так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
[XmlRoot("Settings")]
public class MySettings
{
    [XmlArrayItem("Tab")]
    public List<TabInfo> Tabs { get; } = new List<TabInfo>();
}

public class TabInfo
{
    public string Name { get; set; }
    public int Index { get; set; }
    public string File { get; set; }
}

public partial class frmMain : Form
    {
        private MySettings _Settings;
        private void LoadSettings() { }
        private void SaveSettings() { }
        //По нажатию кнопки на форме, добавляешь вкладку в контрол здесь
        private void AddTab(TabInfo tabInfo) { }
// ...


но связывание данных не произойдет автоматически. как привязать TabInfo-File к ивенту открытия файла?
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39843026
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7но связывание данных не произойдет автоматически. как привязать TabInfo-File к ивенту открытия файла?
Конечно не произойдет. Чтобы написать привязку к коллекции объектов надо серьезно потрудиться.

Сделай вариант попроще.

По LoadSettings грузишь весь XML
По SaveSettings сохраняешь его.
Вызываешь SaveSettings после каждого изменения состава вкладок.
В AddTab пишешь код который добавит вкладку (TabPage в TabControl).

В LoadSettings, после того как Settings.Tabs загружены из XML, сначала очищаешь набор вкладок, а потом вызываешь AddTab для каждого TabInfo в коллекции.
Пользователь добавляет новый файл - создаешь объект TabInfo с заполненными полями, передаешь его в AddTab - вкладка появляется.

К TabInfo можно добавить ссылку на саму вкладку, пометив её атрибутом что не надо сохранять в XML.
Как-то так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public class TabInfo
{
    public string Name { get; set; }
    public int Index { get; set; }
    public string File { get; set; }
    [XmlIgnore]
    public TabPage TabPage { get; set; }
}
...
Рейтинг: 0 / 0
Добавить параметр Tab в List.
    #39843034
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Worobjoff,
спасибо. попробую.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Добавить параметр Tab в List.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]