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

Если грид от Devexpress - то есть.
А по поводу штатного грида и элементов формы - незнаю. Если нет, то проходится по всем контролам - считывать требуемые параметры - сохранять. При открытии тоже савмое только устанавливать сохраненные значения.
ИМХО - такая штука в приложении хорошая штука. НО, если очень много контролов которые раскинуты по "панелям" - будет притормаживать при открытии/закрытии формы.
...
Рейтинг: 0 / 0
06.04.2013, 19:00
    #38215579
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение внешнего вида приложения
Pallaris,
Есть. Сериализация
...
Рейтинг: 0 / 0
06.04.2013, 19:07
    #38215582
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение внешнего вида приложения
Pallaris,
Простой Binding на стандартный setting
...
Рейтинг: 0 / 0
06.04.2013, 20:27
    #38215615
_=ДОБРЫНЯ=_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение внешнего вида приложения
А пример можно как это делать?
...
Рейтинг: 0 / 0
06.04.2013, 20:36
    #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
06.04.2013, 20:37
    #38215625
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение внешнего вида приложения
_=ДОБРЫНЯ=_,
В гугле забанили?
...
Рейтинг: 0 / 0
06.04.2013, 21:18
    #38215640
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение внешнего вида приложения
Cat2Pallaris,
Есть. СериализацияЧто сериализовать-то собрались? Всё дерево контролов?
...
Рейтинг: 0 / 0
06.04.2013, 21:47
    #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
07.04.2013, 10:19
    #38215844
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение внешнего вида приложения
skyANACat2Pallaris,
Есть. СериализацияЧто сериализовать-то собрались? Всё дерево контролов?
Был вопрос. Есть ли штатный механизм. Ответ - есть.
Про то, насколько он удобен - вопроса не было.
Лично я бы хранил знАчимые настройки в специальной таблице личных настроек пользователя
...
Рейтинг: 0 / 0
07.04.2013, 12:55
    #38215995
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение внешнего вида приложения
Cat2skyANAпропущено...
Что сериализовать-то собрались? Всё дерево контролов?
Был вопрос. Есть ли штатный механизм. Ответ - есть.
Про то, насколько он удобен - вопроса не было.Вы пример приведите как его использовать, а мы уж решим, удобен он, или нет.
Cat2Лично я бы хранил знАчимые настройки в специальной таблице личных настроек пользователяМожно и так, если есть необходимость.
...
Рейтинг: 0 / 0
07.04.2013, 13:08
    #38216002
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение внешнего вида приложения
skyANAВы пример приведите как его использовать, а мы уж решим, удобен он, или нет.
В гугле забанили?
Сами ищите примеры. Мне они не нужны. Я просто знаю, что такой способ есть.
...
Рейтинг: 0 / 0
07.04.2013, 13:14
    #38216012
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение внешнего вида приложения
Cat2skyANAВы пример приведите как его использовать, а мы уж решим, удобен он, или нет.
В гугле забанили?
Сами ищите примеры. Мне они не нужны. Я просто знаю, что такой способ есть .Отмазываетесь? Я Вас спрашиваю: способ сериализовать что? Контрол полность, вместе со свойствами, что не отвечают за его внешний вид? Всё дерево контролов, вместе со свойствами, что не отвечают за внешний вид? Отдельно свойства, отвечающие за внешний вид?
...
Рейтинг: 0 / 0
07.04.2013, 13:20
    #38216018
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение внешнего вида приложения
skyANAОтмазываетесь? Я Вас спрашиваю: способ сериализовать что?
Сколько Вы согласны заплатить, что бы я сделал работу за Вас?
...
Рейтинг: 0 / 0
07.04.2013, 13:27
    #38216028
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение внешнего вида приложения
Cat2skyANAОтмазываетесь? Я Вас спрашиваю: способ сериализовать что?
Сколько Вы согласны заплатить, что бы я сделал работу за Вас?Слив засчитан.
Вы утверждаете, что сериализация - это штатный механизм, я Вас спрашиваю, что подать на вход сериализации предлагаете.
О какой работе речь? О написании ручками своего контура по сохранению "размера колонок в дата гриде, размеров сплит-контейнеров" на базе сериализации?

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

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

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

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

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

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

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


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