1. 程式人生 > >WPF 自定義OA現金盤平臺出租表格(可添加、刪除、合並、拆分)

WPF 自定義OA現金盤平臺出租表格(可添加、刪除、合並、拆分)

oar each dev col pri true ext bject http

xaml代碼OA現金盤平臺出租QQ2952777280【話仙源碼論壇】hxforum.com【木瓜源碼論壇】papayabbs.com

<Window
xmlns="http:// schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http:// schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http:// schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http:// schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:local="clr-namespace:WpfDragMoveTest"
xmlns:xctk="http:// schemas.xceed.com/wpf/xaml/toolkit" x:Class="WpfDragMoveTest.TestBarCode"
mc:Ignorable="d"
Title="TestBarCode" Height="450" Width="800" Loaded="Window_Loaded" KeyDown="Window_KeyDown" KeyUp="Window_KeyUp" >
<Grid Margin="10,10,277,195" x:Name="grid_1" >
<Border BorderThickness="1" BorderBrush="Black"></Border>

<Button x:Name="btn_AddRow" Content="添加行" HorizontalAlignment="Left" Margin="654,83,-224,0" VerticalAlignment="Top" Width="75" Click="btn_AddRow_Click" />

<Button x:Name="btn_AddCol" Content="添加列" HorizontalAlignment="Left" Margin="654,136,-224,0" VerticalAlignment="Top" Width="75" Click="btn_AddCol_Click" />
<Button x:Name="btn_new" Content="新增" HorizontalAlignment="Left" Margin="654,31,-224,0" VerticalAlignment="Top" Width="75" Click="btn_new_Click" />
<Label x:Name="lbl_name" Content="" HorizontalAlignment="Left" Height="40" Margin="531,346,-268,-172" VerticalAlignment="Top" Width="242"/>
<Button x:Name="btn_merge" Content="合並" HorizontalAlignment="Left" Margin="654,181,-224,0" VerticalAlignment="Top" Width="75" Click="btn_merge_Click" />
<Button x:Name="btn_split" Content="拆分" HorizontalAlignment="Left" Margin="560,181,-130,0" VerticalAlignment="Top" Width="75" Click="btn_split_Click" />
<Button x:Name="btn_DeleteRow" Content="刪除行" HorizontalAlignment="Left" Margin="552,83,-122,0" VerticalAlignment="Top" Width="75" Click="btn_DeleteRow_Click" />
<Button x:Name="btn_DeleteCol" Content="刪除列" HorizontalAlignment="Left" Margin="550,136,-120,0" VerticalAlignment="Top" Width="75" Click="btn_DeleteCol_Click" />
<Label x:Name="lbl_check" Content="" Height="32" Margin="9,346,2,-164" VerticalAlignment="Top"/>
<Label Content="x1:" HorizontalAlignment="Left" Height="25" Margin="9,316,0,-127" VerticalAlignment="Top" Width="32"/>
<Label x:Name="lb_x1" Content="" HorizontalAlignment="Left" Height="25" Margin="46,316,0,-127" VerticalAlignment="Top" Width="32"/>
<Label Content="x2:" HorizontalAlignment="Left" Height="25" Margin="99,316,0,-127" VerticalAlignment="Top" Width="32"/>
<Label x:Name="lb_x2" Content="" HorizontalAlignment="Left" Height="25" Margin="136,316,0,-127" VerticalAlignment="Top" Width="32"/>
<Label Content="y1:" HorizontalAlignment="Left" Height="25" Margin="195,316,0,-127" VerticalAlignment="Top" Width="32"/>
<Label x:Name="lb_y1" Content="" HorizontalAlignment="Left" Height="25" Margin="232,316,0,-127" VerticalAlignment="Top" Width="32"/>
<Label Content="y2:" HorizontalAlignment="Left" Height="25" Margin="275,316,0,-127" VerticalAlignment="Top" Width="32"/>
<Label x:Name="lb_y2" Content="" HorizontalAlignment="Left" Height="25" Margin="312,316,0,-127" VerticalAlignment="Top" Width="32"/>

後臺代碼 public partial class TestBarCode : Window { int oldRows = 0; int newRow = 0; int oldCol = 0; int newCol = 0; private string checkPanel = ""; public TestBarCode() { InitializeComponent(); } private void Window_Loaded(object sender, RoutedEventArgs e) { } private void btn_AddRow_Click(object sender, RoutedEventArgs e) { oldRows = newRow; newRow = newRow +2; foreach (var item in this.grid1.Children) { if (item is Grid) { Grid grid = item as Grid; foreach (var item2 in grid.Children) { if (item2 is Grid) { Grid MainGrid = item2 as Grid; //gridtab.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Pixel) }); //gridtab.RowDefinitions.Add(new RowDefinition()); for (int i = oldRows + 1; i <= newRow; i++)//行 for (int i = 1; i <= 5; i++) { if (i % 2 != 0) MainGrid.RowDefinitions.Add(new RowDefinition()); else MainGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Pixel) }); } RichTextBox rtb = default(RichTextBox); for (int r = newRow-1; r > oldRows-1; r--) { for (int c = 0; c < newCol; c++) { if (c % 2 == 0 && r % 2 == 0) { string name = "a" + r + "_" + c; rtb = new RichTextBox() { Name = name, Margin = new Thickness(0), HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, BorderBrush = System.Windows.Media.Brushes.Transparent, }; rtb.Document = new FlowDocument() { LineHeight = 1, PagePadding = new Thickness(0) };//修改行間距 rtb.MouseEnter += Rtb_MouseEnter; rtb.Document.MouseLeftButtonDown += DocumentMouseLeftButtonDown; Grid.SetColumn(rtb, c); Grid.SetRow(rtb, r); MainGrid.Children.Add(rtb); MainGrid.RegisterName(name, rtb); } if (r % 2 != 0 && c == 0) { string gsName = "gs" + r + "_" + c; GridSplitter splitter = new GridSplitter {Name=gsName, Height = 1, HorizontalAlignment = HorizontalAlignment.Stretch, BorderThickness = new Thickness(0), Background = System.Windows.Media.Brushes.Black }; Grid.SetColumn(splitter, c); Grid.SetRow(splitter, r); Grid.SetColumnSpan(splitter, 20); MainGrid.Children.Add(splitter); MainGrid.RegisterName(gsName, splitter); } } } } } } } } private int x1 = 0; private int y1 = 0; private int x2 = 0; private int y2 = 0; private string isFirstPoint = ""; private void DocumentMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (isShift) { FlowDocument flowDocument = sender as FlowDocument; RichTextBox richTextBox = flowDocument.Parent as RichTextBox; if (string.IsNullOrEmpty(isFirstPoint)) { isFirstPoint = richTextBox.Name; string[] arr = richTextBox.Name.Split(‘‘); x1 = Convert.ToInt32(arr[1]); y1 = Convert.ToInt32(arr[2]); } else { string[] arr = richTextBox.Name.Split(‘_‘); x2 = Convert.ToInt32(arr[1]); y2 = Convert.ToInt32(arr[2]); int r1, r2, c1, c2 = 0; if (x2 >= x1) { r2 = x2; r1 = x1; } else { r2 = x1; r1 = x2; } if (y2>=y1) { c2 = y2; c1 = y1; } else { c2 = y1; c1 = y2; } lb_x1.Content = r1; lb_x2.Content = r2; lb_y1.Content = c1; lby2.Content = c2; Grid MainGrid = GetGridMain(); foreach (UIElement item3 in MainGrid.Children) { if (item3 is RichTextBox) { RichTextBox rtb = item3 as RichTextBox; rtb.Background = System.Windows.Media.Brushes.White; } } for (int i = r1; i <= r2; i++) { for (int j = c1; j <= c2; j++) { string rtbName = "a" + i + "" + j; RichTextBox rtb = MainGrid.FindName(rtbName) as RichTextBox; if (rtb != null) { rtb.Background = System.Windows.Media.Brushes.Black; } } } } checkPanel += richTextBox.Name + " "; richTextBox.Background = System.Windows.Media.Brushes.Black; } else { checkPanel = ""; isFirstPoint = ""; x1 = x2 = y1 = y2 = 0; foreach (var item in this.grid_1.Children) { if (item is Grid) { Grid grid = item as Grid; foreach (var item2 in grid.Children) { if (item2 is Grid) { Grid MainGrid = item2 as Grid; foreach (UIElement item3 in MainGrid.Children) { if (item3 is RichTextBox) { RichTextBox richTextBox = item3 as RichTextBox; richTextBox.Background = System.Windows.Media.Brushes.White; } } } } } } } lbl_check.Content = checkPanel; } private Grid GetGridMain() { foreach (var item in this.grid_1.Children) { if (item is Grid) { Grid grid = item as Grid; foreach (var item2 in grid.Children) { if (item2 is Grid) { Grid MainGrid = item2 as Grid; return MainGrid; } } } } return null; } private void SetGrid(int oldRows,int oldCol, int newRow, int newCol) { Grid MainGrid = default(Grid); foreach (var item in this.grid_1.Children) { if (item is Grid) { Grid grid = item as Grid; foreach (var item2 in grid.Children) { if (item2 is Grid) { MainGrid = item2 as Grid; } } } } for (int i = oldRows +1 ; i <= newRow; i++)//行 for (int i = 1; i <= 5; i++) { if (i % 2 != 0) { MainGrid.RowDefinitions.Add(new RowDefinition()); } else { MainGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Pixel) }); } } for (int i = oldCol+1; i <= newCol; i++) { if (i % 2 != 0) { MainGrid.ColumnDefinitions.Add(new ColumnDefinition()); } else { MainGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Pixel) }); } } RichTextBox rtb = default(RichTextBox); for (int c = 0; c <= 4; c++) { for (int r = 0; r <= 4; r++) { if (r == 0 && c % 2 != 0) { GridSplitter splitter = new GridSplitter { Width = 1, HorizontalAlignment = HorizontalAlignment.Stretch, BorderThickness = new Thickness(0), Background = System.Windows.Media.Brushes.Black }; Grid.SetColumn(splitter, c); Grid.SetRow(splitter, r); Grid.SetRowSpan(splitter, 5); MainGrid.Children.Add(splitter); } else { if (c % 2 == 0 && r % 2 == 0) { rtb = new RichTextBox() { Margin = new Thickness(2), HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, BorderBrush = System.Windows.Media.Brushes.Transparent, }; rtb.Document = new FlowDocument() { LineHeight = 1, PagePadding = new Thickness(0) };//修改行間距 Grid.SetColumn(rtb, c); Grid.SetRow(rtb, r); MainGrid.Children.Add(rtb); } if (r % 2 != 0 && c == 0) { GridSplitter splitter = new GridSplitter { Height = 1, HorizontalAlignment = HorizontalAlignment.Stretch, BorderThickness = new Thickness(0), Background = System.Windows.Media.Brushes.Black }; Grid.SetColumn(splitter, c); Grid.SetRow(splitter, r); Grid.SetColumnSpan(splitter, 5); MainGrid.Children.Add(splitter); } } } } } private void btn_new_Click(object sender, RoutedEventArgs e) { //grid_1.Children.Clear(); oldRows = 0; oldCol = 0; newRow = 5; newCol = 5; Border border = new Border() { BorderBrush = System.Windows.Media.Brushes.Black, BorderThickness = new Thickness(2) }; Grid gridTable1 = new Grid() { Name = "gridTable1", Margin = new Thickness(2), Background = System.Windows.Media.Brushes.White, HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch }; grid_1.RegisterName("gridTable1", gridTable1); this.grid1.Children.Add(gridTable1); gridTable1.Children.Add(border); Grid MainGrid = new Grid() { Name = "gridTable", Background = System.Windows.Media.Brushes.White, HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch }; gridTable1.Children.Add(MainGrid); gridTable1.RegisterName("gridTable", MainGrid); for (int i = oldRows + 1; i <= newRow; i++)//行 for (int i = 1; i <= 5; i++) { if (i % 2 != 0) MainGrid.RowDefinitions.Add(new RowDefinition()); else MainGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Pixel) }); } for (int i = oldCol + 1; i <= newCol; i++) { if (i % 2 != 0) { MainGrid.ColumnDefinitions.Add(new ColumnDefinition()); } else { MainGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Pixel) }); } } RichTextBox rtb = default(RichTextBox); for (int c = oldCol; c <= newCol - 1; c++) { for (int r = oldRows; r <= newRow - 1; r++) { if (r == 0 && c % 2 != 0) { string gsName = "gs" + r + "" + c; GridSplitter splitter = new GridSplitter {Name=gsName, Width = 1, HorizontalAlignment = HorizontalAlignment.Stretch, BorderThickness = new Thickness(0), Background = System.Windows.Media.Brushes.Black }; Grid.SetColumn(splitter, c); Grid.SetRow(splitter, r); Grid.SetRowSpan(splitter, 20); MainGrid.Children.Add(splitter); MainGrid.RegisterName(gsName, splitter); } else { if (c % 2 == 0 && r % 2 == 0) { string name = "a" + r + "_" + c; rtb = new RichTextBox() { Name = name, Margin = new Thickness(0), HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, BorderBrush = System.Windows.Media.Brushes.Transparent, }; rtb.Document = new FlowDocument() { LineHeight = 1, PagePadding = new Thickness(0) };//修改行間距 rtb.MouseEnter += Rtb_MouseEnter; rtb.Document.MouseLeftButtonDown += DocumentMouseLeftButtonDown; Grid.SetColumn(rtb, c); Grid.SetRow(rtb, r); MainGrid.Children.Add(rtb); MainGrid.RegisterName(name, rtb); } if (r % 2 != 0 && c == 0) { string gsName = "gs" + r + "_" + c; GridSplitter splitter = new GridSplitter {Name=gsName, Height = 1, HorizontalAlignment = HorizontalAlignment.Stretch, BorderThickness = new Thickness(0), Background = System.Windows.Media.Brushes.Black }; Grid.SetColumn(splitter, c); Grid.SetRow(splitter, r); Grid.SetColumnSpan(splitter, 20); MainGrid.Children.Add(splitter); MainGrid.RegisterName(gsName, splitter); } } } } //gridTable1.Children.Add(MainGrid); //this.grid_1.Children.Add(gridTable1); } private void Rtb_MouseEnter(object sender, MouseEventArgs e) { RichTextBox richTextBox = sender as RichTextBox; lbl_name.Content = richTextBox.Name; } private void btn_AddCol_Click(object sender, RoutedEventArgs e) { oldCol = newCol; newCol = newCol + 2; foreach (var item in this.grid1.Children) { if (item is Grid) { Grid grid = item as Grid; foreach (var item2 in grid.Children) { if (item2 is Grid) { Grid MainGrid = item2 as Grid; //gridtab.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Pixel) }); //gridtab.RowDefinitions.Add(new RowDefinition()); for (int i = oldCol + 1; i <= newCol; i++)//行 for (int i = 1; i <= 5; i++) { if (i % 2 != 0) { MainGrid.ColumnDefinitions.Add(new ColumnDefinition()); } else { MainGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Pixel) }); } } RichTextBox rtb = default(RichTextBox); for (int c = newCol -1; c > oldCol -1; c--) { for (int r = 0; r < newRow; r++) { if (r == 0 && c % 2 != 0) { string gsName = "gs" + r + "" + c; GridSplitter splitter = new GridSplitter { Name=gsName, Width = 1, HorizontalAlignment = HorizontalAlignment.Stretch, BorderThickness = new Thickness(0), Background = System.Windows.Media.Brushes.Black }; Grid.SetColumn(splitter, c); Grid.SetRow(splitter, r); Grid.SetRowSpan(splitter, 20); MainGrid.Children.Add(splitter); MainGrid.RegisterName(gsName, splitter); } else if (r%2 == 0 && c%2==0) { string name = "a" + r + "_" + c; rtb = new RichTextBox() { Name = name, Margin = new Thickness(0), HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, BorderBrush = System.Windows.Media.Brushes.Transparent, }; rtb.Document = new FlowDocument() { LineHeight = 1, PagePadding = new Thickness(0) };//修改行間距 rtb.MouseEnter += Rtb_MouseEnter; rtb.Document.MouseLeftButtonDown += Document_MouseLeftButtonDown; Grid.SetColumn(rtb, c); Grid.SetRow(rtb, r); MainGrid.Children.Add(rtb); MainGrid.RegisterName(name, rtb); } } } } } } } } private void btn_mergeClick(object sender, RoutedEventArgs e) { string rtbName = "a" + lbx1.Content + "" + lb_y1.Content; Grid MainGrid = GetGridMain(); if (MainGrid != null) { foreach (var item3 in MainGrid.Children) { if (item3 is RichTextBox) { RichTextBox rtb = item3 as RichTextBox; if (rtb.Name == rtbName) { //Grid.SetColumn(rtb, 0); //Grid.SetRow(rtb, 0); int colSpan = Convert.ToInt32(lb_y2.Content) - Convert.ToInt32(lb_y1.Content) + 1; int rowSpan = Convert.ToInt32(lb_x2.Content) - Convert.ToInt32(lb_x1.Content) + 1; Grid.SetRowSpan(rtb, rowSpan); Grid.SetColumnSpan(rtb, colSpan); Grid.SetZIndex(rtb, 100); //MainGrid.Children.Add(rtb); } } } } } private void btn_splitClick(object sender, RoutedEventArgs e) { string rtbName = "a" + lbx1.Content + "" + lb_y1.Content; Grid MainGrid = GetGridMain(); if (MainGrid != null) { foreach (var item3 in MainGrid.Children) { if (item3 is RichTextBox) { RichTextBox rtb = item3 as RichTextBox; if (rtb.Name == rtbName) { Grid.SetRowSpan(rtb, 1); Grid.SetColumnSpan(rtb, 1); Grid.SetZIndex(rtb, 1); } } } } } private bool isShift = false; private void Window_KeyDown(object sender, KeyEventArgs e) { if (e.KeyboardDevice.Modifiers == ModifierKeys.Shift && e.Key == Key.LeftShift) { isShift = true; } } private void Window_KeyUp(object sender, KeyEventArgs e) { isShift = false; } private void btn_DeleteRow_Click(object sender, RoutedEventArgs e) { string strRowCol = lblname.Content.ToString(); string [] arr = strRowCol.Split(‘‘); int rowNum = Convert.ToInt32(arr[1]); int colNum = Convert.ToInt32(arr[2]); foreach (var item in this.grid1.Children) { if (item is Grid) { Grid grid = item as Grid; foreach (var item2 in grid.Children) { if (item2 is Grid) { Grid MainGrid = item2 as Grid; //刪除指定行的 RowDefinitions 及 GridSplitter for (int i = 0; i <= MainGrid.RowDefinitions.Count; i++) { if (i == rowNum) { MainGrid.RowDefinitions.RemoveAt(rowNum); if (rowNum == MainGrid.RowDefinitions.Count) { MainGrid.RowDefinitions.RemoveAt(rowNum - 1); } } if (i == rowNum+1) { MainGrid.RowDefinitions.RemoveAt(rowNum); } } newRow = newRow - 2;//新的行數賦值 //移除刪除行中的控件 for (int i = 0; i < MainGrid.Children.Count; i++) { int gr = Grid.GetRow(MainGrid.Children[i]); if (rowNum==0 && gr == 0) // 刪除第 0 行 { if (MainGrid.Children[i] is GridSplitter) { continue; } else if (MainGrid.Children[i] is RichTextBox) { RichTextBox richTextBox = MainGrid.Children[i] as RichTextBox; if (richTextBox != null) { richTextBox.UnregisterName(richTextBox.Name); } MainGrid.Children.Remove(MainGrid.Children[i]); i--;//避免跳過 } } else if (gr == rowNum || gr == rowNum + 1) { if (MainGrid.Children[i] is RichTextBox) { RichTextBox richTextBox = MainGrid.Children[i] as RichTextBox; if (richTextBox != null) { richTextBox.UnregisterName(richTextBox.Name); } } else if (MainGrid.Children[i] is GridSplitter) { GridSplitter gridSplitter = MainGrid.Children[i] as GridSplitter; if (gridSplitter != null) { gridSplitter.UnregisterName(gridSplitter.Name); } } MainGrid.Children.Remove(MainGrid.Children[i]); i--;//避免跳過 } else if (gr % 2 != 0) { if (MainGrid.Children[i] is RichTextBox) { RichTextBox richTextBox = MainGrid.Children[i] as RichTextBox; if (richTextBox != null) { richTextBox.UnregisterName(richTextBox.Name); } MainGrid.Children.Remove(MainGrid.Children[i]); i--;//避免跳過 } } if (rowNum -1 == gr && rowNum - 1 == MainGrid.RowDefinitions.Count)//選中最後一行進行刪除 { if (MainGrid.Children[i] is GridSplitter) { GridSplitter gridSplitter = MainGrid.Children[i] as GridSplitter; if (gridSplitter != null) { gridSplitter.UnregisterName(gridSplitter.Name); } MainGrid.Children.Remove(MainGrid.Children[i]); i--;//避免跳過 } } } //修改刪除行後面的控件名稱 for (int i = 0; i < MainGrid.Children.Count; i++) { int gr = Grid.GetRow(MainGrid.Children[i]); if (gr % 2 != 0) { //MainGrid.Children.Remove(MainGrid.Children[i]); } if (gr > rowNum) { int row = gr - 2; if (MainGrid.Children[i] is RichTextBox) { RichTextBox richTextBox = MainGrid.Children[i] as RichTextBox; string rtbName = richTextBox.Name; richTextBox.UnregisterName(rtbName); string[] arrName = rtbName.Split(‘‘); string newName = arrName[0] + "" + row.ToString() + "" + arrName[2]; Grid.SetRow(richTextBox, row); richTextBox.Name = newName; MainGrid.RegisterName(newName, richTextBox); } if (MainGrid.Children[i] is GridSplitter) { GridSplitter gridSplitter = MainGrid.Children[i] as GridSplitter; string gsName = gridSplitter.Name; gridSplitter.UnregisterName(gsName); string[] arrName = gsName.Split(‘‘); string newName = arrName[0] + "" + row.ToString() + "_" + arrName[2]; Grid.SetRow(gridSplitter, row); gridSplitter.Name = newName; MainGrid.RegisterName(newName, gridSplitter); } } } } } } } } private void btn_DeleteCol_Click(object sender, RoutedEventArgs e) { string strRowCol = lblname.Content.ToString(); string[] arr = strRowCol.Split(‘‘); int rowNum = Convert.ToInt32(arr[1]); int colNum = Convert.ToInt32(arr[2]); foreach (var item in this.grid1.Children) { if (item is Grid) { Grid grid = item as Grid; foreach (var item2 in grid.Children) { if (item2 is Grid) { Grid MainGrid = item2 as Grid; //刪除指定行的 ColumnDefinitions 及 GridSplitter for (int i = 0; i <= MainGrid.ColumnDefinitions.Count; i++) { if (i == colNum) { MainGrid.ColumnDefinitions.RemoveAt(colNum); if (colNum == MainGrid.ColumnDefinitions.Count) { MainGrid.ColumnDefinitions.RemoveAt(colNum - 1); } } if (i == colNum + 1) { MainGrid.ColumnDefinitions.RemoveAt(colNum); } } newCol = newCol - 2;//新的行數賦值 //移除刪除列中的控件 for (int i = 0; i < MainGrid.Children.Count; i++) { int gc = Grid.GetColumn(MainGrid.Children[i]); if (colNum == 0 && gc == 0) { if (MainGrid.Children[i] is GridSplitter) { continue; } } else if (gc == colNum || gc == colNum + 1) { if (MainGrid.Children[i] is RichTextBox) { RichTextBox richTextBox = MainGrid.Children[i] as RichTextBox; if (richTextBox != null) { richTextBox.UnregisterName(richTextBox.Name); } } else if (MainGrid.Children[i] is GridSplitter) { GridSplitter gridSplitter = MainGrid.Children[i] as GridSplitter; if (gridSplitter != null) { gridSplitter.UnregisterName(gridSplitter.Name); } } MainGrid.Children.Remove(MainGrid.Children[i]); i--;//避免跳過 } else if (gc % 2 != 0) { if (MainGrid.Children[i] is RichTextBox) { RichTextBox richTextBox = MainGrid.Children[i] as RichTextBox; if (richTextBox != null) { richTextBox.UnregisterName(richTextBox.Name); } MainGrid.Children.Remove(MainGrid.Children[i]); i--;//避免跳過 } } if (colNum - 1 == gc && colNum - 1 == MainGrid.ColumnDefinitions.Count) { if (MainGrid.Children[i] is GridSplitter) { GridSplitter gridSplitter = MainGrid.Children[i] as GridSplitter; if (gridSplitter != null) { gridSplitter.UnregisterName(gridSplitter.Name); } MainGrid.Children.Remove(MainGrid.Children[i]); i--;//避免跳過 ** } } } //修改刪除行後面的控件名稱 for (int i = 0; i < MainGrid.Children.Count; i++) { int gc = Grid.GetColumn(MainGrid.Children[i]); if (gc > colNum) { int col = gc - 2; if (MainGrid.Children[i] is RichTextBox) { RichTextBox richTextBox = MainGrid.Children[i] as RichTextBox; string rtbName = richTextBox.Name; richTextBox.UnregisterName(rtbName); string[] arrName = rtbName.Split(‘‘); string newName = arrName[0] + "" + arrName[1] + "" + col.ToString(); Grid.SetColumn(richTextBox, col); richTextBox.Name = newName; MainGrid.RegisterName(newName, richTextBox); } if (MainGrid.Children[i] is GridSplitter) { GridSplitter gridSplitter = MainGrid.Children[i] as GridSplitter; string gsName = gridSplitter.Name; gridSplitter.UnregisterName(gsName); string[] arrName = gsName.Split(‘‘); string newName = arrName[0] + "" + arrName[1] + "_" + col.ToString(); Grid.SetColumn(gridSplitter, col); gridSplitter.Name = newName; MainGrid.RegisterName(gsName, gridSplitter); } } } } } } } } }

WPF 自定義OA現金盤平臺出租表格(可添加、刪除、合並、拆分)