注册 登录
编程论坛 VB6论坛

求助 如何将不同文本框内的数据不重复的按大下排到一个新框内?

jrs123 发布于 2018-02-07 11:46, 3126 次点击
求助 如何将不同文本框内的数据不重复的按大下排到一个新框内?见图;
只有本站会员才能查看附件,请 登录
12 回复
#2
wds12018-02-07 13:59
具体程序不写了,写个思路:
1、建立2个数组,一个保存不同文本框内容、一个保存不重复的文本框内容【数组可以同样大小】
2、文本框内容赋值到数组1【也可以直接用文本框的数值】
3、做一个排重函数,把不同的数据放到数组2,并返回数组元素个数
4、做一个排序函数,参数可以有需要排序数组、升序/降序、文本排序/数字排序,方便同类调用,也可以只有需要排序数组

#3
xiangyue05102018-02-07 14:10
这个很简单,全部放在一个数组中,然后用冒泡法进行排序。输出的时候,看是否与前一个数相同,不同就输出。
这样就不用管是否重复,如果重复,输出的是相同的几个数中第一个,其他几个不不输出。 所有的操作一个数组就搞定,只是增加了一个判断语句而已。
#4
jrs1232018-02-07 18:59
这样可以吗?
冒泡法排序(递增)
算法思想:(将相邻两个数比较,大的调到后头)
1)有n+1个数(存放在数组a(n)中),第一趟将每相邻两个数比较,大的调到后头,经n次两两相邻比较后,最大的数已“沉底”,放在最后一个位置,小数上升“浮起”;
2)第二趟对余下的n个数(最大的数已“沉底”)按上法比较,经n-1次两两相邻比较后得次大的数;
3)依次类推,n+1个数共进行n趟比较。
For i=0 To n - 1
For j = 0 To n-1-i
If a(j) > a(j+1) Then
temp=a(j)
a(j)=a(j+1)
a(j+1)=temp
End if
Next j
Next i
#5
jrs1232018-02-07 19:05
实例初初稿;(这样会有问题吗?)
下面的是从小到大排序的,从大到小只需改一个“>”号,看下面的注释,整个过程不变的.
Private Sub Command1_Click()
Dim x(1 To 5) As Double, i%, j%, t
x(1) = 123
x(2) = 321
x(3) = 65
x(4) = 234
x(5) = 333
For i = 1 To 5 - 1 '有5个数要排序,需要进行5-1=4次两两比较
For j = 5 To i + 1 Step -1 '从末尾一个元素到第i个元素进行两两比较
If x(j) < x(j - 1) Then '从小到大排序,若需要从大到小排序,将“”
'若次序不对,则马上交换位置
t = x(j)
x(j) = x(j - 1)
x(j - 1) = t
End If
Next j '除了内循环,一轮排序结束,最小(或最大)数已经冒到数组第一位
Next i
End Sub
#6
jrs1232018-02-07 19:14
Text19 = Str$(Val(Text2) + Text6)
Text20 = Str$(Val(Text2) + Text4)
Text21 = Str$(Val(Text2) + Text25)
Text22 = Str$(Val(Text4) + Text6)
Text23 = Str$(Val(Text4) + Text25)
文字框数据按上试计算,请问可以直接将“Text19”放到程序中吗?
x(1) = 123
x(2) = 321
x(3) = 65
x(4) = 234
x(5) = 333
换成:
x(1) = Text19
x(2) = Text20
x(3) = Text21
x(4) = Text22
x(5) = Text23
如果不 行,又如何将文字框中的数据放到冒泡法的程序中呢?
希望能有个最简单的 方法。

[此贴子已经被作者于2018-2-7 19:43编辑过]

#7
jrs1232018-02-09 22:50
这个程序解答可能费点精力,但还盼能解决。目前先用手工排序;一旦能自动排序了就来结帖;
只有本站会员才能查看附件,请 登录


#8
ZHRXJR2018-02-11 15:55
只有本站会员才能查看附件,请 登录

很简单的。
程序代码:
Private Sub Command1_Click()
Text1.Text = ""
K = 0
For I = 0 To 4
    If Check1(I).Value <> 0 Then
        K = K + 1
        AA(K) = Check1(I).Caption
    End If
    If Check2(I).Value <> 0 Then
        K = K + 1
        AA(K) = Check2(I).Caption
    End If
Next I
For I = 0 To 3
    If Check3(I).Value <> 0 Then
        K = K + 1
        AA(K) = Check3(I).Caption
    End If
    If Check4(I).Value <> 0 Then
        K = K + 1
        AA(K) = Check4(I).Caption
    End If
    If Check5(I).Value <> 0 Then
        K = K + 1
        AA(K) = Check5(I).Caption
    End If
Next I
Dim SSA As String
For I = 1 To K - 1
    For J = I + 1 To K
        If AA(I) > AA(J) Then
            SSA = AA(I)
            AA(I) = AA(J)
            AA(J) = SSA
        End If
    Next J
Next I
For I = 1 To K
    If I < K Then
    Text1.Text = Text1.Text & AA(I) & " - "
    Else
    Text1.Text = Text1.Text & AA(I)
    End If
Next I
End Sub
#9
jrs1232018-02-14 09:51
谢谢ZHRXJR版主的详细回复,本人希望对文本框内的数字进行排序,如下图;
将上面的Check1(I).Value直接改为Text11.SetFocus通不过
请问要如何改写?
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2018-2-14 09:53编辑过]

#10
ZHRXJR2018-02-16 14:58
程序代码:
For I = 0 To 6
    If Check1(I).Value <> 0 Then
        K = K + 1
        AA(K) = Check1(I).Caption
    End If
    If Check2(I).Value <> 0 Then
        K = K + 1
        AA(K) = Check2(I).Caption
    End If
Next I
          '修改为
For I = 0 To 6
    If Text1(I).Text <> "" Then
        K = K + 1
        AA(K) = Text1(I).Text
    End If
Next I

基本的东西应该搞清楚,SetFocus是什么你知道吗?

[此贴子已经被作者于2018-2-16 15:00编辑过]

#11
jrs1232018-02-22 13:22
SetFocus就是把当前焦点给某个对象,比如Me.SetFocus,则当前窗体或者焦点,也就是他是激活窗体,Text1.SetFocus,则Text1获得焦点,这时候输入的内容将显示在Text1中。但不知如何用在这个程序中;
将8楼的代码改了后:(没通过)
Private Sub Command1_Click()
Text1.Text = ""
K = 0
For I = 0 To 4
    If Text1(I).Text <> "" Then '原来的:If Check1(I).Value <> 0 Then
        K = K + 1
        AA(K) = Text1(I).Text  '原来的:AA(K) = Check1(I).Caption
    End If
     If Text2(I).Text <> "" Then  'If Check2(I).Value <> 0 Then
        K = K + 1
        AA(K) = Text2(I).Text  'AA(K) = Check2(I).Caption
    End If
Next I
For I = 0 To 3
    If Text3(I).Text <> "" Then    'If Check3(I).Value <> 0 Then
        K = K + 1
        AA(K) = Text3(I).Text  'AA(K) = Check3(I).Caption
    End If
    If Text4(I).Text <> "" Then   'If Check4(I).Value <> 0 Then
        K = K + 1
       AA(K) = Text4(I).Text   ' AA(K) = Check4(I).Caption
    End If
    If Text5(I).Text <> "" Then 'If Check5(I).Value <> 0 Then
        K = K + 1
        AA(K) = Text5(I).Text   'AA(K) = Check5(I).Caption
    End If
Next I
Dim SSA As String
For I = 1 To K - 1
    For J = I + 1 To K
        If AA(I) > AA(J) Then
            SSA = AA(I)
            AA(I) = AA(J)
            AA(J) = SSA
        End If
    Next J
Next I
For I = 1 To K
    If I < K Then
    Text1.Text = Text1.Text & AA(I) & " - "
    Else
    Text1.Text = Text1.Text & AA(I)
    End If
Next I
End Sub


[此贴子已经被作者于2018-2-22 13:55编辑过]

#12
jrs1232018-02-22 14:59
网上找到一个办法;更直接
Private Sub Command1_Click()
a = Val(Text1.Text)
b = Val(Text2.Text)
c = Val(Text3.Text)  '将三个文本框的数值赋给3个变量
d = Val(Text4.Text)  '将四个文本框的数值赋给4个变量
e = Val(Text5.Text)  '将五 个文本框的数值赋给5个变量
If a > b Then
s = b
b = a
a = s
End If    '将a,b进行大小排列,s为中间变量,排序之后a<=b
If b > c Then
t = c
c = b
b = t
End If   '将b,c进行大小排序,t为中间变量,排序之后b<=c
If c > d Then
x = d
d = c
c = x
End If   '将b,c进行大小排序,t为中间变量,排序之后c<=d
If d > e Then
z = e
e = d
d = z
End If   '将b,c进行大小排序,t为中间变量,排序之后d<=e
Text1.Text = Str(a)
Text2.Text = Str(b)
Text3.Text = Str(c)
Text4.Text = Str(d)
Text5.Text = Str(e) '将结果输入到文本框中,文本框1,2,3,数值依次从小到大排列
End Sub
#13
jrs1232018-02-23 13:26
本帖的最终方案:方框内的数据采用上面的对比法代码 +自动点击“排序”钮,实现《文本框数据自动排序》(试制中做到30个框,实际上框数应该是不受限的)
一、用上面的对比法模式排序;(仅有此法,要多次点击“排序”,才能实现从小到大的排序,加下面一条就实现“自动排序”)
二、在窗体上加上时间控制器,将属性Interval设置为“5”,再在定时器时间进程中加一条指令(见下图)
在运行中由程序加入到文本框内的数据将立即完成“从小到大的自动排序”。省去了人工点击“排序”钮。
只有本站会员才能查看附件,请 登录


1