0

現在、マウスクリックでテキストを変更するフィールドがあります。このフィールドはレポートの複数のページにありますが、クリックするとそのページのテキストのみが変更されます。そのための私のコードは次のとおりです。

 const string sShowDetail2 = "Show Cumulative";
 const string sHideDetail2 = "Hide Cumulative";
 ArrayList expandedValues2 = new ArrayList();


    // This function returns a value indicating whether a certain  
    // category's details should be expanded. 

    bool ShouldShowDetail2(int CategoryID)
    {
        return expandedValues2.Contains(CategoryID);

    }



    private void lbShowHide2_BeforePrint(object sender, PrintEventArgs e)
    {
        XRLabel label = (XRLabel)sender;

        if (ShouldShowDetail2((int)label.Tag))
        {
            label.Text = sHideDetail2;
        }
        else
        {
            label.Text = sShowDetail2;
        }
    }

    private void lbShowHide2_PreviewClick(object sender, PreviewMouseEventArgs e)
    {
        // Obtain the category's ID stored in the label's Tag property. 
        int index = (int)e.Brick.Value;

        // Determine whether the current category's details are shown. 
        bool showDetail2 = ShouldShowDetail2(index);

        // Toggle the visibility of the category's details. 
        if (showDetail2)
        {
            expandedValues2.Remove(index);
        }
        else
        {
            expandedValues2.Add(index);
        }

これで、クリック時にフィールドのすべてのインスタンス(すべてのページ)を切り替えるだけでよい別のフィールドができました。クリックした特定のタグを読み取るのに必要ありません。すべてのタグが同時に変更されるためです。私の問題は、マウスクリックでそれらすべてを変更する方法がわからないことです。上記のコードを変更して、ラベルのすべてのインスタンスを変更するにはどうすればよいですか?

4

1 に答える 1

1

これがあなたが試すことができるものです

private void ChangeXRLabels(Control control)
{
    foreach(Control childControl in control.Controls)
    {
         XRLabel label = childControl as XRLabel;
         if(label != string.Empty)
            label.Text = "Your Text Value goes Here";
         else if(childControl.Controls.Count > 0)
             ChangeXRLabels(childControl);
    }
}
于 2013-03-19T15:56:33.757 に答える