Может быть, мои коды немного сложны, но дело в том, что при попытке сделать видимыми некоторые текстовые поля при заполнении таблицы с помощью initializeForm (), мерцает задержка / интерфейс пользователя. Вот пример, см. Форму ввода (слева)
Я знаю, что это из-за initializeTbl (), который работает так медленно. Поэтому я поместил его во вторую строку, но каким-то образом он был выполнен одновременно с clearInput (0) или, другими словами, до выполнения clearInput (0).
Я пытался использовать двойной буфер и включить WS_EX_COMPOSITED (без мерцания, но с задержкой около 2 секунд)
public void initializeForm()
{
clearInput(0); //Refresh input form, and make all Textbox visible
initializeTbl(); //Clear and Filling table's Row
}
//RESET INPUT PANEL(TO EMPTY)
public void clearInput(int mode)
{
if (this.mode == 0 || mode == 0)
{
editKategoriBtn.Visible = false;
editSatuanBtn.Visible = false;
}
this.mode = mode;
//RESET UI
if (mode == 0)
modeInsert();
else if (mode == 1)
modeUpdate();
//REMOVE SATUAN FORM
persatuanTb.Visible = false;
satuanLine.Visible = false;
//RESET FORM TEXT
satuanDd.Clear();
kategoriDd.Clear();
setDDKategori();
setDDSatuan();
selectedSatuan = -1;
idBrgTb.Text = "ID Barang";
namaBrgTb.Text = "Nama Barang";
stokBrgTb.Text = "Jumlah Stok";
persatuanTb.Text = "Satuan(PCS)";
hargaBeliTb.Text = "Harga Beli";
setLineColor();
//RESET VARIABLE
barangID = "";
barangName = "";
checkHargaJual = false;
//RESET ARRAY
arrayGrosir = new List<List<WindowsFormsControlLibrary1.BunifuCustomTextbox>> { };
arrayQty = new List<List<WindowsFormsControlLibrary1.BunifuCustomTextbox>> { };
arraySatuanHJ = new List<String> { };
arrayJmlSatuan = new List<String> { };
arrayHj = new List<LinkLabel> { };
//RESET HARGA JUAL LINKLABEL
hjPanel.Controls.Clear();
}
public void initializeTbl()
{
String id_trans = String.Empty;
if (tabelBarang.Rows.Count != 0)
{
id_trans = Convert.ToString(tabelBarang.SelectedRows[0].Cells["id_brg"].Value);
}
int curBaris = tabelBarang.RowCount;
String filter = "";
if (searchTb.Text.Count() >= 3 && searchTb.Text != "Cari Barang")
{
filter = "AND (tb_barang.id_brg Like '%" + searchTb.Text + "%' OR tb_barang.nama_brg Like '%" + searchTb.Text + "%') ";
}
String query = "SELECT DISTINCT id_brg,nama_brg,ctg_name,nama_satuan,convert(DOUBLE PRECISION, jml_satuan) as jml_satuan,convert(DOUBLE PRECISION, stock) as stock FROM " +
"tb_barang,tb_category,tb_satuan WHERE " +
"tb_barang.id_kategori=tb_category.ctg_id AND tb_barang.id_satuan=tb_satuan.id_satuan " + filter +
"ORDER BY stock";
int newBaris = db.getRowNumber(query);
if (curBaris != newBaris || searchTb.Text == "Cari Barang")
{
if (tabelBarang.Rows.Count != 0)
clearTable();
SqlCommand cmd = new SqlCommand(query, db.sqlcon);
using (SqlDataReader read = cmd.ExecuteReader())
{
object[] tbBarang;
while (read.Read())
{
object id_brg = read.GetValue(read.GetOrdinal("id_brg"));
object nama_brg = read.GetValue(read.GetOrdinal("nama_brg"));
object ctg_name = read.GetValue(read.GetOrdinal("ctg_name"));
object nama_satuan = read.GetValue(read.GetOrdinal("nama_satuan"));
object jml_satuan = read.GetValue(read.GetOrdinal("jml_satuan"));
object stock = read.GetValue(read.GetOrdinal("stock"));
if (nama_satuan.ToString() != "PCS" && nama_satuan.ToString() != "KG")
{
jml_satuan += " PCS/" + nama_satuan;
}
else
{
jml_satuan += " " + nama_satuan;
}
if (nama_satuan.ToString() != "KG")
stock += " PCS";
else
stock += " KG";
tabelBarang.Rows.Add(tbBarang = new object[] { id_brg, nama_brg, ctg_name, nama_satuan, jml_satuan, stock });
}
}
}
if (selectRow(0, id_trans))
{
tabelBarang.FirstDisplayedScrollingRowIndex = tabelBarang.SelectedRows[0].Index;
tabelBarang.PerformLayout();
}
}
//SET INPUT FORM TO INSERT MODE
private void modeInsert()
{
submitBtn.Text = "TAMBAH BARANG";
submitBtn.BackColor = Color.Gray;
searchTb.Text = "Cari Barang";
stockBrgLbl.Text = "Jumlah Stok";
satuanBrgLbl.Visible = true;
satuanBarangPanel.Visible = true;
//satuanBarangPanel.Enabled = true;
hargaBeliLbl.Visible = true;
hargaBeliPnl.Visible = true;
//hargaBeliPnl.Enabled = true;
stockBrgLbl.Visible = true;
stokBarangPnl.Visible = true;
//stokBarangPnl.Enabled = true;
persatuanTb.Enabled = true;
}
//SET INPUT FORM TO UPDATE MODE
private void modeUpdate()
{
submitBtn.Text = "UPDATE BARANG";
submitBtn.BackColor = Color.Orange;
hargaBeliLbl.Visible = false;
hargaBeliPnl.Visible = false;
satuanBrgLbl.Visible = false;
satuanBarangPanel.Visible = false;
stockBrgLbl.Visible = false;
stokBarangPnl.Visible = false;
persatuanTb.Visible = false;
}