Вы можете сделать это во время выполнения, не беспокоясь о файлах. Если вы используете встроенные ресурсы, вам не нужно беспокоиться об именах файлов и об очистке изменений от предыдущих сессий и записи в файлы. Когда вы создаете кнопку Toolstrip по умолчанию, она будет использовать встроенный ресурс (и вы можете ссылаться на общий ресурс, который используется другими формами, если вы используете файл resx в вашем проекте). Но если у вас есть это, вам даже не нужно клонировать изображение (сделать новый растр), как вы это делаете. Вот несколько более простых примеров кода, которые обновят изображение на месте:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
((Bitmap)toolStripButton1.Image).DrawText("B", Font, SystemBrushes.ControlText,
new RectangleF(new PointF(0, 0), toolStripButton1.Image.Size));
}
}
public static class ImageExtensions
{
public static void DrawText(this Bitmap image, string stringToDraw, Font font,
Brush brush, RectangleF rectangleF)
{
using (Graphics g = Graphics.FromImage(image))
{
g.DrawString(stringToDraw, font, brush, rectangleF);
}
}
}
Поскольку изображение не сохраняется в файл, оно автоматически сбрасывается при каждом запуске программы. Это то, что ты хочешь, верно?
Если вам нужно сбросить изображение во время работы программы, вы можете скопировать сгенерированный код, который устанавливает изображение, в InitializeComponent. Например:
private void toolStripButton1_Click(object sender, EventArgs e)
{
this.toolStripButton1.Image.Dispose();
System.ComponentModel.ComponentResourceManager resources =
new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
((Bitmap)toolStripButton1.Image).DrawText("C", Font, SystemBrushes.ControlText,
new RectangleF(new PointF(0, 0), toolStripButton1.Image.Size));
}