public void FindInForm(FindData findData) { if (_decodeForm.CardsTextBox.Visible != true) { IList <Card> cards = _decodeForm.CardsGrid.GetCardsFromGrid(); //do nothing if no cards in document if (cards.Count == 0) { MessageBox.Show(_decodeForm.DecodeForm, "Cannot search in an empty document.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //start looking in the first selected cell. if no cell selected start in 0 cell. int variantStartRow = 0; if (_decodeForm.VariantsGrid.SelectedCells.Count > 0) { variantStartRow = _decodeForm.VariantsGrid.SelectedCells[0].RowIndex; } int cardStartRow = 0; int cardStartColumn = CARD_READER_COLUMN; if (_decodeForm.CardsGrid.SelectedCells.Count > 0) { cardStartRow = _decodeForm.CardsGrid.CellRowIndex(_decodeForm.CardsGrid.SelectedCells[0]); cardStartColumn = _decodeForm.CardsGrid.SelectedCells[0].ColumnIndex; //move to next if needed if (findData.Next) { //move to next/previous card nextCellToFindInGrid(_decodeForm.CardsGrid, ref cardStartRow, ref cardStartColumn, ref variantStartRow, findData.DirectionDown); } else { //save this point as startpoint. findData.SetStartPoint(cardStartRow, cardStartColumn, variantStartRow); } } StringComparison compareMethod = StringComparison.CurrentCultureIgnoreCase; if (findData.MatchCase) { compareMethod = StringComparison.CurrentCulture; } int cardRow = cardStartRow; int cardColumn = cardStartColumn; int variantRow = variantStartRow; //get starting point to know when search is finished. findData.GetStartPoint(out cardStartRow, out cardStartColumn, out variantStartRow); do { if (FindInField(cardRow, cardColumn, variantRow, findData.FindString, compareMethod)) { if (findData.Next && (cardRow == cardStartRow) && (cardColumn == cardStartColumn) && (variantRow == variantStartRow)) { MessageBox.Show(_decodeForm.DecodeForm, "Find reached the starting point of the search.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Information); } return; } //move to next/previous card/variant nextCellToFindInGrid(_decodeForm.CardsGrid, ref cardRow, ref cardColumn, ref variantRow, findData.DirectionDown); }while ((cardRow != cardStartRow) || (cardColumn != cardStartColumn) || (variantRow != variantStartRow)); if (findData.Next) { MessageBox.Show(_decodeForm.DecodeForm, "The search has reached the end of the document.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show(_decodeForm.DecodeForm, "Cannot find \"" + findData.FindString + "\".", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { _decodeForm.CardsTextBox.SelectionStart = _decodeForm.CardsTextBox.Find(findData.FindString, _decodeForm.CardsTextBox.SelectionStart + 1, RichTextBoxFinds.None); _decodeForm.CardsTextBox.SelectionLength = findData.FindString.Length; _decodeForm.CardsTextBox.Focus(); } }