サポート&サービス

Home > サポート&サービス > テクニカルサポート > ナレッジベース

テクニカルサポート

製品に関する技術的なサービスを提供しています。製品別の技術情報(ナレッジベース)および、対応環境情報をご覧いただけます。また、E-mailによるテクニカルサポートのお申し込みもこちらで受け付けています。

ComponentOne サブスクリプション製品をご購入された方

サブスクリプションにて、ComponentOne製品(ComponentOne Studio、Wijmo、Xuni)をご購入された方は、下記のComponentOne Studioサイトからユーザー登録をお願いいたします。

ComponentOne サブスクリプション製品のユーザー登録を行う

ナレッジベース

セルが結合されている場合、コピー&ペースト操作が不正になる
文書番号 : 41412     文書種別 : Bug
登録日 : 2017/11/16     最終更新日 : 2017/11/29
文書を印刷する
対象製品
SPREAD for WPF 2.0J
ステータス
回避方法あり
詳細
セルが結合されている場合(自動マージが設定されている場合を含む)、当該セル全体またはセル内の一部の文字列を選択してコピーし、他のセルやテキストエディタに貼り付けた際、以下の問題が発生します。
  • セル内の一部の文字列を選択してコピーした場合、すべての文字列が貼り付けられる
  • ペーストした際、文字列の後ろに余計な空白文字が追加される
回避方法
以下のように、コピー処理を変更します。

◎サンプルコード(VB.NET)
Public Sub New()
  InitializeComponent()
  CommandManager.AddPreviewCanExecuteHandler(Me.GcSpreadGrid1, AddressOf OnCanExecuteCopy)
End Sub

Friend Shared Sub OnExecutedCopy(sender As Object, e As ExecutedRoutedEventArgs)
  Dim spread As GcSpreadGrid = TryCast(sender, GcSpreadGrid)
  If spread IsNot Nothing Then
    spread.EditCommands.Copy.Execute(e.Parameter)
  End If
End Sub

Friend Shared Sub OnCanExecuteCopy(sender As Object, e As CanExecuteRoutedEventArgs)
  If e.Command Is ApplicationCommands.Copy Then
    Dim spread As GcSpreadGrid = TryCast(sender, GcSpreadGrid)
    Dim selectRanges = spread.SelectedRanges
    If selectRanges.Count = 1 Then
      Dim range = selectRanges(0)
      If range.RangeType = CellRangeType.Cells AndAlso (range.RowCount > 1 OrElse range.ColumnCount > 1) Then
        If range.Equals(spread.GetSpanInfo(range.Row, range.Column)) OrElse range.Equals(spread.GetAutoMergedInfo(range.Row, range.Column)) Then
          Dim textBox = TryCast(e.OriginalSource, TextBox)
          If textBox IsNot Nothing AndAlso textBox.SelectionLength > 0 Then
            e.ContinueRouting = False
            e.CanExecute = True
            e.Handled = True
          End If
        End If
      End If
    End If
  End If
End Sub

◎サンプルコード(C#)
public MainWindow()
{
  InitializeComponent();
  CommandManager.AddPreviewCanExecuteHandler(this.GcSpreadGrid1, OnCanExecuteCopy);
}

internal static void OnExecutedCopy(object sender, ExecutedRoutedEventArgs e)
{
  GcSpreadGrid spread = sender as GcSpreadGrid;
  if (spread != null)
  {
    spread.EditCommands.Copy.Execute(e.Parameter);
  }
}
internal static void OnCanExecuteCopy(object sender, CanExecuteRoutedEventArgs e)
{
  if (e.Command == ApplicationCommands.Copy)
  {
    GcSpreadGrid spread = sender as GcSpreadGrid;
    var selectRanges = spread.SelectedRanges;
    if (selectRanges.Count == 1)
    {
      var range = selectRanges[0];
      if (range.RangeType == CellRangeType.Cells && (range.RowCount > 1 || range.ColumnCount > 1))
      {
        if (range.Equals(spread.GetSpanInfo(range.Row, range.Column)) || range.Equals(spread.GetAutoMergedInfo(range.Row, range.Column)))
        {
          var textBox = e.OriginalSource as TextBox;
          if (textBox != null && textBox.SelectionLength > 0)
          {
            e.ContinueRouting = false;
            e.CanExecute = true;
            e.Handled = true;
          }
        }
      }
    }
  }
}
キーワード
60046

この情報は、疑問・問題解決のお役に立ちましたか?

    


こちらに入力されたご質問には回答できませんので、製品に関するお問い合わせは、別途「E-mailサポート」をご利用ください。


※ 個人情報保護のため、個人情報の記入はご遠慮ください。

このページの先頭へ