c# - 提到ListBoxt时的StackOverFlowException?

时间:2013-04-06 11:25:22

标签: c# winforms

当我点击buttonOpenAlbum并在AlbumListBox中选择了一个项目时,我试图打开一个新表单(FormAlbum)。

如果我在buttonOpenAlbum_Click中有这个:

private void buttonOpenAlbum_Click(object sender, EventArgs e)
{
        FormAlbum MusicForm = new FormAlbum(this);
        MusicForm.ShowDialog();
}

新的打开没有错误。但是,只要我提到" AlbumListBox.SelectedItem" (如下面的Form FormMain中的代码),我得到一个" StackOverflowException未处理"于:

public ListBox AlbumListBox
{
    get
    { // <-This bracket here is where the error highlights

我不明白为什么我会收到此错误,只是因为它必须与AlbumListBox有关。我究竟做错了什么?感谢任何帮助,谢谢。

Form FormMain:

public FormMain()
{
    InitializeComponent();
}

private void buttonAddAlbum_Click(object sender, EventArgs e)
{
    FormAlbumAC addAlbumForm = new FormAlbumAC(this);
    addAlbumForm.ShowDialog();
}

private void buttonOpenAlbum_Click(object sender, EventArgs e)
{
    if (AlbumListBox.SelectedItem != null)
    {
        MessageBox.Show(AlbumListBox.SelectedItem.ToString());
        FormAlbum MusicForm = new FormAlbum(this);
        MusicForm.ShowDialog();
    }
    else
    {
        MessageBox.Show("You need to select an album from the list to open.");
    }
}

public static class PublicVars
{
    public static List<Album> AlbumList { get; set; }

    static PublicVars()
    {
        AlbumList = new List<Album>(MAX_ALBUMS);
    }
}

public ListBox AlbumListBox
{
    get
    {
        return AlbumListBox;
    }
}

1 个答案:

答案 0 :(得分:3)

查看您的房产实施:

public ListBox AlbumListBox
{
    get
    {
        return AlbumListBox;
    }
}

它只是递归地调用自己。如果我们将其转换为方法,可能会更容易看到:

public ListBox GetAlbumListBox()
{
    return GetAlbumListBox();
}

这就是你有溢出的原因。目前还不清楚你意味着它做什么......你期望价值来自哪里?您可能需要一个变量来支持该属性。您希望设置返回的值是什么?

我还强烈阻止PublicVars类的设计。除了命名,你基本上使用全局变量 - 不是一个好主意。确定哪些类需要访问数据,以及如何正确地获取数据。