You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#桌面应用实现DataGridView接收阿拉伯语值显示到TextBox问题

C# WinForm DataGridView阿拉伯语输入与TextBox联动显示适配方案

阿拉伯语属于从右到左(RTL)书写体系,默认WinForm控件的从左到右配置、多余的字符串处理逻辑是造成输入显示错乱的核心原因,按以下步骤配置即可正常使用:

1. 配置控件基础RTL属性

分别给DataGridView和显示用的TextBox配置双向文本渲染属性,可以直接在设计器属性面板修改,也可以在窗体初始化代码中添加如下配置:

// 写在InitializeComponent()方法之后即可
// DataGridView RTL适配
dataGridView1.RightToLeft = RightToLeft.Yes;
dataGridView1.RightToLeftLayout = true;

// TextBox RTL适配
textBox1.RightToLeft = RightToLeft.Yes;

2. 正确做单元格值到TextBox的同步

注意:绝对不要手动对阿拉伯语字符串做反转、转码等多余操作,阿拉伯语的显示方向由控件渲染层负责处理,手动调用string.Reverse()、做特殊编码转换恰恰是造成字符顺序错乱的最常见原因。
如果需要在单元格编辑完成后同步值,绑定CellEndEdit事件即可:

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex < 0 || e.ColumnIndex < 0) return;
    var cellVal = dataGridView1[e.ColumnIndex, e.RowIndex].Value;
    textBox1.Text = cellVal?.ToString() ?? string.Empty;
}

如果需要输入过程中实时同步,绑定EditingControlShowing事件获取编辑中的控件文本:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    e.Control.TextChanged -= EditCtrl_TextChanged;
    e.Control.TextChanged += EditCtrl_TextChanged;
}

private void EditCtrl_TextChanged(object sender, EventArgs e)
{
    textBox1.Text = (sender as Control)?.Text ?? string.Empty;
}

3. 异常排查点

如果完成上述配置后仍有显示问题,逐一检查以下配置项:

  • 项目目标框架选择.NET Framework 4.0及以上版本,或.NET 6+,低版本框架存在Unicode双向文本渲染的已知bug
  • 确认系统已安装阿拉伯语语言包,输入时切换到阿拉伯语输入法
  • 检查业务逻辑中是否存在对输入字符串的截断、强制格式化、非Unicode编码存储等操作,这类操作会破坏阿拉伯语连字和字符顺序

尝试输入阿拉伯语值的示例截图

内容的提问来源于stack exchange,提问作者Amine Boukharii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:15:30