软件版本:VS2015 Revit2018
功能:Revit中运行程序时,在Window中的TextBox中自动显示上一次输入的数值(string类型 or double类型)(通过txt文件完成数据传递)
参考文章:
C# 对文本文件的几种读写方法总结
功能:Revit中运行程序时,在Window中的TextBox中自动显示上一次输入的数值(string类型 or double类型)(通过txt文件完成数据传递)
参考文章:
C# 对文本文件的几种读写方法总结
1.程序概览
2.第一次输入数值;第二次打开程序,自动显示上一次的输入值【】
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; using Autodesk.Revit.DB.Mechanical; using Autodesk.Revit.DB.Plumbing; using Autodesk.Revit.DB.Electrical; using System.Windows; using System.ComponentModel; using static Test.Window1; namespace Test { [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)] [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)] [Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)] class Command : IExternalCommand { UIDocument uidoc; Document doc; public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { uidoc = commandData.Application.ActiveUIDocument; doc = uidoc.Document; Window1 w1 = new Window1(); ViewModel v1 = new ViewModel(); w1.DataContext = v1; if (!w1.ShowDialog() ?? false) return Result.Cancelled; //[string类型] //string data0 = v1.Id0; //string data1 = v1.Id1; //string[] nums = new string[2] { data0, data1 }; //[double类型] double data0 = v1.Id0; double data1 = v1.Id1; double[] nums = new double[2] { data0,data1}; return Result.Succeeded; } } }
<Window x:Class="Test.Window1" 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:Test" mc:Ignorable="d" Title="Window1" Height="350" Width="525"> <Grid> <TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="52" Margin="183,33,0,0" TextWrapping="Wrap" Text="{Binding Path=Id0,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="120"/> <Button x:Name="button1" Content="Button1" HorizontalAlignment="Left" Margin="198,186,0,0" VerticalAlignment="Top" Width="75" Click="button1_Click"/> <TextBox x:Name="textBox2" HorizontalAlignment="Left" Height="55" Margin="183,111,0,0" TextWrapping="Wrap" Text="{Binding Path=Id1,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="120"/> </Grid> </Window>
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.IO;//添加引用 using System.ComponentModel; namespace Test { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { DialogResult = true; WriteFile("E:\\123.txt", textBox1.Text + "\n" + textBox2.Text); Close(); } /// <summary> /// 写文件 /// </summary> /// <param name="Path">文件路径</param> /// <param name="Strings">文件内容</param> public static void WriteFile(string Path, string Strings) { if (!System.IO.File.Exists(Path)) { System.IO.FileStream f = System.IO.File.Create(Path); f.Close(); f.Dispose(); } //使用false覆盖,连用两个WriteFile("E:\\123.txt", textBox1.Text); WriteFile("E:\\123.txt", textBox2.Text);会导致只显示textBox2.Text System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, false, System.Text.Encoding.UTF8); f2.WriteLine(Strings); f2.Close(); f2.Dispose(); } //获取字符串,遇到换行符,就终止生成一个字符串,并输出 public static string ReadFile(string Path,out string num2) { { string[] intro = new string[30]; //每行字符存储的数组 string[] pageInfo = new string[2]; //每项信息的数组,默认不超过2项。 int max_char_for_a_line = 15; //每行最多存储的数字个数 //int max_line_for_a_page = 2; //每页最多存储的行数 string str = File.ReadAllText(Path, Encoding.Default); //读取文件赋给一个string(处理) int length = str.Length; //文件里字符串总长度 int correntLine = 0; //当前行数 int tempChar = 0; //当前行字符个数 //处理“行数组”:每行存满+遇到换行符,都另起一行 for (int i = 0; i < length; i++) { if ((str[i] != '\n') && (str[i] != '\r'))//不是换行符 { if (tempChar == max_char_for_a_line) //如果已经存了15个数字就换行 { correntLine++; //行数+1 tempChar = 0;//新一行,当前行字符个数 } tempChar++;//没有存满,当前行的字符个数+1 //此处才与str[i]关联,上面的数值才有了用 intro[correntLine] += str[i];//将txt文本内容不断添加到,行的数组里 } else if (str[i] == '\n') //遇到换行符换行,另起一行 { tempChar = 0;//当前行字符个数,清零 correntLine++;//换行0-5 } } string num1 = intro[0]; num2 = intro[1]; return num1; } } public class ViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; //[string类型] //public static string a = null; //private string id0 = ReadFile("E:\\123.txt", out a); //public string Id0 //{ // get { return id0; } // set // { // id0 = value; // NotifyPropertyChanged("管道偏移高度"); // } //} //private string id1 = a; //public string Id1 //{ // get { return id1; } // set // { // id1 = value; // NotifyPropertyChanged("管道偏移高度"); // } //} //[double类型] public static string b = null; public static string a = ReadFile("E:\\123.txt",out b); private double id0 = Double.Parse(a); public double Id0 { get { return id0; } set { id0 = value; NotifyPropertyChanged("管道偏移高度"); } } private double id1 = Double.Parse(b); public double Id1 { get { return id1; } set { id1 = value; NotifyPropertyChanged("管道偏移高度"); } } private void NotifyPropertyChanged(string name) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(name)); } } } } }