Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Два вопроса по Label  (Прочитано 18943 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
Dimyan
Гость
« : 26-01-2004 13:50 » 

Ребята помогите, никак не могу понять в Labele вот такие простенькие (наверно) вещицы:

 :arrow:  Как сделать, чтоб текст в Label можно было выделять мышкой (например для копирования)?


 :arrow: Как сделать, чтоб текст, если уже не влезает в label (вписывается он программно) как бы уезжал за правый край скрываясь там, в общем по принципу TextBox?
Записан
Mouse
Молодой специалист

ru
Offline Offline

« Ответ #1 : 26-01-2004 14:29 » 

Сделать этого нельзя, причем как первого, так и второго. Label в принципе не может принимать фокус, да и не приспособлен он для таких вещей... Для редактирования применять надо TextBox. А чтобы он на Label был похож, сделай
Код:
TextBox.BackColor = System.Drawing.Color.some_color;
TextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
Обманывать, конечно, нехорошо, а что делать, придется маскироваться по Label...  8)
« Последнее редактирование: 23-11-2007 20:03 от Алексей1153++ » Записан
Dimyan
Гость
« Ответ #2 : 29-01-2004 09:14 » new

А как тогда в TextBox запретить ввод с клавиатуры, но чтоб при этом текст можно было выделять?
Записан
Dimyan
Гость
« Ответ #3 : 29-01-2004 09:20 » 

Все понял, надо ReadOnly  в True поставить.
Записан
Dimyan
Гость
« Ответ #4 : 29-01-2004 12:52 » 

Теперь такая проблема появилась:
Если ручками вписывать в TextBox данные они если не влезают как бы продвигаются и прячутся за краем, а вот если делаю вот так:
Код:
 textBox1.Text += "12345"; 

то текст заполняет видимую область textBox и дальше не вписывается Жаль(
Что я не так делаю :?:  Жаль
Записан
Mouse
Молодой специалист

ru
Offline Offline

« Ответ #5 : 30-01-2004 06:26 » 

Цитата

текст, если уже не влезает в label (вписывается он программно) как бы уезжал за правый край скрываясь там

Слушай, Dimyan, что-то я не совсем понял, что тебе конкретно надо...  :? Что должен делать текст при длине строки, превышающей длину TextBox'a?
Записан
Dimyan
Гость
« Ответ #6 : 30-01-2004 08:42 » 

Да он не чего делать не должен, точнее все далжно работать обычно, а не хочет Жаль
Вот если TextBox взять и начать в него текст вписывать, тест когда не влезает в размер TextBoxa, начинает же какбы за за левым краем скрыватся (если я както неправильно изясняюсь, возми TextBox помести на форму, откомпиль, и повписывай в него текст, поймешь о чем я говорю), вот мне и надо чтоб так все и оставалось, но текст я вписываю программно, как показал выше, вот тут и проблема. Когда TextBox заполняется текстом на всю длинну, то все Жаль текст перестает дальше вписыватся Жаль
т.е. ни чего не происходит, стоит строчка сколько влезла и ни куда не продвигается Жаль
Записан
Mouse
Молодой специалист

ru
Offline Offline

« Ответ #7 : 30-01-2004 09:49 » 

Похоже, так сделать нельзя. А это принципиально? Ведь свойство Text модифицируется корректно, просто автоматического сдвига не происходит. Может добавить какой-нибкдь знак опознавательный, что справа есть неотображенные данные?
Записан
Dimyan
Гость
« Ответ #8 : 30-01-2004 11:09 » 

Да вот в том то и проблема что это принципиально  Так больше нельзя...
Записан
Mouse
Молодой специалист

ru
Offline Offline

« Ответ #9 : 30-01-2004 11:22 » 

Тогда сорри, я пас...  Жаль
Записан
Alf
Гость
« Ответ #10 : 30-01-2004 11:46 » 

Dimyan, я тебя правильно понял, ты хочешь, чтобы по мере роста длины строки твой TextBox должен проворачиваться влево таким образом, чтобы окончание строки было всегда видно, а начало может скрыться влево?
Записан
Dimyan
Гость
« Ответ #11 : 30-01-2004 13:05 » 

Alf,  болие чем правильно, ну очень надо, не может быть чтоб выхода небыло.  Так больше нельзя...
Записан
Alf
Гость
« Ответ #12 : 30-01-2004 13:25 » 

Цитата: Dimyan
Alf,  болие чем правильно, ну очень надо, не может быть чтоб выхода небыло.  Так больше нельзя...
Ну если уж очень надо, то держи решение  Отлично
Секрет кроется в двух свойствах объекта TextBox: SelectionStart и SelectionLength. Они совместно задают фрагмент текста, который выделяется (точно так же, как можно выделить мышью, например). Если SelectionStart указывает на конец текста, а SelectionLength=0, то получается тот самый эффект, который тебе нужен.
Во-первых, добавляешь в свою форму код что-то вроде:
Код:
private void TxtChange(object sender, System.EventArgs e)
{
  textBox1.SelectionStart = textBox1.Text.Length;
  textBox1.SelectionLength = 0;
}
Этот обработчик события заставляет текущую позицию переместиться в конец строки textBox1.
Во-вторых, прицепляешь его к событию TextChanged, которое возникает при изменении текста textBox1. В текст метода InitializeComponent добавляешь строчку:
Код:
this.textBox1.TextChanged += new System.EventHandler(this.TxtChange);
, которая связывает обработчик с событием.
Все! Теперь при любом изменении текста, неважно, вручную или программно, он будет прокручиваться влево ровно настолько, сколько нужно.
Постарайся проверить побыстрее, пока я на работе. Если вдруг не получится (хотя вряд ли), пришлю тестовый проект, на котором испытал идею.

Как говорит Фоменко, "даже если вас съели, у вас есть целых два выхода".  Ага
« Последнее редактирование: 23-11-2007 20:04 от Алексей1153++ » Записан
Alf
Гость
« Ответ #13 : 30-01-2004 13:42 » 

А хотя, собственно, к чему спешка... Тестовая программа невелика, я выложу ее текст прямо здесь.
Код:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace Dimyan1
{
  public class Form1 : System.Windows.Forms.Form
  {
      private System.Windows.Forms.TextBox textBox1;
      private System.Windows.Forms.TextBox textBox2;
      private System.Windows.Forms.Button button1;
private System.ComponentModel.Container components = null;

public Form1()
{
InitializeComponent();
}

protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
private void InitializeComponent()
{
          this.textBox1 = new System.Windows.Forms.TextBox();
          this.textBox2 = new System.Windows.Forms.TextBox();
          this.button1 = new System.Windows.Forms.Button();
          this.SuspendLayout();
          //
          // textBox1
          //
          this.textBox1.BackColor = System.Drawing.SystemColors.Control;
          this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
          this.textBox1.Location = new System.Drawing.Point(16, 16);
          this.textBox1.Name = "textBox1";
          this.textBox1.TabIndex = 1;
          this.textBox1.Text = "This text can be selected!!!";
          this.textBox1.WordWrap = false;
          this.textBox1.TextChanged += new System.EventHandler(this.TxtChange);
          //
          // textBox2
          //
          this.textBox2.Location = new System.Drawing.Point(16, 40);
          this.textBox2.Name = "textBox2";
          this.textBox2.Size = new System.Drawing.Size(240, 20);
          this.textBox2.TabIndex = 2;
          this.textBox2.Text = "textBox2";
          this.textBox2.WordWrap = false;
          //
          // button1
          //
          this.button1.Location = new System.Drawing.Point(16, 104);
          this.button1.Name = "button1";
          this.button1.TabIndex = 3;
          this.button1.Text = "Go!";
          this.button1.Click += new System.EventHandler(this.button1_Click);
          //
          // Form1
          //
          this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
          this.ClientSize = new System.Drawing.Size(292, 266);
          this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                      this.button1,
                                                                      this.textBox2,
                                                                      this.textBox1");
          this.Name = "Form1";
          this.Text = "Form1";
          this.ResumeLayout(false);

        }
#endregion

[STAThread]
static void Main()
{
Application.Run(new Form1());
}

      private void button1_Click(object sender, System.EventArgs e)
      {
        textBox1.Text = textBox2.Text;
      }

      private void TxtChange(object sender, System.EventArgs e)
      {
        textBox1.SelectionStart = textBox1.Text.Length;
        textBox1.SelectionLength = 0;
      }
}
}
« Последнее редактирование: 23-11-2007 20:05 от Алексей1153++ » Записан
Dimyan
Гость
« Ответ #14 : 30-01-2004 14:25 » 

Alf,  спасибо, великолепно все работает
УРААААААА!!!!!!!
 Отлично  Отлично  Отлично  Отлично  Отлично
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines