c# - 在 form_load 和 button_click 中调用函数有什么区别吗?

标签 c# lifecycle

我通过将数据显示到数据 GridView 来完成一个窗口窗体应用程序。但是在datagridview中显示数据时出现了一些问题。

函数:

private void MySQL_ToDatagridview4()
{
    dataGridView3.Columns.Clear();
    mcon.Close();
    mcon.Open();
    MySqlDataAdapter MyDA = new MySqlDataAdapter();
    string sqlSelectAll = "SELECT Item_Name,Item_Pic from stockitem ORDER BY Main_Category_ID ASC, Item_Name ASC";
    MyDA.SelectCommand = new MySqlCommand(sqlSelectAll, mcon);
    DataTable table = new DataTable();
    MyDA.Fill(table);
    BindingSource bSource = new BindingSource();
    bSource.DataSource = table;
    this.dataGridView3.DataSource = bSource;
    DataGridViewImageColumn imageColumn = new DataGridViewImageColumn();
    imageColumn.HeaderText = "Pic";
    dataGridView3.Columns.Insert(0, imageColumn);
    for (int i = 0; i < table.Rows.Count; i++)
    {
        try
        {
            String pic = table.Rows[i]["Item_Pic"].ToString();
            Byte[] bitmapData = Convert.FromBase64String(FixBase64ForImage(pic));
            System.IO.MemoryStream streamBitmap = new System.IO.MemoryStream(bitmapData);
            def = new Bitmap((Bitmap)Image.FromStream(streamBitmap));
        }
        catch (Exception e)
        {
            MessageBox.Show(e.StackTrace);
        }
        dataGridView3.Rows[i].Cells[0].Value = def;
    }
    dataGridView3.Columns.Remove("Item_Pic");
    foreach (DataGridViewRow row in dataGridView3.Rows)
    {
        row.Height = 110;
    }
    foreach (DataGridViewColumn col in dataGridView3.Columns)
    {
        col.Width = 110;
    }

    for (int i = 0; i < dataGridView3.ColumnCount; i++)
    {
        dataGridView3.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
        dataGridView3.AutoResizeColumns();
        dataGridView3.Columns[i].DefaultCellStyle.Font = new System.Drawing.Font("Verdana", 8F, FontStyle.Bold);
    }
    mcon.Close();
}

在 Form_Load 中调用

private void Form1_Load(object sender, EventArgs e)
{
    MySQL_ToDatagridview4();
}

结果:

Image

然后当我点击按钮时

private void button6_Click(object sender, EventArgs e)
{
    MySQL_ToDatagridview4();
}

结果:

Image2

为什么结果如此不同?它调用相同的函数。

最佳答案

是的。它们是有区别的。引用Form events life cycle .表单加载事件发生在表单首次显示之前。

尝试使用表单显示事件。它可能会对您有所帮助,确保 UI 线程流畅(我的意思是说在页面完全显示和绘制之前避免使用消息框之类的东西)。

关于c# - 在 form_load 和 button_click 中调用函数有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39422230/

相关文章:

lifecycle - 对于Storm Spouts,何时调用declareOutputFields()?

安卓 Activity 生命周期

android - 重新启动 Activity 中的 fragment

c# - 当数组大小大于 Int32.MaxValue 时,.Length 行为与 .LongLength

c# - 等效于 Objective C BitConverter

c# - CompositeDisposable - 确定性顺序?

c# - 正则表达式 C#。匹配特定的子字符串并仅返回该子字符串

c# - 了解网络服务器上的 LinkDemand 安全性

flutter - 错误 - 未处理的异常 : This widget has been unmounted,,因此状态不再具有上下文

c# - 我应该把Azure WorkerRole base.OnStop();