powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сохранение внешнего вида приложения
20 сообщений из 20, страница 1 из 1
Сохранение внешнего вида приложения
    #38215408
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли какие-то штатные средства для запоминания размера колонок в дата гриде, размеров сплит-контейнеров, или все ручками?
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38215557
Фотография _=ДОБРЫНЯ=_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisЕсть ли какие-то штатные средства для запоминания размера колонок в дата гриде, размеров сплит-контейнеров, или все ручками?

Если грид от Devexpress - то есть.
А по поводу штатного грида и элементов формы - незнаю. Если нет, то проходится по всем контролам - считывать требуемые параметры - сохранять. При открытии тоже савмое только устанавливать сохраненные значения.
ИМХО - такая штука в приложении хорошая штука. НО, если очень много контролов которые раскинуты по "панелям" - будет притормаживать при открытии/закрытии формы.
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38215579
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Pallaris,
Есть. Сериализация
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38215582
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,
Простой Binding на стандартный setting
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38215615
Фотография _=ДОБРЫНЯ=_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А пример можно как это делать?
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38215623
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
_=ДОБРЫНЯ=_А пример можно как это делать?
http://nigma.ru/?s=msdn+cthbfkbpfwbz&t=web&rg=t%3D%D0%9A%D0%BE%D1%81%D1%82%D0%BE%D0%BC%D1%83%D0%BA%D1%88%D0%B0_c%3D%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F_&rg_view=%D0%9A%D0%BE%D1%81%D1%82%D0%BE%D0%BC%D1%83%D0%BA%D1%88%D0%B5&yn=1&gl=1&rm=1&ms=1&yh=1&av=1&nm=1&lang=all&srt=0&sf=1
]В гугле забанили?

http://code-inside.net/serialization/
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38215625
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
_=ДОБРЫНЯ=_,
В гугле забанили?
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38215640
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Pallaris,
Есть. СериализацияЧто сериализовать-то собрались? Всё дерево контролов?
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38215660
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisЕсть ли какие-то штатные средства для запоминания размера колонок в дата гриде, размеров сплит-контейнеров, или все ручками?Я в своё время (ещё .Net Framework 1.1) использовал следующую реализацию:
Код: 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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
public interface IPersistControl
{
    void LoadControlSettings(PersistControlSettings settings);
    void SaveControlSettings(PersistControlSettings settings);
}

public class PersistControlSettings : IDisposable
{
    public PersistControlSettings(string name) { /* ... */  }

    public PersistControlSettings(string name, PersistControlSettings parent) { /* ... */ }

    public void Dispose() { /* ... */ }

    public PersistControlSettings Child(string name)
    {
        if (name == string.Empty)
        {
            return this;
        }

        return new PersistControlSettings(name, this);
    }

    public object GetValue(string name, object defaultValue) { /* ... */ }

    public void LoadChildStates(Control.ControlCollection children)
    {
        foreach (Control control in children)
        {
            LoadControlState(control);
        }
    }

    private void LoadControlState(Control c)
    {
        IPersistControl pc = c as IPersistControl;

        if (pc != null)
        {
            pc.LoadControlSettings(Child(c.Name));
            return;
        }

        CheckBox cb = c as CheckBox;

        if (cb != null)
        {
            cb.Checked = Convert.ToBoolean(GetValue(String.Format("{0}.Checked", cb.Name), cb.Checked));
            return;
        }

        DataGrid dg = c as DataGrid;

        if (dg != null)
        {
            PersistControlSettings settings = Child(dg.Name);

            foreach (DataGridTableStyle ts in dg.TableStyles)
            {
                DataGridColumnStyle[] columns = new DataGridColumnStyle[ ts.GridColumnStyles.Count ];

                for (int index = 0; index < ts.GridColumnStyles.Count; index++)
                {
                    DataGridColumnStyle cs = ts.GridColumnStyles[ index ];
                    PersistControlSettings child = settings.Child(cs.MappingName);

                    if (cs is Forms.IColumnStyle)
                    {
                        ((Forms.IColumnStyle)cs).AutoFitWidth = Convert.ToBoolean(child.GetValue("AutoFitWidth", ((Forms.IColumnStyle)cs).AutoFitWidth));
                    }

                    cs.Width = Convert.ToInt32(child.GetValue("Width", cs.Width));

                    int i = Convert.ToInt32(child.GetValue("Index", index));

                    if (i < columns.Length && columns[ i ] == null)
                    {
                        columns[ i ] = cs;
                    }
                    else if (null == columns[ index ])
                    {
                        columns[ index ] = cs;
                    }
                }

                ts.GridColumnStyles.Clear();
                ts.GridColumnStyles.AddRange(columns);
            }

            return;
        }

        DateTimePicker dt = c as DateTimePicker;

        if (dt != null)
        {
            bool isChecked = Convert.ToBoolean(GetValue(String.Format("{0}.Checked", dt.Name), dt.Checked));

            if (isChecked)
            {
                dt.Value = Convert.ToDateTime(GetValue(String.Format("{0}.Value", dt.Name), dt.Value));
                dt.Checked = isChecked;
            }

            return;
        }

        Splitter sp = c as Splitter;

        if (sp != null)
        {
            sp.SplitPosition = Convert.ToInt32(GetValue(String.Format("{0}.SplitPosition", sp.Name), sp.SplitPosition));
            return;
        }

        TextBox tb = c as TextBox;

        if (tb != null && tb.Text == string.Empty && tb.PasswordChar == 0 && !tb.ReadOnly)
        {
            tb.Text = Convert.ToString(GetValue(String.Format("{0}.Text", tb.Name), tb.Text));
            return;
        }

        if (c is ScrollableControl || c is TabControl || c is ToolBar || c is GroupBox)
        {
            Child(c.Name).LoadChildStates(c.Controls);
            return;
        }
    }

    public void SaveChildStates(Control.ControlCollection children)
    {
        foreach (Control control in children)
        {
            SaveControlState(control);
        }
    }

    private void SaveControlState(Control control)
    {
        IPersistControl pc = control as IPersistControl;

        if (pc != null)
        {
            pc.SaveControlSettings(Child(control.Name));
            return;
        }

        CheckBox cb = control as CheckBox;

        if (cb != null)
        {
            SetValue(String.Format("{0}.Checked", cb.Name), cb.Checked);
            return;
        }

        DataGrid dg = control as DataGrid;

        if (dg != null)
        {
            PersistControlSettings settings = Child(dg.Name);

            foreach (DataGridTableStyle ts in dg.TableStyles)
            {
                for (int index = 0; index < ts.GridColumnStyles.Count; index++)
                {
                    DataGridColumnStyle cs = ts.GridColumnStyles[ index ];
                    PersistControlSettings child = settings.Child(cs.MappingName);

                    if (cs is Forms.IColumnStyle)
                    {
                        child.SetValue("AutoFitWidth", ((Forms.IColumnStyle)cs).AutoFitWidth);
                    }

                    child.SetValue("Index", index);
                    child.SetValue("Width", cs.Width);
                }
            }

            return;
        }

        DateTimePicker dt = control as DateTimePicker;

        if (dt != null)
        {
            SetValue(String.Format("{0}.Checked", dt.Name), dt.Checked);
            SetValue(String.Format("{0}.Value", dt.Name), dt.Value);
            return;
        }

        Splitter sp = control as Splitter;
        if (sp != null)
        {
            SetValue(String.Format("{0}.SplitPosition", sp.Name), sp.SplitPosition);
            return;
        }

        TextBox tb = control as TextBox;

        if (tb != null && tb.PasswordChar == 0)
        {
            SetValue(String.Format("{0}.Text", tb.Name), tb.Text);
            return;
        }

        if (control is ScrollableControl || control is TabControl || control is ToolBar || control is GroupBox)
        {
            Child(control.Name).SaveChildStates(control.Controls);
            return;
        }
    }

    public void SetValue(string name, object value) { /* ... */ }
}
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38215844
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
skyANACat2Pallaris,
Есть. СериализацияЧто сериализовать-то собрались? Всё дерево контролов?
Был вопрос. Есть ли штатный механизм. Ответ - есть.
Про то, насколько он удобен - вопроса не было.
Лично я бы хранил знАчимые настройки в специальной таблице личных настроек пользователя
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38215995
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2skyANAпропущено...
Что сериализовать-то собрались? Всё дерево контролов?
Был вопрос. Есть ли штатный механизм. Ответ - есть.
Про то, насколько он удобен - вопроса не было.Вы пример приведите как его использовать, а мы уж решим, удобен он, или нет.
Cat2Лично я бы хранил знАчимые настройки в специальной таблице личных настроек пользователяМожно и так, если есть необходимость.
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38216002
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
skyANAВы пример приведите как его использовать, а мы уж решим, удобен он, или нет.
В гугле забанили?
Сами ищите примеры. Мне они не нужны. Я просто знаю, что такой способ есть.
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38216012
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2skyANAВы пример приведите как его использовать, а мы уж решим, удобен он, или нет.
В гугле забанили?
Сами ищите примеры. Мне они не нужны. Я просто знаю, что такой способ есть .Отмазываетесь? Я Вас спрашиваю: способ сериализовать что? Контрол полность, вместе со свойствами, что не отвечают за его внешний вид? Всё дерево контролов, вместе со свойствами, что не отвечают за внешний вид? Отдельно свойства, отвечающие за внешний вид?
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38216018
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
skyANAОтмазываетесь? Я Вас спрашиваю: способ сериализовать что?
Сколько Вы согласны заплатить, что бы я сделал работу за Вас?
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38216028
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2skyANAОтмазываетесь? Я Вас спрашиваю: способ сериализовать что?
Сколько Вы согласны заплатить, что бы я сделал работу за Вас?Слив засчитан.
Вы утверждаете, что сериализация - это штатный механизм, я Вас спрашиваю, что подать на вход сериализации предлагаете.
О какой работе речь? О написании ручками своего контура по сохранению "размера колонок в дата гриде, размеров сплит-контейнеров" на базе сериализации?

Ну по такой логике ADO.NET не менее штатный механизм для поставленной задачи.
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38216030
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВы утверждаете, что сериализация - это штатный механизм штатное средство для запоминания размера колонок в дата гриде, размеров сплит-контейнеров
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38216035
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
skyANAСлив засчитан.
Первая доза - бесплатно!

http://msdn.microsoft.com/en-us/library/ms973893.aspx

Еще раз, сколько Вы согласны заплатить за поиск дальнейший поиск примеров?
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38216045
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2skyANAСлив засчитан.
Первая доза - бесплатно!

http://msdn.microsoft.com/en-us/library/ms973893.aspx

Еще раз, сколько Вы согласны заплатить за поиск дальнейший поиск примеров?Не валяйте дурака, я Вас не спрашиваю, что такое сериализация. Я Вас спрашиваю, что Вы предлагаете сериализовать для запоминания размера колонок в дата гриде, размеров сплит-контейнеров?
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38216050
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиPallaris,
Простой Binding на стандартный setting+1

Вот помнил же я, что в WinForms после версии .Net 1.1 появился аналог моего PersistControlSettings.
Вот он штатный механизм: " Параметры приложения для Windows Forms ".
А вот он аналог: IPersistComponentSettings - интерфейс .
...
Рейтинг: 0 / 0
Сохранение внешнего вида приложения
    #38216106
Фотография _=ДОБРЫНЯ=_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2_=ДОБРЫНЯ=_,
В гугле забанили?
Надо проверить аккаунт, вдруг реально забанили за неуплату. ))

а если серьезно - на форумах пишут что штатный грид нельзя сериализовать. к тому же если делатьсериализацию формы с контролами - то полюбэ нужно пройтись по всем контролам. или не надо?
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сохранение внешнего вида приложения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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