LINUX.ORG.RU

help me кто-нибудь (c#, gtk)

 , , , ,


1

3

в общем целом, новичок в программировании как таковом, по крайней мере, на cs
поставил себе monodevelop, и, после visual studio с windows forms, gtk для меня как китайская грамота в каких-то случаях)

задача состоит в том, чтобы при нажатии на кнопку создавался новый элемент класса NoteBook с заданными размерами и позицией
на данный момент имеется такой вот обработчик на клац по кнопке:
code

protected void OnAddColBtnClicked(object sender, EventArgs e) {
    int x, y, z;
    Button AddColBtn = (Button) sender;
    x = 30;
    y = 80;
    z = 10;
    Notebook[] note = new Notebook[z];
    for (int i = 1; i <= 10; i++)
    {
        note[i].SizeRequest();
        note[i].HeightRequest = 300;
        note[i].WidthRequest = 600;
        note[i].SetUposition(x, y);
        x += note[i].WidthRequest + 20;
    }
    if (note[1] != null && note[1].Parent == this)
    {
        this.Add(note[2]);
    }
    else if (note[2] != null && note[2].Parent == this)
    {
        this.Add(note[3]);
    }
    else if (note[3] != null && note[3].Parent == this)
    {
        this.Add(note[4]);
    }
    else if (note[4] != null && note[4].Parent == this)
    {
        this.Add(note[5]);
    }
    else if (note[5] != null && note[5].Parent == this)
    {
        this.Add(note[6]);
    }
    else if (note[6] != null && note[6].Parent == this)
    {
        this.Add(note[7]);
    }
    else if (note[7] != null && note[7].Parent == this)
    {
        this.Add(note[8]);
    }
    else if (note[8] != null && note[8].Parent == this)
    {
        this.Add(note[9]);
    }
    else if (note[9] != null && note[9].Parent == this)
    {
        this.Add(note[10]);
    }
    else 
    {
        this.Add(note[1]);
    }
 }

приложение запускается, но при нажатии на кнопку просто вылетает без какой-либо ошибки
также высвечивается предупреждение о том, что SetUposition устарел
Помогите, пожалуйста :)



Последнее исправление: yxungquri (всего исправлений: 6)

Ответ на: комментарий от fluorite

более того, я не знаю С#, но вижу что для элементов массива Notebook[] note = new Notebook[z]; Parent нигде не устанавливается, следовательно всегда будет выполнятся this.Add(note[1])

а ещё конкретнее, в коде

Notebook[] note = new Notebook[z];
    for (int i = 1; i <= 10; i++)
    {
        note[i].SizeRequest();

вообще конструктор не вызывается, опять же, не знаю С#, что он там неявно может делать, но скорее всего, массив заполнен ссылками на null и тогда ничего удивительного, что программа вылетает при попытке обратиться к нулевому элементу

next_time ★★★★★
()

при нажатии на кнопку просто вылетает без какой-либо ошибки

Есть же режим отладки (debug) Запустите программу в нём, поставьте точку останова на первую строку метода OnAddColBtnClicked, пройдитесь в режиме отладки построчно, увидите, где именно программа вылетает.

next_time ★★★★★
()

А почему б не переписать эту ерунду

    if (note[1] != null && note[1].Parent == this)
    {
        this.Add(note[2]);
    }
    else if (note[2] != null && note[2].Parent == this)
    {
        this.Add(note[3]);
    }
    else if (note[3] != null && note[3].Parent == this)
    {
        this.Add(note[4]);
    }
    ...
в виде цикла?

SZT ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.