C# WinForms如何获取按钮背景图片的无扩展名文件名?
解决C# WinForms井字棋按钮符号获取问题
你之前的方法行不通的核心原因:
BackgroundImage.ToString()返回的是图片对象的类型名称(比如System.Drawing.Bitmap),并非图片文件的实际路径,所以用Path.GetFileNameWithoutExtension解析肯定拿不到x或o。- 若没在设置背景图时给按钮的
Tag赋值,Tag.ToString()只会返回空值或默认字符串,自然得不到正确符号。
下面给你几种直接可行的解决办法:
方法1:利用Tag存储符号(最简便)
在给按钮设置背景图的同时,把对应符号同步存到按钮的Tag属性里:
// 示例:给按钮00设置X的背景图 Button targetBtn = Controls["00"] as Button; targetBtn.BackgroundImage = Image.FromFile(@"x.jpg"); targetBtn.Tag = "x"; // 绑定符号 // 如果是O的情况 targetBtn.BackgroundImage = Image.FromFile(@"o.jpg"); targetBtn.Tag = "o";
后续判断胜负时,直接读取Tag的值即可:
string currentSymbol = targetBtn.Tag.ToString();
方法2:用字典映射按钮与符号
如果不想依赖Tag,可以在Form类里维护一个字典,专门记录每个按钮对应的符号:
// 在Form类内部定义字典 private Dictionary<Button, string> btnSymbolMap = new Dictionary<Button, string>(); // 设置背景图时同步更新字典 Button targetBtn = Controls["00"] as Button; targetBtn.BackgroundImage = Image.FromFile(@"x.jpg"); btnSymbolMap[targetBtn] = "x"; // 获取符号时直接从字典取值 string currentSymbol = btnSymbolMap[targetBtn];
方法3:从图片对象绑定路径(不推荐,较繁琐)
如果一定要从背景图反向获取文件名,需要在加载图片时把路径绑定到图片对象的Tag上:
string imgPath = @"x.jpg"; Image xImage = Image.FromFile(imgPath); xImage.Tag = imgPath; // 给图片对象绑定路径 Button targetBtn = Controls["00"] as Button; targetBtn.BackgroundImage = xImage;
之后解析路径获取符号:
string imgPath = targetBtn.BackgroundImage.Tag.ToString(); string currentSymbol = Path.GetFileNameWithoutExtension(imgPath);
这种方法需要注意图片对象的生命周期管理,容易出现资源释放问题,不如前两种方法可靠。
内容的提问来源于stack exchange,提问作者Vaggelaras
相关产品推荐
相关产品推荐

