Visual Studio 设计器 - 限制属性网格以显示语言属性的某些特定语言

2024-01-29

我正在 Visual Studio 2013 (C#) 中进行开发,并正在寻找一种方法来使 Windows 窗体的语言选择更容易本地化。

在设计器中,您可以在“下选择您想要的语言”Design"→"Language如果您需要新的本地化表单,Visual Studio 会通过创建必要的本地化文件来完成剩下的工作。

问题是:目前我只使用两种不同的语言,每次当我在这些本地化表单之间切换时,它都会向我显示所有可能语言的列表,其中错误的单击可能会导致 Visual Studio 创建我不熟悉的语言的本地化版本不想,这只是烦人,并且会因为更多文件而使项目变得混乱。

有谁知道如何将设计器选项中显示的语言限制为所需的数量和选择?


语言属性是仅设计时属性,不属于Form班级。它是使用扩展提供程序在表单设计时添加的扩展属性。它的类型为CultureInfo并使用一个TypeConverter它显示了所有可用的文化。

作为解决方法,您可以使用BaseForm包含类似的属性FormLanguage并在get,返回值Language财产和在set,设置值Language财产。然后继承你所有的表单BaseForm。这样,改变就够了FormLanguage财产。

还创建一个自定义类型转换器CultureInfo只显示你想要的那些文化,然后要改变语言,改变就足够了FormLanguage财产。

这是我用作解决方法的代码。不要忘记从中继承你的表单BaseClass.

using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Globalization;
using System.Linq;
using System.Windows.Forms;
public partial class BaseForm : Form
{
    [TypeConverter(typeof(MyCultureInfoConverter))]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public CultureInfo FormLanguage
    {
        get
        {
            return TypeDescriptor.GetProperties(this)["Language"]
                .GetValue(this) as CultureInfo;
        }
        set
        {
            TypeDescriptor.GetProperties(this)["Language"].SetValue(this, value);
        }
    }
}
public class MyCultureInfoConverter : CultureInfoConverter
{
    public override StandardValuesCollection 
        GetStandardValues(ITypeDescriptorContext context)
    {
        var values = CultureInfo.GetCultures(CultureTypes.SpecificCultures | 
            CultureTypes.NeutralCultures)
            .Where(x => x.Name == "fa-IR" || x.Name == "en-US").ToList();
        values.Insert(0, CultureInfo.InvariantCulture);
        return new StandardValuesCollection(values);
    }
}

当您选择fa-IR from FormLanguage那么Language变成Persian自动,因为我们在 setter 中编写的代码FormLanguage。您可以添加您需要的任何其他语言MyCultureInfoConverter.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio 设计器 - 限制属性网格以显示语言属性的某些特定语言 的相关文章

  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 在 C++11 中省略返回类型

    我最近发现自己在 C 11 模式下的 gcc 4 5 中使用了以下宏 define RETURN x gt decltype x return x 并编写这样的函数 template
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • 无法使用 Ninject 将依赖项注入到从 Angular 服务调用的 ASP.NET Web API 控制器中

    我将 Ninject 与 ASP NET MVC 4 一起使用 我正在使用存储库 并希望进行构造函数注入以将存储库传递给其中一个控制器 这是实现 StatTracker 接口的上下文对象 EntityFramework public cla
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 检查应用程序是否从 Visual Studio 调试会话中启动

    我正在开发一个安装系统范围键盘的应用程序 钩 我不想在运行调试时安装这个钩子 从视觉工作室内部构建 否则它会挂起工作室 以及最终的系统 我可以通过检查是否 DEBUG 符号已定义 但是 当我调试时release应用程序的版本是 有一种方法可
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens

随机推荐