Revit二次开发之让WPF中的TextBox显示上一次的输入值【附源代码】

软件版本:VS2015 Revit2018
功能:Revit中运行程序时,在Window中的TextBox中自动显示上一次输入的数值(string类型 or double类型)(通过txt文件完成数据传递)
参考文章:
C# 对文本文件的几种读写方法总结

C#简单实现读取txt文本文件并分页存储到数组


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));
                }
            }
        }
    }
}




猜你喜欢

转载自blog.csdn.net/sinat_37519884/article/details/79241501
今日推荐