У меня возникли проблемы с этим, Я пытаюсь достичь: У меня есть основная форма, является формой запуска (MDI Container) , а затем несколькими формами, которые являются дочерними формами, чего я пытаюсь достичь, является следующее: это код, который происходит на каждом экране на данный момент, и я хочу построить его в класс, но, я не знаю, как передать это (за клик события происходят на каждой форме в данный момент, и я хочу, чтобы запустить из меню нажмите на родительском MDI (контейнер) :Передача Это (моей основной формы) классу, который обрабатывает изменение направления и изменение языка C#/Winforms
UPDATE
Я получил его на работу со всеми ChildForms Thanx @JamesBarras это как мой код работает сейчас, я должен удалить нажатие кнопки события, ибо только работает с MenuStripItem_Click событие
#region Change Language
private void englishToolStripMenuItem_Click(object sender, EventArgs e) {
Class1 cls = new Class1();
/// This is for Main and all the forms of MainForms Children
foreach (var childForm in this.MdiChildren) {
cls.ChangeLanguage(sender, log, childForm, this, this.menuStrip, "en");
//ChangeLanguage("en", childForm);
}
}
private void arabicToolStripMenuItem_Click(object sender, EventArgs e) {
Class1 cls = new Class1();
/// This is for Main and all the forms of MainForms Children
foreach (var childForm in this.MdiChildren) {
cls.ChangeLanguage(sender, log, childForm, this, this.menuStrip, "ar");
//ChangeLanguage("ar", childForm);
}
}
#endregion
Я только что создал этот класс, как этот код работает на той же странице, щелкните событие как метод, я хочу, класс, который я использую/созданный (ChangeLangu возраст), чтобы знать, что это есть, потому что в нормальной форме, я могу сказать это, но в классе он не знает, что это на форме, что у меня есть мой нажмите событие, вот мой код в классе, который я создал:
UPDATE
Я прекрасно настроил класс, чтобы сделать EXA ctly то, что мне нужно это сделать, но, я до сих пор не могут перевести MenuStripItems и я получаю значениеэто, но до сих пор нет MenuStrip Перевести только переключатель направления работы
namespace languageChange.Classes { class Class1 {
#region Methods
/// <summary>
/// This is mainly to change the language and the layout direction
/// </summary>
/// <param name="sender"></param>
/// <param name="log"></param>
/// <param name="form"></param>
/// <param name="thiss"></param>
/// <param name="strip"></param>
/// <param name="lang"></param>
public void ChangeLanguage(object sender, Logger log, Form form, Form thiss, Control strip, string lang) {
string senderText = sender.GetType().ToString();
RightToLeft direction = RightToLeft.No;
if (lang == "ar") {
direction = RightToLeft.Yes;
}
thiss.RightToLeft = direction;
CultureInfo CurrentLocale = new CultureInfo(lang);
Thread.CurrentThread.CurrentCulture = new CultureInfo(lang);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
foreach (Control childForm in form.Controls) {
ComponentResourceManager resources = new ComponentResourceManager(form.GetType());
resources.ApplyResources(childForm, "$this");
childForm.RightToLeft = direction;
if (log.isDebugEnabled) log.Debug("--------------------------------------> c = " + childForm.Name);
RefreshResources(log, lang, childForm, resources, CurrentLocale, strip);
}
}
/// <summary>
/// This is to for the Refresh all the Resources
/// </summary>
/// <param name="log"></param>
/// <param name="lang"></param>
/// <param name="ctrl"></param>
/// <param name="resources"></param>
/// <param name="CurrentLocale"></param>
/// <param name="strip"></param>
private static void RefreshResources(Logger log, string lang, Control ctrl, ComponentResourceManager resources, CultureInfo CurrentLocale, Control strip) {
ctrl.SuspendLayout();
resources.ApplyResources(ctrl, ctrl.Name, CurrentLocale);
foreach (Control control in ctrl.Controls) {
RefreshResources(log, lang, control, resources, CurrentLocale, strip); // recursion
if (strip is ToolStrip) {
RefreshResources(((ToolStrip)strip).Items, resources, CurrentLocale);
}
ctrl.ResumeLayout(true);
if (log.isTraceEnabled) log.Trace("c=" + ctrl.Name);
}
}
/// <summary>
/// Which is done here [Refer to previous Summary]
/// </summary>
/// <param name="col"></param>
/// <param name="resources"></param>
/// <param name="CurrentLocale"></param>
private static void RefreshResources(ToolStripItemCollection col, ComponentResourceManager resources, CultureInfo CurrentLocale) {
foreach (ToolStripMenuItem item in col) {
if (item is ToolStripMenuItem) {
RefreshResources(((ToolStripMenuItem)item).DropDownItems, resources, CurrentLocale);
}
resources.ApplyResources(item, item.Name, CurrentLocale);
}
}
#endregion }}
UPDATE
так я получил все, чтобы перевести и изменить направление для MenuStripItems и MenuStrip, а также за исключением.
Пожалуйста, помогите мне, поскольку это действительно важно, и я борюсь.
Это приложение Winforms с использованием Visual Studio 2013 Ultimate с C#.
Не против регистратора, это то, что я просто добавил для входа трассировки и отладчик
Комментарии для расширенного обсуждения; этот разговор был [перемещен в чат] (http://chat.stackoverflow.com/rooms/80293/discussion-on-answer-by-james-barrass-passing-thisof-my-main-form-to-a- класс-т). – Taryn