Panel滚动条自动回滚问题, 怎么禁止回滚

SineMetu1 2015-09-01 10:30:06
如图,Panel中放了若干个RichTextBox控件,控件填充模式为Top,每个RIchTextBox控件可以随着输入内容高度自动增长, 当输入高度超过一定范围, Panel的滚动就开始回滚了, 下面在输入新内容就很麻烦了,输一次换行时 滚动条就回滚一次

...全文
452 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
SineMetu1 2015-09-02
  • 打赏
  • 举报
回复
引用 10 楼 Tiger_Zhao 的回复:
可能 ContentResize 的时候还没有调整过滚动条范围。 最偷懒的方式是开个定时器做个小延时,在Tick事件中更改滚动条试试。
根据你的方法我把Panel里的ScrollToControl重写了下,返回当前位置AutoScrollPosition,可以解决这个问题了,谢谢你.
SineMetu1 2015-09-02
  • 打赏
  • 举报
回复
引用 11 楼 running_crazy 的回复:
[quote=引用 10 楼 Tiger_Zhao 的回复:] 可能 ContentResize 的时候还没有调整过滚动条范围。 最偷懒的方式是开个定时器做个小延时,在Tick事件中更改滚动条试试。
现在用RichTextBox 直接ContentResize可以控制Panel滚动条, 直接控制不了是因为richTebox外面加了个FlowLayOutPanel控制richTebox最左侧, 这样的话ContentResize就控制不了[/quote] 我感觉是外面FlowLayOutPanel制约了Panel控件的滚动条
SineMetu1 2015-09-02
  • 打赏
  • 举报
回复
引用 10 楼 Tiger_Zhao 的回复:
可能 ContentResize 的时候还没有调整过滚动条范围。 最偷懒的方式是开个定时器做个小延时,在Tick事件中更改滚动条试试。
现在用RichTextBox 直接ContentResize可以控制Panel滚动条, 直接控制不了是因为richTebox外面加了个FlowLayOutPanel控制richTebox最左侧, 这样的话ContentResize就控制不了
Tiger_Zhao 2015-09-02
  • 打赏
  • 举报
回复
可能 ContentResize 的时候还没有调整过滚动条范围。
最偷懒的方式是开个定时器做个小延时,在Tick事件中更改滚动条试试。
SineMetu1 2015-09-02
  • 打赏
  • 举报
回复
引用 8 楼 running_crazy 的回复:
[quote=引用 7 楼 Tiger_Zhao 的回复:] 测试下来 VerticalScroll.Value 设一次后内部控件滚动了,但是滚动条的位置没变。 要设两次后滚动条才刷新正确了。
    '高度200的Panel内放了一个高200的RitchTextBox,用Button来增高'
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Debug.Print("  {0},{1}", Me.Panel1.VerticalScroll.Value, Me.Panel1.VerticalScroll.Maximum)
        Me.RichTextBox1.Height += 10
        Me.Panel1.VerticalScroll.Value = Me.Panel1.VerticalScroll.Maximum - 199
        Me.Panel1.VerticalScroll.Value = Me.Panel1.VerticalScroll.Maximum - 199
        Debug.Print("->{0},{1}", Me.Panel1.VerticalScroll.Value, Me.Panel1.VerticalScroll.Maximum)
    End Sub
用Button当按钮增高没问题, 我这边测试也没问题的. 用ContentResize让他增高就不行了[/quote] 用richBox单独放在Panel里可以的, 我这里用几个RichBox封装了一个新的控件的如图里面的一个网络用了四个richTebox封装成的一个新的控件 这样导致外面的Panel的滚动条不可用,我在研究下, 如果你有好的意见请回复谢谢.
SineMetu1 2015-09-01
  • 打赏
  • 举报
回复
引用 3 楼 Tiger_Zhao 的回复:
你怎么“高度自动增长”的?WinForm没这个属性吧。 是不是你计算错误了。
richTextbox重写了下, 可以根据输入内容自动变高,ContentResize事件,e.NewRectangle.Height 可以得到新的高度 我什么没计算, 重写的RichTextBox直接添加到Panel上 然后设置Panel有滚动条
Tiger_Zhao 2015-09-01
  • 打赏
  • 举报
回复
你怎么“高度自动增长”的?WinForm没这个属性吧。
是不是你计算错误了。
SineMetu1 2015-09-01
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao 的回复:
<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 Height="253">
        <ScrollViewer HorizontalScrollBarVisibility="Auto" Height="100">
            <StackPanel Margin="10,10,13,0" Name="Panel1" Height="auto" VerticalAlignment="Top" HorizontalAlignment="Left">
               <RichTextBox Height="5000" Name="RichTextBox1" Width="212" HorizontalAlignment="Left" VerticalAlignment="Top"  />
                <RichTextBox Height="auto" Name="RichTextBox2" Width="212" HorizontalAlignment="Left" VerticalAlignment="Top"  />
                <RichTextBox Height="auto" Name="RichTextBox3" Width="212" HorizontalAlignment="Left" VerticalAlignment="Top"  />
                <RichTextBox Height="auto" Name="RichTextBox4" Width="212" HorizontalAlignment="Left" VerticalAlignment="Top"  />
            </StackPanel>
        </ScrollViewer>
    </Grid>
</Window>
高度5000以上了,也没问题啊。
我的不是WPF, 是Winform.
Tiger_Zhao 2015-09-01
  • 打赏
  • 举报
回复
<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 Height="253">
<ScrollViewer HorizontalScrollBarVisibility="Auto" Height="100">
<StackPanel Margin="10,10,13,0" Name="Panel1" Height="auto" VerticalAlignment="Top" HorizontalAlignment="Left">
<RichTextBox Height="5000" Name="RichTextBox1" Width="212" HorizontalAlignment="Left" VerticalAlignment="Top" />
<RichTextBox Height="auto" Name="RichTextBox2" Width="212" HorizontalAlignment="Left" VerticalAlignment="Top" />
<RichTextBox Height="auto" Name="RichTextBox3" Width="212" HorizontalAlignment="Left" VerticalAlignment="Top" />
<RichTextBox Height="auto" Name="RichTextBox4" Width="212" HorizontalAlignment="Left" VerticalAlignment="Top" />
</StackPanel>
</ScrollViewer>
</Grid>
</Window>

高度5000以上了,也没问题啊。
SineMetu1 2015-09-01
  • 打赏
  • 举报
回复
引用 7 楼 Tiger_Zhao 的回复:
测试下来 VerticalScroll.Value 设一次后内部控件滚动了,但是滚动条的位置没变。 要设两次后滚动条才刷新正确了。
    '高度200的Panel内放了一个高200的RitchTextBox,用Button来增高'
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Debug.Print("  {0},{1}", Me.Panel1.VerticalScroll.Value, Me.Panel1.VerticalScroll.Maximum)
        Me.RichTextBox1.Height += 10
        Me.Panel1.VerticalScroll.Value = Me.Panel1.VerticalScroll.Maximum - 199
        Me.Panel1.VerticalScroll.Value = Me.Panel1.VerticalScroll.Maximum - 199
        Debug.Print("->{0},{1}", Me.Panel1.VerticalScroll.Value, Me.Panel1.VerticalScroll.Maximum)
    End Sub
用Button当按钮增高没问题, 我这边测试也没问题的. 用ContentResize让他增高就不行了
Tiger_Zhao 2015-09-01
  • 打赏
  • 举报
回复
测试下来 VerticalScroll.Value 设一次后内部控件滚动了,但是滚动条的位置没变。
要设两次后滚动条才刷新正确了。
    '高度200的Panel内放了一个高200的RitchTextBox,用Button来增高'
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Debug.Print(" {0},{1}", Me.Panel1.VerticalScroll.Value, Me.Panel1.VerticalScroll.Maximum)
Me.RichTextBox1.Height += 10
Me.Panel1.VerticalScroll.Value = Me.Panel1.VerticalScroll.Maximum - 199
Me.Panel1.VerticalScroll.Value = Me.Panel1.VerticalScroll.Maximum - 199
Debug.Print("->{0},{1}", Me.Panel1.VerticalScroll.Value, Me.Panel1.VerticalScroll.Maximum)
End Sub
SineMetu1 2015-09-01
  • 打赏
  • 举报
回复
引用 5 楼 Tiger_Zhao 的回复:
有两个可能 一、Panel.ScrollControlIntoView() 会根据焦点控件调整滚动条,RichTextBox比显示区域更高时可能是顶部对齐,你试试重写 ScrollToControl() 用底部对齐。 二、RichTextBox增高后滚动条的Max变大了但是Value不变,所以增高部分跑到显示区域下面去了。你给自动增高加个事件,在事件中同步改变滚动条的Value。

 Private Sub NetSTLControl_MyContentsResized(ByVal sender As Object, ByVal e As ContentsResizedEventArgs)
       “计算方法省略
       '判断光标是否出界
        If panelY - controlY > 20 Then
            bContains = True
        Else
            bContains = False
        End If

        If bContains = False Then

            Me.Panel1.VerticalScroll.Value += _scrollValue
            Me.Panel1.VerticalScroll.Value += _scrollValue

        End If
End Sub
昨天写了一个功能判断RichTextBox里的插入光标是否超出Panel的显示范围,如果超出就将Panel1的滚轮值变大, 但是赋值后这个值一直不变
Tiger_Zhao 2015-09-01
  • 打赏
  • 举报
回复
有两个可能
一、Panel.ScrollControlIntoView() 会根据焦点控件调整滚动条,RichTextBox比显示区域更高时可能是顶部对齐,你试试重写 ScrollToControl() 用底部对齐。
二、RichTextBox增高后滚动条的Max变大了但是Value不变,所以增高部分跑到显示区域下面去了。你给自动增高加个事件,在事件中同步改变滚动条的Value。
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 QT框架是由Qt公司设计的一种跨平台C++图形用户界面应用程序开发工具包,该框架被广泛地应用于桌面电脑、移动设备以及嵌入式系统等领域。QTableView作为QT框架中的一个核心组件,其主要功能是用于展示表格形式的数据,并且常常与QAbstractItemModel或QSqlTableModel等模型类协同工作。在QTableView中嵌入自定义组件,例如按钮,能够实现更加多样化的用户交互功能。 在QT框架环境下,若想在QTableView的一列中嵌入两个按钮,我们需要掌握以下几个关键的技术要点: 1. **QTableView**:QTableView是QTableView类的一个实例,它提供了一个二维的表格视图界面,可以用来展示和编辑模型中的数据。QTableView能够显示由QAbstractItemModel子类所提供的数据,例如QStandardItemModel或QAbstractTableModel等。 2. **QTableWidgetItem**:在QTableView中,QTableWidgetItem是构成表格单元格的基本对象,它用于表示表格中每一行每一列的数据。在默认情况下,QTableView仅能展示文本信息,但通过继承QTableWidgetItem并重新绘制,我们可以实现自定义的内容,比如嵌入按钮。 3. **自定义视图项**:若要在单元格内部嵌入两个按钮,我们需要开发一个自定义的QTableWidgetItem子类,该子类中包含两个QPushButton。这个子类需要重写paintEvent()方法以绘制按钮,并且实现必要的信号和槽机制来处理按...
内容概要:本文系统研究了LLC谐振变换器的变频移相混合控制模型,并基于Simulink平台进行了完整的仿真实现。文章首先阐述了LLC谐振变换器在高频高效电源转换中的工作原理与技术优势,重点提出了一种融合变频控制与移相控制的混合调控策略,旨在拓宽输出调节范围并提升系统的动态响应能力与运行效率。通过建立精确的系统数学模型,设计了复合控制框图,并在Simulink中搭建仿真系统,全面验证了该控制策略在不同负载条件和输入电压波动下的稳定性、效率表现及软开关实现能力。仿真结果表明,所提出的混合控制方法能有效降低开关损耗,提高能量转换效率,具备良好的工程应用前景。; 适合人群:具备电力电子技术、自动控制理论基础,熟悉Simulink仿真环境,从事高频电源变换器、谐振变换器设计与优化的研究生、科研人员及电力电子领域工程技术人员。; 使用场景及目标:①用于高性能LLC谐振变换器控制系统的设计与动态性能优化;②为软开关技术在电力电子变换器中的应用提供仿真验证平台;③支撑相关课题的科研论文撰写、项目开发与创新方案验证。; 阅读建议:建议读者结合Simulink仿真模型文件进行同步操作,深入理解变频与移相控制的协调机制、控制环路设计及关键参数整定方法,重点关注软开关实现条件与系统效率优化路径,以促进理论研究向实际工程应用的转化。

16,718

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧