SampleCrossUi.WinForms
1.0.0.0
SampleCrossUi.WinForms 사용 방법을 보여 주는 예제 프로젝트입니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
MainForm.cs
이 파일의 문서화 페이지로 가기
1
using
System.ComponentModel;
2
using
System.Linq;
3
using
Dreamine.UI.WinForms;
4
using
Dreamine.UI.WinForms.Controls;
5
using
SampleCrossUi.Shared.ViewModels;
6
using
SampleCrossUi.WinForms.Pages
;
7
8
namespace
SampleCrossUi.WinForms
;
9
18
public
sealed
class
MainForm
: Form
19
{
20
// ── Designer-visible fields ──────────────────────────
29
private
Panel
_pageHost
=
null
!;
38
private
Panel
_navPanel
=
null
!;
47
private
FlowLayoutPanel
_navFlow
=
null
!;
56
private
DreamineButton
_btnCounter
=
null
!;
65
private
DreamineButton
_btnLightBulb
=
null
!;
74
private
DreamineButton
_btnControls
=
null
!;
83
private
DreamineButton
_btnPopup
=
null
!;
84
85
// ── Runtime-only fields ──────────────────────────────
94
private
DreamineButton[]
_navButtons
=
null
!;
103
private
UserControl?
_currentPage
;
112
private
CounterPage
_counterPage
=
null
!;
121
private
LightBulbPage
_lightBulbPage
=
null
!;
130
private
ControlsPage
_controlsPage
=
null
!;
139
private
PopupPage
_popupPage
=
null
!;
140
149
public
MainForm
() : this(
150
new CounterViewModel(new CounterEvent(new
SampleCrossUi
.Shared.Services.CounterService())),
151
new LightBulbViewModel(new LightBulbEvent(new LightBulbModel()))) { }
152
177
public
MainForm
(CounterViewModel counterVm, LightBulbViewModel lightBulbVm)
178
{
179
InitializeComponent
();
180
181
Resize += (_, _) =>
CenterNavFlow
();
182
Load += (_, _) =>
CenterNavFlow
();
183
184
_navButtons
= [
_btnCounter
,
_btnLightBulb
,
_btnControls
,
_btnPopup
];
185
for
(
int
i = 0; i <
_navButtons
.Length; i++)
186
{
187
var idx = i;
188
_navButtons
[i].Click += (_, _) =>
Navigate
(idx);
189
}
190
191
if
(LicenseManager.UsageMode == LicenseUsageMode.Designtime)
192
return
;
193
194
_counterPage
=
new
CounterPage
(counterVm);
195
_lightBulbPage
=
new
LightBulbPage
(lightBulbVm);
196
_controlsPage
=
new
ControlsPage
(
new
ControlsViewModel(
new
ControlsEvent()));
197
_popupPage
=
new
PopupPage
();
198
199
Navigate
(0);
200
}
201
218
private
void
Navigate
(
int
index)
219
{
220
for
(
int
i = 0; i <
_navButtons
.Length; i++)
221
_navButtons
[i].IsSelected = i == index;
222
223
_currentPage
?.Hide();
224
225
_currentPage
= index
switch
226
{
227
0 =>
_counterPage
,
228
1 =>
_lightBulbPage
,
229
2 =>
_controlsPage
,
230
3 =>
_popupPage
,
231
_ =>
_counterPage
,
232
};
233
234
if
(!
_pageHost
.Controls.Contains(
_currentPage
))
235
{
236
_currentPage.Dock = DockStyle.Fill;
237
_pageHost
.Controls.Add(
_currentPage
);
238
}
239
_currentPage
.Show();
240
_currentPage
.BringToFront();
241
}
242
251
private
void
InitializeComponent
()
252
{
253
_btnCounter
=
new
DreamineButton();
254
_btnLightBulb
=
new
DreamineButton();
255
_btnControls
=
new
DreamineButton();
256
_btnPopup
=
new
DreamineButton();
257
_navFlow
=
new
FlowLayoutPanel();
258
_navPanel
=
new
Panel();
259
_pageHost
=
new
Panel();
260
261
SuspendLayout();
262
263
// _btnCounter — WPF DreamineNavigationBar 버튼과 동일한 크기/배치(가로 나열)
264
_btnCounter.Content =
"Counter"
;
265
_btnCounter.Width = 140;
266
_btnCounter.Height = 40;
267
_btnCounter.CornerRadius = 6;
268
_btnCounter.Margin =
new
Padding(4);
269
_btnCounter.Name =
"_btnCounter"
;
270
271
// _btnLightBulb
272
_btnLightBulb.Content =
"Light Bulb"
;
273
_btnLightBulb.Width = 140;
274
_btnLightBulb.Height = 40;
275
_btnLightBulb.CornerRadius = 6;
276
_btnLightBulb.Margin =
new
Padding(4);
277
_btnLightBulb.Name =
"_btnLightBulb"
;
278
279
// _btnControls
280
_btnControls.Content =
"Controls"
;
281
_btnControls.Width = 140;
282
_btnControls.Height = 40;
283
_btnControls.CornerRadius = 6;
284
_btnControls.Margin =
new
Padding(4);
285
_btnControls.Name =
"_btnControls"
;
286
287
// _btnPopup
288
_btnPopup.Content =
"Popup"
;
289
_btnPopup.Width = 140;
290
_btnPopup.Height = 40;
291
_btnPopup.CornerRadius = 6;
292
_btnPopup.Margin =
new
Padding(4);
293
_btnPopup.Name =
"_btnPopup"
;
294
295
// _navFlow — WPF처럼 가로로 나열되는 네비게이션 버튼들
296
_navFlow.Dock = DockStyle.Fill;
297
_navFlow.FlowDirection = FlowDirection.LeftToRight;
298
_navFlow.WrapContents =
false
;
299
_navFlow.Anchor = AnchorStyles.None;
300
_navFlow.AutoSize =
true
;
301
_navFlow
.Controls.Add(
_btnCounter
);
302
_navFlow
.Controls.Add(
_btnLightBulb
);
303
_navFlow
.Controls.Add(
_btnControls
);
304
_navFlow
.Controls.Add(
_btnPopup
);
305
306
// _navPanel — 상단 가로 네비게이션 바(WPF MainWindow의 DreamineNavigationBar 행과 동일한 위치)
307
_navPanel.Dock = DockStyle.Top;
308
_navPanel.Height = 64;
309
_navPanel.BackColor = DreamineTheme.NavBackground;
310
_navPanel.Padding =
new
Padding(5);
311
_navPanel
.Controls.Add(
_navFlow
);
312
313
// _pageHost
314
_pageHost.Dock = DockStyle.Fill;
315
_pageHost.BackColor = DreamineTheme.AppBackground;
316
317
// MainForm
318
Text =
"Dreamine Cross-UI — WinForms"
;
319
ClientSize =
new
Size(1100, 860);
320
MinimumSize =
new
Size(960, 700);
321
StartPosition = FormStartPosition.CenterScreen;
322
BackColor = DreamineTheme.AppBackground;
323
Name =
"MainForm"
;
324
Controls.Add(
_pageHost
);
325
Controls.Add(
_navPanel
);
326
327
ResumeLayout(
false
);
328
}
329
338
private
void
CenterNavFlow
()
339
{
340
var totalWidth =
_navFlow
.Controls.Cast<Control>().Sum(c => c.Width + c.Margin.Horizontal);
341
var offset = Math.Max(0, (
_navPanel
.Width - totalWidth) / 2);
342
_navFlow.Padding =
new
Padding(offset, 0, 0, 0);
343
}
344
361
protected
override
void
Dispose
(
bool
disposing)
362
{
363
if
(disposing)
364
{
365
_counterPage
?.Dispose();
366
_lightBulbPage
?.Dispose();
367
_controlsPage
?.Dispose();
368
_popupPage
?.Dispose();
369
}
370
base.Dispose(disposing);
371
}
372
}
SampleCrossUi
Definition
MainForm.cs:8
SampleCrossUi.WinForms
Definition
MainForm.cs:8
SampleCrossUi.WinForms.Pages
Definition
ControlsPage.cs:6
SampleCrossUi.WinForms.MainForm._btnControls
DreamineButton _btnControls
Definition
MainForm.cs:74
SampleCrossUi.WinForms.MainForm.Navigate
void Navigate(int index)
Definition
MainForm.cs:218
SampleCrossUi.WinForms.MainForm._controlsPage
ControlsPage _controlsPage
Definition
MainForm.cs:130
SampleCrossUi.WinForms.MainForm.Dispose
override void Dispose(bool disposing)
Definition
MainForm.cs:361
SampleCrossUi.WinForms.MainForm.MainForm
MainForm()
Definition
MainForm.cs:149
SampleCrossUi.WinForms.MainForm._btnLightBulb
DreamineButton _btnLightBulb
Definition
MainForm.cs:65
SampleCrossUi.WinForms.MainForm._navFlow
FlowLayoutPanel _navFlow
Definition
MainForm.cs:47
SampleCrossUi.WinForms.MainForm._btnCounter
DreamineButton _btnCounter
Definition
MainForm.cs:56
SampleCrossUi.WinForms.MainForm._navButtons
DreamineButton[] _navButtons
Definition
MainForm.cs:94
SampleCrossUi.WinForms.MainForm._navPanel
Panel _navPanel
Definition
MainForm.cs:38
SampleCrossUi.WinForms.MainForm._btnPopup
DreamineButton _btnPopup
Definition
MainForm.cs:83
SampleCrossUi.WinForms.MainForm._counterPage
CounterPage _counterPage
Definition
MainForm.cs:112
SampleCrossUi.WinForms.MainForm._currentPage
UserControl? _currentPage
Definition
MainForm.cs:103
SampleCrossUi.WinForms.MainForm._pageHost
Panel _pageHost
Definition
MainForm.cs:29
SampleCrossUi.WinForms.MainForm._lightBulbPage
LightBulbPage _lightBulbPage
Definition
MainForm.cs:121
SampleCrossUi.WinForms.MainForm.MainForm
MainForm(CounterViewModel counterVm, LightBulbViewModel lightBulbVm)
Definition
MainForm.cs:177
SampleCrossUi.WinForms.MainForm.InitializeComponent
void InitializeComponent()
Definition
MainForm.cs:251
SampleCrossUi.WinForms.MainForm.CenterNavFlow
void CenterNavFlow()
Definition
MainForm.cs:338
SampleCrossUi.WinForms.MainForm._popupPage
PopupPage _popupPage
Definition
MainForm.cs:139
SampleCrossUi.WinForms.Pages.ControlsPage
Definition
ControlsPage.cs:17
SampleCrossUi.WinForms.Pages.CounterPage
Definition
CounterPage.cs:18
SampleCrossUi.WinForms.Pages.LightBulbPage
Definition
LightBulbPage.cs:17
SampleCrossUi.WinForms.Pages.PopupPage
Definition
PopupPage.cs:17
MainForm.cs
다음에 의해 생성됨 :
1.17.0