gpt4 book ai didi

c# - 这个简单的用户控制代码会导致 VS2015 崩溃。不知道为什么

转载 作者:行者123 更新时间:2023-12-01 16:45:10 24 4
gpt4 key购买 nike

public partial class displayvoltage : UserControl
{
public displayvoltage()
{
InitializeComponent();
if (!this.ratio_1.Checked && !this.ratio_12.Checked && !this.ratio_34.Checked && !this.ratio_14.Checked)
this.ratio_1.Checked = true;
}

public double Ratio
{
get
{
if (this.ratio_1.Checked) return 1.0;
if (this.ratio_1.Checked) return 4.0 / 3.0;
if (this.ratio_1.Checked) return 2.0;
return 4.0;
}
}

public int SetRatio
{
set
{
if (value == 1) this.ratio_1.Checked = true;
if (value == 2) this.ratio_34.Checked = true;
if (value == 3) this.ratio_12.Checked = true;
if (value == 4) this.ratio_14.Checked = true;
SetRatio = value;
}
}

[DefaultValue(0.0)]
public double Voltage
{
get { return Voltage * this.Ratio; }
set { Voltage = value; }
}

private bool DisplayVoltage = false;
private bool Pause = false;

private void ratio_CheckedChanged(object sender, EventArgs e)
{
RadioButton r = (RadioButton)sender;

if (r.Checked) Invalidate();
}
}

与设计师一起创建的只有 4 个 radio 和一个面板。即使我想显示控件的属性VS也会崩溃,如果我启动程序它就会崩溃。可能是什么问题?

我可以拥有一个只能获取的属性吗?

最佳答案

可能有几个原因,但最有可能的是因为这导致了无限循环,从而导致 StackOverflow:

public int SetRatio
{
set
{
if (value == 1) this.ratio_1.Checked = true;
if (value == 2) this.ratio_34.Checked = true;
if (value == 3) this.ratio_12.Checked = true;
if (value == 4) this.ratio_14.Checked = true;
SetRatio = value;
}
}

最后一行 SetRatio 可能会调用 SetRatio 属性 setter ,这会导致代码再次从以下位置开始执行:

 if (value == 1) this.ratio_1.Checked = true;
if (value == 2) this.ratio_34.Checked = true;
if (value == 3) this.ratio_12.Checked = true;
if (value == 4) this.ratio_14.Checked = true;
SetRatio = value;

并且永远循环。 VS 和 .Net 不能很好地处理堆栈溢出和内存不足异常。

尝试:

int setRatio;
public int SetRatio
{
set
{
if (value == 1) this.ratio_1.Checked = true;
if (value == 2) this.ratio_34.Checked = true;
if (value == 3) this.ratio_12.Checked = true;
if (value == 4) this.ratio_14.Checked = true;
setRatio = value;
}
}

如果这不起作用,请尝试更改构造函数以查看是否是导致问题的原因,因为带有抛出异常的构造函数的控件也可能导致 VS 崩溃:

 public displayvoltage()
{
InitializeComponent();
//if (!this.ratio_1.Checked && !this.ratio_12.Checked && !this.ratio_34.Checked && !this.ratio_14.Checked)
// this.ratio_1.Checked = true;
}

关于c# - 这个简单的用户控制代码会导致 VS2015 崩溃。不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44866309/

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