Schau dir ebenfalls mal die ObservableCollection<T>-Klasse an
Viel Erfolg und ich hoffe, dass myCSharp.de schnell wieder erreichbar ist ... toi toi toi 😉
Mich würde es interessieren, wie so etwas programmiert worden ist.
Hier findet man ein paar Informationen: http://www.jabberwacky.com/j2about
ich glaube er meint letzteres, was eigentlich auf ersteres hinausläuft *g
Tja, dann hast Du jetzt mit VB.NET das selbe Problem, das C# Entwickler seit 2008 haben.
Du kannst dir da nur behelfen indem du ein eigenes Snippet schreibst.
Hm, wenn ich in C# ein privates Feld implementieren und in VS2010 dann auf das Namen des Feldes rechtsklicke, Refactor / Encapsulate Field auswähle kann ich daraus eine Property generieren. Schneller gehts aber mit dem Snippet "propfull" 😉
wie gfoidl schon sagte, kannst du Sandcastle verwenden um aus der xml-Datei eine CHM-Hilfe oder eine HTML-Hilfe zu erstellen. Da dass aber relativ kompliziert ist, empfiehlt sich die OpenSource Software "Sandcastle Help File Builder" zu verwenden.
MfG TrripleX
Mittels einer Dictionary würdest du die gewünschte Funktionalität bekommen:
Dictionary<string, int> dict = new Dictionary<string, int>();
dict["eins"] = 1;
dict["zwei"] = 2;
dict["drei"] = 3;
Console.WriteLine(dict["eins"]);
Console.WriteLine(dict["zwei"]);
Console.WriteLine(dict["drei"]);
€dit: Blacal war schneller ... sry 😦
danke für deinen Beitrag CSL.
<TextBlock>
Dies ist ein langer String, welcher aufgesplittet
ist auf mehreren Zeilen
</TextBlock>
Das funktioniert schon mal (hätte ich auch selber drauf kommen können -.- ) Nur funktioniert da dass de CR mittels 
 nicht?
Solange du nicht xml:Whitespace auf Preserve stellst siehst du es zur laufzeit auch nicht.
du meinst sicher xml:space (hab es gerade ausprobiert und whitespace gabs da net)
MfG TripleX
Irgendwie dachte mir schon dass es nicht möglich ist, aber danke für den Hinweis mit WordWrap 😉
Hallo Gemeinde,
ich wollte fragen ob (und wie) es möglich ist einen langen String in Xaml aufzusplitten auf mehreren Zeilen.
In C# kann man ja z.B. folgendes machen:
string long_string = "Dies ist ein langer String, welcher aufgesplittet" +
" ist auf mehreren Zeilen";
genau dass möchte ich auch in XAML erreichen, wenn es möglich ist:
<TextBlock Text="Dies ist ein langer String, welcher aufgesplittet werden soll auf mehreren Zeilen" />
MfG TripleX
btw, ich hab gesucht aber nichts gefunden ...
Wahrscheinlich hast du irgendeine Tastenkombination gedrückt welche dein Layout geändert hat. Ist mir früher auch ab und zu passiert, aber seitdem ich alle anderen Layouts gelöscht habe und nur noch Deutsch in der Liste steht, passiert mir dass nicht mehr.
MfG TripleX
Weiss nicht ob es bessere Möglichkeiten gibt, aber so in etwa würde ich dass machen: Im MouseLeave-Event überprüft man, ob sich die Maus noch innerhalb des Controls befindet. Was du benötigen könntest wäre Top, Left, Height und Width des Controls. Außerdem die aktuelle Mausposition. Damit müsste sich ja feststellen können, ob sich die Maus noch innerhalb des Controls befindet. Wenn du dann sicher bist dass die Maus nicht innerhalb des Controls ist, führst du entsprechend deinen code aus.
Ich bin auch sehr zufrieden mit dem .NET Framework, sonst würde ich ja auch nicht damit arbeiten. Im Desktop Bereich würde ich auch nicht mehr mit einem anderen Framework bzw. einer anderen Sprache als C# arbeiten wollen 👍.
Manche Sachen nerven mich zwar ein wenig, z.B. wünsche ich mir eine bessere Unterstützung von AOP - aber man kann halt nicht alles haben.
Und die Kommentare bei Heise lese ich mir auch nur noch selten durch - die schlagen sich doch eh bei jedem Thema nur die Köpfe ein - das tue ich mir nicht an. Aber der Hauptgrund warum ich die Kommentare bei Heise nicht lese ist eig. das Kommentarsystem welches einfach zum kotzen ist (aber das ist ein anderes Thema ... )
kann es sein dass du irgendwo einen Compilerfehler hast und du (früher?) die Meldung wo besagt "There were build errors. Would you like to continue and run the last successful build?" mit Yes und "Do not show this dialog again" beantwortet hast?
das liegt daran dass ich das ganze unter .NET4 ausprobiert habe und dort ist das DataGrid direkt mit integriert, deswegen klappt das auch so wie ich es gemacht habe.
Bei dir kennt er aber den Typ "DataGridColumnHeader" nicht, wie es dir die Fehlermeldung ja auch schon mitteilt.
Versuche mal folgendes: <Style TargetType="{x:Type my:DataGridColumnHeader}">
Du solltest nicht davon ausgehen, dass gleich jeder, der deine Software nutzt, gleich den illegalen Weg sucht, und eine **gehackte **Version verwendet.
[...]
Jede Software kann geknackt werden, es muss nur interessant genug sein, für einen Hacker.
[...] und dessen Quellcode für **Hacker **wohl noch nicht einmal von grossem Interesse [...]
*räusper* cracker räusper
Ich dachte da an ein Datagrid, dort ist der Header aber nicht senkrecht, sondern waagerecht. Somit wird die Tabelle zu groß.
Du kannst den Header allerdings senkrecht machen in WPF:
<DataGrid AutoGenerateColumns="False">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="LayoutTransform">
<Setter.Value>
<RotateTransform Angle="90" />
</Setter.Value>
</Setter>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Header" />
<DataGridTextColumn Header="Header" />
<DataGridTextColumn Header="Header" />
</DataGrid.Columns>
</DataGrid>
Das Verhalten rührt daher, dass du den Index falsch berechnest und du e.Handled nicht auf "true" setzt.
Du machst jetzt gerade folgendes: Du holst dir den Index des nächsten "," zeichens und springst zu dem Index. Der Cursor ist dann genau ein Zeichen vor dem ",". Da du nun e.Handled nicht auf true setzt, geht der Cursor nochmal eins weiter und du denkst du hast alles richtig gemacht 😉 Dem ist aber nicht so, wie du beim setzen des Cursors an die Position 0 feststellst.
Also addiere eins zum index hinzu und setzte e.Handled auf true:
if (e.KeyCode == Keys.Right)
{
maskedTextBox1.SelectionStart = maskedTextBox1.Text.IndexOf(',', maskedTextBox1.SelectionStart)+1;
e.Handled = true;
}
weil das ein reines Compiler-Feature ist. Die Runtime und erst recht das Framework haben damit gar nichts zu tun.){gray}
Und deswegen sollte man auch auf die Verwendung von optionalen Paramter verzichten wenn man kein .NET 4 projekt bastelt - denn wenn jemand anders dieses Projekt kompilieren möchte und nicht mit VS2010 sondern nur mit VS2008 arbeitet, wird es zu Problemen kommen? (man sollte die optionalen Parameter ja eh mit Vorsicht genießen, wie oben schon beschrieben)
Hätte mal eine Frage bez. optionale parameter, ist zwar leider Offtopic aber ich wollte kein neues Thema erstellen.
Und zwar entwickle ich gerade mit VS2010 ein .NET 3.5 Projekt und habe dort eine Methoden mit optionale Parameter bestückt. Optionale Parameter gibt es ja erst seit .NET4, warum kann ich diese aber unter .NET 3.5 bereits verwenden ohne dass der Compiler meckert?
Und jetzt will ich auch noch was zum Thema beizutragen. Und zwar habe ich das Problem mal angeschaut und folgendes funktioniert:
public Test()
{
MethodeXY(Zusaetzliches:new string[] { "Test1", "Test1" });
}
public void MethodeXY(bool JaNein = true, params string[] Zusaetzliches) {
if (JaNein)
{
foreach (string item in Zusaetzliches)
{
Console.WriteLine(item);
}
}
}
Also verwenden kann man das auch mit optionale Parameter, man muss halt die Parameter in ein array packen.
@D-eath,
also so wirklich bringt mir das auch nicht weiter. Ich könnte ElementName verwenden, wenn ich bereits ein Element hätte welchen diesen Style verwendet - dass habe ich aber nicht, denn diese werden erst später dynamisch erzeugt.
Also ich hab mir mal über den Wizard beim DataBinding folgendes zusammengeklickt:
<TextBlock Text="{Binding Source={StaticResource BubbleStyle}, Path=TargetType.Height}" />
Aber dass funktioniert nicht, denn es wird kein Text angezeigt. Dieses TargetType.Height kommt mir sowieso ein wenig komisch vor, habe dass mal in verschiedene andere Varianten geändert, aber ich kriege es einfach nicht hin ... 🤔
Hallo Gemeinde,
ich würde gerne, wie der Betreff schon aussagt eine Property an einen Wert, welches in einem Style mittels Setter gesetzt ist, in XAML binden. Um besser zu verstehen was ich machen möchte folgt ein Beispiel dazu. Ich habe folgenden Style definiert (in der App.xaml):
<Style x:Key="BubbleStyle" TargetType="{x:Type Button}">
<Setter Property="Width" Value="200"/>
<Setter Property="Height" Value="200"/>
<Setter Property="Template"> <--[...]-->
Nun möchte die Höhe eines StackPanels an die Höhe welche ich oben festgelegt habe, binden.
Ich habe das ganze über einen Umweg geschafft:
public double BubbleHeight
{
get
{
return ((Style)FindResource("BubbleStyle")).Setters.Cast<Setter>()
.Where(x => x.Property.Name.Equals("Height"))
.Select(x => x.Value)
.Cast<double>()
.FirstOrDefault();
}
}
und dann binde ich die Höhe des StackPanels an diese Property.
Nun wollte ich fragen ob man es auch ohne den Umweg zu machen direkt in Xaml festlegen kann?
MfG TripleX
mal eine Frage zwischendurch @herbivore
Du meintest vorhin "ich würde bei sowas dringend von UserControls abraten. ". Nun wollte ich fragen warum da abraten würdest. Ich hätte das und/oder/... Gatter nämlich als UserControl gemacht.
Also meiner Meinung nach wäre das viel einfacher, auch beim "erstellen" der Endfunktion. Da schaut man sich dann die Eingangs bzw Ausgangs Property (welche man natürlich selber implementieren muss) des Usercontrol an, und damit weiß ich welche Gatter miteinander verbunden sind.
Wenn man die ganzen Gatter nur mit Rechtecken zeichnet stelle ich mir dass doch recht kompliziert vor!
such mal in der Online Gallery (Tools -> Extension Manager) nach "Visual Studio Color Theme Editor". Damit kannst du das Aussehen von Visual Studio ebenfalls konfigurieren. Die Farben welche du da bearbeiten müsstest wären die ganzen EnvironmentBackground* Farben.
Hm also ich habe alle deine strings aus dem 1sten Beitrag ausprobiert und diese haben mir das richtige Ergebnis ausgespuckt. Nichtsdestotrotz entschuldige ich mich dafür 😉
bei uns in der MSDN-AA sind jetzt alle Versionen verfügbar
grr, bei uns immer noch nicht ... Ich werde morgen mal ins Rechenzentrum gehen und mal nachhaken.
€dit: Mein Erscheinen hat Wunder gewirkt, heute haben sie es freigeschaltet freu
Folgender wäre kürzer:
(?≤</?translate>|^)(\s*\w+\s*)+
Wäre es nicht einfacher alle <translate> und </translate> durch "nichts" zu ersetzen (und dann nach einem Leerzeichen splitten)?
wobei HasBalancedRegions auch bei
#endregion
#regiontrue liefern würde, also die Reihenfolge nicht berücksichtigt.
Im Prinzip hast du recht. Bei meiner Implementierung gibt es trotzdem keine Probleme.
Mein Code sieht jetzt folgendermaßen aus:
Ich habe eine Methode, die aufgerufen hat sobald der Benutzer für mich wichtige Änderungen getätigt hat:
internal void UpdateRegionsFromCurrentDocument()
{
try
{
RegionsInCurrentTextDocument = _regionAnalyzer.GetRegionsFromText(_dteWrapper.ActiveTextDocumentContent);
CurrentTextDocumentHasUnbalancedRegions = false;
}
catch (UnbalancedRegionException)
{
CurrentTextDocumentHasUnbalancedRegions = true;
}
}
Und hier die zwei Methoden, welche zum einen prüft ob ein Text eine balancierte Anzahl von regions hat, und zum anderen die Regions als Liste zurück gibt:
public bool HasBalancedRegions(string text)
{
int opened = Regex.Matches(text, RegexStartOfRegion, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.Multiline).Count;
int closed = Regex.Matches(text, RegexEndOfRegion, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.Multiline).Count;
return (opened - closed == 0);
}
public ObservableCollection<Region> GetRegionsFromText(string text, int startLineNumber = 1)
{
if (!HasBalancedRegions(text)) throw new UnbalancedRegionException();
ObservableCollection<Region> regions = new ObservableCollection<Region>();
Regex regex = new Regex(RegexSearchRegion, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.Multiline);
MatchCollection matches = regex.Matches(text);
foreach (Match match in matches)
{
string[] newLineArr = new string[] { Environment.NewLine };
int newLinesBeforeMatch = text.Substring(0, match.Index).Split(newLineArr, StringSplitOptions.None).Length - 1;
int newLinesBetweenMatch = match.Value.Split(newLineArr, StringSplitOptions.None).Length - 1;
int startLine = startLineNumber + newLinesBeforeMatch;
int endLine = startLine + newLinesBetweenMatch;
Region region = new Region(match.Groups["name"].Value.Trim(), startLine, endLine);
region.Children = GetRegionsFromText(match.Groups["text"].Value, startLine + 1);
regions.Add(region);
}
return regions;
}
nun wird, wenn der User (bei meinem testcode) #endregion eingibt beim allersten durchlauf gleich eine Exception geworfen. Wenn er nun #region eingibt, wird später, beim holen der Children eine Exception geworfen --> alles funktioniert wie ich möchte 😃
Wenn der User in einem neuen Dokument nur: #endregion\r\n#region eintippt, dann kommt zwar keine Meldung dass es unbalanced ist aber wenigstens freezed mein Programm nicht beim auswerten des Regex. Und gerade dieses freezen wollte ich beheben. Außerdem lässt sich der Code bei dem eingegebenen Text eh net kompilieren, also ist das halb so schlimm dass ich es nicht mitbekomme.
Vielen Dank euch beiden ... Problem behoben 😉
ohne Not würde ich Ausgleichsgruppen/balancing groups nicht verwenden.
Naja Not ist nicht wirklich da, ich könnte den Check auch einfach übergehen, dann würde die Ausgabe meiner TreeView (mit den regions) nicht sauber sein. Ich würde lieber eine Meldung anzeigen, welche besagt dass eine eine nicht ausgeglichene Anzahl von region's im Code vorhanden sind.
Wenn ich aber bedenke, dass das dauernde Prüfen auf solch einen Fall sich negativ auswirkt auf die Perfomance könnte ich auch auf diese Funktionalität verzichten. Denn solch ein Fall kommt doch relativ selten vor ... . Mich würde trotzdem interessieren ob sowas überhaupt möglich ist, denn ich habe es bisher nicht geschafft 😉.
Hast du noch mehr vor in diesem Check oder prüfst du nur ob #region und #endregion gleich oft vorkommen?
Jein, also #region und #endregion sollte einerseits gleich oft vorkommen, aber es sollte auch sinnvoll verschachtelt sein, also wenn man z.B. folgenden Text hat:
#region
#endregion
#endregion
#region
dann kommen sie zwar gleich oft vor, aber nicht in einer korrekten logischen Reihenfolge.
€dit: Achja, ganz vergessen - es besteht Not, denn wenn ich irgendwo #region schreibe ohne passenden Endtag bleibt mein regex für die Suche nach regions hängen ... 😦 Werde mich jetzt erstmal mit folgenden Code abfinden:
public bool HasBalancedRegions(string text)
{
int opened = Regex.Matches(text, RegexStartOfRegion, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.Multiline).Count;
int closed = Regex.Matches(text, RegexEndOfRegion, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.Multiline).Count;
return (opened-closed == 0);
}
Hallo Gemeinde,
Im Zuge eines aktuellen Projekts möchte ich schauen ob ein gegebener String eine ausgewogene und sinnvolle Anzahl an #region's und #endregion's besitzt.
Auf der Suche nach einer geeigneten Lösung bin ich auf folgendes:
Moving on to what is undoubtedly the most common usage of balancing groups, following is an example of matching balanced sets of parentheses. It's taken from Jeffrey Friedl's book, Mastering Regular Expressions.
\( (?> [^()]+ | \( (?<Depth>) | \) (?<-Depth>) )* (?(Depth)(?!)) \)
Quelle:
> .
Dieses Beispiel habe ich versucht auf meinen Fall abzuändern, doch ich kriege es nicht hin. Ich habe mehrere Ansätze probiert, folgender sollte meiner Meinung nach funktionieren. Dass das "matchen" der regions nicht ganz korrekt ist weiß ich (z.B. könnte eine Region auskommentiert sein, ...) aber mir geht es erst mal nur ums Prinzip:
(?>
\#region(?<Counter>)
| \#endregion(?<-Counter>)
| ( (?!\#region) | (?!\#endregion))+
)*
(?(Counter)(?!))
Dieser Ansatz klappt aber nicht, denn wenn ich Regex.IsMatch() ausführe bekomme ich falsche Ergebnisse.
Mir geht es also nur darum nachzusehen ob in einem string die Anzahl der regions ausbalanciert ist, z.B. sollte hier false ausgegeben werden:
#region
#endregion
#endregion
Ist dies überhaupt möglich mit Regex oder muss ich da anders vorgehen?
MfG TripleX
ich finde, wenn du es auf codeplex postest, solltest du die Beschreibung schon auf englisch schreiben.
Ansonsten bin ich sehr gespannt auf das Projekt 😉
@Jack30lena:
nach dem schreiben meines Beitrags bin ich auf eine ähnliche Idee gekommen.
Beschreibung des Algorithmus:
Wenn der User wichtige Änderungen macht, welche ich mitbekommen sollte (z.B. er macht eine neue Zeile, löscht eine oder mehrere Zeile, fügt Zeilen ein, ...). Dann muss ich merken, wie viele Zeilen er z.B. eingefügt hat. Danach suche ich im Code unterhalb der ersten neue Zeile nach regions und speichere diese in eine Liste. Außerdem suche ich mir die regions raus aus meiner bisher gespeicherten Liste die unterhalb der neuen Zeilen liegen und in/dekrementiere die Zeilennummer dieser regions um die Anzahl der Zeilen die der User eingefügt hat. Danach müssen noch die Schnittmengen der Listen gebildet werden und die Elemente aus meiner bisherigen Liste gelöscht bzw. eingefügt werden.
Programmierung des Algorithmus:
int linesAddedOrRemoved = 1; //muss noch dynamisch gemacht werden
var temp = GetRegionsFromCurrentDocument(startPoint);
if (temp == null || temp.Count == 0) return;
List<RegionInCodeItem> updatedRegions = temp.ToList();
List<RegionInCodeItem> outdatedRegions = RegionsInCode.Where(x => x.StartLineNumber > startPoint.Line).ToList();
//Lines added / removed
outdatedRegions.ForEach(x => { x.StartLineNumber += linesAddedOrRemoved; x.EndLineNumber += linesAddedOrRemoved; });
//Regions added
foreach (var item in updatedRegions.Except(outdatedRegions))
{
RegionsInCode.Add(item);
}
//Regions removed
foreach (var item in outdatedRegions.Except(updatedRegions))
{
RegionsInCode.Remove(item);
}
funktioniert zwar noch nicht ganz so wie ich will (gerade das "//Lines added / removed", dass ganze habe ich aber aber auch nur schnell runter programmiert um zu sehen ob dass so klappt wie ich es mir gedacht habe. Probleme wird es auch noch dann geben, wenn der User innerhalb einer region eine neue zeile hinzufügt, denn dann bekomme ich die Änderung von #endregion nicht mit. D.h. ich müsste schauen ob der User innerhalb einer region ist, dann muss ich mich bis zum Parent hochangeln und dort anfangen mit der Suche.
Ganz schön komplex das ganze, ich hoffe nur dass ich auch alle Fälle behandele, die auftreten können.
Werde mir jetzt aber erstmal die Links von herbivore anschauen und mal sehen wie man das noch lösen könnte. Auf Anhieb fällt mir aber keine andere Möglichkeit als die, die ich programmiert habe.
lern kochen.
wenn man noch bei den Eltern wohnt erübrigt sich dass aber 😉
gibts verschiedenes.
also mir fällt auf Anhieb nur diese eine ein?
Also ich kann jetzt nur von meinem Studium sprechen, wie es an anderen Hochschulen aussieht - keine Ahnung.
Also was aufjedenfall nützlich ist, wie talla schon vorgeschlagen hat, ist wenn man sich schonmal das Programm Matlab anschaut. Was du dir auch noch anschauen könntest wäre das Programm P-Spice. Dieses Programm haben wir in der FH für die Analyse elektrotechnischer Schaltungen verwendet.
LaTex haben ich an der FH bisher kaum bis gar nicht benutzt.
Lohnt sich die Anschaffung eines Grafiktabletts zur Erfassung von Notizen oder Formeln, welche Programme würden sich dazu eignen?
Also ich lade mir die Skripte der Vorlesungen immer auf mein Laptop herunter und schreibe meine Notizen meistens direkt in die pdf hinein (ich mache eh kaum Notizen *g). Dazu verwende ich das Freeware-Programm "PDF-XChange". Kann ich nur empfehlen. Wenn die Notizen mal länger werden sollten, schreib ich diese in ein Word-File und speicher diese in den Ordner dazu. Das ganze lässt sich natürlich nur bei den Vorlesungen machen, wo man selber nicht viel machen muss sondern nur zuhören muss. Bei Mathe z.B. würde ich das nicht empfehlen, da ist die "altmodische" Art mit Papier und Stift viel besser.
wie man sich am besten aufs Studium vorbereiten kann
Am besten du siehst zu dass du die Grundlagen in Mathe, E-Technik, Physik, ... beherrscht. Dass ist meiner Meinung nach eine sehr wichtige und hilfreiche Vorbereitung. Den Rest lernst du während dem Studium 😉
Hallo Gemeinde,
ich bastle gerade ein AddIn für VS2010 und hab eine ein Problem, wovon ich nicht weiß wie ich es am geschicktesten lösen kann.
Also es geht um folgendes: Mein AddIn liest den Text des aktiven CodeEditors aus und listet alle regions die er findet in einer TreeView auf. Wenn der User einen doppelklick auf ein Item macht, springt der Cursor dann zur ausgewählten region.
Mein problem ist jetzt, dass wenn der User im CodeEditor Änderungen macht und somit die Zeilennummer der region ändert (oder den Namen der region), ich diese Änderung ebenfalls übernehmen sollte, ansonsten springt der Cursor zur falschen Zeile.
Mein aktueller Stand der Dinge ist der, dass ich auf jede wichtige Änderung im CodeEditor reagiere und dann die Liste der regions neu generiere und anzeigen lasse. Dies bringt aber einige Probleme mit sich, denn wenn der User z.B. ein TreeViewItem aufgeklappt hat, ist diese nach dem Update der Liste wieder zu geklappt - also sozusagen im Ursprungszustand.
Dies möchte ich aber gerne verhindern - wenn ich nur wüsste wie. Man müsste irgendwie die Liste inkrementell Updaten. Da ist aber das Problem, dass ich einen region nicht eindeutig zuweisen kann, denn:
Jetzt brauche ich euren Rat. Wie lässt sich mein Problem lösen?
MfG TripleX
Also bei mir (hab noch die Ultimate RC) gibts den ObjectBrowser, zu finden ist er unter View / Object Browser - oder CTRL+W, J
Hallo Gemeinde,
ich bin gerade dabei ein AddIn für VS2010 zu programmieren und bin gerade dabei das Aussehen etwas besser an Visual Studio anzupassen.
Im Anhang habe ich ein Bild hochgeladen, welches links den Solution Explorer zeigt, und recht mein AddIn. In meinem AddIn möchte ich nun die gleiche Leiste mit Buttons haben, wie im Solution Explorer.
Eigentlich kein Problem, dachte ich mir, ich nehme einfach ein StackPanel und ändere die Hintergrundfarbe - aber das Problem dabei ist dass die Buttons dann wie Buttons aussehen (also die Buttons haben noch den grauen Hintergrund). Dann habe ich das ganze mit einer ToolBar versucht, aber das ist auch nicht das was ich suche. Denn die ToolBar ist abgerundet und hat rechts noch so ein DropDownFeld (ja ich weiss dass man das wegmachen kann).
Nun wollte ich fragen welches Control man da nehmen kann, damit die Buttons durchsichtig sind (wie in der ToolBar) damit meine Leiste gleich aussieht wie die in VisualStudio?
MfG TripleX
Wenn du auf den Fehler klickst (im Fehler-Fenster) und dann auf F1 drückst, öffnet sich ein Fenster und dort findest du auch die Fehlernummer 😉
ok, ich warte dann auf deinen Bericht.
MfG TripleX 😉
Wir an der Uni haben atm auch nur die Professional und eine andere kann ich nicht freischalten.
aber die Programme die ich aufgelistet habe, könnt ihr herunterladen? Also ihr habt die Developer AA-Lizenz? Wenn ja, dann warte ich mit'm Gang zum Rechenzentrum und warte auf die Antwort von MS an dich.
überschreiben kannst du die Methode sowieso nicht, nur mal zur Info (wollte das auch mal machen um mir den Overhead bei INotifyPropertyChanged-Properties zu entfernen .. und hab rausgefunden dass das halt net geht). Wirklich helfen kann ich dir bei deinem problem jetzt auch nicht, bin nicht gerade der Fan von IL.
Aber hier ist eine Seite die mir weitergeholfen hat bei meinen ersten Versuchen http://www.albahari.com/nutshell/ch17.aspx
Was dir auch noch weiterhelfen könnte wäre folgender Link: http://www.codeproject.com/KB/cs/fast_dynamic_properties.aspx
schau doch selber, wir sind doch auf der gleichen Hochschule 👅 (oder warst du schon fertig?)
Aber ich hab mal kurz geschaut, also wir haben:
Visual Studio 2008 Team Foundation Server Workgroup Edition
Visual Studio 2008 SP1
Wundert mich jetzt, da laut Link von zommi diese Version nur für "Developer AA" zur Verfügung steht - also sollten wir eigentlich auch die Ultimate bekommen 🤔
und die folgende Software kann ich mir ebenfalls runterladen:
4 Developer AA also includes Office Project Standard and Project Server
5 Developer AA also includes Office Visio Standard
6 Developer AA includes both Groove and Groove Server
morgen bzw. heute mal zum Rechenzentrum dackeln und nachfragen ... ich will die ultimate 8)
@talla war heute im Rechenzentrum und hab gefragt wann VS freigeschaltet wird bei uns. Die wussten nicht mal was von ner neuen Version *g.
Naja jetzt kann man es herunterladen und wir haben leider nur die Professional Version. Schade - weil ich hätte mich über die Funktionen der Ultimate-Version sehr gefreut.
@vorposter:
Also den caller könnte man möglicherweise* schon feststellen, siehe code:
* = Wenn z.B. der Compiler mitm inlinen nicht dazwischen funkt.
using System;
using System.Diagnostics;
using System.Reflection;
namespace ConsoleApplication1
{
class A
{
public void DoSomething()
{
StackFrame frame = new StackTrace().GetFrame(1);
Type caller = frame.GetMethod().DeclaringType;
foreach (FieldInfo info in caller.GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
{
Console.WriteLine(info.Name);
}
}
}
class B
{
private int m_nValue = 42;
public B()
{
new A().DoSomething();
}
}
class Program
{
static void Main(string[] args)
{
new B();
}
}
}
Das Programm gibt mir schon mal den Namen des Feldes aus ... wie man aber an den Wert kommt weiss ich nicht, da ich ja kein (sender-)Objekt habe. Und das wird der springende Punkt sein warum diese "triviale" lösung nicht gut genug ist.
Ich denke, dass das Problem sich nicht lösen lässt, wenn man folgende Vorschrift hat:
Es gibt keine EventHandler und kein Singleton (und kein static).
Wollt mir die Testversionen auch herunterladen, nur wollte ich dafür wissen, welche Version es dann später im MSDNAA zum downloaden gibt. Denn ich möchte ungern die Ultimate herunterladen und später wird "nur" die Professional freigegeben vice versa.
Die Express Editionen kann man sich bereits herunterladen ... http://www.microsoft.com/express/Windows/
warscheinlich erhälst du den Fehler, weil _St.Ressource bzw _Station.Ressource nicht initialisiert ist. Versuche mal folgendes:
public List<Ressource> _Ressource = new List<Ressource>();
Was heißt verschenken?
Ja deswegen habe ich verschenken auch in " gepackt. Mir ist es klar dass MS ebenfalls einen nutzen davon trägt, grad die spätere Kundenbindung spielt da eine große Rolle. Denn auch ich bin davon betroffen, ich liebe Visual Studio und kann mir keine andere Entwicklungsumgebung mehr vorstellen *g. Dennoch bezweifel ich es dass sie "uns" die Ultimate-Edition geben.
Zumal es klar definierte Lizenzbestimmungen gibt. Verstößt du gegen diese sind die Lizenzkosten aber ganz schnell wieder bei MS 😉
Die sollte ich mir mal durchlesen nach'm Ende des Studiums - nicht dass ich mich da dann strafbar mache. Aber ich glaube nicht dass MS es merken werden wenn ich VS weiterhin verwenden würde, aber das ist eine andere Sache und dass würde ich ja sowieso nicht machen.
Was deine genannten 11000$ angeht: Guck dir an was über MSDNAA so alles verfügbar ist. Ja hast schon recht, die Liste ist sehr lang. Abwarten und Tee trinken, mal schauen wann es (und welche Version) freigeschaltet wird. Wenn's morgen mittag noch net drinne ist marschier ich mal in den 2ten Stock ins Rechenzentrum hehe.