浏览代码

Added SelectedCellChanged event

tznind 4 年之前
父节点
当前提交
81edb73785
共有 2 个文件被更改,包括 46 次插入5 次删除
  1. 31 3
      Terminal.Gui/Views/TableView.cs
  2. 15 2
      UICatalog/Scenarios/TableEditor.cs

+ 31 - 3
Terminal.Gui/Views/TableView.cs

@@ -172,8 +172,15 @@ namespace Terminal.Gui {
 		public int SelectedColumn {
 			get => selectedColumn;
 
-			//try to prevent this being set to an out of bounds column
-			set => selectedColumn = Table == null ? 0 :  Math.Min (Table.Columns.Count - 1, Math.Max (0, value));
+			set {
+				var oldValue = selectedColumn;
+
+				//try to prevent this being set to an out of bounds column
+				selectedColumn = Table == null ? 0 :  Math.Min (Table.Columns.Count - 1, Math.Max (0, value));
+
+				if(oldValue != selectedColumn)
+					OnSelectedCellChanged();
+			} 
 		}
 
 		/// <summary>
@@ -181,7 +188,15 @@ namespace Terminal.Gui {
 		/// </summary>
 		public int SelectedRow {
 			get => selectedRow;
-			set => selectedRow =  Table == null ? 0 : Math.Min (Table.Rows.Count - 1, Math.Max (0, value));
+			set {
+
+				var oldValue = selectedColumn;
+
+				selectedRow =  Table == null ? 0 : Math.Min (Table.Rows.Count - 1, Math.Max (0, value));
+
+				if(oldValue != selectedRow)
+					OnSelectedCellChanged();
+			}
 		}
 
 		/// <summary>
@@ -199,6 +214,11 @@ namespace Terminal.Gui {
 		/// </summary>
 		public char SeparatorSymbol { get; set; } = ' ';
 
+		/// <summary>
+		/// This event is raised when the selected cell in the table changes.
+		/// </summary>
+		public event Action<EventArgs> SelectedCellChanged;
+
 		/// <summary>
 		/// Initialzies a <see cref="TableView"/> class using <see cref="LayoutStyle.Computed"/> layout. 
 		/// </summary>
@@ -692,6 +712,14 @@ namespace Terminal.Gui {
 			}
 		}
 
+		/// <summary>
+		/// Invokes the <see cref="SelectedCellChanged"/> event
+		/// </summary>
+		protected virtual void OnSelectedCellChanged()
+		{
+			SelectedCellChanged?.Invoke(new EventArgs());
+		}
+
 		/// <summary>
 		/// Calculates which columns should be rendered given the <paramref name="bounds"/> in which to display and the <see cref="ColumnOffset"/>
 		/// </summary>

+ 15 - 2
UICatalog/Scenarios/TableEditor.cs

@@ -56,10 +56,23 @@ namespace UICatalog.Scenarios {
 				X = 0,
 				Y = 0,
 				Width = Dim.Fill (),
-				Height = Dim.Fill (),
+				Height = Dim.Fill (1),
 			};
 
 			Win.Add (tableView);
+
+			var selectedCellLabel = new Label(){
+				X = 0,
+				Y = Pos.Bottom(tableView),
+				Text = "0,0",
+				Width = Dim.Fill(),
+				TextAlignment = TextAlignment.Right
+				
+			};
+
+			Win.Add(selectedCellLabel);
+
+			tableView.SelectedCellChanged += (s,e)=>{selectedCellLabel.Text = $"{tableView.SelectedRow},{tableView.SelectedColumn}";};
 		}
 
 		private void ClearColumnStyles ()
@@ -231,7 +244,7 @@ namespace UICatalog.Scenarios {
 			dt.Columns.Add(new DataColumn("NullsCol",typeof(string)));
 
 			for(int i=0;i< cols -5; i++) {
-				dt.Columns.Add("Column" + (i+4));
+				dt.Columns.Add("Column" + (i+5));
 			}
 			
 			var r = new Random(100);