2

SpreadsheetGear の WorkbookView コントロールを使用する C# アプリケーションがあります。ユーザーは、セルのコメントに加えた変更を保存できるようにしたいと考えています。

ユーザーがコメントを編集したときに変更をキャプチャする方法を知っている人はいますか? コメントが編集されたときにセル編集イベントが発生せず、ユーザーがコメントに加えた変更をキャプチャする方法が見つかりません。

4

2 に答える 2

3

コメントを個別に保存する方法がわからないジョーの返信を読む前に、workbookViewのセルをループして、フォームが閉じているときにコメントを取得することで、コメントを保存することにしました。

彼の返信を見た後、workbookView1_ShapeSelectionChangedイベントとworkbookView1_ShapeActionイベントの組み合わせを使用して、コメントを入力した直後にコメントを取得する方法を見つけました。workbookView1_ShapeSelectionChangedイベントは、コメントボックスが編集のために開かれたとき、およびコメントボックスが編集のために閉じられたときに発生します。コメントボックスを開くために起動すると、コメントボックスを閉じるとActiveCellではなくなる可能性があるため、ActiveCellを取得します。コメントが変更された場合にコメントボックスが閉じたときにコメントを取得するために、そのセルを使用します。workbookView1_ShapeActionイベントは、コメントボックスに新しい文字が入力されるたびに発生します。これは、コメントを変更済みとしてマークするのに役立ちます。コメントが保存された後、commentChanged変数はfalseに戻されます。ジョーが彼の答えに投稿したコードを使用したコードは次のとおりです。

private void workbookView1_ShapeAction(object sender, SpreadsheetGear.Windows.Forms.ShapeActionEventArgs e)
{
  switch (e.ShapeActionType)
  {
    case SpreadsheetGear.Windows.Forms.ShapeActionType.TextChanged:
      if (e.Shape.Type == SpreadsheetGear.Shapes.ShapeType.Comment)
      {
        //set comment changed flag to true
        _commentChanged = true;
      }
      break;
  } 
}

private void workbookView1_ShapeSelectionChanged(object sender, SpreadsheetGear.Windows.Forms.ShapeSelectionChangedEventArgs e)
{
  if (_commentChanged)
  {
    //get comment
    string comment = _commentCell.Comment.Shape.TextFrame.Characters.Text;

    //save comment
    //....

    //set comment changed flag to false
    _commentChanged = false;
  }
  else
  {
    //get the cell whose comment is being edited
    _commentCell = workbookView1.ActiveCell;
  }
}
于 2009-08-14T16:37:59.013 に答える
1

残念ながら、答えは「そうではありません」です。

以下に示すように、ShapeAction イベントをキャッチできますが、ShapeAction イベントは実際にはコメント用ではなく図形用に設計されているため、現在のテキストを取得できず (テキストはまだ図形に格納されていません)、セルを取得することさえできません。コメントはに属します。それでも、役に立つかもしれないので、いくつかのコードを貼り付けます。

    private void workbookView1_ShapeAction(object sender, SpreadsheetGear.Windows.Forms.ShapeActionEventArgs e)
    {
        switch (e.ShapeActionType)
        {
            case SpreadsheetGear.Windows.Forms.ShapeActionType.TextChanged:
                if (e.Shape.Type == SpreadsheetGear.Shapes.ShapeType.Comment)
                {
                    // Unfortunately, this is as far as we can get since IShape
                    // does not have a way to get back to the cell which owns the comment.
                    //
                    // Furthermore, the text is not yet stored in the IShape, so we
                    // cannot get the current text either.
                }
                break;
        }
    }

SpreadsheetGear のサポートにこの機能を要求する電子メールを送信すると、この機能の要求がリストに追加され、あなたの電子メール アドレスが関連付けられます。

于 2009-08-13T14:58:12.280 に答える