C # переназначение значений массива (на один шаг ниже 5-4), которые находятся внутри объекта во время события - PullRequest
1 голос
/ 20 марта 2011

Просто изучая C # (наряду с программированием объектов и событий), и учитель на самом деле не показал нам, как добиться цели.

class Postion
{
    private int[] x_coordinate = new int[100];
    private int[] y_coordinate = new int[100];
    private double[] speed = new double[100];
    private int[] direction = new int[100];
    const int MAX_SPEED = 50;
    int counter = 0;


    public Postion()
    {
        x_coordinate[counter] = 0;
        y_coordinate[counter] = 0;
        speed[counter] = 0;
        direction[counter] = 0;
    }


    //get set methods
    public int X
    {
        get
        {
            return x_coordinate[counter];
        }
        set
        {
            x_coordinate[counter] = value;
        }
    }

Между ними есть еще один класс

Значения назначаются нажатием кнопки.

 Airplane newplane = new Airplane();
  private void BtnCreate_Click(object sender, EventArgs e)
    {   
        bool box = txtName.Text != "";
        if (box == true)
            newplane.Name = txtName.Text;
        else { }

        box = txtx.Text != "";
        if (box == true)
            newplane.PlanePostion.X = int.Parse(txtx.Text);
        else { }

И т. Д.

Я могу вызвать значения массива для отображения в окне списка.

 private void lsbplanes_SelectedIndexChanged(object sender, EventArgs e)
    {
        placeholder = newplane.PlanePostion.Counter;
        newplane.PlanePostion.Counter = lsbplanes.SelectedIndex;
        if (newplane.PlanePostion.Counter < 0)
            newplane.PlanePostion.Counter = 0;
        else { }

        lblxshow.Text = Convert.ToString(newplane.Getx());

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

Это то, что мне нужнопопробуйте сделать это до сих пор, он устанавливает все вышеупомянутые на 0, но удаляет удаленный штраф

private void BtnKill_Click(object sender, EventArgs e)
    {
        if (lsbplanes.SelectedIndex == -1)
        {
            MessageBox.Show("Please select an item first.", "No item selected", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
        else
        {
            placeholder = lsbplanes.SelectedIndex;
            newplane.PlanePostion.Counter = lsbplanes.Items.Count;

            while (newplane.PlanePostion.Counter > placeholder)
            {
                placex = newplane.PlanePostion.X;
                placey = newplane.PlanePostion.Y;
                placespeed = newplane.Getspeed();
                placedic = newplane.Getdirection();

                newplane.PlanePostion.Counter--;

                newplane.PlanePostion.X = placex;
                newplane.PlanePostion.Y = placey;
                newplane.PlanePostion.Speed = placespeed;
                newplane.PlanePostion.Direction = placedic;

            }
            lsbplanes.Items.RemoveAt(lsbplanes.SelectedIndex);


            newplane.PlanePostion.Counter = lsbplanes.Items.Count;
        } 

кто-нибудь может мне помочь в этом?

1 Ответ

0 голосов
/ 23 марта 2011

Я разрывался в этом вопросе, точно отвечайте, в чем заключается ваша проблема, или предлагайте изменить его.

@ Марк прав, вы должны использовать какой-то List для вашего объекта Planeили ReadOnlyObservableCollection ).

@ Marc также прав, что проблема в том, что вы пытаетесь сдвинуть значения с конца списка и перезаписать их.В этих случаях лучше начать с точки удаления и потянуть их вниз.

Так что, если у вас есть {1,2,3,4,5,6,7,8,9,10}, и выудалить из пункта 5, у вас будет {1,2,3,4,10,10,10,10,10,10}.Код ниже позволит вам в итоге {1,2,3,4,6,7,8,9,0}

        placeholder = lsbplanes.SelectedIndex;
        int idx = placeholder;

        while (idx < lsbplanes.Items.Count)
        {
            newplane.PlanePosition.Counter = idx+1;
            placex = newplane.PlanePostion.X;
            placey = newplane.PlanePostion.Y;
            placespeed = newplane.Getspeed();
            placedic = newplane.Getdirection();

            newplane.PlanePostion.Counter = idx;

            newplane.PlanePostion.X = placex;
            newplane.PlanePostion.Y = placey;
            newplane.PlanePostion.Speed = placespeed;
            newplane.PlanePostion.Direction = placedic;

            idx++;

        }

        // Need to zero out elements at the end
        newplant.PlanePosition.Counter = lsbplanes.Items.Count;
        /* Zeroing code goes here */

        newplane.PlanePosition.Counter = placeholder;
        lsbplanes.Items.RemoveAt(lsbplanes.SelectedIndex);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...