gpt4 book ai didi

使用另一种形式更改 datagridview 字体大小时出现 C# 异常错误

转载 作者:行者123 更新时间:2023-11-30 23:18:48 24 4
gpt4 key购买 nike

我有两种形式,一种包含 datagridview,另一种包含一个轨迹栏来更改 datagridview 的字体大小,如下所示: enter image description here

我创建了以下代码以允许 Form2 访问 Form1 datagridview:

//This is for Form1, the one that contains the datagridview:
public partial class Form1: Form
{
public Form1()
{
Form2 f = new Form2();
f.dataGridFromForm1 = dataGridView1;
}

//This is for Form2, the one that contains the trackbar:
public partial class Form2: Form
{
public DataGridView dataGridFromForm1 { get; set;}
private void trackBar1_Scroll(object sender, EventArgs e)
{
dataGridFromForm1.RowsDefaultCellStyle.Font =
new Font(dataGridFromForm1.RowsDefaultCellStyle.Font.FontFamily,
float.Parse(trackBar1.Value.ToString()));
label1.Text = trackBar1.Value.ToString() + "pt";
}
}

在构建期间我没有收到任何错误,但是当我尝试滑动轨迹栏时出现以下异常: enter image description here

我不确定我在这里遗漏了什么,因为我认为我已经实例化了 datagridview。任何帮助将不胜感激。

最佳答案

这是因为您正在创建一个新的 Form2 然后丢弃它。换句话说,Form1 的构造函数执行此操作:

public Form1()
{
Form2 f = new Form2(); // creates a new Form2
f.dataGridFromForm1 = dataGridView1; // sets the property
// f is now out of scope
}

您的f 是构造函数中的局部变量。当您稍后显示表单时(大概是通过再次调用 Form2 f = new Form2(); 然后是 f.Show())不知道 dataGridFromForm1 是什么(实际上它默认为 null)。

您没有显示足够的代码(缺少显示 slider 表单的方法),但是代码应该可以设置 slider 。也许是这样的:

private void btnShowSlider_Click(object sender, EventArgs e)
{
using (var f = new Form2()) {
f.dataGridFromForm1 = this.dataGridView1;
f.ShowDialog(this);
}
}

请注意,在上面, slider 表单将是一个模态窗口,在关闭它之前您将无法单击返回它(这可能是一件好事)

除此之外,您可以在 Form1 中有一个类 instance 变量,用于跟踪您的 Form2 表单显示/隐藏/处理有必要的。另一种选择是将 Form1 的实例传递到 Form2 的构造函数中,因此它直接具有引用。那可能看起来像这样:

public partial class Form2 : Form {
private Form1 _form1;
public Form2(Form1 otherForm) {
_form1 = otherForm;
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
_form1.dataGridFromForm1.RowsDefaultCellStyle.Font =
new Font(form1.dataGridFromForm1.RowsDefaultCellStyle.Font.FontFamily,
trackBar1.Value);
label1.Text = trackBar1.Value + "pt";
}
}

并在 Form1 中创建它,例如:

 Form2 f = new Form2(this);
f.Show();

确保在完成后处理/等。

另请注意,TrackBar.Value 已经 int,因此您无需将其转换为字符串并进行解析再次。像这样的东西就足够了:

new Font(..., trackBar1.Value)

关于使用另一种形式更改 datagridview 字体大小时出现 C# 异常错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40638572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com