[C#][SAMPLE][CODE][Control]TextBox和Validating事件的相关处理

[示例出处]:本示例来自《C#入门经典》第三版中文版,P342-P348
[示例涉及]:
1、TextBox控件的基本使用
2、Validating事件的使用
3、多委托处理同一事件方法
[示例代码]:2文件(其余默认)

Form1.Designer.cs
  1 None.gif namespace  WA_TextBoxTest
  2 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
  3InBlock.gif    partial class Form1
  4ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
  5ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
  6InBlock.gif        /// 必需的设计器变量。
  7ExpandedSubBlockEnd.gif        /// </summary>

  8InBlock.gif        private System.ComponentModel.IContainer components = null;
  9InBlock.gif
 10ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 11InBlock.gif        /// 清理所有正在使用的资源。
 12InBlock.gif        /// </summary>
 13ExpandedSubBlockEnd.gif        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>

 14InBlock.gif        protected override void Dispose(bool disposing)
 15ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 16InBlock.gif            if (disposing && (components != null))
 17ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 18InBlock.gif                components.Dispose();
 19ExpandedSubBlockEnd.gif            }

 20InBlock.gif            base.Dispose(disposing);
 21ExpandedSubBlockEnd.gif        }

 22InBlock.gif
 23ContractedSubBlock.gifExpandedSubBlockStart.gif        Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码
 24InBlock.gif
 25ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
 26InBlock.gif        /// 设计器支持所需的方法 - 不要
 27InBlock.gif        /// 使用代码编辑器修改此方法的内容。
 28ExpandedSubBlockEnd.gif        /// </summary>

 29InBlock.gif        private void InitializeComponent()
 30ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 31InBlock.gif            this.label1 = new System.Windows.Forms.Label();
 32InBlock.gif            this.label2 = new System.Windows.Forms.Label();
 33InBlock.gif            this.textBoxName = new System.Windows.Forms.TextBox();
 34InBlock.gif            this.textBoxAddress = new System.Windows.Forms.TextBox();
 35InBlock.gif            this.textBoxOccupation = new System.Windows.Forms.TextBox();
 36InBlock.gif            this.textBoxAge = new System.Windows.Forms.TextBox();
 37InBlock.gif            this.textBoxOutput = new System.Windows.Forms.TextBox();
 38InBlock.gif            this.label3 = new System.Windows.Forms.Label();
 39InBlock.gif            this.label4 = new System.Windows.Forms.Label();
 40InBlock.gif            this.label5 = new System.Windows.Forms.Label();
 41InBlock.gif            this.buttonOK = new System.Windows.Forms.Button();
 42InBlock.gif            this.buttonHelp = new System.Windows.Forms.Button();
 43InBlock.gif            this.SuspendLayout();
 44InBlock.gif            // 
 45InBlock.gif            // label1
 46InBlock.gif            // 
 47InBlock.gif            this.label1.AutoSize = true;
 48InBlock.gif            this.label1.Location = new System.Drawing.Point(2627);
 49InBlock.gif            this.label1.Name = "label1";
 50InBlock.gif            this.label1.Size = new System.Drawing.Size(5912);
 51InBlock.gif            this.label1.TabIndex = 0;
 52InBlock.gif            this.label1.Text = "labelName";
 53InBlock.gif            // 
 54InBlock.gif            // label2
 55InBlock.gif            // 
 56InBlock.gif            this.label2.AutoSize = true;
 57InBlock.gif            this.label2.Location = new System.Drawing.Point(2653);
 58InBlock.gif            this.label2.Name = "label2";
 59InBlock.gif            this.label2.Size = new System.Drawing.Size(7712);
 60InBlock.gif            this.label2.TabIndex = 1;
 61InBlock.gif            this.label2.Text = "labelAddress";
 62InBlock.gif            // 
 63InBlock.gif            // textBoxName
 64InBlock.gif            // 
 65InBlock.gif            this.textBoxName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
 66InBlock.gif                        | System.Windows.Forms.AnchorStyles.Right)));
 67InBlock.gif            this.textBoxName.Location = new System.Drawing.Point(12724);
 68InBlock.gif            this.textBoxName.Name = "textBoxName";
 69InBlock.gif            this.textBoxName.Size = new System.Drawing.Size(31721);
 70InBlock.gif            this.textBoxName.TabIndex = 2;
 71InBlock.gif            // 
 72InBlock.gif            // textBoxAddress
 73InBlock.gif            // 
 74InBlock.gif            this.textBoxAddress.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
 75InBlock.gif                        | System.Windows.Forms.AnchorStyles.Right)));
 76InBlock.gif            this.textBoxAddress.Location = new System.Drawing.Point(12750);
 77InBlock.gif            this.textBoxAddress.Multiline = true;
 78InBlock.gif            this.textBoxAddress.Name = "textBoxAddress";
 79InBlock.gif            this.textBoxAddress.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
 80InBlock.gif            this.textBoxAddress.Size = new System.Drawing.Size(317102);
 81InBlock.gif            this.textBoxAddress.TabIndex = 2;
 82InBlock.gif            // 
 83InBlock.gif            // textBoxOccupation
 84InBlock.gif            // 
 85InBlock.gif            this.textBoxOccupation.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
 86InBlock.gif                        | System.Windows.Forms.AnchorStyles.Right)));
 87InBlock.gif            this.textBoxOccupation.Location = new System.Drawing.Point(127158);
 88InBlock.gif            this.textBoxOccupation.Name = "textBoxOccupation";
 89InBlock.gif            this.textBoxOccupation.Size = new System.Drawing.Size(31721);
 90InBlock.gif            this.textBoxOccupation.TabIndex = 3;
 91InBlock.gif            this.textBoxOccupation.Validating += new System.ComponentModel.CancelEventHandler(this.textBoxOccupation_Validating);
 92InBlock.gif            // 
 93InBlock.gif            // textBoxAge
 94InBlock.gif            // 
 95InBlock.gif            this.textBoxAge.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
 96InBlock.gif                        | System.Windows.Forms.AnchorStyles.Right)));
 97InBlock.gif            this.textBoxAge.Location = new System.Drawing.Point(127193);
 98InBlock.gif            this.textBoxAge.Name = "textBoxAge";
 99InBlock.gif            this.textBoxAge.Size = new System.Drawing.Size(9921);
100InBlock.gif            this.textBoxAge.TabIndex = 4;
101InBlock.gif            this.textBoxAge.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBoxAge_KeyPress);
102InBlock.gif            // 
103InBlock.gif            // textBoxOutput
104InBlock.gif            // 
105InBlock.gif            this.textBoxOutput.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
106InBlock.gif                        | System.Windows.Forms.AnchorStyles.Left)
107InBlock.gif                        | System.Windows.Forms.AnchorStyles.Right)));
108InBlock.gif            this.textBoxOutput.Location = new System.Drawing.Point(28243);
109InBlock.gif            this.textBoxOutput.Multiline = true;
110InBlock.gif            this.textBoxOutput.Name = "textBoxOutput";
111InBlock.gif            this.textBoxOutput.ReadOnly = true;
112InBlock.gif            this.textBoxOutput.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
113InBlock.gif            this.textBoxOutput.Size = new System.Drawing.Size(416150);
114InBlock.gif            this.textBoxOutput.TabIndex = 5;
115InBlock.gif            // 
116InBlock.gif            // label3
117InBlock.gif            // 
118InBlock.gif            this.label3.AutoSize = true;
119InBlock.gif            this.label3.Location = new System.Drawing.Point(26161);
120InBlock.gif            this.label3.Name = "label3";
121InBlock.gif            this.label3.Size = new System.Drawing.Size(9512);
122InBlock.gif            this.label3.TabIndex = 6;
123InBlock.gif            this.label3.Text = "labelOccupation";
124InBlock.gif            // 
125InBlock.gif            // label4
126InBlock.gif            // 
127InBlock.gif            this.label4.AutoSize = true;
128InBlock.gif            this.label4.Location = new System.Drawing.Point(26196);
129InBlock.gif            this.label4.Name = "label4";
130InBlock.gif            this.label4.Size = new System.Drawing.Size(5312);
131InBlock.gif            this.label4.TabIndex = 7;
132InBlock.gif            this.label4.Text = "labelAge";
133InBlock.gif            // 
134InBlock.gif            // label5
135InBlock.gif            // 
136InBlock.gif            this.label5.AutoSize = true;
137InBlock.gif            this.label5.Location = new System.Drawing.Point(26228);
138InBlock.gif            this.label5.Name = "label5";
139InBlock.gif            this.label5.Size = new System.Drawing.Size(7112);
140InBlock.gif            this.label5.TabIndex = 8;
141InBlock.gif            this.label5.Text = "labelOutput";
142InBlock.gif            // 
143InBlock.gif            // buttonOK
144InBlock.gif            // 
145InBlock.gif            this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
146InBlock.gif            this.buttonOK.Location = new System.Drawing.Point(45818);
147InBlock.gif            this.buttonOK.Name = "buttonOK";
148InBlock.gif            this.buttonOK.Size = new System.Drawing.Size(8221);
149InBlock.gif            this.buttonOK.TabIndex = 9;
150InBlock.gif            this.buttonOK.Text = "OK";
151InBlock.gif            this.buttonOK.UseVisualStyleBackColor = true;
152InBlock.gif            this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click);
153InBlock.gif            // 
154InBlock.gif            // buttonHelp
155InBlock.gif            // 
156InBlock.gif            this.buttonHelp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
157InBlock.gif            this.buttonHelp.CausesValidation = false;
158InBlock.gif            this.buttonHelp.Location = new System.Drawing.Point(45843);
159InBlock.gif            this.buttonHelp.Name = "buttonHelp";
160InBlock.gif            this.buttonHelp.Size = new System.Drawing.Size(8221);
161InBlock.gif            this.buttonHelp.TabIndex = 10;
162InBlock.gif            this.buttonHelp.Text = "Help";
163InBlock.gif            this.buttonHelp.UseVisualStyleBackColor = true;
164InBlock.gif            this.buttonHelp.Click += new System.EventHandler(this.buttonHelp_Click);
165InBlock.gif            // 
166InBlock.gif            // Form1
167InBlock.gif            // 
168InBlock.gif            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
169InBlock.gif            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
170InBlock.gif            this.ClientSize = new System.Drawing.Size(561405);
171InBlock.gif            this.Controls.Add(this.buttonHelp);
172InBlock.gif            this.Controls.Add(this.buttonOK);
173InBlock.gif            this.Controls.Add(this.label5);
174InBlock.gif            this.Controls.Add(this.label4);
175InBlock.gif            this.Controls.Add(this.label3);
176InBlock.gif            this.Controls.Add(this.textBoxOutput);
177InBlock.gif            this.Controls.Add(this.textBoxAge);
178InBlock.gif            this.Controls.Add(this.textBoxOccupation);
179InBlock.gif            this.Controls.Add(this.textBoxAddress);
180InBlock.gif            this.Controls.Add(this.textBoxName);
181InBlock.gif            this.Controls.Add(this.label2);
182InBlock.gif            this.Controls.Add(this.label1);
183InBlock.gif            this.Name = "Form1";
184InBlock.gif            this.Text = "Form1";
185InBlock.gif            this.Validating += new System.ComponentModel.CancelEventHandler(this.textBoxEmpty_Validating);
186InBlock.gif            this.ResumeLayout(false);
187InBlock.gif            this.PerformLayout();
188InBlock.gif
189ExpandedSubBlockEnd.gif        }

190InBlock.gif
191ExpandedSubBlockEnd.gif        #endregion

192InBlock.gif
193InBlock.gif        private System.Windows.Forms.Label label1;
194InBlock.gif        private System.Windows.Forms.Label label2;
195InBlock.gif        private System.Windows.Forms.TextBox textBoxName;
196InBlock.gif        private System.Windows.Forms.TextBox textBoxAddress;
197InBlock.gif        private System.Windows.Forms.TextBox textBoxOccupation;
198InBlock.gif        private System.Windows.Forms.TextBox textBoxAge;
199InBlock.gif        private System.Windows.Forms.TextBox textBoxOutput;
200InBlock.gif        private System.Windows.Forms.Label label3;
201InBlock.gif        private System.Windows.Forms.Label label4;
202InBlock.gif        private System.Windows.Forms.Label label5;
203InBlock.gif        private System.Windows.Forms.Button buttonOK;
204InBlock.gif        private System.Windows.Forms.Button buttonHelp;
205ExpandedSubBlockEnd.gif    }

206ExpandedBlockEnd.gif}

207 None.gif
208 None.gif

Form1.cs
  1 None.gif using  System;
  2 None.gif using  System.Collections.Generic;
  3 None.gif using  System.ComponentModel;
  4 None.gif using  System.Data;
  5 None.gif using  System.Drawing;
  6 None.gif using  System.Text;
  7 None.gif using  System.Windows.Forms;
  8 None.gif
  9 None.gif namespace  WA_TextBoxTest
 10 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 11InBlock.gif    public partial class Form1 : Form
 12ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 13InBlock.gif        public Form1()
 14ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 15InBlock.gif            InitializeComponent();
 16InBlock.gif            this.buttonOK.Enabled = false;
 17InBlock.gif
 18InBlock.gif            //Tag values for testing if the data is valid.
 19InBlock.gif            this.textBoxName.Tag = false;
 20InBlock.gif            this.textBoxAddress.Tag = false;
 21InBlock.gif            this.textBoxAge.Tag = false;
 22InBlock.gif            this.textBoxOccupation.Tag = false;
 23InBlock.gif
 24InBlock.gif            //订阅事件Subscriptions to events
 25InBlock.gif            this.textBoxName.Validating += new CancelEventHandler(this.textBoxEmpty_Validating);
 26InBlock.gif            this.textBoxAddress.Validating += new CancelEventHandler(this.textBoxEmpty_Validating);
 27InBlock.gif            this.textBoxOccupation.Validating += new CancelEventHandler(this.textBoxOccupation_Validating);
 28InBlock.gif            this.textBoxAge.Validating += new CancelEventHandler(this.textBoxEmpty_Validating);
 29InBlock.gif
 30InBlock.gif            //当控件中文本发生改变,就激发TextChanged事件。
 31InBlock.gif            this.textBoxName.TextChanged +=new EventHandler(textBox_TextChanged);
 32InBlock.gif            this.textBoxAddress.TextChanged+=new EventHandler(textBox_TextChanged);
 33InBlock.gif            this.textBoxOccupation.TextChanged+=new EventHandler(textBox_TextChanged);
 34InBlock.gif            this.textBoxAge.TextChanged += new EventHandler(textBox_TextChanged);
 35ExpandedSubBlockEnd.gif        }

 36InBlock.gif
 37InBlock.gif        private void buttonOK_Click(object sender, EventArgs e)
 38ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 39InBlock.gif            //No testing for invalid values are made ,as that should not be necessary
 40InBlock.gif            string output;
 41InBlock.gif            
 42InBlock.gif            //Concatenate the text values of for TextBoxes.
 43InBlock.gif            output = "Name:" + this.textBoxName.Text + "\r\n";
 44InBlock.gif            output += "Address:" + this.textBoxAddress.Text + "\r\n";
 45InBlock.gif            output += "Occupation:" + this.textBoxOccupation.Text + "\r\n";
 46InBlock.gif            output += "Age:" + this.textBoxAge.Text;
 47InBlock.gif 
 48InBlock.gif            //Insert the new text.
 49InBlock.gif            this.textBoxOutput.Text = output;
 50ExpandedSubBlockEnd.gif        }

 51InBlock.gif
 52InBlock.gif        private void buttonHelp_Click(object sender, EventArgs e)
 53ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 54InBlock.gif            //Write a short description of each TextBox in the Output TextBox.
 55InBlock.gif            string output;
 56InBlock.gif
 57InBlock.gif            output = "Name=Your name\r\n";
 58InBlock.gif            output += "Address=Your address\r\n";
 59InBlock.gif            output += "Occupation=Only allowed value is 'Programmer'\r\n";
 60InBlock.gif            output += "Age=Your age";
 61InBlock.gif
 62InBlock.gif            //Insert the new text.
 63InBlock.gif            this.textBoxOutput.Text = output;
 64ExpandedSubBlockEnd.gif        }

 65InBlock.gif
 66InBlock.gif        private void textBoxEmpty_Validating(object sender, CancelEventArgs e)
 67ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 68InBlock.gif            //我们知道这个sender是一个对话框,所以我们将他们强制转换为TextBox
 69InBlock.gif            TextBox tb = (TextBox)sender;
 70InBlock.gif
 71InBlock.gif            //如果对话框是空的话我们设置TextBox背景色为红色来象征问题。
 72InBlock.gif            //如果控件有valid信息,我们就使用控件的Tag值来指出。
 73InBlock.gif            if (tb.Text.Length == 0)
 74ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 75InBlock.gif                tb.BackColor = Color.Red;
 76InBlock.gif                tb.Tag = false;
 77InBlock.gif                //在这个例子中我们不想取消further processing
 78InBlock.gif                //但是如果我们想要这么做的话,我们只需要添加以下一行:
 79InBlock.gif                //e.Cancel=true;
 80ExpandedSubBlockEnd.gif            }

 81InBlock.gif            else
 82ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 83InBlock.gif                this.BackColor = SystemColors.Window;
 84InBlock.gif                tb.Tag = true;
 85ExpandedSubBlockEnd.gif            }

 86InBlock.gif            //Finally ,we call ValidateOK which will set the value of the OK button.
 87InBlock.gif            ValidateOK();
 88ExpandedSubBlockEnd.gif        }

 89InBlock.gif
 90InBlock.gif        private void textBoxOccupation_Validating(object sender, CancelEventArgs e)
 91ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 92InBlock.gif            //Cast the sender object to a textBox
 93InBlock.gif            TextBox tb = (TextBox)sender;
 94InBlock.gif            
 95InBlock.gif            //Check if the values are correct
 96InBlock.gif            if (tb.Text.CompareTo("Programmer"== 0 || tb.Text.Length == 0)
 97ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 98InBlock.gif                tb.Tag = true;
 99InBlock.gif                tb.BackColor = Color.Red;
100ExpandedSubBlockEnd.gif            }

101InBlock.gif            else
102ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
103InBlock.gif                tb.Tag = false;
104InBlock.gif                tb.BackColor = SystemColors.Window;
105ExpandedSubBlockEnd.gif            }

106InBlock.gif
107InBlock.gif            //Set the state of the OK button
108InBlock.gif            ValidateOK();
109ExpandedSubBlockEnd.gif        }

110InBlock.gif
111InBlock.gif        private void textBoxAge_KeyPress(object sender, KeyPressEventArgs e)
112ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
113InBlock.gif            if ((e.KeyChar < 48 || e.KeyChar > 57&& e.KeyChar != 8)
114ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
115InBlock.gif                e.Handled = true;   //Remove the character
116InBlock.gif                //等于true告诉用户不应该对字符进行任何操作
117ExpandedSubBlockEnd.gif            }

118ExpandedSubBlockEnd.gif        }

119InBlock.gif
120InBlock.gif        private void textBox_TextChanged(object sender, EventArgs e)
121ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
122InBlock.gif            //Cast the sender object to a TextBox
123InBlock.gif            TextBox tb = (TextBox)sender;
124InBlock.gif
125InBlock.gif            //Test if the data is valid and set the tag and back ground color accordingly.
126InBlock.gif            if (tb.Text.Length == 0 && tb != textBoxOccupation)
127ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
128InBlock.gif                tb.Tag = false;
129InBlock.gif                tb.BackColor = Color.Red;
130ExpandedSubBlockEnd.gif            }

131InBlock.gif            else if (tb == textBoxOccupation && (tb.Text.Length != 0 && tb.Text.CompareTo("Programmer"!= 0))
132ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
133InBlock.gif                //Don't set the color here,as it will color change while the user is typing
134InBlock.gif                tb.Tag = false;
135ExpandedSubBlockEnd.gif            }

136InBlock.gif            else
137ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
138InBlock.gif                tb.Tag = true;
139InBlock.gif                tb.BackColor = SystemColors.Window;
140ExpandedSubBlockEnd.gif            }

141InBlock.gif
142InBlock.gif            //Call ValidateOK to set the OK button
143InBlock.gif            ValidateOK();
144ExpandedSubBlockEnd.gif        }

145InBlock.gif
146InBlock.gif        private void ValidateOK()
147ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif
148InBlock.gif            //Set the OK button to enabled if all the Tags are true
149InBlock.gif            this.buttonOK.Enabled = ((bool)(this.textBoxName.Tag) &&
150InBlock.gif                (bool)(this.textBoxAge.Tag) &&
151InBlock.gif                (bool)(this.textBoxAddress.Tag) &&
152InBlock.gif                (bool)(this.textBoxOccupation.Tag));
153ExpandedSubBlockEnd.gif        }

154ExpandedSubBlockEnd.gif    }

155ExpandedBlockEnd.gif}


[示例说明]:
1、开发语言:C#
2、开发环境:Visual Studio.Net 2005 Team suite
3、开发模板:C#.net项目->Windows应用程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值