пятница, 29 января 2010 г.

А знаете ли вы...

... что стандартные окна Windows (ошибка/информация/предупреждение) поддерживают сочетание клавиш Ctrl+C (заголовок и текст сообщения копируются в буфер обмена) ?

вторник, 19 января 2010 г.

DataGridView + вставка из буфера обмена

Если вы еще с этим не сталкивались - то я вас обрадую: стандартный DataGridView в буфер обмена данные копировать умеет, а вот обратно - нет :( Однако, решение данной проблемы есть.

- В свойствах формы прописать свойство keypreview равным true
- В KeyUp добавить следующий обработчик событий:

private void form1_KeyUp(object sender, KeyEventArgs e)
{
   //if user clicked Shift+Ins or Ctrl+V (paste from clipboard)
   if ((e.Shift && e.KeyCode == Keys.Insert) || (e.Control && e.KeyCode == Keys.V))
   {
      char[] rowSplitter = { '\r', '\n' };
      char[] columnSplitter = { '\t' };

      //get the text from clipboard
      IDataObject dataInClipboard = Clipboard.GetDataObject();
      string stringInClipboard = (string)dataInClipboard.GetData(DataFormats.Text);

      //split it into lines
      string[] rowsInClipboard = stringInClipboard.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries);

      //get the row and column of selected cell in grid
      int r = grid.SelectedCells[0].RowIndex;
      int c = grid.SelectedCells[0].ColumnIndex;

      //add rows into grid to fit clipboard lines
      if (grid.Rows.Count < (r + rowsInClipboard.Length))
        grid.Rows.Add(r + rowsInClipboard.Length - grid.Rows.Count);

      // loop through the lines, split them into cells and place the values in the corresponding cell.
      for (int iRow = 0; iRow < rowsInClipboard.Length; iRow++)
      {
        //split row into cell values
        string[] valuesInRow = rowsInClipboard[iRow].Split(columnSplitter);

        //cycle through cell values
        for (int iCol = 0; iCol < valuesInRow.Length; iCol++)
        {
          //assign cell value, only if it within columns of the grid
          if (grid.ColumnCount - 1 >= c + iCol)
            grid.Rows[r + iRow].Cells[c + iCol].Value = valuesInRow[iCol];
        }
      }
   }
}

Обращаю внимание, что valuesInRow[iCol] необходимо привести к нужному типу данных, а то потом будут проблемы.

P.S.: Оригинал можно почитать здесь

iTunesOutlook

Вот несмотря на весь мой опыт и как сисадмина, и как программиста - некоторые вещи остаются для меня загадкой:



четверг, 14 января 2010 г.

RCM v1.2

А вот еще одна полезная библиотека, содержащая в себе модифицированные версии базовых контролов Windows Forms с поддержкой скинов. Выглядит все это дело вот так:


или вот так:


среда, 13 января 2010 г.

Навороченный ListView

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

ХР:


Виста/7:




Проект так же размещен и на sourceforge.