EntryLevelGuy! Ответов: 1

Как сделать цикл performclick.


Как я могу зациклить performclick (), а затем после выполнения условия он перестанет выбирать следующую строку?

Что я уже пробовал:

Это мой код для следующей строки после нажатия кнопки.

private void MaterialRaisedButton6_Click(object sender, EventArgs e)
       {
           if (nRow < dataGridView1.RowCount)
           {
               dataGridView1.Rows[selectedIndex].Selected = false;
               dataGridView1.Rows[++selectedIndex].Selected = true;
               label1.Text = "Sum";
               label2.Text = "Selected Cell:";
               label3.Text = "Average:";

               materialRaisedButton4.PerformClick();
           }
       }


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

dataGridView1.ClearSelection();

           string startHeader = this.materialSingleLineTextField2.Text;
           string endHeader = this.materialSingleLineTextField3.Text;
           string aveHeader = this.materialSingleLineTextField4.Text;

           int startIndex = -1;
           int endIndex = -1;

           for (int col= 0;col < this.dataGridView1.Columns.Count;col++)
           {
             if(this.dataGridView1.Columns[col].HeaderText == startHeader)
               {
                   startIndex = col;
               }
               else if (this.dataGridView1.Columns[col].HeaderText == endHeader)
               {
                   endIndex = col;
                   break;
               }
           }

           for(int i = startIndex; i < endIndex; i++)
           {

               dataGridView1.Rows[selectedIndex].Cells[i].Selected = true;
           }

           float next = 0;
           float sum = 0;

           //
           for (int x = 0; x < dataGridView1.SelectedCells.Count; x++)
           {

               try
               {
                   if (!dataGridView1.SelectedCells.Contains(dataGridView1.Rows[x].Cells[x]))
                   {
                       if (float.TryParse(dataGridView1.SelectedCells[x].FormattedValue.ToString(), out next))
                       {
                           sum += next;
                           float ave = dataGridView1.SelectedCells.Count;
                           float get = sum / ave;
                           label1.Text = "Sum: " + sum;
                           label2.Text = "Selected Cell: " + dataGridView1.SelectedCells.Count.ToString();
                           label3.Text = "Average: " + get;

                           if (label3.Text != null)
                           {
                               dataGridView1.Rows[selectedIndex].Cells[materialSingleLineTextField4.Text].Value = get;


                           }



                       }


мой код работает, просто я хочу, чтобы button6 автоматически выполнял щелчок, а затем останавливался, если выбранные ячейки в строке не имеют значения или нет никакого значения для вычисления(так как мой gridview идет далеко вниз, даже ячейки там не имеют значений).
Спасибо

1 Ответов

Рейтинг:
1

BillWoodruff

С точки зрения поведения пользовательского интерфейса: я думаю, что любой автоматический/повторный выбор/отмена выбора элементов элемента управления не является хорошей практикой, а любые многократные клики кода по кнопке, которые также могут иметь визуальный эффект, являются плохой практикой.

Использование цикла "while" и нарушение приведенных выше рекомендаций :):

private void btn_Click(object sender, EventArgs e)
{
    keepGoing = true;

    DataGridViewRow currentRow;
    int currentNdx;

    while (keepGoing)
    {
        currentNdx = dataGridView1.SelectedRows[0].Index;

        if (currentNdx < dataGridView1.RowCount - 1)
        {
            dataGridView1.Rows[currentNdx].Selected = false;

            currentRow = dataGridView1.Rows[++currentNdx];

            currentRow.Selected = true;

            keepGoing = calculateAverage(currentRow, currentNdx);
        }
        else
        {
            keepGoing = false;
        }
    }
}

private bool calculateAverage(DataGridViewRow currentRow, int currentNdx)
{
    // do the business the Labels, and calculation 
    return true; // or false ... depending on ?
}