Disable buttons
От: Аноним  
Дата: 11.07.05 03:21
Оценка:
Приветствую всех.
Возник такой вопрос, как на время выполнения сделать кнопку disable.
Просто запись на диск файла размером 30 метров занимает определенное время, как можно узнать, что файл успешно закончился записываться на диск, а затем сделать enable button.
Всем спасибо за внимание.
RE: Disable buttons
От: Аноним  
Дата: 11.07.05 07:06
Оценка:
Приветствую всех.
Возник такой вопрос, как на время выполнения сделать кнопку disable.
Просто запись на диск файла размером 30 метров занимает определенное время, как можно узнать, что файл успешно закончился записываться на диск, а затем сделать enable button.
Всем спасибо за внимание.


Ставь на кнопку
Enabled=false


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Disable buttons
От: Козьма Прутков Россия  
Дата: 11.07.05 07:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Приветствую всех.

А>Возник такой вопрос, как на время выполнения сделать кнопку disable.
А>Просто запись на диск файла размером 30 метров занимает определенное время, как можно узнать, что файл успешно закончился записываться на диск, а затем сделать enable button.
А>Всем спасибо за внимание.

на время выполнения чего? может все-таки на время от нажатия кнопки до получения ответа сервера? Тогда так:
Button1.Attributes["onclick"] = "javascript:document.getElementById('" + Button1.ClientID + "').disabled = true;";
Да хранит вас господь в сухом прохладном месте...
Re[2]: Disable buttons
От: Сим Россия  
Дата: 03.03.06 13:03
Оценка:
Здравствуйте, Козьма Прутков, Вы писали:

КП>Здравствуйте, Аноним, Вы писали:


А>>Приветствую всех.

А>>Возник такой вопрос, как на время выполнения сделать кнопку disable.
А>>Просто запись на диск файла размером 30 метров занимает определенное время, как можно узнать, что файл успешно закончился записываться на диск, а затем сделать enable button.
А>>Всем спасибо за внимание.

КП>на время выполнения чего? может все-таки на время от нажатия кнопки до получения ответа сервера? Тогда так:

КП>
КП>Button1.Attributes["onclick"] = "javascript:document.getElementById('" + Button1.ClientID + "').disabled = true;";
КП>


А если с учетом клиентских валидаторов? Т.е. дизейблить страницу только если реально произойдет postback
Re[3]: Disable buttons
От: mogadanez Чехия  
Дата: 03.03.06 13:18
Оценка:
Здравствуйте, Сим, Вы писали:


КП>>на время выполнения чего? может все-таки на время от нажатия кнопки до получения ответа сервера? Тогда так:

КП>>
КП>>Button1.Attributes["onclick"] = "javascript:document.getElementById('" + Button1.ClientID + "').disabled = true;";
КП>>


Сим>А если с учетом клиентских валидаторов? Т.е. дизейблить страницу только если реально произойдет postback


валидаторы впишут свой код ПЕРЕД твоим. так что если они отвалятся до твоего не дойдет
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re[4]: Disable buttons
От: Сим Россия  
Дата: 03.03.06 13:53
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>Здравствуйте, Сим, Вы писали:



КП>>>на время выполнения чего? может все-таки на время от нажатия кнопки до получения ответа сервера? Тогда так:

КП>>>
КП>>>Button1.Attributes["onclick"] = "javascript:document.getElementById('" + Button1.ClientID + "').disabled = true;";
КП>>>


Сим>>А если с учетом клиентских валидаторов? Т.е. дизейблить страницу только если реально произойдет postback


M>валидаторы впишут свой код ПЕРЕД твоим. так что если они отвалятся до твоего не дойдет


Сейчас смотрил сгенеренный код, так там сперва идет мой код, а уж потом все остальное.
Кстати форма не постится вообще, ни в каком случае.
PS: ASP.NET 2.0
Re[5]: Disable buttons
От: mogadanez Чехия  
Дата: 03.03.06 14:31
Оценка: 36 (2)
M>>валидаторы впишут свой код ПЕРЕД твоим. так что если они отвалятся до твоего не дойдет

Сим>Сейчас смотрил сгенеренный код, так там сперва идет мой код, а уж потом все остальное.

хм.. смотря где джобавляешь свой.... видимо позднее чем валидатор — он в пререндере кнопкию

Сим>Кстати форма не постится вообще, ни в каком случае.


Это да.. я еще не успел об это написать. Низя просто дизейблить кнопку в ее же обработчике. по выходу из обработчика тогда браузер посмотрит что кнопка дизаблед и не запостает форму. надо использовать window.setTimeout

 <input onclick="var self = this; window.setTimeout( function (){self.disabled = true;}, 10 )"  type="submit" value="lala" name="ff" />
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re[6]: Disable buttons
От: Сим Россия  
Дата: 03.03.06 14:56
Оценка: +1
Здравствуйте, mogadanez, Вы писали:

M>>>валидаторы впишут свой код ПЕРЕД твоим. так что если они отвалятся до твоего не дойдет


Сим>>Сейчас смотрил сгенеренный код, так там сперва идет мой код, а уж потом все остальное.

M>хм.. смотря где джобавляешь свой.... видимо позднее чем валидатор — он в пререндере кнопкию

Сим>>Кстати форма не постится вообще, ни в каком случае.


M>Это да.. я еще не успел об это написать. Низя просто дизейблить кнопку в ее же обработчике. по выходу из обработчика тогда браузер посмотрит что кнопка дизаблед и не запостает форму. надо использовать window.setTimeout


M>
M> <input onclick="var self = this; window.setTimeout( function (){self.disabled = true;}, 10 )"  type="submit" value="lala" name="ff" />
M>


Но в этом случае, все равно, если страница невалидна, то кнопка дизейблится
Re[7]: Disable buttons
От: mogadanez Чехия  
Дата: 03.03.06 15:11
Оценка:
Здравствуйте, Сим, Вы писали:

M>>
M>> <input onclick="var self = this; window.setTimeout( function (){self.disabled = true;}, 10 )"  type="submit" value="lala" name="ff" />
M>>


Сим>Но в этом случае, все равно, если страница невалидна, то кнопка дизейблится


Да ты прав, в 2.0 они поменяли скрипты которые для кнопок вызываются... надо исследовать, буру таймаут
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re[8]: Disable buttons
От: mogadanez Чехия  
Дата: 03.03.06 16:00
Оценка:
Сим>>Но в этом случае, все равно, если страница невалидна, то кнопка дизейблится

M>Да ты прав, в 2.0 они поменяли скрипты которые для кнопок вызываются... надо исследовать, буру таймаут


да намудрили товарищи. теперь кастомный код всегда впереди.
Варианты.
1. дизейблить кнопку в onsubmit
2. вставлять в onclick еще кусочек кода по валидации ( беее...... )
3. переопределять onclick на клиенте, отдельно стоящим скриптом а не в атрибуте.

 var btn = document.getEleme......
 var old_click = btn.onclick;
 btn.onclick  = function(e){ old_click; YOUR SCRIPT HERE; }
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Как на время выполнения сделать кнопку disable (ASP.NET 2.0)
От: Сим Россия  
Дата: 07.03.06 09:05
Оценка: 20 (1)
#Имя: FAQ.aspnet.disablebtn20
А>Возник такой вопрос, как на время выполнения сделать кнопку disable.
А>Просто запись на диск файла размером 30 метров занимает определенное время, как можно узнать, что файл успешно закончился записываться на диск, а затем сделать enable button.

В общем если кому интересно, сделал так:


ClientScript.RegisterOnSubmitStatement(this.GetType(), 
   "DisableSubmitButton", 
   "if(Page_IsValid){window.setTimeout(function(){var btn = document.getElementById('" + bSubmit.ClientID + "'); btn.disabled = true; btn.value='Please wait...'}, 1)}");
Re[8]: Disable buttons
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 18.04.06 16:45
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>>>
M>>> <input onclick="var self = this; window.setTimeout( function (){self.disabled = true;}, 10 )"  type="submit" value="lala" name="ff" />
M>>>

Сим>>Но в этом случае, все равно, если страница невалидна, то кнопка дизейблится
M>Да ты прав, в 2.0 они поменяли скрипты которые для кнопок вызываются... надо исследовать, буру таймаут

в 1.1 тот же эффект
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Решение
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 18.04.06 16:45
Оценка:
Здравствуйте, Сим, Вы писали:

Сим>В общем если кому интересно, сделал так:

Сим>ClientScript.RegisterOnSubmitStatement(this.GetType(), "DisableSubmitButton", "if(Page_IsValid){window.setTimeout(function(){var btn = document.getElementById('" + bSubmit.ClientID + "'); btn.disabled = true; btn.value='Please wait...'}, 1)}");

ClientScript
Note: This property is new in the .NET Framework version 2.0.


А для 1.1 у кого есть решение для случая с клиентскими валидаторами?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Решение
От: Сим Россия  
Дата: 18.04.06 17:48
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, Сим, Вы писали:


Сим>>В общем если кому интересно, сделал так:

Сим>>ClientScript.RegisterOnSubmitStatement(this.GetType(), "DisableSubmitButton", "if(Page_IsValid){window.setTimeout(function(){var btn = document.getElementById('" + bSubmit.ClientID + "'); btn.disabled = true; btn.value='Please wait...'}, 1)}");

OE>

OE>ClientScript
OE>Note: This property is new in the .NET Framework version 2.0.


OE> А для 1.1 у кого есть решение для случая с клиентскими валидаторами?
Как на время выполнения сделать кнопку disable
От: mogadanez Чехия  
Дата: 19.04.06 11:00
Оценка: 30 (1)
#Имя: FAQ.aspnet.disablebtn1.1

А>Возник такой вопрос, как на время выполнения сделать кнопку disable.
А>Просто запись на диск файла размером 30 метров занимает определенное время, как можно узнать, что файл успешно закончился записываться на диск, а затем сделать enable button.

M>>>> <input onclick="var self = this; window.setTimeout( function (){self.disabled = true;}, 10 )"  type="submit" value="lala" name="ff" />

Сим>>>Но в этом случае, все равно, если страница невалидна, то кнопка дизейблится
M>>Да ты прав, в 2.0 они поменяли скрипты которые для кнопок вызываются... надо исследовать, буру таймаут

OE>в 1.1 тот же эффект


1.

btn_submit.Attributes["onclick"] = "if (typeof(Page_ClientValidate) == 'function') { Page_ClientValidate();if (!Page_IsValid) return false; }; var self = this; window.setTimeout( function (){self.disabled = true;}, 10 );";

Но будет некий излишек, в виде повторной валидации.

2. модифицировать onclick уже на клиенте например в body.onload

<script>
        var root_ = this;
        function on_load()
        {
           var btn = document.getElementById("<%=Button2.ClientID%>");
           var old_onclick_handler = btn.onclick;
           btn.onclick = function ()
           {
            if ( old_onclick_handler )
                old_onclick_handler();
            
            if ( "Page_IsValid" in  root_ ) 
                {                
                if ( Page_IsValid )
                    window.setTimeout( function (){btn.disabled = true;}, 10 );
                else 
                    return false;
                }
            else
                window.setTimeout( function (){btn.disabled = true;}, 10 );
           }
        }
    </script>

3. но правильнее — унаследоваться от Button
и переопределить метод AddAttributesToRender так, чтобы генерился правильный onclick statement

protected override void AddAttributesToRender(HtmlTextWriter writer)
{
      if (this.Page != null)
      {
            this.Page.VerifyRenderingInServerForm(this);
      }
      writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");
      writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
      writer.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
      if (((this.Page != null) && this.CausesValidation) && (this.Page.Validators.Count > 0))
      {
            string text1 = Util.GetClientValidateEvent(this.Page);
            if (base.HasAttributes)
            {
                  string text2 = base.Attributes["onclick"];
                  if (text2 != null)
                  {
                       text1 = text2 + text1;
                        base.Attributes.Remove("onclick");
                  }
            }
            writer.AddAttribute(HtmlTextWriterAttribute.Onclick, text1);
            writer.AddAttribute("language", "javascript");
      }
      base.AddAttributesToRender(writer);
}

в выделеной строке валидация приписывается _после_ пользовательского.

полный текст со всеми тремя примерами

ASPX

<%@ Page language="c#" Codebehind="DisableOnPostBack.aspx.cs" AutoEventWireup="false" Inherits="Test_app.DisableOnPostBack.DisableOnPostBack" %>
<%@Register tagPrefix ="meta" namespace="Test_app.DisableOnPostBack" Assembly="Test_app" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
  <HEAD>
    <title>DisableOnPostBack</title>
<meta content="Microsoft Visual Studio .NET 7.1" name=GENERATOR>
<meta content=C# name=CODE_LANGUAGE>
<meta content=JavaScript name=vs_defaultClientScript>
<meta content=http://schemas.microsoft.com/intellisense/ie5 name=vs_targetSchema>
<script>
        var root_ = this;
        function on_load()
        {
           var btn = document.getElementById("<%=Button2.ClientID%>");
           var old_onclick_handler = btn.onclick;
           btn.onclick = function ()
            {
              if ( old_onclick_handler )
                 old_onclick_handler();
            
              if ( "Page_IsValid" in  root_ ) 
              {                
                if ( Page_IsValid )
                    window.setTimeout( function (){btn.disabled = true;}, 10 );
                else 
                    return false;
              }
              else
                window.setTimeout( function (){btn.disabled = true;}, 10 );
            }
        }
</script>
</HEAD>
<body onload=on_load()>
<form id=Form1 method=post runat="server">

        <asp:textbox id=TextBox1 runat="server"></asp:TextBox>
        <asp:requiredfieldvalidator id=RequiredFieldValidator1 runat="server" ErrorMessage="dsfgsdgfsdfgs" ControlToValidate="TextBox1">fdsgsdfgs</asp:RequiredFieldValidator><BR>
    
        <asp:Button Runat="server" ID="Button1" Text="Button1"/>
        <asp:Button runat="server" id="Button2" Text="Button2"></asp:Button>    
        <meta:ButttonSelfDisabledOnClick id="Button3" runat=server Text="Button3" />
        
        </FORM>
  </body>
</HTML>

C#

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Threading;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace Test_app.DisableOnPostBack
{
   /// <summary>
   /// Summary description for DisableOnPostBack.
   /// </summary>
   public class DisableOnPostBack : System.Web.UI.Page
   {
      protected System.Web.UI.WebControls.TextBox TextBox1;
      protected System.Web.UI.WebControls.Button Button2;
      protected System.Web.UI.WebControls.Button Button1;
      protected ButttonSelfDisabledOnClick Button3;
      protected System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1;
    
      private void Page_Load(object sender, System.EventArgs e)
      {
    Button1.Attributes["onclick"] = "if (typeof(Page_ClientValidate) == 'function') { Page_ClientValidate();if (!Page_IsValid) return false; }; var self = this; window.setTimeout( function (){self.disabled = true;}, 10 );";
      }

      #region Web Form Designer generated code
      override protected void OnInit(EventArgs e)
      {
    //
    // CODEGEN: This call is required by the ASP.NET Web Form Designer.
    //
    InitializeComponent();
    base.OnInit(e);
      }
        
      /// <summary>
      /// Required method for Designer support - do not modify
      /// the contents of this method with the code editor.
      /// </summary>
      private void InitializeComponent()
      {    
     this.Button1.Click += new System.EventHandler(this.Button_Click);
         this.Button2.Click += new System.EventHandler(this.Button_Click);
         this.Button3.Click += new System.EventHandler(this.Button_Click);
         this.Load += new System.EventHandler(this.Page_Load);

      }
      #endregion

      private void Button_Click(object sender, System.EventArgs e)
      {
         Thread.Sleep( 3000 );
        
      }

   }

   public class ButttonSelfDisabledOnClick: Button
   {
      protected override void AddAttributesToRender(HtmlTextWriter writer)
      {
         if (this.Page != null)
         {
            this.Page.VerifyRenderingInServerForm(this);
         }
         writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");
         writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
         writer.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
         if (((this.Page != null) && this.CausesValidation) && (this.Page.Validators.Count > 0))
         {
            string text1 = GetClientValidateEvent(this.Page);
            if (  Attributes.Count > 0 )
            {
               string text2 = base.Attributes["onclick"];
               if (text2 != null)
               {
                  text1 = text2 + text1;
                  base.Attributes.Remove("onclick");
               }
            }
               writer.AddAttribute(HtmlTextWriterAttribute.Onclick, text1);
               writer.AddAttribute("language", "javascript");
         }
            base.AddAttributesToRender(writer);
      }
        
      internal static string GetClientValidateEvent(Page page)
      {
         return "if (typeof(Page_ClientValidate) == 'function') { Page_ClientValidate();if (!Page_IsValid) return false; } var self = this; window.setTimeout( function (){self.disabled = true;}, 10 ); ";
      }
   }
}

Тест примеров подправлен для FAQ по результатам дальнейшего обсуждения
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re[10]: Disable buttons
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 20.04.06 05:09
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>
M>        private void Page_Load(object sender, System.EventArgs e)
M>        {
M>            Button1.Attributes["onclick"] = "if (typeof(Page_ClientValidate) == 'function') { Page_ClientValidate();if (!Page_IsValid) return false; }; var self = this; window.setTimeout( function (){self.disabled = true;}, 10 );";
M>        }
M>


здесь наверно должно быть Button2.Attributes иначе непонятно зачем нужен Button2 в примере (кстати, странный эффект получается, если оставить как есть — по нажатию на Button1 серятся все три кнопки сразу )

В IE6 все три метода функциклируют как надо, в FireFox (1.5.0.2) function on_load() срабатывает, btn находится, но все равно Button1 не disable-ся Кстати зачем нужно писать

var btn = document.getElementById("<%=Button1.ClientID%>");

если работает и просто

var btn = Form1.Button1;
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Disable buttons
От: mogadanez Чехия  
Дата: 20.04.06 06:49
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, mogadanez, Вы писали:


M>>
M>>        private void Page_Load(object sender, System.EventArgs e)
M>>        {
M>>            Button1.Attributes["onclick"] = "if (typeof(Page_ClientValidate) == 'function') { Page_ClientValidate();if (!Page_IsValid) return false; }; var self = this; window.setTimeout( function (){self.disabled = true;}, 10 );";
M>>        }
M>>


OE>здесь наверно должно быть Button2.Attributes иначе непонятно зачем нужен Button2 в примере

по начальной задумке опечатка тут
 var btn = document.getElementById("<%=Button2.ClientID%>");


OE>(кстати, странный эффект получается, если оставить как есть — по нажатию на Button1 серятся все три кнопки сразу )

хм... я такого не наблюдаю.


OE>В IE6 все три метода функциклируют как надо, в FireFox (1.5.0.2) function on_load() срабатывает, btn находится, но все равно Button1 не disable-ся Кстати зачем нужно писать


Ага... в ASPNET 1.1 клиентская валидация работает только на IE . такой вариант вроде везде работает

<script>
        var root_ = this;
        function on_load()
        {
        var btn = document.getElementById("<%=Button2.ClientID%>");
        var old_onclick_handler = btn.onclick;
        btn.onclick = function ()
            {
            if ( old_onclick_handler )
                old_onclick_handler();
            
            if ( "Page_IsValid" in  root_ ) 
                {                
                if ( Page_IsValid )
                    window.setTimeout( function (){btn.disabled = true;}, 10 );
                else 
                    return false;
                }
            else
                window.setTimeout( function (){btn.disabled = true;}, 10 );
            }
        }
    </script>



OE>
OE>var btn = document.getElementById("<%=Button1.ClientID%>");
OE>


потому что енопка может лежать в каком нибудь NamingContainer'e например Repiter'e или UserControl
тогда ее ID на клиентской стороне будет _ctl0_Button1
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re[12]: Disable buttons
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 20.04.06 07:28
Оценка:
Здравствуйте, mogadanez, Вы писали:

OE>>здесь наверно должно быть Button2.Attributes иначе непонятно зачем нужен Button2 в примере

M>по начальной задумке опечатка тут
M>
M> var btn = document.getElementById("<%=Button2.ClientID%>");
M>


подправил в оригинале

M>Ага... в ASPNET 1.1 клиентская валидация работает только на IE . такой вариант вроде везде работает


IE говорит "Microsoft JScript runtime error: 'root_' is undefined"

а FireFox кстати дальше if ( old_onclick_handler ) old_onclick_handler(); просто вообще не идет, я так понимаю он лезет за валидацией на сервер, ну и если все OK, выполняет код нажатия на кнопку, а потом страница загружается по новой.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Disable buttons
От: mogadanez Чехия  
Дата: 20.04.06 07:36
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

M>>Ага... в ASPNET 1.1 клиентская валидация работает только на IE . такой вариант вроде везде работает


OE>IE говорит "Microsoft JScript runtime error: 'root_' is undefined"


var root_ = this; точно добавил перед function on_load()?

OE>а FireFox кстати дальше if ( old_onclick_handler ) old_onclick_handler(); просто вообще не идет, я так понимаю он лезет за валидацией на сервер, ну и если все OK, выполняет код нажатия на кнопку, а потом страница загружается по новой.


не никуда он не лезет old_onclick_handler — старый клиентский обработчик.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
и еще заморочка с FireFox
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 20.04.06 07:50
Оценка:
Здравствуйте, mogadanez, Вы писали:

если к приведенному примеру добавить Label и исправить код

M>C#

M> private void Page_Load(object sender, System.EventArgs e)
M> {
M> Button1.Attributes["onclick"] = "if (typeof(Page_ClientValidate) == 'function') { Page_ClientValidate();if (!Page_IsValid) return false; }; var self = this; window.setTimeout( function (){self.disabled = true;}, 10 );";
M> }
M>[/c#]
на

      private void Page_Load(object sender, System.EventArgs e)
      {
         Button1.Attributes["onclick"] = 
           "var label = document.getElementById('" + Label1.ClientID + "');" +
 //          "alert( 'label = ' + label.id );" +
           "label.innerText = 'Ждите';" +
           "if (typeof(Page_ClientValidate) == 'function') " + 
           "{ Page_ClientValidate();if (!Page_IsValid) return false; }; " + 
           "var self = this; window.setTimeout( function (){self.disabled = true;}, 10 );";
      }


то в IE по клику Button1 текст Label1 меняется, а в FireFox (1.5.0.2) — нет, код отрабатывает, alert правильно пишет label = Label1
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.