Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

47K
13 июня 2012 года
Rayrat7
99 / / 09.06.2012
подскажите пожалуйста как на форме создать объект(например прямоугольник) который можно передвигать мышью
Долго рылся в инете но ничего конкретного не нашел..
20K
13 июня 2012 года
ellor!
198 / / 24.05.2012
Обрабатывать события нажатия кнопок и перемещения мышки и перерисовывать прямоугольник.
47K
13 июня 2012 года
Rayrat7
99 / / 09.06.2012
поконкретней бы...
47K
13 июня 2012 года
Rayrat7
99 / / 09.06.2012
Ну например я создал на форме PictureBox1 можно ли сделать так чтобы при запуске я мог таскать его мышью по форме?
20K
13 июня 2012 года
ellor!
198 / / 24.05.2012
При нажатии кнопки мыши на PictureBox1 запомнить координаты курсора и выставить флаг.
При отпускании кнопки мыши на PictureBox1 сбросить флаг.
При перемещении мыши на PictureBox1, если выставлен флаг, изменить координаты PictureBox1 на разницу между текущими координатами курсора и запомненными.
40K
13 июня 2012 года
D129
228 / / 18.04.2012
Как вариант:

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace DragExample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        Point DragStart = new Point(-1, -1);
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                Control moving = sender as Control;
                if (DragStart.X == -1)
                {
                    DragStart = e.Location;
                }
                moving.Left +=  e.X - DragStart.X;
                moving.Top +=  e.Y -DragStart.Y ;

            }
            else
            {
                DragStart.X = -1;

            }
        }

       
    }
}

Флаг не нужен - кнопка мышки она же флаг.
Но надо запоминать где началось перетаскивание - и вычислять дельту.
40K
13 июня 2012 года
D129
228 / / 18.04.2012
-------------------- Долго рылся в инете но ничего конкретного не нашел..

Это потому, что виби. На нем мало примеров публикуют. Шарп-сообщество больше.
47K
14 июня 2012 года
Rayrat7
99 / / 09.06.2012
Попробовал сделать так
Код:
Option Explicit On
Public Class Form1

    Dim MouseX, MouseY As Single
    Dim ImgFolder As Object
    Dim vbBeginDrag As Object
    Dim vbLeftButton As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'TODO: данная строка кода позволяет загрузить данные в таблицу "_ДЛЯ_ПРОГРАММЫ____БЛЯТЬ1DataSet.Основная". При необходимости она может быть перемещена или удалена.
        Me.ОсновнаяTableAdapter.Fill(Me._ДЛЯ_ПРОГРАММЫ____БЛЯТЬ1DataSet.Основная)
    End Sub
    Private Sub ОсновнаяBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ОсновнаяBindingNavigatorSaveItem.Click
        Me.Validate()
        Me.ОсновнаяBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me._ДЛЯ_ПРОГРАММЫ____БЛЯТЬ1DataSet)
    End Sub
    Private Sub ОсновнаяDataGridView_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles ОсновнаяDataGridView.CellContentClick
    End Sub
    Private Sub RectangleShape1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RectangleShape1.Click
    End Sub
    Private Sub PictureBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        If Button = vbLeftButton Then
            Call ImgFolder.Drag(vbBeginDrag)
            MouseX = X
            MouseY = Y
        End If
    End Sub
    Private Sub Form_DragDrop(ByVal Source As Control, ByVal X As Single, ByVal Y As Single)
    Source.Move (X - MouseX), (Y - MouseY)  
    End Sub
End Class
чет не прокатывает
D129 сложновато чет для понимания для меня то что ты написал) куда ток их не пробовал вставлять, одни ошибки...
три дня в бейсике...
47K
14 июня 2012 года
Rayrat7
99 / / 09.06.2012
В целом требуется программка в которой можно было бы по изображению(типа плану завода) перетаскивать квадратики( типа товар) их там около 30 шт.
и нужна небольшая база по ним с полями готовность, даты нач\завершения работ, цех(добавил ее в VB через access) а вот как подцепить ее к объектам(квадратикам) и как сделать чтобы их можно было перемещать по изображению еще не разобрался.
мб не то для ее реализации я выбрал? или мб кто то подскажет что то уже готовое(сходное)?

414
14 июня 2012 года
CassandraDied
763 / / 24.05.2012
На VB тут не очень много людей любит писать, но вообще примеров в интернете достаточно. Лучше, конечно, на C#/C++ перейти, какие-нибудь Qt и что там сейчас, MWF.
47K
14 июня 2012 года
Rayrat7
99 / / 09.06.2012
а во в бейсике с перетаскиванием разобрался
да я немного в школе с ним работал , потому в него и полез
С#/С++ мне увы вобще незнакомы так что попробую вс еже на бейске доделать
40K
14 июня 2012 года
D129
228 / / 18.04.2012
>>>три дня в бейсике

Три дня жалко. Бейсик, который вы учили в школе - так же отличается от виби дот нет, как и от C#. Так что очень советую.


Но ничего страшного.
Евент надо было использовать не клик, а MouseMove. Он самый полезный.

В винформах он есть и на бейсике.
40K
14 июня 2012 года
D129
228 / / 18.04.2012
Судя по сложносокращенному термину БЛЯТЬ в названии таблицы, можно сделать вывод, что вы занялись серьезным делом, так и выбирайте профессиональные инструменты, а не язык для школьников.

:-) :-) :-)
40K
14 июня 2012 года
D129
228 / / 18.04.2012
Вот, нет рефлектор перевел на виби:

Код:
Dim DragStart as Point
Private Sub pictureBox1_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
    If (e.Button = MouseButtons.Left) Then
        Dim moving As Control = TryCast(sender,Control)
        If (Me.DragStart.X = -1) Then
            Me.DragStart = e.Location
        End If
        moving.Left = (moving.Left + (e.X - Me.DragStart.X))
        moving.Top = (moving.Top + (e.Y - Me.DragStart.Y))
    Else
        Me.DragStart.X = -1
    End If
End Sub
40K
14 июня 2012 года
D129
228 / / 18.04.2012
Буду настаивать, что вы должны разобраться в этом коде, а не сделать хардкодед для всех 30 товаров отдельные обработчики.
47K
14 июня 2012 года
Rayrat7
99 / / 09.06.2012
ок буду въезжать
47K
14 июня 2012 года
Rayrat7
99 / / 09.06.2012
"БЛЯТЬ" - ну это просто была далеко не первая попытка туда таблицу засунуть)
47K
14 июня 2012 года
Rayrat7
99 / / 09.06.2012
она кстати так и не заработала толком.. поля в которых в access'е я ставил выбор значений из другой вспомогательной таблицы и поля с датой не работают.. нет выдора календаря и значений, все перенеслось и таблицы и связи между ними и формат ячеек.. не работает..
47K
14 июня 2012 года
Rayrat7
99 / / 09.06.2012
квадратики я вот так создал:

Код:
Randomize()
        For i As Integer = 0 To 1
            Dim p As New Panel()
            p.Width = 22
            p.Height = 22
            p.BackColor = Color.Blue
            p.Left = Int(Me.Width - 640)
            p.Top = Int(Me.Height - 590)
            AddHandler p.MouseMove, AddressOf p_MouseMove
            Me.Controls.Add(p)
        Next
    End Sub
    Private Sub p_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If Control.MouseButtons = Windows.Forms.MouseButtons.Left Then
            CType(sender, Panel).Left = Control.MousePosition.X - Me.Left - CType(sender, Panel).Width
            CType(sender, Panel).Top = Control.MousePosition.Y - Me.Top - CType(sender, Panel).Height
        End If
    End Sub
сейчас ломаю голову над тем как можно так сделать чтобы при создании новой строки в таблице возникал новый квадратик конкретного цвета и номера..
40K
14 июня 2012 года
D129
228 / / 18.04.2012
Ага, и еще со своими координатами.
Ну ничего невозможного -
Ваш цикл надо изменить, и использовать на данных запроса из базы (а не просто от 0 до 30)
бежать по строчкам, вытаскивать из них и координаты, и размеры и цвет, и давать панельке.

Маленький совет по оптимизации - CType(sender, Panel) - это кастинг, приведение типа, относительно тяжелая операция. Ее имеет смысл делать один раз на уровне функции, подобно моему примеру, да и код будет менее замусорен скобочками.
47K
14 июня 2012 года
Rayrat7
99 / / 09.06.2012
ок, направление понял щас попробую это все "переварить"
47K
15 июня 2012 года
Rayrat7
99 / / 09.06.2012
А как можно сохранить положение квадратиков оторые я раскидал по плану? таблица сохраняется а положение квадратиков нет..
47K
15 июня 2012 года
Rayrat7
99 / / 09.06.2012
сделал по другому, теперь это уже не рандомные объекты, как можно прицепить создание объекта к созданию строки? чтобы объект появлялся рядом с таблицей и я мог его куда надо поставить

 
Код:
Private Sub Panel_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If Control.MouseButtons = Windows.Forms.MouseButtons.Left Then
            CType(sender, Panel).Left = Control.MousePosition.X - Me.Left - CType(sender, Panel).Width
            CType(sender, Panel).Top = Control.MousePosition.Y - Me.Top - CType(sender, Panel).Height
        End If
    End Sub
    Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
        AddHandler (Panel1.MouseMove), AddressOf Panel_MouseMove
        Me.Controls.Add(Panel1)
    End Sub
47K
15 июня 2012 года
Rayrat7
99 / / 09.06.2012
Там полагаю в коде поля таблицы нужно добавить что при новой строке создается новый объект с номером .. как это программно описать пока представляю мутно..
и как к строке можно подвязать объект после этого?
40K
17 июня 2012 года
D129
228 / / 18.04.2012
Ошибка, причем серьезная:


Private Sub Panel1_Paint

не тот эвент, который нужен когда панелька уже добавлена.

У вас она будет добавляться каждый раз при перерисовке самой панельки, а это логически неправильно - вы размножите то, что должно быть только в одном экземпляре. Этот эвент сугубо технический, его надо использовать если вы нарисовали графическую линию, и эта линия не является обьектом типа Control.



Сохранять положение панельки после перетаскивания - очень просто, надо просто сохранять положение обьека сразу после перетаскивания в базе.
:-)

Как вы будете это делать - зависит от ваших знаний и следовательно, дизайна программы - можно и просто запрос написать.

Вы все-таки почитайте учебник какой-нибудь, только не для чайников. Нереально в форуме выучить сразу все и с нуля.
47K
18 июня 2012 года
Rayrat7
99 / / 09.06.2012
Все то и не требуется мне, мб подскажите какой нибудь учебник на VB 2010? ато один зиборов повсюду...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог