Имам бутон, който използвам през цялото време като малък бутон за избор до комбинирано поле. Когато щракна върху бутона, отварям по-голям пълен списък. Тази страна на нещата работи добре и нямам проблем с това..
Проблемът ми е, когато някой ми каза, можеш ли да промениш тази грозна икона, която си избрал, с моята хубава икона.
Обърках се, имам стотици от тези бутони на много формуляри. Затова си помислих, че ще създам персонализирана контрола, наречена PickButton (която е стандартен бутон и куп набор от свойства по подразбиране) и вместо това ще ги пусна във формуляра навсякъде. В кода на персонализираната контрола PickButton зададох някои свойства и изображението на хубавата икона на клиентите.
Така че пускам PickButton от моята кутия с инструменти във формуляра, засега нещата изглеждат доста добре и се чувствам малко умен. Сега си мисля, че ще се върна към моята хубава икона, а не към скапаната, която клиентът избра, и ще променя кода в персонализираната контрола PickButton. Но не мога да се отърва от тази икона на клиенти, защото кодът, когато се изпълнява PickButton, се случва преди кода във файла на дизайнера, който има иконата на клиентите.
Така че целта ми беше да имам контрола PickButton и да мога да променям иконата и други свойства на едно място и всички свойства да бъдат зададени, когато екземпляр на контролата бъде създаден и показан във формуляра.
Не бях ли толкова умен и тръгнах да постигна задачата по грешен начин???
Това е моят персонализиран контролен клас PickButton
public class PickButton : Button
{
public PickButton()
{
InitialiseButton();
}
internal void InitialiseButton()
{
this.ImageAlign = ContentAlignment.MiddleCenter;
this.Image = WindowsFormsApplication1.Properties.Resources.Cancel.ToBitmap();
this.Size = new Size( 28, 28 );
this.Dock = DockStyle.Fill;
this.Margin = new Padding( 0, 2, 2, 0 );
this.Text = string.Empty;
}
}
Сега пускам един във формуляра си и кодът в дизайнера е както следва
//
// pickButton1
//
this.pickButton1.Dock = System.Windows.Forms.DockStyle.Fill;
this.pickButton1.Image = ((System.Drawing.Image)(resources.GetObject("pickButton1.Image")));
this.pickButton1.Location = new System.Drawing.Point(0, 0);
this.pickButton1.Margin = new System.Windows.Forms.Padding(0, 2, 2, 0);
this.pickButton1.Name = "pickButton1";
this.pickButton1.Size = new System.Drawing.Size(284, 262);
this.pickButton1.TabIndex = 0;
this.pickButton1.Text = "pickButton1";
this.pickButton1.UseVisualStyleBackColor = true;
Сега искам да променя изображението, така че променям кода на PickButton, за да използвам различна икона
this.Image = WindowsFormsApplication1.Properties.Resources.Browse.ToBitmap();
Стартирайте приложението и първата икона все още е тази, която се показва поради този ред код във файла на дизайнера
this.pickButton1.Image = ((System.Drawing.Image)(resources.GetObject("pickButton1.Image")));
PickButton
? - person Cody Gray   schedule 26.07.2013OnLoad
(или нещо подобно, паметта ми е малко размита) и преназначете иконата към вашата там. - person Sameer Singh   schedule 27.07.2013