Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Всплывающий ListBox 
:(
    Опции темы
Kosya4ok
Дата 16.8.2008, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 23.7.2007

Репутация: нет
Всего: нет



Добрый день!
Я хочу чтобы при наведении на Lable у меня всплавал ListBox, я на него мог переводить курсор мыши и выбирать какие то опции. А когда курсор уходит с Lable то и исчезал бы и ListBox. Когда в стороне наводишь и отводишь курсор все ОК, но вот когда пытаешься выбрать деталь из списка то начинает глючить. Подскажите что надо дописать?
Делаю следующее:
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Tests
{
    public partial class Form1 : Form
    {        
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.ListBox listbox1;      

        public Form1()
        {
            InitializeComponent();
           
            this.listbox1 = new ListBox();
            this.listbox1.Location = new Point(26, 9);
            this.listbox1.Size = new Size(100, 50);
            this.listbox1.Visible = false;
            this.listbox1.Items.Add("Сохранить");
            this.listbox1.Items.Add("");
            this.listbox1.Items.Add("Удалить");
            this.Controls.Add(this.listbox1);

            this.label1 = new Label();
            this.label1.Location = new Point(26, 9);
            this.label1.Size = new Size(450, 15);
            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.Controls.Add(this.label1);            

            this.label1.MouseEnter += new System.EventHandler(this.label1_MouseEnter);
            this.label1.MouseLeave += new EventHandler(this.label1_MouseLeave);
          
            this.ClientSize = new Size(500, 200);
        }

        private void label1_MouseEnter(object sender, EventArgs e)
        {
            listbox1.Visible = true;
        }

        private void label1_MouseLeave(object sender, EventArgs e)
        {
            listbox1.Visible = false;
        }
    }
}

PM MAIL   Вверх
Hades
Дата 16.8.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 226
Регистрация: 8.8.2008

Репутация: нет
Всего: 37



Первое что пришло в голову, это сделать с таймером.
После того как пользователь уводит курсор с listbox1 включаем таймер, и если в течении
секунды(или другое время для таймера) пользователь не переместит курсор над listbox1, то 
делаем его невидимым.
Код

public partial class Form1 : Form
{
    bool isOnListBox = false;

    public Form1()
    {
        InitializeComponent();
    }

    private void label1_MouseEnter(object sender, EventArgs e)
    {
        listBox1.Visible = true;
    }

    private void label1_MouseLeave(object sender, EventArgs e)
    {
        timer1.Enabled = true;
    }

    private void listBox1_MouseEnter(object sender, EventArgs e)
    {
        isOnListBox = true;
    }

    private void listBox1_MouseLeave(object sender, EventArgs e)
    {
        listBox1.Visible = false;
        isOnListBox = false;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        timer1.Enabled = false;

        if (!isOnListBox)
            listBox1.Visible = false;
    }
    
}

Код

private void InitializeComponent()
{
    this.components = new System.ComponentModel.Container();
    this.label1 = new System.Windows.Forms.Label();
    this.listBox1 = new System.Windows.Forms.ListBox();
    this.timer1 = new System.Windows.Forms.Timer(this.components);
    this.SuspendLayout();
    // 
    // label1
    // 
    this.label1.AutoSize = true;
    this.label1.Location = new System.Drawing.Point(44, 44);
    this.label1.Name = "label1";
    this.label1.Size = new System.Drawing.Size(68, 13);
    this.label1.TabIndex = 0;
    this.label1.Text = "Text text text";
    this.label1.MouseLeave += new System.EventHandler(this.label1_MouseLeave);
    this.label1.MouseEnter += new System.EventHandler(this.label1_MouseEnter);
    // 
    // listBox1
    // 
    this.listBox1.FormattingEnabled = true;
    this.listBox1.Items.AddRange(new object[] {
    "1234",
    "5678",
    "0990"});
    this.listBox1.Location = new System.Drawing.Point(118, 44);
    this.listBox1.Name = "listBox1";
    this.listBox1.Size = new System.Drawing.Size(120, 95);
    this.listBox1.TabIndex = 1;
    this.listBox1.Visible = false;
    this.listBox1.MouseEnter += new System.EventHandler(this.listBox1_MouseEnter);
    this.listBox1.MouseLeave += new System.EventHandler(this.listBox1_MouseLeave);
    // 
    // timer1
    // 
    this.timer1.Interval = 1000;
    this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
    // 
    // Form1
    // 
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.ClientSize = new System.Drawing.Size(522, 491);
    this.Controls.Add(this.listBox1);
    this.Controls.Add(this.label1);
    this.Name = "Form1";
    this.Text = "Form1";
    this.ResumeLayout(false);
    this.PerformLayout();

}

private System.Windows.Forms.Label label1;
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.Timer timer1;

PM MAIL   Вверх
Kosya4ok
Дата 17.8.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 23.7.2007

Репутация: нет
Всего: нет



Я не думаю что с таймером наилучший вариант(мне кажется немного громоздко), но все равно спасибо. Может быть у виндовс форм есть какие обработчики событий на этот случай?Я вот думаю если у меня будет не лист бокс а какой то юзер контрол, то легче ли будет реализовать то что я писал раньше?

Это сообщение отредактировал(а) Kosya4ok - 17.8.2008, 12:27
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.