VS 2019中XNA与Windows Form结合开发音频可视化音乐播放器:自定义控件WinFormsGraphicsDevice报错求助
嘿,我之前做WinForms结合Monogame搞音频可视化控件的时候也踩过这个一模一样的坑,给你几个实用的排查和解决方向:
先确认组件引用有没有到位
WinFormsGraphicsDevice这类控件不是.NET原生自带的,一般来自Monogame或者旧版XNA的WinForms扩展包。如果用的是Monogame,先去NuGet搜索MonoGame.Framework.WindowsForms安装上;如果是手动引用组件,得找到对应的WinFormsGraphicsDevice.dll(一般在组件安装目录或者项目的包文件夹里),右键项目→添加→引用→浏览选中它。别漏了关键命名空间的引用
你的代码里只导入了基础的WinForms命名空间,必须补上组件对应的命名空间才行。比如用Monogame的话要加这几个:using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using MonoGame.Framework.WindowsForms;要是用的是旧版XNA,对应的命名空间是
Microsoft.Xna.Framework.Windows.Forms,注意区分版本差异。检查项目框架和类型的兼容性
确保你的Windows游戏项目目标框架和组件匹配,比如Monogame的WinForms组件一般支持.NET Framework 4.7.2及以上版本,别用太老的框架。如果是从普通WinForms项目改过来的,还要确认有没有配置好Monogame/XNA相关的构建属性。清理缓存后重建项目试试
VS有时候会因为缓存抽风导致引用识别异常,试试右键解决方案→清理解决方案,再右键项目→重新生成,实在不行就重启VS再加载项目,说不定就能解决识别问题。
附上你提供的问题代码:
using System; using System.Windows.Forms; using System.Collections.Generic; using System.Linq; using System.Text; namespace WindowsGame2.CustomControls { public class Display : WinFormsGraphicsDevice.GraphicsDeviceControl { protected override void Initialize() { } protected override void Draw() { GraphicsDevice.Clear(); } } }
内容的提问来源于stack exchange,提问作者Jimi75

