C# WinForm控件之Dock顺序调整

最近被.net winform中的控件布局搞困惑了,由于控件都是使用Dock方式的,操作起来也是比较方便,如果最大化,窗口大小调整等,都可以随着窗口大小的变化而变化。

但问题是,.net winform的dock方式是根据先添加的控件顺序进行优先级Dock排列的,假设我想目前有三个控件A、B、C分别以 Top、Bottom以及Fill方式填充窗口即窗口看起来应该是这样的:

---------------------

A

---------------------

C

---------------------

B

----------------------

 

问题来了,现在我想添加D控件在A及C中间怎么办?尝试了不少办法都不行,一般都会覆盖掉C控件的,也就是最后添加的控件。

在网上查找,很多人都提出一种无奈的解决方案,那就是重新来过,将控件再次添加到窗口form中,虽然可以解决Dock布局带来的困扰,但带来的是工作量的倍增同时很难调整到跟之前的布局一模一样 。

 

想来这都不是解决的办法,添加添加,我一直想,对了先添加的控件具有Dock的优先排序权,应该可以从Designer文件中着手啊。

 

 找到以下代码:

this.Controls.Add( this.D); 

this.Controls.Add(this.C);
this.Controls.Add(this.B);
this.Controls.Add(this.A);

 

 将代码的顺序调整为:

 

this.Controls.Add( this.C); 
this.Controls.Add( this.D);
this.Controls.Add( this.B);
this.Controls.Add( this.A);


问题即解决了。

 由此可见,在Desinger文件中是以后添加的控件为优先权高来Dock排序,即A控件的排序优先权最高。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
要实现以波形图的方式实时显示数据采集卡采集到的数据,可以借助C#中的Chart控件来完成。下面是实现步骤: 1. 在Visual Studio中创建一个Winform项目; 2. 在工具箱中找到Chart控件并将其拖拽到窗体上; 3. 在代码中声明一个Timer计时器控件,用于定时刷新图表数据; 4. 在代码中编写数据采集卡采集数据的代码; 5. 在Timer计时器的Tick事件中,将采集到的数据添加到图表中,并移动图表的X轴; 6. 实时刷新图表,即可实现以波形图的方式实时显示数据采集卡采集到的数据。 下面是完整的代码示例: ```csharp using System; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; namespace WaveformDemo { public partial class Form1 : Form { private Chart chart1; private Timer timer1; private int count = 0; public Form1() { InitializeComponent(); // 初始化Chart控件 chart1 = new Chart(); chart1.Parent = this; chart1.Dock = DockStyle.Fill; chart1.ChartAreas.Add(new ChartArea("Draw")); chart1.Series.Add(new Series("Waveform")); chart1.Series[0].ChartType = SeriesChartType.Line; chart1.Series[0].ChartArea = "Draw"; chart1.Series[0].BorderWidth = 2; chart1.Series[0].Color = System.Drawing.Color.Blue; // 初始化Timer控件 timer1 = new Timer(); timer1.Interval = 1000; timer1.Tick += Timer1_Tick; timer1.Start(); } private void Timer1_Tick(object sender, EventArgs e) { // 采集数据 double data = GetDataFromDAQ(); // 添加数据到图表 chart1.Series[0].Points.AddY(data); count++; // 移动X轴 if (count > chart1.ChartAreas[0].AxisX.Maximum) { chart1.ChartAreas[0].AxisX.Maximum = count; chart1.ChartAreas[0].AxisX.Minimum = count - chart1.ChartAreas[0].AxisX.ScaleView.Size; } // 刷新图表 chart1.Invalidate(); } private double GetDataFromDAQ() { // TODO: 从数据采集卡获取数据 return Math.Sin(count * Math.PI / 180); } } } ``` 在上面的代码中,我们创建了一个Chart控件和一个Timer计时器控件,并在Timer计时器的Tick事件中实时刷新图表。在GetDataFromDAQ方法中,我们模拟了从数据采集卡获取数据的过程。你需要根据实际情况修改这个方法,以获取真实的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值