[C#]the type name does not exists in the type

0

Cześć.
Ostatnio kodzę sobie w C#, a raczej zaczynam sie do tego języka przyzwyczajać. Trochę juz programuję, ciągle na amatorskim mocno poziomie, ale staram się wkręcić bardziej. Ale do rzeczy:
Kodzę sobie aplikację, w sumie z pkt widzenia problemu nieważne dokładnie jaką, Windows Forms i w ogóle, VC# 2008 Express.
Ogólnie strukturę kodu przedstawa się następująco (ciało funkcji pomijam, bo nieważne):

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace HandyOneTest
{
public partial class HandyOneTest1 : Form
{
//properties
private ArrayList datalist;

    //methods
    public HandyOneTest1()
    {
        InitializeComponent();
    }

    //events
    protected override void OnPaint(PaintEventArgs e)
    {
    }


    //po zrzuceniu draga na formę, ma się na niej pojawić ikona
    private void HandyOneTest1_DragDrop(object sender, DragEventArgs e)
    {
        foreach (string file in (string[])(e.Data.GetData(DataFormats.FileDrop) ) )
        {
        }
    }

    private void HandyOneTest1_DragEnter(object sender, DragEventArgs e)
    {
    }

    private void HandyOneTest1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Escape)
            Application.Exit();
    }

}

//HOGfxButton - HandyOne Gfx Button
//Button that is cappable of showing image (bmp, ico and others)
public class GfxButton : Control
{
    //properties
    public string FileName
    {
        get;
        set;
    }

    //methods
    //konstruktor
    public GfxButton()
    {
    }

    public GfxButton(int Left, int Top, string File, Bitmap bmp) : base("GfxButton", Left, Top, 32, 32)
    {
    }

    //events
    protected override void OnPaint(PaintEventArgs e)
    {
        //wywolanie bazowego OnPaint,zajmujacego
        //sie podstawowym wyswietlaniem kontrolki

    }
}

}


Oprócz tego jest standardowy plik Designera (na formatce leży picturebox i moja kontrolka (GfxButton). Wszystko siedzi w namespace HandyOneTest.

przy kompilacji pojawiają się następujące warningi i error:

Warning
Could not find type 'HandyOneTest.GfxButton'. Please make sure that the assembly that contains this type is referenced. If this type is a part of your development project, make sure that the project has been successfully built.
Warning
The variable 'gfxButton1' is either undeclared or was never assigned. C:\Documents and Settings\Jarek\Moje dokumenty\Visual Studio 2008\Projects\HandyOneTest\HandyOneTest\Form1.Designer.cs
Error
The type name 'GfxButton' does not exist in the type 'HandyOneTest.HandyOneTest1' C:\Documents and Settings\Jarek\Moje dokumenty\Visual Studio 2008\Projects\HandyOneTest\HandyOneTest\Form1.Designer.cs


Z tego co udało mi się znaleźć na necie (m.in. forum msdn) problem pojawia się w momencie, gdy nazwa namespace i nazwa klasy wewnątrz tejże przestrzeni nazw są takie same. Faktycznie, początkowo i u mnie tak było (forma i namespace były tak samo nazwane). Jednak zmiana nazwy klasy formy nic nie zmieniła. Zmiana nazwy namespace także nie zdziałała nic szczególnego, błędy pozostały. Kilkukrotnie sprawdzałem wszelkie nazwy i tak dalej i wszystko wydaje się zgadzać, nazwy klasy formy i gfxbuttona (też na początku nazywał się inaczej) pozmieniane wszędzie poprawnie. Jednak ciągle są te errory.
Gdzieś na necie znalazłem też info, jakoby ten bład mógł być powodowany zapętleniem podczas deklaracji, jakiś przykład z szablonami tam był, ale nie doszukałem się u siebie niczego takiego, co chociażby mogło przypominać takie zapętlenie.

Liczę się z możliwością, że jestem głupi i bład umyka mi, chociaż jest na samym środku ekranu wypisany wielką, różową czcionką. Dopuszczam też możliwośc, że tak nie jest ;) W każdym bądź razie z  chęcią dowiedziałbym się, dlaczego VC# raczy mnie takim błędem, jak sie go pozbyć i ustrzec w przyszłości.

P.S.: wiem, że ta moja klasa GfxButton ma pewnie z dziesięć odpowiedników, a nawet samego pictureboxa mogę jako takiego użyć, używajac zdarzenia onclick. To jest program w dużej mierze "szkoleniowy", dzięki któremu w praktyce chcę się zapoznać z tworzeniem własnej kontrolki, obsługą eventów i ogólnie kodzeniem w C#, także prosiłbym o nie podsuwanie uwag, że można to zrobić inaczej ;)
0

przenieś klasę GfxButton do nowego unitu
BTW kontrolki tworzy się dodając do projektu user control

0

Mała podpowiedź: nie używaj ArrayList, to relikt z czasów .NET 1.0

0

Z kolekcjami dopiero będę się zaznajamiał, co dokładniej oferuje C#, array był użyty w ramach testu i został tak leżeć, jakbym jeszcze musiał coś tam przetestować.

A w sumie cały problem rozwiązałem, bo nawet przeniesienie do osobnego unita nic nie dało. Ogólnie renamer prawdopodobnie dał ciała i podczas zmiany nazwy klasy w jednym miejscu odwołanie do namespace zmienił na odwołanie do klasy (znaczy uaktualnił nazwę, gdzie nie powinien). Za bardzo zaufałem narzędziu, a potem w sumie już myslałem, że tak powinno być. Dopiero konkretne siedzenie i analizowanie linijka po linijce i zaskoczenie: czemu do cholery tu jest referencja do klasy a nie do namespace?! Skasowanie paru znaczków i program działa.

Ale za info i tak dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1