Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668

Создание таблицы-контейнера из определенной области формы

24.09.2012, 23:06. Показов 4969. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу компонент который может держать в себе другие и в runtime режиме может менять размеры контейнеров.

Так вот.Как сделать определенную область контейнером?
Я так понимаю мне нужно держать определенное количество контейнеров.

Добавлено через 2 часа 9 минут
И как реализовать реагирование на Drag&Drop?
Что-бы компонент добавлялся при Drope(мы ведь не знаем начался ли драг)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2012, 23:06
Ответы с готовыми решениями:

Вывод определенной области формы на печать
Здравствуйте, есть проблема. Создана в Access2003 база даных регистрации кореспонденции: таблица и форма. Требуется вывод на печать через...

Создание скриншота определенной области экрана
Добрый день. Стоит передо мной задача делать скриншоты определенной части экрана и последующая обработка их через OpenCV. Пытался...

Выбор области таблицы из формы
Подскажите, пожалуйста , существует ли библиотечный объект (Сontrol) для выбора области таблицы из формы, такой как в Excel для выбора...

43
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
03.10.2012, 00:00  [ТС]
Студворк — интернет-сервис помощи студентам
Блин,не могу разобраться что переопределить для того что бы пересчитывалось значение сплитов.
Переопределил Dock,SizeChanged,писал метод на расчет и перерисовку и там и там..ничего

Еще нашел событие OnControlAdded,очевидно с ним придется работать при добавлении из дизайнера,но как вызвать его при добавлении контрола хз..

Добавлено через 1 минуту
Или может мне из формы посылать сообщение,мол "ей,редиска, перерисовка-опа! "..

Добавлено через 28 минут
Такс..уже дошел до 5 событий..
Переопределил,но они не вызываются при работе компонента на форме...
resize,Dock,SizeChanged...ничего..

наверное надо как-то подписаться на события формы..
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
03.10.2012, 04:57
Цитата Сообщение от Noob.net Посмотреть сообщение
Или может мне из формы посылать сообщение,мол "ей,редиска, перерисовка-опа! "..
Перерисовка легко вызывается методом Refresh

Цитата Сообщение от Noob.net Посмотреть сообщение
Такс..уже дошел до 5 событий..
Переопределил,но они не вызываются при работе компонента на форме...
resize,Dock,SizeChanged...ничего..
Нужны не события, а базовые обработчики этих событий, методы с приставкой On. (OnSizeChanged)
1
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
03.10.2012, 10:17  [ТС]
Цитата Сообщение от Green Посмотреть сообщение
Нужны не события, а базовые обработчики этих событий, методы с приставкой On.
OnSizeChanged пробовал тоже..

Цитата Сообщение от Green Посмотреть сообщение
Перерисовка легко вызывается методом Refresh
То-есть из формы нужно рефрешать мой компонент,правильно?

А как можно из него подписаться или принимать сообщения что родительский контейнер
изменяет размеры? (может некорректно выразился,надеюсь поняли)



Green, А что скажете насчет работы с дизайнером?
При добавлении компонента с дизайнера вызываются конструктор и ххх_Load (это мсдн говорит)
все действия в них обрабатывать или есть еще какие хитрости?
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
04.10.2012, 05:48
Цитата Сообщение от Noob.net Посмотреть сообщение
OnSizeChanged пробовал тоже..
Код в студию
Цитата Сообщение от Noob.net Посмотреть сообщение
То-есть из формы нужно рефрешать мой компонент,правильно?
Изменились данные компонента - он должен сам себя обновить

Цитата Сообщение от Noob.net Посмотреть сообщение
Green, А что скажете насчет работы с дизайнером?
При добавлении компонента с дизайнера вызываются конструктор и ххх_Load (это мсдн говорит)
все действия в них обрабатывать или есть еще какие хитрости?
Какие еще действия? Не понятно о чем речь. Лучше и яснее работать в таком режиме:
общая задача -> конкретная проблема + код -> поиск решения. На общих фразах идет обоюдная потеря времени и запутывание нити рассуждений.
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
04.10.2012, 19:49  [ТС]
Могу и весь проект кинуть..
Кликните здесь для просмотра всего текста
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
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Windows.Forms;
 
namespace MovableGrid
{
    [Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
    public partial class MovableGrid : UserControl
    {
        public MovableGrid()
        {
            InitializeComponent();
            Rows = 3;
            Columns = 3;
            //Create arrays & set default split positions\\
            splitHpos = new int[Rows - 1];
            splitVpos = new int[Columns-1];
            DefaultSplitPos(splitHpos, splitVpos);//тут расчет нач.позиций
//который и вызываю в перерисовке
            MyControlCollection = new Control[Rows,Columns];
 
            SplitBrush = new SolidBrush(colorOfSplit);
 
            Button b = new Button();
            b.Location = new Point(10, 10);
            this.Controls.Add(b);
            Button b1 = new Button();
            b.Location = new Point(20, 20);
            Controls.Add(b1);
            Button b2 = new Button();
            b.Location = new Point(30, 30);
            Controls.Add(b2);
            Button b3 = new Button();
            b.Location = new Point(30, 20);
            Controls.Add(b3);
            Button b4 = new Button();
            b.Location = new Point(30, 20);
            Controls.Add(b4);
 
            int j = 0;
            int k = 0;
            for (int i = 0; i < Controls.Count; i++)
            {
                if (Controls[i] == null) break;
                MyControlCollection[j, k] = Controls[i];
                k++;
                if(k==Columns)
                {
                    j++;
                    k = 0;
                }
            }
            SetContrPosFromArr();
               // SetAllControlsPos();
            Invalidate(true);
        }
 
        //ToDo: Add some constructors
        /*   public MovableGrid(byte rows,byte columns)
        {
            Rows = rows;
            Columns = columns;
            Refresh();
        }*/
      
        #region SplitValues & Characteristics
        private bool IsClicked = false;
        private byte widthSplit = 4;
        private Color colorOfSplit = Color.Gray;
        private Color colorOfSplitBorders = Color.Black;
        private Brush SplitBrush;
        //*******values for grid cells************\\
        protected byte rows = 0;
        protected byte columns = 0;
        private int[] splitHpos;
        private int[] splitVpos;//position for each verticalSplit
        private Control[,] MyControlCollection;
       #endregion 
        #region Grid prop
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public byte Rows
        {
            get { return rows; }
            set
            {
                if (value < 0) rows = 0;
                else rows = value;
            }
        }
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public byte Columns
        {
            get { return columns; }
            set
            {
                if (value < 0) columns = 0;
                else columns = value;
            }
        }
          #endregion 
        #region Split prop
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public byte WidthSplit
        {
            get { return widthSplit; }
            set
            {
                if (value < 0) widthSplit = 0;
                else widthSplit = value;
            }
        }
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public Color ColorOfSplir
        {
            get { return colorOfSplit; }
            set { colorOfSplit = value; Invalidate(); }
        }
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public Color ColorOfSplitBorders
        {
            get { return colorOfSplitBorders; }
            set { colorOfSplitBorders = value; }
        }
        private int GetSplitPos(int snum,bool isHoriz)
        {
            if (snum < 0) return 0;
                if (isHoriz)
                {
                    if (snum >= splitHpos.Length) return Height;
                    return splitHpos[snum];
                }
                if (snum >= splitVpos.Length) return Width;
                return splitVpos[snum];
        }
        #endregion 
    #region Methods
        protected void DefaultSplitPos(int[] rowsPos,int[] colPos)
        {
            //set width & heigth for each split 
            for (int i = 1; i < Rows; i++)
                rowsPos[i-1] = (Height / Rows)*i;
            for (int i = 1; i < Columns; i++)
                colPos[i-1] = (Width / Columns)*i;
        }
       #region ovverride methods
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            DrawCells(e.Graphics);
        }
        protected override void OnMouseDown(MouseEventArgs e)
        {
            base.OnMouseDown(e);
            IsClicked = true;
        }
        protected override void OnMouseUp(MouseEventArgs e)
        {
            base.OnMouseUp(e);
            IsClicked = false;
        }
        protected override void OnMouseMove(MouseEventArgs e)
        {
            base.OnMouseMove(e);
            if(IsClicked)
            {
                byte nSplit = IsMouseInSplitZone(e.Y, true);
                if(nSplit!=255)
                {
                ChangeSplitPos(nSplit, e.Y, true);//draw in mouseUp
                }
                nSplit = IsMouseInSplitZone(e.X, false);
                if (nSplit != 255)
                {
                    ChangeSplitPos(nSplit, e.X, false);//draw in mouseUp
                }
               // SetAllControlsPos(); also setall
                SetContrPosFromArr();
            }
        }
        protected override void OnSizeChanged(System.EventArgs e)
        {
            base.OnSizeChanged(e);
            DefaultSplitPos(splitHpos, splitVpos);
            Invalidate(); //вот тут 
        }
        protected override void OnControlAdded(ControlEventArgs e)
        {
            base.OnControlAdded(e);
            ColorOfSplir = Color.Red;
            Invalidate();//вот тут 
        }
        public override DockStyle Dock
        {
            get
            {
                return base.Dock;
            }
            set
            {
                base.Dock = value;//вот тут  писал также
            }
        }
        protected override void OnResize(System.EventArgs e)
        {
            base.OnResize(e);//вот тут и все равно никакого результата
        }
       #endregion 
 
        protected void DrawCells(Graphics g)
        {
            for (byte i = 0; i < Rows-1; i++)
                DrawSplit(g, splitHpos[i],true);
            for (byte i = 0; i < Columns-1; i++)
                DrawSplit(g, splitVpos[i],false);
        }
        protected void DrawSplit(Graphics g,int rowHeight,bool IsHoriz)
        {
            if (IsHoriz)
            {
                Rectangle rec = new Rectangle(0, rowHeight, Width - 1, widthSplit);
                g.FillRectangle(SplitBrush, rec);
                g.DrawRectangle(new Pen(ColorOfSplitBorders), rec);
            }
            else
            {
                Rectangle rec = new Rectangle(rowHeight,0, widthSplit,Width - 1);
                g.FillRectangle(SplitBrush, rec);
                g.DrawRectangle(new Pen(ColorOfSplitBorders), rec);
            }
        }
        //**check in witch split MouseCoords are**\\
        protected byte IsMouseInSplitZone(int x,bool isHoriz)
        {
            if(isHoriz)
            {
                for (byte j = 0; j < Rows - 1; j++)
                    for (byte i = 1; i < 5; i++)
                    {
                        if (x - i == splitHpos[j]) return j;
                        if (x + i == splitHpos[j]) return j;
                    }
            }
            else
            {
            for (byte j = 0; j < Rows - 1; j++)
                for (byte i = 1; i < 5; i++)
                {
                    if (x - i == splitVpos[j]) return j;
                    if (x + i == splitVpos[j]) return j;
                }
            }
            return 255;
        }
        protected void ChangeSplitPos(byte splitN,int newSize,bool isHoriz)
        {
           // if((splitN==Rows && isHoriz)||(splitN == Columns && !isHoriz))
                //запретить изменение размера если 1 сплит вылазит дальше 2
            if (newSize < widthSplit * 2)
                return;
 
                if (isHoriz)
                {
                    if (newSize < GetMaxSplitPos(splitN, true))
                        splitHpos[splitN] = newSize;
                }
                else if (newSize < GetMaxSplitPos(splitN, false))
                        splitVpos[splitN] = newSize;
 
            Invalidate();
            // Refresh();
        }
        protected int GetMaxSplitPos(byte num,bool IsHoriz)
        {
            if(IsHoriz)
            {
                if (num + 1 == splitHpos.Length) return Height - widthSplit;
                    return splitHpos[num + 1] - widthSplit;
            }
            else
            {
                if (num + 1 == splitVpos.Length) return Width-widthSplit;
                    return splitVpos[num + 1] - widthSplit;
            }
        }
        //for contr arr
        private void AddControl()
    {
        
    }//не реал
      #region Set Control position
        private void SetControlPosition(Control control,Rectangle controlArea)
        {
            control.Bounds = controlArea;
        }
        private void SetControlPosition(Control control, int x1, int y1, int width, int height)
        {
            control.Location = new Point(x1, y1);
            control.Width = width;
            control.Height = height;
        }//не исп
        private void SetAllControlsPos()
        {
            //ToDO: change new Rect & newSize for like global
            int j = 0;
               for (int i = 0; i < Controls.Count; i++)
               {
                   if(i<Columns)
                   {
                       SetControlPosition(Controls[i], new Rectangle(GetCellPosition(0, i),
                           new Size(GetSplitPos(i, false) - GetSplitPos(i-1, false)-widthSplit, splitHpos[0])));
                   }
                   //ToDo: Find Rect for columns+ controls
                   if(i>=Columns)
                   {
                       if (j >= Rows)
                       {
                           SetControlPosition(Controls[i], new Rectangle(GetCellPosition(i - Columns, j - Rows),
                               GetCellSize(i - Columns, j - Rows)));
                       }
                       else
                       {
                           SetControlPosition(Controls[i], //выбираем контрол
                               new Rectangle(GetCellPosition(i+1 - Columns,j),//нач позиция
                                   new Size(GetSplitPos(i - Columns, false), GetSplitPos(i+1 - Columns, true) 
                                       - GetSplitPos(i - Columns, true) - widthSplit)));
                       }
                       j++;
                   }
               }         
        }
        private void SetContrPosFromArr()
        {
            for (int i = 0; i < Rows; i++)
                for (int j = 0; j < Columns; j++)
                    if (MyControlCollection[i, j] == null) return;
                    else
                        SetControlPosition(MyControlCollection[i, j], GetCellRect(i, j));
        }
        private Rectangle GetCellRect(int row,int column)
        {
            Rectangle result = new Rectangle(GetSplitPos(column - 1, false), GetSplitPos(row - 1, true),
                GetSplitPos(column, false) - GetSplitPos(column - 1, false),
                GetSplitPos(row, true) - GetSplitPos(row - 1, true));
            if (column != 0)
            {
                result.Location = new Point(result.X + widthSplit, result.Y);
                result.Width = result.Width - widthSplit;
            }
            if (row != 0)
            {
                result.Location = new Point(result.X, result.Y + widthSplit);
                result.Height = result.Height - widthSplit;
            }
 
            return result;
        }
        private Size GetCellSize(int row, int column)//here is a reason of fuckup
        {
            if(column==0)
            return new Size(GetSplitPos(row+1,false)-GetSplitPos(row,false),GetSplitPos(column+1,true)-GetSplitPos(column,true));
            else
            return new Size(GetSplitPos(row - 1, false)-widthSplit, GetSplitPos(column - 1, true));
        }
        private Point GetCellPosition(int row,int column)
        {
            if (row == 0 && column == 0) return new Point(0, 0);
            if (row == 0) return new Point(GetSplitPos(column - 1, false) + widthSplit, 0); 
            if (column == 0) return new Point(0, GetSplitPos(row - 1, true) + widthSplit);
            return new Point(GetSplitPos(column - 1, false) + widthSplit, GetSplitPos(row - 1, true) + widthSplit);
        }
      #endregion 
 
      #endregion 
    }
}


Так же в проекте выставляю DoubleBuffered но оно сбивается
и приходится в форме ставить..
Вложения
Тип файла: rar MovableGrid.rar (4.8 Кб, 7 просмотров)
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
04.10.2012, 19:52  [ТС]
Если будут советы по улучшению кода,буду премного благодарен
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
08.10.2012, 08:54
Цитата Сообщение от Noob.net Посмотреть сообщение
Могу и весь проект кинуть..
В данном случае портянку с классом всю можно и не кидать, вопрос по реализации метода был. И кстати, это не весь класс, в MovableGrid.Disigner.cs можно много чего засунуть.

Цитата Сообщение от Noob.net Посмотреть сообщение
MovableGrid.rar
Смысл выкладывать dll, если вопрос по коду этой dll?

Цитата Сообщение от Noob.net
Invalidate();
Вообще-то я говорил о Refresh(). Invalidate не приводит к перерисовке, только помечает область как недействительную

В свойствах Rows и т.п. нет вызова перерисовки

Invalidate в констукторе не нужен от слова совсем, т.к. созданный объект != нарисованный объект
1
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
08.10.2012, 10:26  [ТС]
Цитата Сообщение от Green Посмотреть сообщение
Смысл выкладывать dll, если вопрос по коду этой dll?
Что б не компилить и прикрутить к проекту,если что.(хотя ничего и нету,но все же)


Цитата Сообщение от Green Посмотреть сообщение
Вообще-то я говорил о Refresh(). Invalidate не приводит к перерисовке, только помечает область как недействительную
Может быть..я просто разбирал refresh() и наткнулся на 2 метода,все таки не дорабатываю


А что скажете насчет работы с дизайнером? Нужно ведь свойства(подправьте,если ошибаюсь -[Design ...]) прописывать перед методами или событиями,правильно?
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
09.10.2012, 05:22
Цитата Сообщение от Noob.net Посмотреть сообщение
А что скажете насчет работы с дизайнером?
А что с работой с дизайнером?

Цитата Сообщение от Noob.net Посмотреть сообщение
Нужно ведь свойства(подправьте,если ошибаюсь -[Design ...]) прописывать перед методами или событиями,правильно?
Не понял, о чем вопрос?
1
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
09.10.2012, 16:21  [ТС]
Последняя фича перед рефакторингом.
Я хочу добавлять компоненты(кнопку например или панельку) в свою таблицу не в рантайм режиме или вручную в коде,а в дизайнере Visual Studiо.

То-есть перетащили UserControl на форму и так же на него таскаем из панели инструментов
другие контролы.
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
10.10.2012, 07:42
Цитата Сообщение от Noob.net Посмотреть сообщение
Последняя фича перед рефакторингом.
Я хочу добавлять компоненты(кнопку например или панельку) в свою таблицу не в рантайм режиме или вручную в коде,а в дизайнере Visual Studiо.

То-есть перетащили UserControl на форму и так же на него таскаем из панели инструментов
другие контролы.
Ну и в чем проблема?
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
10.10.2012, 18:34  [ТС]
Ну когда перетаскиваю элемент из панели задач на свою таблицу от добавляется в коллекцию контролов формы..
+ не происходит перерисовка в дизайнере. Хотя он весь рисуется в конструкторе,а конструктор должен вызываться в дизайнере.
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
11.10.2012, 02:40
Цитата Сообщение от Noob.net Посмотреть сообщение
Ну когда перетаскиваю элемент из панели задач на свою таблицу от добавляется в коллекцию контролов формы..
Ну дык, так и задумано. Это проблема?

Цитата Сообщение от Noob.net Посмотреть сообщение
не происходит перерисовка в дизайнере
Если ничего не изменилось, то нечего перерисовывать.

Цитата Сообщение от Noob.net Посмотреть сообщение
Хотя он весь рисуется в конструкторе,а конструктор должен вызываться в дизайнере.
В конструкторе ничто не рисуется. В конструкторе происходит инициализация экземпляра. Рисуется все в OnPaint
1
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
11.10.2012, 09:24  [ТС]
Цитата Сообщение от Green Посмотреть сообщение
Рисуется все в OnPaint
Он вызывается у меня в конструкторе.

Цитата Сообщение от Green Посмотреть сообщение
Ну дык, так и задумано. Это проблема?
Ну я же говорю что нужно чтобы добавлялось в коллекцию моего контрола,если я кидаю в его границы..
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
11.10.2012, 09:38
Цитата Сообщение от Noob.net Посмотреть сообщение
Он вызывается у меня в конструкторе.
Убрать и больше никому не говорить о подобном, а то мало ли..

Цитата Сообщение от Noob.net Посмотреть сообщение
Ну я же говорю что нужно чтобы добавлялось в коллекцию моего контрола,если я кидаю в его границы..
А события на что: ControlAdded, ControlRemoved?
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
11.10.2012, 10:26  [ТС]
Цитата Сообщение от Green Посмотреть сообщение
А события на что: ControlAdded, ControlRemoved?
Вешал на них,но эти события то вызываются у формы а не у моего контрола.



Цитата Сообщение от Green Посмотреть сообщение
Убрать и больше никому не говорить о подобном, а то мало ли..
Да это что б сетку прорисовать сразу.
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
11.10.2012, 10:42
Цитата Сообщение от Noob.net Посмотреть сообщение
Вешал на них,но эти события то вызываются у формы а не у моего контрола.
Это смотря куда контрол кидать и на чьи события подписываться

Цитата Сообщение от Noob.net Посмотреть сообщение
Да это что б сетку прорисовать сразу.
Еще раз, в конструкторе нет места отрисовке, от слова совсем.
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
11.10.2012, 21:59  [ТС]
Цитата Сообщение от Green Посмотреть сообщение
Еще раз, в конструкторе нет места отрисовке, от слова совсем.
Так я вызываю там отрисовку что б было видно сколько ячеек.
Мне удобнее когда я "конструирую" элемент управления в дизайнере.
То-есть нажал - 3 ячейки - и мне нарисовало 3 ячейки.

Но,спасибо за совет.


Цитата Сообщение от Green Посмотреть сообщение
Это смотря куда контрол кидать и на чьи события подписываться
А как подписаться на событие формы?
То-есть мне нужно в событии формы COntrolAdd - вызвать событие моего контрола,я правильно понимаю?


Не по теме:

p.s.сорри если достал уже,хочется довести до конца начатое.

0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
12.10.2012, 03:30
Цитата Сообщение от Noob.net Посмотреть сообщение
Так я вызываю там отрисовку что б было видно сколько ячеек.
Мне удобнее когда я "конструирую" элемент управления в дизайнере.
То-есть нажал - 3 ячейки - и мне нарисовало 3 ячейки.
Да хоть 100500 раз вызывать-неперевызывать отрисовку, она не работает в конструкторе!!!
Пример, создаю форму, кидаю кнопку, пишу обработчик кнопки
C#
1
2
3
4
private void MyButton_Click(object sender, EventArgs e)
{
    TextBox t = new TextBox();
}
Внимание вопрос! Где будет отрисован текстБокс?
А если так?
C#
1
2
3
4
5
6
7
8
9
10
11
12
internal class MyTextBox: TextBox
{
    public MyTextBox()
    {
        Refresh();
    }
}
 
private void MyButton_Click(object sender, EventArgs e)
{
    MyTextBox t = new MyTextBox();
}
Цитата Сообщение от Noob.net Посмотреть сообщение
То-есть мне нужно в событии формы COntrolAdd - вызвать событие моего контрола,я правильно понимаю?
Все не так. Нужно в классе контрола переопределить OnControlAdded
1
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
06.11.2012, 00:32  [ТС]
Пытался в дизайнере сделать внизспадной список для выбора элементов ячеек.
Но думаю проще будет добавлять при перетаскивании из ПанелиИнтрументов(Палитры).

Вот компонент.Буду благодарен за указание ошибок и идеи насчет добавление контролов в ячейки.

p.s.Вообщем вопрос почти тот же.

p.p.s.Переопределил все что было сказано выше. Не могу понять как добавить
в дизайнере(в коде просто же да и не удобно пользователю) Контрол(кнопка например) в MovableGrid,
потому как он добавляется на форму,а мой компонент очевидно не подписан на это событие.
Пытаюсь понять в чем проблема,смотрел Агурова - хорошая книга,но там нету этого.
Вложения
Тип файла: rar MovableGrid.rar (1.41 Мб, 7 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.11.2012, 00:32

Создание таблицы, в которых будут видны при каких значениях получается результат в определенной клетке
Здравствуйте! Подскажите пожалуйста, можно ли в маткаде делать таблицы в которых будут видны при каких значениях получается результат в...

Можно ли выключить создание области выделения при создании формы?
Вопрос чисто от скуки, но уже порядком подзадолбало)... Всегда, когда создаю любую форму - первым делом лезу в свойства и ставлю Область...

Динамическое создание формы, по нажатию в области которой создается кнопка
Ребят, я тут запутался немного. Посмотрите код, пожалуйста. Мне нужно написать приложение, где на форме есть кнопка «создать форму»,...

Как из Формы контейнера (MdiParent) узнать о закрытии дочерней формы
Всем привет! Вопрос вот в чем. Динамически создается дочерняя форма, и при ее закрытии нужно открыть другую дочернюю форму. Закрытие...

Создание таблицы из запроса по кнопке формы
Есть запрос, который создает таблицу текст запроса: SELECT Cstr(S.Арт) AS Арт, S. AS ТОВАР, S. AS TRynok, S.ТН,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru