隐藏带有参数的轴
本文关键字:参数 隐藏 | 更新日期: 2023-09-27 18:18:59
我有一个报告,它使用参数在运行时隐藏或显示图表上的数据。我有下面的代码来读取参数,并使用它来控制轴的可见性。
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[0].Value);
((SplineSeriesView)xrChart1.Series[1].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[1].Value);
((SplineSeriesView)xrChart1.Series[2].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[2].Value);
((SplineSeriesView)xrChart1.Series[3].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[3].Value);
((SplineSeriesView)xrChart1.Series[4].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[4].Value);
((SplineSeriesView)xrChart1.Series[5].View).AxisY.Visible = Convert.ToBoolean(this.Parameters[5].Value);
因为级数0和级数1都与同一轴相连,所以我使用or运算符。我遇到的问题是,当它们都为假时,轴不会隐藏。这是我正在使用的代码:
bool zero = Convert.ToBoolean(this.Parameters[0].Value);
bool one = Convert.ToBoolean(this.Parameters[1].Value);
if ((zero = true)||(one = true))
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = true;
}
else if ((zero = false) && (one = false))
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = false;
}
如何让轴隐藏?提前感谢您的帮助。
重要的是要记住相等比较==
和setter运算符=
之间的区别。在您的if
语句中,您正在使用setter,并希望使用比较。
如果您使用正确的操作符,您的代码可能看起来像这样,这应该解决您的问题:
if ((zero == true)||(one == true))
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = true;
}
else if ((zero == false) && (one == false))
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = false;
}
出现问题的原因是您使用了setter,它自动将0和1设置为true。因此,程序将您的if
语句计算为:"if (true or true)",它总是为真。这就是为什么将值设置为false不起作用的原因。
if (false = zero)
将生成编译时错误。(就我个人而言,我真的不喜欢这种编码风格,对我来说它读起来不干净,但你的里程可能会有所不同。)
我会重写你的语句,使其更清晰,但功能相同:
if (zero || one)
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = true;
}
else
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = false;
}
当你将布尔变量放入if语句时,没有理由将它们与布尔常量进行比较。你的第二个if
是没有必要的,因为这是唯一的情况下,可以发生,如果第一个没有。(即。"if !(0 || 1)"= = ="!零和,1"——这就是所谓的摩根法则。
事实上,整个if语句可以浓缩成一行:
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = zero || one;
我认为你的问题是在使用'='而不是'=='。表达式zero = true
将0设置为true
,并使用该true
值作为表达式值。因此,在第一个条件检查之后,' 0 '总是变为真,'else'分支永远不会执行,因为' 0 '不再为假。
实际上,表达式zero == true
正好等于zero
,因此您可以简化条件:
bool zero = Convert.ToBoolean(this.Parameters[0].Value);
bool one = Convert.ToBoolean(this.Parameters[1].Value);
if (zero || one) // true if 'zero' or 'one' is true
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = true;
}
else // goes here if both 'zero' and 'one' is false
{
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = false;
}
或者
bool zero = Convert.ToBoolean(this.Parameters[0].Value);
bool one = Convert.ToBoolean(this.Parameters[1].Value);
bool axisVisible = zero || one;
((SplineSeriesView)xrChart1.Series[0].View).AxisY.Visible = axisVisible;