コード例 #1
0
        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();
            }
        }