我是C#的初学者。我有一个DataGridvew" dgPins"在类中定义,以及名为" pnlPins"的Panel。该应用程序是使用几个UI组合在一起设计的。初始化在X类中完成,如下所示
private void InitializeComponent() {
...
private System.Windows.Forms.Panel pnlPINs;
private System.Windows.Forms.DataGridView dgPins;
...
}
我使用此网格显示从连接到以太网的设备读取的一些引脚。填充数据后,它看起来像这样(这是通过单击按钮完成的),
private void mnuGeraetLesen_Click(object sender, EventArgs e)
{
...
if (EthernetAvailable == true)
{
QueryAllCodeCommandHandler();// local function which fills the grid
}
}
现在在另一个UI(类)中,我有一个需要访问同一网格的按钮 实例并执行相同的任务。所以我在那个课上做了以下(让我们说Y级)。
private void _btnSearchDevices_Click(object sender, EventArgs e)
{
SingleDeviceInformationControl test = new SingleDeviceInformationControl();
test.QueryAllCodeCommandHandler();
}
但据我所知,这会创建一个不同的实例,但不起作用。因此,网格保持为空,如下所示。
我想过将dataGridview重命名为public static,这使我能够从任何地方访问同一个实例,但这会使整个项目不稳定。 我做了一些研究,发现了类似的问题,但我们并不了解为实现预期结果我必须做些什么。我非常感谢有关此问题的可能解决方案的任何提示。非常感谢你!
答案 0 :(得分:0)
如果您要以其他形式实例化YourForm,则必须让Grid Public访问它或将私有Grid封装在“public”属性中。
如果您正在谈论单独的UI或UserContorls您可以创建UI的静态实例,这样您就必须将Grid从私有修改为公共。但它建议您将私有网格封装在“公共”属性
中var chart = new Chart(ctx, {
type: 'line',
data: {
labels: ['Jan\n2017', 'Feb\n2017', 'Mar\n2017', 'Apr\n2017', 'May\n2017'],
datasets: [{
label: 'LINE',
data: [3, 1, 4, 2, 5],
backgroundColor: 'rgba(0, 119, 290, 0.2)',
borderColor: 'rgba(0, 119, 290, 0.6)',
fill: false
}]
},
options: {
scales: {
xAxes: [{
ticks: {
callback: function(tick) {
return tick.split(/\n/);
}
}
}],
yAxes: [{
ticks: {
beginAtZero: true,
stepSize: 1
}
}]
},
tooltips: {
callbacks: {
title: function(t, d) {
return d.labels[t[0].index].replace(/\n/, ' ');
}
}
}
}
});
YourForm是包含您的网格的表单,然后您可以像这样访问您的网格
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.0/Chart.min.js"></script>
<canvas id="ctx"></canvas>
这种方法通常用于UserControls