使用My.Resources向PictureBox添加资源图片失败求助
VB.NET资源图片动态加载问题解决方案
核心问题原因
ComboBox选中值与资源文件实际名称不匹配,比如选项文本是“百慕大”但资源名是“Bermuda”,或者存在大小写、空格、特殊字符差异,导致ResourceManager.GetObject无法定位资源。
具体修复方法
统一名称匹配规则
确保ComboBox下拉选项的文本和资源文件的名称完全一致(包括大小写、空格、特殊符号)。例如资源名为Bermuda,ComboBox选项就必须是Bermuda,不能是“百慕大”或“bermuda”。验证选中值的准确性
在代码中先输出选中值,确认其与资源名完全吻合:Dim firstplace As String = Form1.first_place_list.SelectedItem.ToString() Console.WriteLine("当前选中值:" & firstplace) ' 输出到控制台验证 Dim firstplace_image As Image = My.Resources.ResourceManager.GetObject(firstplace) If firstplace_image IsNot Nothing Then first_place_flag.Image = firstplace_image Else MessageBox.Show("未找到对应资源:" & firstplace) ' 资源不存在时提示 End If使用强类型资源绑定(更稳妥)
通过绑定数据源分离显示文本和资源名,避免名称匹配错误:- 创建存储显示文本和资源名的类:
Public Class FlagItem Public Property DisplayName As String Public Property ResourceName As String End Class - 在窗体加载时给ComboBox绑定数据:
first_place_list.DisplayMember = "DisplayName" first_place_list.ValueMember = "ResourceName" first_place_list.Items.Add(New FlagItem With {.DisplayName = "百慕大", .ResourceName = "Bermuda"}) first_place_list.Items.Add(New FlagItem With {.DisplayName = "其他地区", .ResourceName = "OtherRegion"}) - 加载图片时读取选中项的资源名:
Dim resourceName As String = Form1.first_place_list.SelectedValue.ToString() Dim firstplace_image As Image = My.Resources.ResourceManager.GetObject(resourceName) first_place_flag.Image = firstplace_image
- 创建存储显示文本和资源名的类:
检查资源生成设置
右键资源文件→属性,确认图片的生成操作设置为“嵌入的资源”,否则资源无法被正确嵌入程序。
内容的提问来源于stack exchange,提问作者Des Gilhooly
相关产品推荐
相关产品推荐

