C# 当我更改表单的语言时,为什么按钮的位置和大小会发生变化?

C# 当我更改表单的语言时,为什么按钮的位置和大小会发生变化?,c#,winforms,controls,multilingual,C#,Winforms,Controls,Multilingual,我正在winforms上开发一个包含许多控件的应用程序。我希望应用程序能够使用多种语言,并且按钮和标签的文本能够正确更改。问题是,在我第一次更改语言(从默认更改为西班牙语/英语)时,按钮和标签的位置和大小都会更改,但我希望它们保持最初的状态。有人知道为什么会这样吗 这是我使用的代码: private void English_ToolStrip_Click(object sender, EventArgs e) { English_ToolStrip.Ch

我正在winforms上开发一个包含许多控件的应用程序。我希望应用程序能够使用多种语言,并且按钮和标签的文本能够正确更改。问题是,在我第一次更改语言(从默认更改为西班牙语/英语)时,按钮和标签的位置和大小都会更改,但我希望它们保持最初的状态。有人知道为什么会这样吗

这是我使用的代码:

private void English_ToolStrip_Click(object sender, EventArgs e)
        {
            English_ToolStrip.Checked = true;
            Spanish_ToolStrip.Checked = false;
            ChangeLanguage(typeof(Form1), "en");
        }

private void ChangeLanguage(Type t, string language)
        {
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language);
            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(language);
            foreach (Control c in Controls)
            { 
                resources.ApplyResources(c, c.Name, new CultureInfo(language));
            }
            foreach (ToolStripItem item in toolStrip1.Items)
            {
                if (item is ToolStripDropDownItem)
                    foreach (ToolStripItem dropDownItem in ((ToolStripDropDownItem)item).DropDownItems)
                    {
                        resources.ApplyResources(dropDownItem, dropDownItem.Name, new CultureInfo(language));
                    }
                resources.ApplyResources(item, item.Name, new CultureInfo(language));
            }
        }
我想我在初始化表单时可能遗漏了一些东西,因为只有在我第一次更改语言时才会更改大小和位置。在那之后,我换哪种语言或换多少次都不重要,但大小和位置保持不变


检查是否有多个资源文件(
form.en.resx
form.en US.resx
是不同的)。在winforms designer中,您可以加载(并保存)相应资源文件中的所有数据。控件
位置
大小
对于每种语言可能不同。是不是按钮文本实际上更大,因此需要更多空间?@Sinatr我有三个资源文件:Form1.resx、Form1.en.resx和Form1.es.resx,它们是在我更改每种语言的文本时自动生成的。我看过了,所有语言的位置和大小都是一样的。@Neil我试过使用不同的按钮文本,即使文本较短,大小也总是会发生变化。你能链接到显示大小变化(前后)的图片吗?