C# 如何使用一个窗体上的单选按钮来指示另一个窗体上的操作?
我有一个应用程序,其中我有一个“首选项”表单,以便允许用户选择他们的首选项。表单有一些单选按钮,允许用户选择他们的首选项。在另一个表单上,我有一些代码,根据选中哪个按钮,它们的反应会有所不同 代码/首选项界面如下所示:C# 如何使用一个窗体上的单选按钮来指示另一个窗体上的操作?,c#,date,radio-button,preferences,C#,Date,Radio Button,Preferences,我有一个应用程序,其中我有一个“首选项”表单,以便允许用户选择他们的首选项。表单有一些单选按钮,允许用户选择他们的首选项。在另一个表单上,我有一些代码,根据选中哪个按钮,它们的反应会有所不同 代码/首选项界面如下所示: private void DateStamp() { if (UserPreferences.Instance.ddmmyyyy.Checked) { int CaretPosition = richTextBoxP
private void DateStamp()
{
if (UserPreferences.Instance.ddmmyyyy.Checked)
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("dd-MM-yyyy");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (UserPreferences.Instance.mmddyyyy.Checked)
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("MM-dd-yyyy");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (UserPreferences.Instance.yyyyddmm.Checked)
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("yyyy-dd-MM");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (UserPreferences.Instance.yyyymmdd.Checked)
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("yyyy-MM-dd");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
private void button1_Click(object sender, EventArgs e)
{
if (ddmmyyyy.Checked)
DataFormat = ddmmyyyy.Text;
else if (mmddyyyy.Checked)
DataFormat = mmddyyyy.Text;
else if (yyyyddmm.Checked)
DataFormat = yyyyddmm.Text;
else if (yyyymmdd.Checked)
DataFormat = yyyymmdd.Text;
//--------------------------------------------------
if (qwerty.Checked)
KeyboardFormat = qwerty.Text;
else if (qwertz.Checked)
KeyboardFormat = qwertz.Text;
else if (azerty.Checked)
KeyboardFormat = azerty.Text;
else if (dvorak.Checked)
KeyboardFormat = dvorak.Text;
this.Close();
}
单选按钮后面没有代码。修饰符是公共的
不过,我遇到的问题是,当我尝试添加“Datestamp”时,我得到一个System.NullReferenceException{“对象引用未设置为对象的实例。”}错误出现在“if(UserPreferences.instance.ddmmyyyy.Checked)”行。我不知道现在该怎么办
因此,当用户添加日期戳时,应该检查单选按钮的选中状态,并添加与选中单选按钮对应的日期戳
提前感谢你的帮助
---编辑---
在“首选项”窗体上,“保存”按钮后面的代码如下:
private void DateStamp()
{
if (UserPreferences.Instance.ddmmyyyy.Checked)
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("dd-MM-yyyy");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (UserPreferences.Instance.mmddyyyy.Checked)
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("MM-dd-yyyy");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (UserPreferences.Instance.yyyyddmm.Checked)
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("yyyy-dd-MM");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (UserPreferences.Instance.yyyymmdd.Checked)
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("yyyy-MM-dd");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
private void button1_Click(object sender, EventArgs e)
{
if (ddmmyyyy.Checked)
DataFormat = ddmmyyyy.Text;
else if (mmddyyyy.Checked)
DataFormat = mmddyyyy.Text;
else if (yyyyddmm.Checked)
DataFormat = yyyyddmm.Text;
else if (yyyymmdd.Checked)
DataFormat = yyyymmdd.Text;
//--------------------------------------------------
if (qwerty.Checked)
KeyboardFormat = qwerty.Text;
else if (qwertz.Checked)
KeyboardFormat = qwertz.Text;
else if (azerty.Checked)
KeyboardFormat = azerty.Text;
else if (dvorak.Checked)
KeyboardFormat = dvorak.Text;
this.Close();
}
和主要形式字符串:
public partial class Basic_Word_Processor : Form
{
public string keyboardFormat;
public string dataFormat;
以及主窗体“ShowDialog”代码:
问题是它没有保存按钮的“选中”状态。对话框一关闭,它就会返回到上一个状态。我认为通过理解此示例,您可以完成您要做的事情: 我有一个名为
Form1
的主表单,我想在此表单中显示用户选择。
此外,我还添加了一个名为“首选项”(Preferences)的新表单,用户可以选择日期格式和键盘布局:
我的单选按钮命名如下:
RB_D_1
RB_D_2
.
.
.
private void DateStamp()
{
if (dateFormat.ToUpper() == "DD/MM/YYYY")
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("dd-MM-yyyy");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (dateFormat.ToUpper() == "MM/DD/YYYY")
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("MM-dd-yyyy");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (dateFormat.ToUpper() == "YYYY/DD/MM")
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("yyyy-dd-MM");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (dateFormat.ToUpper() == "YYYY/MM/DD")
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("yyyy-MM-dd");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
}
用户点击submitchanges
后,我们将检查选中的单选按钮,并将其Text
属性(例如RB\u D_1.Text
为“dd/MM/yyyy”)存储到名为DateFormat
的公共字符串变量中
public string DataFormat, KeyboardFormat;
private void CMDSubmit_Click(object sender, EventArgs e)
{
if (RB_D_1.Checked)
DataFormat = RB_D_1.Text;
else if (RB_D_2.Checked)
DataFormat = RB_D_2.Text;
else if (RB_D_3.Checked)
DataFormat = RB_D_3.Text;
else if (RB_D_4.Checked)
DataFormat = RB_D_4.Text;
else
DataFormat = "MM/DD/YYYY"; // default format
//--------------------------------
if (RB_L_1.Checked)
KeyboardFormat = RB_L_1.Text;
else if (RB_L_2.Checked)
KeyboardFormat = RB_L_2.Text;
else if (RB_L_3.Checked)
KeyboardFormat = RB_L_3.Text;
else if (RB_L_4.Checked)
KeyboardFormat = RB_L_4.Text;
else
KeyboardFormat = "QWERTY"; // default format
this.Close();
}
现在,我们将用户选择保存在两个字符串变量中,以便从表单1
在Form1
中,每当用户单击设置
时,我们将从首选项
表单中创建一个对象,并在关闭首选项表单后将其显示给用户,我们将检查我们已经讨论过的两个字符串变量,并决定如何处理这些结果:
例如,我将这些结果存储到另外两个字符串变量中,并在textboxs
private void CMDSettings_Click(object sender, EventArgs e)
{
// showing the Preferences form to user
Preferences pref = new Preferences();
pref.ShowDialog();
// getting results from Preferences Form
dateFormat = pref.DataFormat;
keyboardFormat = pref.KeyboardFormat;
// Showing the Result in TextBoxes
textBox1.Text = dateFormat ;
textBox2.Text = keyboardFormat;
}
更新2:
更改日期戳()
如下:
RB_D_1
RB_D_2
.
.
.
private void DateStamp()
{
if (dateFormat.ToUpper() == "DD/MM/YYYY")
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("dd-MM-yyyy");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (dateFormat.ToUpper() == "MM/DD/YYYY")
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("MM-dd-yyyy");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (dateFormat.ToUpper() == "YYYY/DD/MM")
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("yyyy-dd-MM");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
else if (dateFormat.ToUpper() == "YYYY/MM/DD")
{
int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
string currentDate = DateTime.Now.ToString("yyyy-MM-dd");
richTextBoxPrintCtrl1.SelectedText = currentDate;
}
}
更新3:
要记住用户选择,请执行以下操作:
将此功能添加到首选项中
public void UpdateUserChoice(string date,string keyboard)
{
if (date == RB_D_1.Text)
RB_D_1.Checked = true;
else if (date == RB_D_2.Text)
RB_D_2.Checked = true;
else if (date == RB_D_3.Text)
RB_D_3.Checked = true;
else if (date == RB_D_4.Text)
RB_D_4.Checked = true;
//---------------------------
if (keyboard == RB_L_1.Text)
RB_L_1.Checked = true;
else if (keyboard == RB_L_2.Text)
RB_L_2.Checked = true;
else if (keyboard == RB_L_3.Text)
RB_L_3.Checked = true;
else if (keyboard == RB_L_4.Text)
RB_L_4.Checked = true;
}
并改变向用户显示的旧方式,如下所示:
private void CMDSettings_Click(object sender, EventArgs e)
{
Preferences pref = new Preferences();
pref.UpdateUserChoice(dateFormat, keyboardFormat);
pref.ShowDialog();
dateFormat = pref.DataFormat;
keyboardFormat = pref.KeyboardFormat;
textBox2.Text = keyboardFormat;
}
谢谢我应该提到的是,“首选项”表单与主表单是分开的。此处显示的代码位于主窗体上,单击按钮时运行。首选项在单独的表单上。我不确定是否理解您的问题,但我在prefForm
中添加了第一块代码,并在用户单击main表单的按钮上添加了第二块代码,因此在向用户显示prefForm
后,我们可以了解用户选择和使用的选项它们在mainForm
中,这不是你想要的吗?我会尽量解释得更清楚一点(对不起,我最近才开始编程)。我有一个表单(如上图所示),它有偏好选项。在我的主窗体上,有一个“datestamp”选项,当用户单击按钮时,它将日期输入rtb。单选按钮应该控制日期的格式(如代码所示),但我得到的错误是System.NullReferenceException{“对象引用未设置为对象的实例。”}行“if(UserPreferences.instance.ddmmyyyy.Checked)”上的错误。我需要克服这个错误,这样它才能像预期的那样工作。我要让用户检查按钮并保存首选项,这样即使他们关闭并打开表单,检查也保持不变。我会尽快保存检查状态,只要我有这个部分首先工作。没问题,等一下,我会在这里添加一个项目,然后你可以检查它是否为你工作良好。谢谢。唯一的问题是现在它没有保持按钮处于选中状态。不过,它确实有效。我怎么能检查呢?谢谢。我还用你的代码让键盘部分工作。谢谢你今天和我在一起。希望我现在可以通过您的更新解决此问题。:)欢迎您,我的朋友,请选择下面的答案作为您的问题答案,我将非常感激,我真的很高兴我今天能够帮助您,祝您好运:)它现在似乎运行良好。如果还有什么事情发生,我会通过这个问题通知你。非常感谢您今天的帮助。很抱歉,我很痛苦,但是我如何保存检查状态,以便用户重新加载程序时,它会加载程序的设置,这样他们就不必在每次加载程序时都指定它了?