如何修复错误:键入Form1';已经定义了一个名为';处置';具有相同的参数类型

本文关键字:处置 一个 类型 参数 键入 Form1 错误 何修复 定义 | 更新日期: 2023-09-27 18:20:47

尝试更改方法名称也尝试创建新的类并将form1中的代码放在那里,但没有成功。

这是表格1:中的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using VirtualBox;
using System.Runtime.InteropServices;
namespace Desktop
{
    public partial class Form1 : Form
    {
        #region DLLs
        [DllImport("user32.dll")]
        private static extern IntPtr CreateDesktop(string lpszDesktop, IntPtr lpszDevice, IntPtr pDevmode,
                                                   int dwFlags, long dwDesiredAccess, IntPtr lpsa);
        [DllImport("user32.dll")]
        private static extern bool SwitchDesktop(IntPtr hDesktop);
        [DllImport("user32.dll", EntryPoint = "CloseDesktop", CharSet = CharSet.Unicode, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CloseDesktop(IntPtr handle);
        [DllImport("user32.dll")]
        public static extern bool SetThreadDesktop(IntPtr hDesktop);
        [DllImport("user32.dll")]
        public static extern IntPtr GetThreadDesktop(int dwThreadId);
        [DllImport("kernel32.dll")]
        public static extern int GetCurrentThreadId();
        #endregion
        #region Enumeratoren
        [Flags]
        internal enum DESKTOP_ACCESS_MASK : uint
        {
            DESKTOP_NONE = 0,
            DESKTOP_READOBJECTS = 0x0001,
            DESKTOP_CREATEWINDOW = 0x0002,
            DESKTOP_CREATEMENU = 0x0004,
            DESKTOP_HOOKCONTROL = 0x0008,
            DESKTOP_JOURNALRECORD = 0x0010,
            DESKTOP_JOURNALPLAYBACK = 0x0020,
            DESKTOP_ENUMERATE = 0x0040,
            DESKTOP_WRITEOBJECTS = 0x0080,
            DESKTOP_SWITCHDESKTOP = 0x0100,
            GENERIC_ALL = (DESKTOP_READOBJECTS | DESKTOP_CREATEWINDOW | DESKTOP_CREATEMENU |
                            DESKTOP_HOOKCONTROL | DESKTOP_JOURNALRECORD | DESKTOP_JOURNALPLAYBACK |
                            DESKTOP_ENUMERATE | DESKTOP_WRITEOBJECTS | DESKTOP_SWITCHDESKTOP),
        }
        #endregion
        public Form1()
        {
            InitializeComponent();
            Desktop("MyDesktop");
            System.Threading.Thread.Sleep(1000);
            Application.DoEvents();
            Desktop();
            Application.DoEvents();
            System.Threading.Thread.Sleep(3000);
            SwitchToOrginal();
            Application.DoEvents();
        }

        public void Dispose()
        {
            SwitchToOrginal();
            ((IDisposable)this).Dispose();
        }
        /// <summary>
        /// Unterklassen können hier die Funktionalität der Objektzerstörung erweitern. 
        /// </summary>
        /// <param name="fDisposing"></param>
        protected virtual void Dispose(bool fDisposing)
        {
            if (fDisposing)
            {
                // Hier die verwalteten Ressourcen freigeben
                //BspVariable1 = null;
                CloseDesktop(DesktopPtr);
            }
            // Hier die unverwalteten Ressourcen freigeben
        }
        void IDisposable.Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this); //Fordert das System auf, den Finalizer für das angegebenen Objekt nicht aufzurufen
        }
        #region Variablen
        IntPtr _hOrigDesktop;
        public IntPtr DesktopPtr;
        private string _sMyDesk;
        public string DesktopName
        {
            get
            {
                return (_sMyDesk);
            }
            set
            {
                _sMyDesk = value;
            }
        }
        #endregion
        #region Konstruktoren
        public void Desktop()
        {
            _sMyDesk = "";
        }
        public void Desktop(string sDesktopName)
        {
            _hOrigDesktop = GetCurrentDesktopPtr();
            _sMyDesk = sDesktopName;
            DesktopPtr = CreateMyDesktop();
        }
        #endregion
        #region Methoden
        public void show()
        {
            SetThreadDesktop(DesktopPtr);
            SwitchDesktop(DesktopPtr);
        }
        public void SwitchToOrginal()
        {
            SwitchDesktop(_hOrigDesktop);
            SetThreadDesktop(_hOrigDesktop);
        }
        private IntPtr CreateMyDesktop()
        {
            return CreateDesktop(_sMyDesk, IntPtr.Zero, IntPtr.Zero, 0, (long)DESKTOP_ACCESS_MASK.GENERIC_ALL, IntPtr.Zero);
        }
        public IntPtr GetCurrentDesktopPtr()
        {
            return GetThreadDesktop(GetCurrentThreadId());
        }
        #endregion
        private void Form1_Load(object sender, EventArgs e)
        {
        }

    }
}

错误在以下行的表单1.designer.cs中:

protected override void Dispose(bool disposing)

尝试在这里和form1中更改方法名称,但没有成功。

如何修复错误:键入Form1';已经定义了一个名为';处置';具有相同的参数类型

Neel是对的,它是偏的,

如果您需要在dispose时执行某些操作,则可以使用一些事件,如OnDispose、dispose+=。。。等等。dispose函数很奇怪。在设计器文件中自动生成。即使您更改了设计器文件,它也会再次生成。所以你不能覆盖这个重载方法。你可以这样称呼它。Dispose(true);。。。

如果你要处理其他东西,请使用这个,

 public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.Disposed += (s, a) =>
            {
                //Dispose unmanaged stuffs etc.
            };
    }

顺便说一句,我在删除designer.cs方法后进行了测试,该方法不会导致Windows窗体应用程序的重新生成。所以这可能是sol。也大多数代码生成器在情况发生变化时会替换设计器文件。例如EntityCode生成器、SL生成的代码。

已经定义了一个名为Dispose的方法,请检查设计器生成的代码。

从form1.cs文件中删除Dispose。。。你注意到那里的公共部分阶级界线了吗?这意味着类分布在2个或多个文件中。所以Dispose已经在form1.designer.cs中定义了。所以不要创建另一个Dispose,或者如果确实必须删除"partial"。