При копировании из сетки данных появляются неразрывные символы - PullRequest
1 голос
/ 28 ноября 2011

У меня любопытная проблема.Когда я копирую ячейку (или строку) с пробелами в группах по 2 и более, при вставке эти пробелы заменяются неразрывным символом (Alt + 160).Что более любопытно, если я вставляю в Word, затем копирую из Word и снова вставляю в мою программу, пробелы возвращаются, но если я вставляю в Excel, то копирую из Excel и вставляю в мою программу, неразрывные символы все еще присутствуют.Очевидно, что легкий путь - это не наш путь, нам нужно скопировать / вставить в / из Excel.

Я могу контролировать в своем приложении введение этого символа, заменить его пробелами, добавив (что никогда не бываетхорошая идея), что никто не будет вводить неразрывные символы намеренно.Но мы работаем с другим приложением в VB 6.0 с более чем 200 окнами, и у меня нет разрешения моего босса изменить что-либо в этом приложении.

Я отладил свой код, а сетка данных не имеетнеразрывный характер.В буфере обмена нет неразрывного символа после копирования.И если я копирую тот же текст из текстового поля, при вставке пробелы не заменяются неразрывными символами.это аксель одного столбца любого из моих наборов данных:

<DataGridTextColumn Header="Machine" CanUserSort="True" IsReadOnly="True" 
          MinWidth="10" Width="*" MaxWidth="Infinity" 
          Binding="{Binding Path=NOM_MAQ}">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="ToolTip" Value="{Binding Path=NOM_MAQ}"/>
            <Setter Property="TextTrimming" Value="CharacterEllipsis"/>
            <Setter Property="TextWrapping" Value="NoWrap"/>
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

Я попытался добавить в DataGridTextColumn конвертер:

ClipboardContentBinding="{Binding Path=NOM_MAQ, 
                          Converter={StaticResource QuitNonBreakingConverter}}"

class QuitNonBreakingConverter : IValueConverter
{
     public object Convert(object value, Type targetType, object parameter, 
                           CultureInfo culture)
     {
         string texto = value.ToString();
         StringBuilder sb = new StringBuilder(texto.Length);
         foreach (char c in texto.ToCharArray())
         {
              if (char.Equals(c, System.Convert.ToChar(160)))
              {
                   sb.Append(System.Convert.ToChar(32));
              }
              else sb.Append(c);
         }
         return sb.ToString();
     }

     public object ConvertBack(object value, Type targetType, 
                               object parameter, CultureInfo culture)
     {
         return value;
     }
}

Но, как я уже говорил, сетка данных илибуфер обмена имеет неразрывный символ, поэтому этот преобразователь бесполезен.

Есть идеи, как предотвратить замену символов ??

1 Ответ

0 голосов
/ 28 ноября 2011

Вы смотрели на все варианты данных в буфере обмена?

обычная строка может не иметь неразрывного символа, но может быть один из других более специфических типов? в word / excel сделайте «вставить специальные», чтобы увидеть, какие другие форматы доступны, или перечислите их в коде.

Могу поспорить, что в буфере обмена есть несколько видов данных, и слово предпочитает один, а Excel предпочитает другой, и вы получаете просто текстовую строку в своем коде?

...