Язык Visual Basic на платформе .NET.
Модераторы: Ramzes, Sebas
-
EXIS
-
- Обычный пользователь

-
-
- Сообщения: 71
- Зарегистрирован: 02.05.2006 (Вт) 17:16
EXIS » 23.10.2008 (Чт) 10:29
Установил халявную Visual Studio 2008 Express. Там есть шаблон WPF Application. WPF = Windows Presentation Foundation
http://msdn.microsoft.com/en-us/library/ms742119.aspxЕсли честно я не в курсе что это за технология WPF. Но как я понял возможности WPF в плане дизайна гораздо шире чем у обычных Application.
В WPF есть элемент Grid. Добовлять строки и столбцы я уже научился, единственное чего не пойму, как сделать так что-бы с помощью мыши можно было изменять размеры строк и столбцов как в обычном DataGridView?
-
EXIS
-
- Обычный пользователь

-
-
- Сообщения: 71
- Зарегистрирован: 02.05.2006 (Вт) 17:16
EXIS » 23.10.2008 (Чт) 19:20
Как-то так но это только наброски
- Код: Выделить всё
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="330" Width="408">
<Grid>
<Grid Name="Grid1" ShowGridLines="True" Background="Lime" Margin="41,23,45,69">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
</Grid>
<TextBox Height="40" Margin="44,0,124,16" Name="TextBox1" VerticalAlignment="Bottom" TextWrapping="Wrap" />
<Button Height="40" HorizontalAlignment="Right" Margin="0,0,45,16" Name="Button1" VerticalAlignment="Bottom" Width="67">Button</Button>
</Grid>
</Window>
- Код: Выделить всё
Class Window1
Dim SelectedColumn As Integer = Nothing
Dim SelectedColumnX As Integer
Private Sub Grid1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles Grid1.MouseDown
Dim SelColumn As Integer = 0
Dim x As Integer = 0
Dim msx As Integer = e.MouseDevice.GetPosition(sender).X
Dim ColumnSelected As Boolean = False
If e.LeftButton = MouseButtonState.Pressed Then
For Each col As ColumnDefinition In Grid1.ColumnDefinitions
x += Int(col.ActualWidth)
If msx < x + 3 And msx > x - 3 Then
ColumnSelected = True
Exit For
End If
SelColumn += 1
Next col
If ColumnSelected = True Then
TextBox1.Text = "Выделена граница стлобца номер: " & Val(SelColumn)
SelectedColumn = SelColumn
SelectedColumnX = x
Else
TextBox1.Text = "Ни одна граница столбца не выделена"
SelectedColumn = Nothing
End If
End If
End Sub
Private Sub Grid1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Input.MouseEventArgs) Handles Grid1.MouseMove
Dim x As Integer = 0
Dim msx As Integer = e.MouseDevice.GetPosition(sender).X
If SelectedColumn = Nothing Then
Dim MouseOnColumnBorder As Boolean = False
For Each col As ColumnDefinition In Grid1.ColumnDefinitions
x += Int(col.ActualWidth)
If msx < x + 3 And msx > x - 3 Then
MouseOnColumnBorder = True
End If
Next col
If MouseOnColumnBorder = True Then
Grid1.Background = Brushes.Gainsboro
Cursor = Cursors.SizeWE
Else
Grid1.Background = Brushes.Lime
Cursor = Cursors.Arrow
End If
Else
Grid1.ColumnDefinitions(SelectedColumn).Width = New GridLength(Grid1.ActualWidth - CDbl(msx))
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
For Each col As ColumnDefinition In Grid1.ColumnDefinitions
TextBox1.Text &= Int(col.ActualWidth)
Next col
'Grid1.ColumnDefinitions(0).Width = New GridLength(10.0)
'For Each col As ColumnDefinition In Grid1.ColumnDefinitions
'col.Width = New GridLength(10.0)
'Next col
TextBox1.Text &= " " & SelectedColumnX
Dim tb As New TextBlock
tb.Text = "Привет!"
tb.TextAlignment = TextAlignment.Center
Grid1.Children.Add(tb)
Grid.SetColumn(tb, 2)
Grid.SetRow(tb, 2)
End Sub
Private Sub Grid1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles Grid1.MouseUp
If e.LeftButton = MouseButtonState.Released Then
SelectedColumn = Nothing
End If
End Sub
End Class
-
EXIS
-
- Обычный пользователь

-
-
- Сообщения: 71
- Зарегистрирован: 02.05.2006 (Вт) 17:16
EXIS » 24.10.2008 (Пт) 22:09
Все оказалось немного проще нужно использовать GridSplitter
- Код: Выделить всё
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid MaxWidth="100">
<!-- Define columns -->
<Grid.ColumnDefinitions>
<ColumnDefinition Width ="10"/>
<ColumnDefinition Width ="10"/>
<ColumnDefinition Width ="10"/>
<ColumnDefinition Width ="10"/>
</Grid.ColumnDefinitions>
<!-- Add this label to cell 0 -->
<Label Name="lblLeft" Background ="GreenYellow" Grid.Column="0" Content ="Left!"/>
<!-- Add this label to cell 1 -->
<Label Name="lblRight" Grid.Column ="1" Content ="Right!"/>
<Label Name="lblRight2" Grid.Column ="2" Content ="Right!"/>
<!-- Define the splitter -->
<GridSplitter Grid.Column ="0" Width ="5"/>
<GridSplitter Grid.Column ="1" Width ="5"/>
<GridSplitter Grid.Column ="2" Width ="5"/>
</Grid>
</Window>
Вернуться в Visual Basic .NET
Кто сейчас на конференции
Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 7