山西念星科贸有限公司 2024-07-19 00:03 采纳率: 72%
浏览 11
已结题

C#实例化一个窗体后Button.PerformClick()没有用

问题遇到的现象和发生背景

C#实例化一个窗体后Button.PerformClick()没有用

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
public partial class revenueWindow : Form
{
    private void notIssuedRadioButton_CheckedChanged(object sender, EventArgs e)
    {//实例化:一个新的:收据窗体型,局部变量,并命名为:收据窗体
        ReceiptForm receiptForm = new ReceiptForm();
        //将:局部变量:收据窗体:是否显示在最前端,属性的值,重新赋值为:真
        receiptForm.TopMost = true;
        //将:局部变量:收据窗体,的控件:新建收据,按钮,点击
        receiptForm.newBuiltReceiptButton.PerformClick();-----没有效果
        //将:局部变量:收据窗体,的控件:收入时间,日期选择器,的:结果,属性的值,重新赋值为:当前窗体,的控件:收入时间,日期选择器,的:结果,属性的值
        receiptForm.revenueDateTimePicker.Value = this.revenueDateTimePicker.Value;
        //将:局部变量:收据窗体,的控件:收入日期,日期选择器,的:可见,属性,重新赋值为:不可见
        receiptForm.revenueDateTimePicker.Visible = false;
        //将:局部变量:收据窗体,的控件:入账日期,文本输入框,的:可见,属性,重新赋值为:可见
        receiptForm.dateOfReceipTextBox.Visible = true;
        //将:局部变量:收据窗体,的控件:入账日期,文本输入框,的:是否允许用户输入属性,重新赋值为:不允许顾客输入
        receiptForm.dateOfReceipTextBox.ReadOnly = true;
        //将:局部变量:收据窗体,的控件:入账日期,文本输入框,的:文本属性,重新赋值为:设置为:类变量:收入凭证编号,的值,从第:0,位开始,取:4,位的值---拼接上:年---拼接上:类变量:收入凭证编号,的值,从第:4,位开始,取:2,位的值---拼接上:月---拼接上:类变量:收入凭证编号,的值,从第:6,位开始,取:2,位的值---拼接上:日
        receiptForm.dateOfReceipTextBox.Text = $"{IncomeVoucherNumber.Substring(0, 4)}{IncomeVoucherNumber.Substring(4, 2)}{IncomeVoucherNumber.Substring(6, 2)}日";
        //将:局部变量:收据窗体,的控件:收款账号,组合框,的:现行选中项,属性的值,重新赋值为:当前窗体,的控件:收款账号,组合框,的:现行选中项,属性的值
        receiptForm.receivingAccountComboBox.SelectedIndex = this.receivingAccountComboBox.SelectedIndex;
        //将:局部变量:收据窗体,的控件:金额,文本输入框,的:文本,属性的值,重新赋值为:当前窗体,的控件:收入金额,文本输入框,的:文本,属性的值
        receiptForm.moneyTextBox.Text = this.incomeAmountTextBox.Text;
        //将:焦点:换到:局部变量:收据窗体,的控件:收入金额,文本输入框,上
        receiptForm.paymentUnitTextBox.Focus();
        //将:局部变量:收据窗体,显示出来
        receiptForm.ShowDialog();
    }
}
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

实例化:ReceiptForm,后,自动点击:newBuiltReceiptButton

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-07-19 00:03
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    在C#中,当你实例化一个新的窗体并尝试使用Button.PerformClick()方法来模拟按钮点击时,可能会遇到一些问题。这通常是因为控件尚未完全初始化或窗体尚未显示。以下是一些可能的解决方案:

    1. 确保控件完全初始化:在调用PerformClick()之前,确保控件已经完全初始化。你可以通过调用InitializeComponent()方法来确保这一点。

    2. 在窗体显示后再调用PerformClick():将PerformClick()调用放在窗体显示之后。你可以使用Form.Load事件或在ShowDialog()之后立即调用。

    3. 使用Invoke方法:如果控件是在一个不同的线程中创建的,你可能需要使用Invoke方法来确保控件操作在正确的线程中执行。

    以下是修改后的代码示例:

    public partial class revenueWindow : Form
    {
        private void notIssuedRadioButton_CheckedChanged(object sender, EventArgs e)
        {
            // 实例化一个新的收据窗体,局部变量,并命名为收据窗体
            ReceiptForm receiptForm = new ReceiptForm();
            
            // 将局部变量收据窗体是否显示在最前端的属性值重新赋值为真
            receiptForm.TopMost = true;
    
            // 将局部变量收据窗体的控件收入时间日期选择器的结果属性值重新赋值为当前窗体的控件收入时间日期选择器的结果属性值
            receiptForm.revenueDateTimePicker.Value = this.revenueDateTimePicker.Value;
    
            // 将局部变量收据窗体的控件收入日期日期选择器的可见属性重新赋值为不可见
            receiptForm.revenueDateTimePicker.Visible = false;
    
            // 将局部变量收据窗体的控件入账日期文本输入框的可见属性重新赋值为可见
            receiptForm.dateOfReceipTextBox.Visible = true;
    
            // 将局部变量收据窗体的控件入账日期文本输入框的是否允许用户输入属性重新赋值为不允许顾客输入
            receiptForm.dateOfReceipTextBox.ReadOnly = true;
    
            // 将局部变量收据窗体的控件入账日期文本输入框的文本属性重新赋值为设置为类变量收入凭证编号的值从第0位开始取4位的值拼接上年拼接上类变量收入凭证编号的值从第4位开始取2位的值拼接上月拼接上类变量收入凭证编号的值从第6位开始取2位的值拼接上日
            receiptForm.dateOfReceipTextBox.Text = $"{IncomeVoucherNumber.Substring(0, 4)}年{IncomeVoucherNumber.Substring(4, 2)}月{IncomeVoucherNumber.Substring(6, 2)}日";
    
            // 将局部变量收据窗体的控件收款账号组合框的现行选中项属性值重新赋值为当前窗体的控件收款账号组合框的现行选中项属性值
            receiptForm.receivingAccountComboBox.SelectedIndex = this.receivingAccountComboBox.SelectedIndex;
    
            // 将局部变量收据窗体的控件金额文本输入框的文本属性值重新赋值为当前窗体的控件收入金额文本输入框的文本属性值
            receiptForm.moneyTextBox.Text = this.incomeAmountTextBox.Text;
    
            // 将焦点换到局部变量收据窗体的控件收入金额文本输入框上
            receiptForm.paymentUnitTextBox.Focus();
    
            // 显示窗体
            receiptForm.ShowDialog();
    
            // 在窗体显示后再调用PerformClick
            if (receiptForm.InvokeRequired)
            {
                receiptForm.Invoke(new Action(() => receiptForm.newBuiltReceiptButton.PerformClick()));
            }
            else
            {
                receiptForm.newBuiltReceiptButton.PerformClick();
            }
        }
    }
    

    在这个示例中,我们首先显示窗体,然后在窗体显示后立即调用PerformClick()。我们还使用了InvokeRequired属性来检查是否需要使用Invoke方法来确保操作在正确的线程中执行。这样可以确保按钮点击事件能够正确触发。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月29日
  • 已采纳回答 7月28日
  • 创建了问题 7月19日

悬赏问题

  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的
  • ¥15 我看了您的文章,遇到了个问题。