Napisałem program oraz zrobiłem do niego dość przyjazne kolorowe menu z możliwością zmiany skórki. Ale niestety te niebieskie podświetlenia w menuStrip czy dataGridView psują cały efekt. Szukałem jak to zmienić ale te rozwiązania nie dość, ze są podane tylko na c# to jeszcze są niezrozumiałe dla mnie. Podpowie ktoś coś jak to zrobić? Pisze w C++/CLI
Skoro nie rozumiesz dokumentacji i przykładowego kodu w C#, gdzie ten w C++/CLI będzie w 95% identyczny to czego oczekujesz od nas? Gotowego kodu?
Tak oczywiście, że gotowego kodu bo po co bym tu przychodził. O matko weź się zastanów 2 razy zanim zaczniesz kogoś obrażać. Jeżeli z czymś mam na prawdę poważny problem to dopiero pisze na forum nie zaprzątam głowy innych jakimiś pierdołami. Zanim napisze coś tutaj siedzę kilka godzin i szukam rozwiązania.
W samej dokumentacji nie mogę znaleźć nic ciekawego, a np kod podany tutaj http://www.daniweb.com/software-development/csharp/code/357047 nie dokończa wiem gdzie wstawić bo wygląda mi na to, że kod ten jest wykonywany raz przy starcie programu, a ja potrzebuje wykonać go w każdej chwili.
OnRenderMenuItemBackground
jasno chyba mówi, że kod jest wykonywany za każdym razem, gdy trzeba będzie odrysować tło konkretnego menuitem. Jeżeli chcesz uzależnić ten kolor od jakiejś opcji, którą chcesz ustawić w runtime to przecież nic nie broni ci wstawić tam właściwości/pola jakiejś twojej klasy zamiast koloru na sztywno.
@Rev help...
Wiem, że ten kod
this->menuStrip1->Renderer = gcnew myRenderer();
musi być przy ustawieniach menuStrip ale za nic w świecie nie wiem gdzie umieścić klasę... Po raz pierwszy robię coś z klasą zagnieżdżona.
Bazuj człowieku na C#... ehhh
Kolejny dzień niepowodzeń oto mój kod. Proszę was powiedźcie co jest nie tak
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
menuStrip1->Renderer = gcnew myRenderer();
//
//TODO: Add the constructor code here
//
}
//destruktor formularza
//...
private: System::Windows::Forms::MenuStrip^ menuStrip1;
//...
private: ref class myRenderer : ToolStripProfessionalRenderer
{
protected: virtual void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs^ myMenu)
{
if (!myMenu->Item->Selected)
base::OnRenderMenuItemBackground(myMenu);
else
{
Rectangle^ menuRectangle = gcnew Rectangle(Point::Empty, myMenu->Item->Size);
myMenu->Graphics->FillRectangle(Brushes::DarkGreen, menuRectangle);
myMenu->Graphics->DrawRectangle(Pens::Lime, 1, 0, menuRectangle->Width - 2, menuRectangle->Height - 1);
}
}
}
Błędy które dostaje:
//1>c:\users\jaro\documents\visual studio 2008\projects\program\Form1.h(154) : error C4485: 'Program::OnRenderMenuItemBackground' : matches base ref class method 'System::OnRenderMenuItemBackground', but is not marked 'new' or 'override'; 'new' (and 'virtual') is assumed
1> c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : see declaration of 'System::OnRenderMenuItemBackground'
1> Specify 'override' (and 'virtual') to override the ref class virtual method
1> Specify 'new' (and 'virtual') to hide the ref class virtual method with a new virtual method
1> Position for 'new' and 'override' keywords is after method parameter list
1>c:\users\jaro\documents\visual studio 2008\projects\program\Form1.h(168) : error C2059: syntax error : 'private'
1>c:\users\jaro\documents\visual studio 2008\projects\program\Form1.h(179) : error C2062: type 'void' unexpected
1>c:\users\jaro\documents\visual studio 2008\projects\program\Form1.h(180) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
1>c:\users\jaro\documents\visual studio 2008\projects\program\Form1.h(79) : error C3861: 'InitializeComponent': identifier not found
1>c:\users\jaro\documents\visual studio 2008\projects\program\Form1.h(157) : error C2653: 'base' : is not a class or namespace name
1>c:\users\jaro\documents\visual studio 2008\projects\program\Form1.h(162) : error C2664: 'void System::FillRectangle(System::Brush ,System::RectangleF)' : cannot convert parameter 2 from 'System::Rectangle ' to 'System::RectangleF'//
Może znajdzie się jakiś samarytanin i coś podpowie, bardzo proszę...
1> Specify 'override' (and 'virtual') to override the ref class virtual method
1> Specify 'new' (and 'virtual') to hide the ref class virtual method with a new virtual method
1> Position for 'new' and 'override' keywords is after method parameter list
brakuje override
.
brakuje średnika po klasie myRenderer
.
cannot convert parameter 2 from 'System::Rectangle ^' to 'System::RectangleF
czytasz w ogóle te komunikaty?
Nie wierze działa! Wielkie, wielkie, wielkie dzięki :)