Пример #1
0
		/// <summary>
		/// Create an AutoCompleteCellEditor
		/// </summary>
		/// <param name="lv"></param>
		/// <param name="column"></param>
		public AutoCompleteCellEditor(ObjectListView lv, OLVColumn column) {
			this.DropDownStyle = ComboBoxStyle.DropDown;

			Dictionary<String, bool> alreadySeen = new Dictionary<string, bool>();
			for (int i = 0; i < Math.Min(lv.GetItemCount(), 1000); i++) {
				String str = column.GetStringValue(lv.GetModelObject(i));
				if (!alreadySeen.ContainsKey(str)) {
					this.Items.Add(str);
					alreadySeen[str] = true;
				}
			}

			this.Sorted = true;
			this.AutoCompleteSource = AutoCompleteSource.ListItems;
			this.AutoCompleteMode = AutoCompleteMode.Append;
		}
Пример #2
0
		/// <summary>
		/// Draw a slight colouring over our tinted column
		/// </summary>
		/// <remarks>
		/// This overlay only works when:
		/// - the list is in Details view
		/// - there is at least one row
		/// - there is a selected column (or a specified tint column)
		/// </remarks>
		/// <param name="olv"></param>
		/// <param name="g"></param>
		/// <param name="r"></param>
		public override void Draw(ObjectListView olv, Graphics g, Rectangle r) {

			if (olv.View != System.Windows.Forms.View.Details)
				return;

			if (olv.GetItemCount() == 0)
				return;

			OLVColumn column = this.ColumnToTint ?? olv.SelectedColumn;
			if (column == null)
				return;

			Point sides = NativeMethods.GetScrolledColumnSides(olv, column.Index);
			if (sides.X == -1)
				return;

			Rectangle columnBounds = new Rectangle(sides.X, r.Top, sides.Y - sides.X, r.Bottom);

			// Find the bottom of the last item. The tinting should extend only to there.
			OLVListItem lastItem = olv.GetLastItemInDisplayOrder();
			if (lastItem != null) {
				Rectangle lastItemBounds = lastItem.Bounds;
				if (!lastItemBounds.IsEmpty && lastItemBounds.Bottom < columnBounds.Bottom)
					columnBounds.Height = lastItemBounds.Bottom - columnBounds.Top;
			}
			g.FillRectangle(this.tintBrush, columnBounds);
		}