从类深处的方法访问变量

时间:2015-02-11 17:50:57

标签: c# winforms

如何访问name循环中以及foreach下方的变量try?我需要在我的Main类中引用它。对不起,这是一个愚蠢的问题。

 public class DragDropRichTextBox : RichTextBox
    {

    public DragDropRichTextBox()
    {
        //Enables drag and drop on this class.
        this.AllowDrop = true;
        this.DragDrop += DragDropRichTextBox_DragDrop;
    }

    public void DragDropRichTextBox_DragDrop(object sender, DragEventArgs e)
    {        

        string[] _fileText;
        _fileText = e.Data.GetData(DataFormats.FileDrop) as string[];


        if (_fileText != null)
        {
            foreach (string name in _fileText)
            {
                try
                {
                    this.AppendText(BinaryFile.ReadString(name));
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
    }   

这是我需要从我的主课程中调用它的地方(参见" HERE"下面):

   private void button5_Click(object sender, EventArgs e)
    {
        {
            PrintDialog pd = new PrintDialog();
            pd.PrinterSettings = new PrinterSettings();
            if (DialogResult.OK == pd.ShowDialog(this))
            {
                RawPrinterHelper.SendStringToPrinter(pd.PrinterSettings.PrinterName, HERE);
            }
        }
    }

2 个答案:

答案 0 :(得分:4)

简单明了,你绝对不能

该变量的范围限定为foreach循环。无法在循环外部访问它,因为在循环之外甚至不存在

如果没有循环,它将限定为try块,如果没有,则为方法。即使在这些情况下,变量也不存在于其范围之外

即使它确实如此,它会有什么价值?它是一个迭代变量,因此它在循环的每次传递中都会发生变化。整件事情都没有用。

如果您需要访问它指向/保持的数据,那么您需要将其存储在类级别变量中,或者在这种情况下,将每个值放入{{1} }。

答案 1 :(得分:0)

在这里介绍一些奇怪的东西,但我会回答你的问题并留待它。只是抬头,你所指的(名称)会在你走过foreach循环时不断改变数值。

public class DragDropRichTextBox : RichTextBox
{
    public static List<string> NameList; // Create instance variable

    public DragDropRichTextBox()
    {
        //Enables drag and drop on this class.
        this.AllowDrop = true;
        this.DragDrop += DragDropRichTextBox_DragDrop;
    }

    public void DragDropRichTextBox_DragDrop(object sender, DragEventArgs e)
        {

            string[] _fileText;
            _fileText = e.Data.GetData(DataFormats.FileDrop) as string[];


            if (_fileText != null)
            {
                foreach (string name in _fileText)
                {
                    try
                    {
                        this.AppendText(BinaryFile.ReadString(name);
                        NameList.Add(name); // Assign it inside loop
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
        }       
}

private void button5_Click(object sender, EventArgs e)
    {
            PrintDialog pd = new PrintDialog();
            pd.PrinterSettings = new PrinterSettings();
            if (DialogResult.OK == pd.ShowDialog(this))
            {                        
RawPrinterHelper.SendStringToPrinter(pd.PrinterSettings.PrinterName, DragDropRichTextBox.Name);
            }
    }