隐藏带有参数的轴

本文关键字:参数 隐藏 | 更新日期: 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;