Laden...
M
Malfunc myCSharp.de - Member
Wahrscheinlich das was die meisten hier sind Bielefeld Dabei seit 31.10.2008 4 Beiträge
Benutzerbeschreibung

Forenbeiträge von Malfunc Ingesamt 4 Beiträge

09.10.2009 - 14:11 Uhr

Hi Merlin,

ein walkthrough zu deiner letzten Frage kann ich dir nicht geben. Ich will das Rad auch nicht neu erfinden. Hier aber werden Sie geholfen (möcht ich meinen):

http://www.codeproject.com/KB/cs/dzcollectioneditor.aspx

Zu dem Ding mit dem automatischen entfernen der collection Einträge aus dem Designer-Code, half bei mir folgendes (obwohl du es ja schon mit der BindingList, von der ich noch nie gehört hab, umgangen hast):


[Designer(typeof(TestControlDesigner))]
public partial class			TestControl : Control
{
}
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
class TestControlDesigner : ControlDesigner
{
	private TestControl ownerControl;
	public override void Initialize(System.ComponentModel.IComponent component)
	{
		base.Initialize(component);
		ownerControl= (TestControl)component;
	}
	protected override void Dispose(bool disposing)
	{
		base.Dispose(disposing);
	}
	public override ICollection AssociatedComponents
	{
		get { return (ICollection)ownerControl.TestButtons; }
	}
}

Entscheidend ist AssociatedComponents.

Aber...isch habe gar keinen Plan, was UserControls angeht und hab das nur aus dem Internet geklaut und weiss dahingehen auch nicht was es mit dem PermissionSet-Attribut auf sich hat (MSDN meinte das muss so). Also bitte nicht bashen, sondern wenn möglich ein freundlicher Hinweis, wenn ich dummes Zeug verbreite (was ich schon weiss). Dann nehm ich den Code wieder raus.

Tschö.

06.10.2009 - 22:51 Uhr

Nochmals hallo,

Edit: Tja das war wohl nicht ins Schwarze mit den sourcen die ich letztesmal gepostet habe. Die neue Zip-Datei sollte alles wieder ins Lot bringen. Ich hoffe die gröbsten Schnitzer sind raus und irgendeiner testet das Ding mal.

Der Ordner ListViewExTest enthält eine Solution, die das "Pattern" anhand eines Properties demonstriert, welches eine prozentuale Breitenangabe für Spalten zulässt.

Die barebon zip-Datei enthält die dll ohne alles, nur mit einem test-property bestückt.

Es wird mit zwei collections (der ListView.Columns und der ListViewEx.ColumnsNew) gearbeitet. Dies ist notwendig, da die ListView Klasse sonst kein ListViewEx.OnDrawColumnHeader() feuern würde, weil sie nichts über die ColumnsNew Eigenschaft weiß. In diesem Eventhandler kann man auf ColumnsNew zugreifen und über dessen Eigenschaften die Colums-Collection manipulieren und ggf. ohne e.DrawDefault selber neu zeichnen.

Mfg.

21.09.2009 - 23:08 Uhr

Ein schönen guten Abend an die Zuschauer,

Wenn ich diesen historischen thread nochmal defibriliere, hat da hoffentlich keiner einen Einwand. Ich brauchte genau das gleiche wie salla. Für eine Konfigurationsklasse, die vorgefertigte und vom Benutzer der Klasse, in einer Unterklasse erweiterbare Optionen aufnehmen soll, gab mir Mr. Bart Simpson den entscheidenden Hinweis. Da ich keinen CLR-Quelltext habe und mono nicht kenne, hab ich mir das hier ausgedacht. Ausserdem hab ich im mono-svn verzweifelt nach System.Text gesucht. Was dabei zu bestaunen ist, kann einen einen schon aus den Latschen hauen. Besonders der C-Quelltext.


namespace ConsoleTest
{
	#region BaseFile
	public interface IFile
	{
		void Open();
		void Close();
	}
	public class BaseFile : IFile
	{
		internal Dictionary<BaseFileOptions.StringID, String> items;
		public BaseFile()
		{
			items = new Dictionary<BaseFileOptions.StringID, string>();
		}
		public void Add(BaseFileOptions.StringID key, String value)
		{
			items.Add(key, value);
		}
		public void ListItems()
		{
			foreach (KeyValuePair<BaseFileOptions.StringID, String> pair in items)
			{
				System.Console.Out.WriteLine(pair.Key.ID + " - " + pair.Value.ToString());
			}
		}
		public virtual void Open() { System.Console.Out.WriteLine("BaseFile.Open()"); }
		public virtual void Close() { System.Console.Out.WriteLine("BaseFile.Open()"); }
	}
	public class BaseFileOptions
	{
		public class StringID
		{
			String _id;
			public StringID(String id) { _id = id; }
			public String ID { get { return _id; } }
		}
		public static StringID Mode { get { return new StringID("Mode"); } }
	}
	#endregion

	#region MyTextFile
	public class MyTextFile: BaseFile
	{
		public MyTextFile() : base() { }
		public override void Open() { System.Console.Out.WriteLine("MyTextFile.Open()"); }
		public override void Close() { System.Console.Out.WriteLine("MyTextFile.Close()"); }
	}
	public class MyTextFileOptions : BaseFileOptions
	{
		public static StringID CreateIndex { get { return new StringID("CreateIndex"); } }
	}
	#endregion
			

	class Program
	{
		static void Main(string[] args)
		{
			BaseFile file1 = new BaseFile();
			file1.Add(BaseFileOptions.Mode, "readonly");

			MyTextFile file2 = new MyTextFile();
			file2.Add(MyTextFileOptions.CreateIndex, "yes");

			file1.Open();
			file2.Open();

			file1.ListItems();
			file2.ListItems();
		}
	}
}

Vielen Dank für das Interesse zu später Stunde.

31.10.2008 - 21:30 Uhr

Hallo an alle die diesen altertümlichen Thread noch aufgespürt haben.
Ich habe es schliesslich auch. Der gepostete Algorithmus hat mich erst verwirrt (weiß, dass das simpel ist und das Carmack das schon als Entspannung nach dem Bäuerchen auf seinem Etch-a-sketch austüftelte), aber dass ich drüber nachgedacht habe, kann man hoffentlich sehen.

Meine Änderungen berichtigen nicht unbedingt Schwachstellen (bis auf vielleicht durch schräge Parameter ausgelöste DivideByZeroExceptions oder NullReferenceExceptions).

Im Grunde wollte ich, dass alle Thumbnails immer eine feste Höhe haben um einer ListView ein symetrisches Aussehen zu geben. Ich glaube sagen zu können, dass imagodespira's Vorlage das nicht ganz schafft. Trotzdem danke für die Zaunpfähle mit der Faktorenrechnung und dem InterpolationMode (net ist hamma!). Ausserdem skaliert der Code auch zu kleine Bildchen auf das richtige Maß hoch.

Als zweiten Parameter gibt man die gewünschte Länge der Seite an. Will man die Höhe auf diese Länge bringen, übergibt man horizontalOrVertical=false. Will man die Breite trimmen, dort true angeben.


public static Image GetThumbnail(Image unscaledImage, int thumbnailSideLength, bool horizontalOrVertical)
		{
			int x=0, y=0, imgwidth = -1, imgheight = -1;

			if (unscaledImage == null)
				return unscaledImage;

			if (unscaledImage.Width < 1 || unscaledImage.Height < 1)
				return unscaledImage;

			imgwidth = unscaledImage.Width;
			imgheight = unscaledImage.Height;

			if (horizontalOrVertical == false)
				if (imgheight == thumbnailSideLength)
					return unscaledImage;

			if (horizontalOrVertical == true)
				if (imgwidth == thumbnailSideLength)
					return unscaledImage;

			float scaleFactor = ((float)thumbnailSideLength / ((horizontalOrVertical) ? imgwidth : imgheight));
			x = (int)((float)imgwidth * scaleFactor);
			y = (int)((float)imgheight * scaleFactor);

			Image ret = new Bitmap(x, y);
			Graphics g = Graphics.FromImage(ret);
			g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
			g.DrawImage(unscaledImage, 0, 0, x, y);
			g.Dispose();
			return ret;
		}