Apa yang harus saya lakukan jika saya tidak ingin beberapa properti publik suatu komponen ditambahkan ke metode InitializeComponent() oleh VS selama desain? Saya sudah mencoba menambahkan [Browsable(false)] ke atribut tetapi tidak berhasil juga.
Kode saya adalah sebagai berikut:
/// <ringkasan>
/// Kotak daftar tarik-turun jenis komunikasi pengontrol.
/// </ringkasan>
kelas publik CommunicationTypeComboBox : ComboBox
{
/// <ringkasan>
/// Membuat instance kotak daftar.
/// </ringkasan>
Tipe Komunikasi PublikComboBox()
{
Item.Tambahkan("Port Serial");
Item.Tambahkan("TCP");
}
/// <ringkasan>
/// Dapatkan semua item di kotak daftar.
/// </ringkasan>
[Dapat Dijelajahi (salah)]
publikkan Item ObjectCollection baru
{
dapatkan { return base.Items }
}
}
Tempatkan kontrol pada formulir, dan VS akan secara otomatis menambahkan beberapa kode ke metode InitializeComponent(). Bagian yang berani.
//
// cmbJenis Komunikasi
//
this.cmbCommunicationType.DropDownStyle = Sistem.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbCommunicationType.FormattingEnabled = benar;
this.cmbCommunicationType.Items.AddRange(objek baru[] {
"port serial",
"TCP"});
this.cmbCommunicationType.Location = Sistem.Gambar.Point baru(124, 66);
this.cmbCommunicationType.Name = "cmbCommunicationType";
this.cmbCommunicationType.SelectedItem = Xunmei.Door.CommunicationType.SerialPort;
this.cmbCommunicationType.Size = Sistem.Gambar.Ukuran baru(121, 20);
this.cmbCommunicationType.TabIndex = 2;
this.cmbCommunicationType.SelectedIndexChanged += Sistem baru.EventHandler(this.cmbCommunicationType_SelectedIndexChanged);
Ini akan menjadi seperti ini seiring dengan bertambahnya jumlah pengeditan. Apakah ada cara lain selain tidak menambahkan item di konstruktor?
this.cmbCommunicationType.Items.AddRange(objek baru[] {
"port serial",
"TCP",
"port serial",
"TCP",
"port serial",
"TCP",
"port serial",
"TCP",
"port serial",
"TCP"});
Setelah beberapa hari bekerja keras, akhirnya saya menemukan kelas DesignOnlyAttribute.
Menentukan apakah properti hanya dapat disetel pada waktu desain.
Anggota yang ditandai dengan menyetel DesignOnlyAttribute ke true hanya dapat disetel pada waktu desain. Biasanya, properti ini hanya ada pada waktu desain dan tidak sesuai dengan properti sebenarnya pada objek runtime.
Anggota yang tidak memiliki atribut (Attribute) atau ditandai dengan menyetel DesignOnlyAttribute ke false dapat disetel pada saat run time. Standarnya salah.
Menambahkan DesignOnlyAttribute ke atribut Items dari CommunicationTypeComboBox dapat menyelesaikan masalah ini dengan sempurna.
/// <ringkasan>
/// Dapatkan semua item di kotak daftar.
/// </ringkasan>
[Hanya Desain (salah)]
publikkan Item ObjectCollection baru
{
dapatkan { return base.Items }
}